OSDN Git Service

【更新内容】
authormegumi_engines <megumi_engines@users.osdn.me>
Mon, 3 Feb 2020 03:39:28 +0000 (12:39 +0900)
committermegumi_engines <megumi_engines@users.osdn.me>
Mon, 3 Feb 2020 03:39:28 +0000 (12:39 +0900)
・Git リポジトリの使用開始
・ベースバージョンの変更 (1.11 → Ring 1.12)
・日本語版ドキュメントの公開
・英語版ドキュメントの OmegaT 対応

【注意事項】
このバージョンからは、当方の都合によりソースコードのみ提供です。ビルドにつきましては readme.md を参照の上、各自でお願いします。

理由は、
・ダウンロード版を用意しても全く需要がない (OSDN の統計画面を参照する限り Ring 1.11 html 版のダウンロード件数は1件でした)。
・さらに原稿の用意だけで 500MB 以上も通信容量 (未だに月間3GB契約です) を消費するので金銭面などの負担が非常にキツイ。コンビニやネットカフェ代...orz。
・その他いろいろ。

ご了承ください。

【連絡事項】
・当方の都合により 2020年の Ring 翻訳活動は今回限りとなります。再開予定は 2021 ~ 2022年以降です
・以前から不備の目立つ英語版は不定期で更新することがあります。
・ウェブサイトにつきましては、不定期更新です。
・活動休止期間中、日本語版の保守対応をご希望の方は有償対応となります。ご了承ください。

1351 files changed:
docs/en/Makefile [new file with mode: 0644]
docs/en/README.md [new file with mode: 0644]
docs/en/_config.yml [new file with mode: 0644]
docs/en/buildhtml.bat [new file with mode: 0644]
docs/en/buildhtmlhelp.bat [new file with mode: 0644]
docs/en/buildlatex.bat [new file with mode: 0644]
docs/en/en-level1.tmx [new file with mode: 0644]
docs/en/en-level2.tmx [new file with mode: 0644]
docs/en/en-omegat.tmx [new file with mode: 0644]
docs/en/make.bat [new file with mode: 0644]
docs/en/omegat.project [new file with mode: 0644]
docs/en/omegat/ignored_words.txt [new file with mode: 0644]
docs/en/omegat/last_entry.properties [new file with mode: 0644]
docs/en/omegat/learned_words.txt [new file with mode: 0644]
docs/en/omegat/project_save.tmx [new file with mode: 0644]
docs/en/omegat/project_stats.txt [new file with mode: 0644]
docs/en/pygments_lexer/ring.py [new file with mode: 0644]
docs/en/run.bat [new file with mode: 0644]
docs/en/source/BMI.png [new file with mode: 0644]
docs/en/source/Fedora.png [new file with mode: 0644]
docs/en/source/Fedora2.png [new file with mode: 0644]
docs/en/source/Fedora3.png [new file with mode: 0644]
docs/en/source/allegro.txt [new file with mode: 0644]
docs/en/source/analogclock.png [new file with mode: 0644]
docs/en/source/asciitable.png [new file with mode: 0644]
docs/en/source/autocomplete.png [new file with mode: 0644]
docs/en/source/bignumber.txt [new file with mode: 0644]
docs/en/source/calcapp.jpg [new file with mode: 0644]
docs/en/source/calendar.png [new file with mode: 0644]
docs/en/source/callstack.png [new file with mode: 0644]
docs/en/source/cameraandbackground.png [new file with mode: 0644]
docs/en/source/cardsmainmenu.png [new file with mode: 0644]
docs/en/source/cardsqt.png [new file with mode: 0644]
docs/en/source/checkandconvert.txt [new file with mode: 0644]
docs/en/source/checkersgame.png [new file with mode: 0644]
docs/en/source/chessgame.png [new file with mode: 0644]
docs/en/source/classeslist.png [new file with mode: 0644]
docs/en/source/codeeditors.txt [new file with mode: 0644]
docs/en/source/codegenerator.txt [new file with mode: 0644]
docs/en/source/compiler.txt [new file with mode: 0644]
docs/en/source/conf.py [new file with mode: 0644]
docs/en/source/consolecolors.png [new file with mode: 0644]
docs/en/source/contribute.txt [new file with mode: 0644]
docs/en/source/controlstructures.txt [new file with mode: 0644]
docs/en/source/controlstructures2.txt [new file with mode: 0644]
docs/en/source/controlstructures3.txt [new file with mode: 0644]
docs/en/source/dateandtime.txt [new file with mode: 0644]
docs/en/source/debug.txt [new file with mode: 0644]
docs/en/source/debugshot1.png [new file with mode: 0644]
docs/en/source/debugshot2.png [new file with mode: 0644]
docs/en/source/debugshot3.png [new file with mode: 0644]
docs/en/source/debugshot4.png [new file with mode: 0644]
docs/en/source/declarative.txt [new file with mode: 0644]
docs/en/source/demo.txt [new file with mode: 0644]
docs/en/source/deployincloud.txt [new file with mode: 0644]
docs/en/source/distribute.txt [new file with mode: 0644]
docs/en/source/distribute_ring2exe.txt [new file with mode: 0644]
docs/en/source/dssapp.png [new file with mode: 0644]
docs/en/source/editor1.png [new file with mode: 0644]
docs/en/source/editor2.png [new file with mode: 0644]
docs/en/source/editor3.jpg [new file with mode: 0644]
docs/en/source/editor4.jpg [new file with mode: 0644]
docs/en/source/editor5.png [new file with mode: 0644]
docs/en/source/embedding.txt [new file with mode: 0644]
docs/en/source/empapp.png [new file with mode: 0644]
docs/en/source/evaldebug.txt [new file with mode: 0644]
docs/en/source/ex10.jpg [new file with mode: 0644]
docs/en/source/ex11.jpg [new file with mode: 0644]
docs/en/source/ex12.jpg [new file with mode: 0644]
docs/en/source/ex12r.jpg [new file with mode: 0644]
docs/en/source/ex13.jpg [new file with mode: 0644]
docs/en/source/ex14.jpg [new file with mode: 0644]
docs/en/source/ex15.jpg [new file with mode: 0644]
docs/en/source/ex16.jpg [new file with mode: 0644]
docs/en/source/ex17.jpg [new file with mode: 0644]
docs/en/source/ex18.jpg [new file with mode: 0644]
docs/en/source/ex19.jpg [new file with mode: 0644]
docs/en/source/ex1_basicshapes.png [new file with mode: 0644]
docs/en/source/ex20.jpg [new file with mode: 0644]
docs/en/source/ex21.jpg [new file with mode: 0644]
docs/en/source/ex21_2.jpg [new file with mode: 0644]
docs/en/source/ex22.jpg [new file with mode: 0644]
docs/en/source/ex23.jpg [new file with mode: 0644]
docs/en/source/ex24.jpg [new file with mode: 0644]
docs/en/source/ex24_2.jpg [new file with mode: 0644]
docs/en/source/ex25.jpg [new file with mode: 0644]
docs/en/source/ex26.jpg [new file with mode: 0644]
docs/en/source/ex28.jpg [new file with mode: 0644]
docs/en/source/ex4.jpg [new file with mode: 0644]
docs/en/source/ex5.jpg [new file with mode: 0644]
docs/en/source/ex6.jpg [new file with mode: 0644]
docs/en/source/ex7.jpg [new file with mode: 0644]
docs/en/source/ex8.jpg [new file with mode: 0644]
docs/en/source/ex9.jpg [new file with mode: 0644]
docs/en/source/extension.txt [new file with mode: 0644]
docs/en/source/extension_tutorial.txt [new file with mode: 0644]
docs/en/source/faq.txt [new file with mode: 0644]
docs/en/source/fdeventcode.png [new file with mode: 0644]
docs/en/source/fdeventmethod.png [new file with mode: 0644]
docs/en/source/fdlistitems.png [new file with mode: 0644]
docs/en/source/fdms.png [new file with mode: 0644]
docs/en/source/fdsayhello1.png [new file with mode: 0644]
docs/en/source/fifteen2.png [new file with mode: 0644]
docs/en/source/files.txt [new file with mode: 0644]
docs/en/source/findinfiles.png [new file with mode: 0644]
docs/en/source/flappybird.png [new file with mode: 0644]
docs/en/source/formdesigner.png [new file with mode: 0644]
docs/en/source/formdesigner.txt [new file with mode: 0644]
docs/en/source/formdesignerandroid.png [new file with mode: 0644]
docs/en/source/formtranslation1.png [new file with mode: 0644]
docs/en/source/foxringfuncsdoc.txt [new file with mode: 0644]
docs/en/source/fp.txt [new file with mode: 0644]
docs/en/source/freeglutshot1.png [new file with mode: 0644]
docs/en/source/freeglutshot2.png [new file with mode: 0644]
docs/en/source/freeglutshot3.png [new file with mode: 0644]
docs/en/source/freeglutshot4.png [new file with mode: 0644]
docs/en/source/freeglutshot5.png [new file with mode: 0644]
docs/en/source/freeglutshot6.png [new file with mode: 0644]
docs/en/source/freeglutshot7.png [new file with mode: 0644]
docs/en/source/freeglutshot8.png [new file with mode: 0644]
docs/en/source/functions.txt [new file with mode: 0644]
docs/en/source/functions2.txt [new file with mode: 0644]
docs/en/source/functions3.txt [new file with mode: 0644]
docs/en/source/functionslist.png [new file with mode: 0644]
docs/en/source/game2048_shot1.png [new file with mode: 0644]
docs/en/source/gameengine.txt [new file with mode: 0644]
docs/en/source/gameengineandorid.txt [new file with mode: 0644]
docs/en/source/gameengineshot1.png [new file with mode: 0644]
docs/en/source/gameengineshot11.png [new file with mode: 0644]
docs/en/source/gameengineshot12.png [new file with mode: 0644]
docs/en/source/gameengineshot13.png [new file with mode: 0644]
docs/en/source/gameengineshot14.png [new file with mode: 0644]
docs/en/source/gameengineshot15.png [new file with mode: 0644]
docs/en/source/gameengineshot2.png [new file with mode: 0644]
docs/en/source/gameengineshot3.png [new file with mode: 0644]
docs/en/source/gameengineshot5.png [new file with mode: 0644]
docs/en/source/gameengineshot6.png [new file with mode: 0644]
docs/en/source/gameengineshot7.png [new file with mode: 0644]
docs/en/source/gameoflife.jpg [new file with mode: 0644]
docs/en/source/generalinfo.txt [new file with mode: 0644]
docs/en/source/getinput.txt [new file with mode: 0644]
docs/en/source/getquotesmac.png [new file with mode: 0644]
docs/en/source/getting_started.txt [new file with mode: 0644]
docs/en/source/getting_started2.txt [new file with mode: 0644]
docs/en/source/getting_started3.txt [new file with mode: 0644]
docs/en/source/gm800lefd.png [new file with mode: 0644]
docs/en/source/gmleveleditor.png [new file with mode: 0644]
docs/en/source/gmshot1.png [new file with mode: 0644]
docs/en/source/gmshot2.png [new file with mode: 0644]
docs/en/source/gmshot3.png [new file with mode: 0644]
docs/en/source/go.png [new file with mode: 0644]
docs/en/source/goldmagic800.txt [new file with mode: 0644]
docs/en/source/index.txt [new file with mode: 0644]
docs/en/source/introduction.txt [new file with mode: 0644]
docs/en/source/juliancalendar.png [new file with mode: 0644]
docs/en/source/knighttour.png [new file with mode: 0644]
docs/en/source/languagedesign.txt [new file with mode: 0644]
docs/en/source/libcurl.txt [new file with mode: 0644]
docs/en/source/libsdl.txt [new file with mode: 0644]
docs/en/source/libuv.txt [new file with mode: 0644]
docs/en/source/linuxmint.png [new file with mode: 0644]
docs/en/source/lists.txt [new file with mode: 0644]
docs/en/source/lowlevel.txt [new file with mode: 0644]
docs/en/source/manycubes.png [new file with mode: 0644]
docs/en/source/manytreeitems.png [new file with mode: 0644]
docs/en/source/mathfunc.txt [new file with mode: 0644]
docs/en/source/matzring.png [new file with mode: 0644]
docs/en/source/maze.png [new file with mode: 0644]
docs/en/source/menubardesigner.png [new file with mode: 0644]
docs/en/source/metaprog.txt [new file with mode: 0644]
docs/en/source/minesweeper.png [new file with mode: 0644]
docs/en/source/more3dsamples.jpg [new file with mode: 0644]
docs/en/source/more3dsamples2.jpg [new file with mode: 0644]
docs/en/source/multilanguage.txt [new file with mode: 0644]
docs/en/source/mysql.txt [new file with mode: 0644]
docs/en/source/natural.txt [new file with mode: 0644]
docs/en/source/naturallibrary.txt [new file with mode: 0644]
docs/en/source/newcalc.png [new file with mode: 0644]
docs/en/source/newcalc2.png [new file with mode: 0644]
docs/en/source/number2words.png [new file with mode: 0644]
docs/en/source/objectslib1.png [new file with mode: 0644]
docs/en/source/objectslib2.png [new file with mode: 0644]
docs/en/source/odbc.txt [new file with mode: 0644]
docs/en/source/oop.txt [new file with mode: 0644]
docs/en/source/operators.txt [new file with mode: 0644]
docs/en/source/othellogame.png [new file with mode: 0644]
docs/en/source/outputwin.png [new file with mode: 0644]
docs/en/source/performancetips.txt [new file with mode: 0644]
docs/en/source/ponggame.png [new file with mode: 0644]
docs/en/source/postgresql.txt [new file with mode: 0644]
docs/en/source/printpreviewdialog.png [new file with mode: 0644]
docs/en/source/programstructure.txt [new file with mode: 0644]
docs/en/source/qt.txt [new file with mode: 0644]
docs/en/source/qt3d.txt [new file with mode: 0644]
docs/en/source/qt3d_ex1.png [new file with mode: 0644]
docs/en/source/qt3d_ex10.png [new file with mode: 0644]
docs/en/source/qt3d_ex11.png [new file with mode: 0644]
docs/en/source/qt3d_ex12.png [new file with mode: 0644]
docs/en/source/qt3d_ex13.png [new file with mode: 0644]
docs/en/source/qt3d_ex14.png [new file with mode: 0644]
docs/en/source/qt3d_ex15.png [new file with mode: 0644]
docs/en/source/qt3d_ex16.png [new file with mode: 0644]
docs/en/source/qt3d_ex17.png [new file with mode: 0644]
docs/en/source/qt3d_ex18.png [new file with mode: 0644]
docs/en/source/qt3d_ex2.png [new file with mode: 0644]
docs/en/source/qt3d_ex3.png [new file with mode: 0644]
docs/en/source/qt3d_ex4.png [new file with mode: 0644]
docs/en/source/qt3d_ex5.png [new file with mode: 0644]
docs/en/source/qt3d_ex6.png [new file with mode: 0644]
docs/en/source/qt3d_ex7.png [new file with mode: 0644]
docs/en/source/qt3d_ex8.png [new file with mode: 0644]
docs/en/source/qt3d_ex9.png [new file with mode: 0644]
docs/en/source/qt3dex18.png [new file with mode: 0644]
docs/en/source/qtclassconvertor.png [new file with mode: 0644]
docs/en/source/qtclassesdoc.txt [new file with mode: 0644]
docs/en/source/qtmobile.txt [new file with mode: 0644]
docs/en/source/raylib_3dcamera.png [new file with mode: 0644]
docs/en/source/raylib_3dcamerafree.png [new file with mode: 0644]
docs/en/source/raylib_3dpicking.png [new file with mode: 0644]
docs/en/source/raylib_basicshapes.png [new file with mode: 0644]
docs/en/source/raylib_basicwindow.png [new file with mode: 0644]
docs/en/source/raylib_bezierlines.png [new file with mode: 0644]
docs/en/source/raylib_camerafirstperson.png [new file with mode: 0644]
docs/en/source/raylib_collisionarea.png [new file with mode: 0644]
docs/en/source/raylib_colorspalette.png [new file with mode: 0644]
docs/en/source/raylib_cubicmap.png [new file with mode: 0644]
docs/en/source/raylib_drawring.png [new file with mode: 0644]
docs/en/source/raylib_drawring2.png [new file with mode: 0644]
docs/en/source/raylib_ex1.png [new file with mode: 0644]
docs/en/source/raylib_followingeyes.png [new file with mode: 0644]
docs/en/source/raylib_fullscreen.png [new file with mode: 0644]
docs/en/source/raylib_geometricshapes.png [new file with mode: 0644]
docs/en/source/raylib_imagedrawing.png [new file with mode: 0644]
docs/en/source/raylib_imagegeneration.png [new file with mode: 0644]
docs/en/source/raylib_inputkeys.png [new file with mode: 0644]
docs/en/source/raylib_inputmouse.png [new file with mode: 0644]
docs/en/source/raylib_inputmt.png [new file with mode: 0644]
docs/en/source/raylib_mousewheel.png [new file with mode: 0644]
docs/en/source/raylib_musicplaying.png [new file with mode: 0644]
docs/en/source/raylib_rectanglescaling.png [new file with mode: 0644]
docs/en/source/raylib_soundloading.png [new file with mode: 0644]
docs/en/source/raylib_texturesource.png [new file with mode: 0644]
docs/en/source/raylib_twocubes.png [new file with mode: 0644]
docs/en/source/reference.txt [new file with mode: 0644]
docs/en/source/resources.txt [new file with mode: 0644]
docs/en/source/ring15freeglut.png [new file with mode: 0644]
docs/en/source/ring15freeglut2.png [new file with mode: 0644]
docs/en/source/ring15opengl.png [new file with mode: 0644]
docs/en/source/ring15reportshot.png [new file with mode: 0644]
docs/en/source/ringalleg_shot1.jpg [new file with mode: 0644]
docs/en/source/ringalleg_shot2.jpg [new file with mode: 0644]
docs/en/source/ringalleg_shot3.jpg [new file with mode: 0644]
docs/en/source/ringalleg_shot4.jpg [new file with mode: 0644]
docs/en/source/ringalleg_shot5.jpg [new file with mode: 0644]
docs/en/source/ringalleg_shot6.jpg [new file with mode: 0644]
docs/en/source/ringalleg_shot7.jpg [new file with mode: 0644]
docs/en/source/ringallegrofuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringapps.txt [new file with mode: 0644]
docs/en/source/ringapps_shot1.png [new file with mode: 0644]
docs/en/source/ringapps_shot2.png [new file with mode: 0644]
docs/en/source/ringapps_shot3.png [new file with mode: 0644]
docs/en/source/ringapps_shot4.png [new file with mode: 0644]
docs/en/source/ringapps_shot5.jpg [new file with mode: 0644]
docs/en/source/ringapps_shot6.jpg [new file with mode: 0644]
docs/en/source/ringbeep.txt [new file with mode: 0644]
docs/en/source/ringconsolecolorsfuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringcube3d.png [new file with mode: 0644]
docs/en/source/ringemacs.png [new file with mode: 0644]
docs/en/source/ringemb.txt [new file with mode: 0644]
docs/en/source/ringformdesigner.png [new file with mode: 0644]
docs/en/source/ringfreeglutfuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringincloud.png [new file with mode: 0644]
docs/en/source/ringinvscode.png [new file with mode: 0644]
docs/en/source/ringlibcurlfuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringlibsdlandroid_shot1.png [new file with mode: 0644]
docs/en/source/ringlibsdlandroid_shot2.png [new file with mode: 0644]
docs/en/source/ringlibsdlfuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringlibuvfuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringlibzipfuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringmurmurhashfuncsdoc.txt [new file with mode: 0644]
docs/en/source/ringnatural.png [new file with mode: 0644]
docs/en/source/ringnotepad.txt [new file with mode: 0644]
docs/en/source/ringnotepad_screenshot.png [new file with mode: 0644]
docs/en/source/ringonmanjarolinux.png [new file with mode: 0644]
docs/en/source/ringopengl11funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl12funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl13funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl14funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl15funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl20funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl21funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl30funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl31funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl32funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl33funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl40funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl41funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl42funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl43funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl44funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl45funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringopengl46funcsdoc.txt [new file with mode: 0644]
docs/en/source/ringpm.txt [new file with mode: 0644]
docs/en/source/ringqt_shot1.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot10.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot11.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot12.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot13.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot14.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot15-B.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot15.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot16.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot17.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot18.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot19.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot2.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot20.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot21.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot22.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot23.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot24.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot25.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot26.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot27.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot28.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot29.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot3.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot30.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot31.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot32.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot33.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot34.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot35.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot36.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot37.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot38.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot39.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot4.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot40.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot41.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot42.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot43.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot44.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot45.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot46.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot47.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot48.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot49.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot5-b.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot5.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot50.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot51.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot52.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot6.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot7.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot8.jpg [new file with mode: 0644]
docs/en/source/ringqt_shot9.jpg [new file with mode: 0644]
docs/en/source/ringqtandroid_shot1.png [new file with mode: 0644]
docs/en/source/ringqtobjects.txt [new file with mode: 0644]
docs/en/source/ringqtpixmap2.png [new file with mode: 0644]
docs/en/source/ringraylib.txt [new file with mode: 0644]
docs/en/source/ringrepl.png [new file with mode: 0644]
docs/en/source/ringzip.txt [new file with mode: 0644]
docs/en/source/rnote15events.png [new file with mode: 0644]
docs/en/source/rnote15output.png [new file with mode: 0644]
docs/en/source/rnote15shot1.png [new file with mode: 0644]
docs/en/source/rnote15shot2.png [new file with mode: 0644]
docs/en/source/rnote15shot3.png [new file with mode: 0644]
docs/en/source/rnote19.jpg [new file with mode: 0644]
docs/en/source/rnotedistribute.png [new file with mode: 0644]
docs/en/source/rnotedistributemenu.png [new file with mode: 0644]
docs/en/source/rnotefd.png [new file with mode: 0644]
docs/en/source/rnotelinenumber.png [new file with mode: 0644]
docs/en/source/rnotemenu_browser.png [new file with mode: 0644]
docs/en/source/rnotemenu_edit.png [new file with mode: 0644]
docs/en/source/rnotemenu_file.png [new file with mode: 0644]
docs/en/source/rnotemenu_help.png [new file with mode: 0644]
docs/en/source/rnotemenu_mode.png [new file with mode: 0644]
docs/en/source/rnotemenu_program.png [new file with mode: 0644]
docs/en/source/rnotemenu_tools.png [new file with mode: 0644]
docs/en/source/rnotemenu_view.png [new file with mode: 0644]
docs/en/source/rnotemodernstyle.png [new file with mode: 0644]
docs/en/source/rnotemodernstyle2.png [new file with mode: 0644]
docs/en/source/rnotestylemenu.png [new file with mode: 0644]
docs/en/source/rnotetoolsterminal.png [new file with mode: 0644]
docs/en/source/rnotetoolsterminal2.png [new file with mode: 0644]
docs/en/source/runwebapp1.png [new file with mode: 0644]
docs/en/source/runwebapp2.png [new file with mode: 0644]
docs/en/source/scope.txt [new file with mode: 0644]
docs/en/source/scope2.txt [new file with mode: 0644]
docs/en/source/secfunc.txt [new file with mode: 0644]
docs/en/source/shotringnotepad.png [new file with mode: 0644]
docs/en/source/shotrotatetext.png [new file with mode: 0644]
docs/en/source/sixteenpuzzle.jpg [new file with mode: 0644]
docs/en/source/snake.png [new file with mode: 0644]
docs/en/source/snakesgame.png [new file with mode: 0644]
docs/en/source/sokoban.jpg [new file with mode: 0644]
docs/en/source/sourcecode.txt [new file with mode: 0644]
docs/en/source/sqlite.txt [new file with mode: 0644]
docs/en/source/starsfighter.png [new file with mode: 0644]
docs/en/source/stdlib.txt [new file with mode: 0644]
docs/en/source/stdlibclasses.txt [new file with mode: 0644]
docs/en/source/stopwatch.png [new file with mode: 0644]
docs/en/source/string2constant.png [new file with mode: 0644]
docs/en/source/strings.txt [new file with mode: 0644]
docs/en/source/sudoku.jpg [new file with mode: 0644]
docs/en/source/sumpuzzle.png [new file with mode: 0644]
docs/en/source/superman.png [new file with mode: 0644]
docs/en/source/syntaxflexibility.txt [new file with mode: 0644]
docs/en/source/systemfunc.txt [new file with mode: 0644]
docs/en/source/tesseragame.png [new file with mode: 0644]
docs/en/source/tests_shot.png [new file with mode: 0644]
docs/en/source/thering.jpg [new file with mode: 0644]
docs/en/source/tictactoe.jpg [new file with mode: 0644]
docs/en/source/tictactoe3d.png [new file with mode: 0644]
docs/en/source/ttsapp.png [new file with mode: 0644]
docs/en/source/typehints.txt [new file with mode: 0644]
docs/en/source/urlappmacshot3.png [new file with mode: 0644]
docs/en/source/urlappmacshot4.png [new file with mode: 0644]
docs/en/source/urlappmainshot.png [new file with mode: 0644]
docs/en/source/urlappshot1.png [new file with mode: 0644]
docs/en/source/urlappshot2.png [new file with mode: 0644]
docs/en/source/urn_shot1.png [new file with mode: 0644]
docs/en/source/urn_shot10.png [new file with mode: 0644]
docs/en/source/urn_shot11.png [new file with mode: 0644]
docs/en/source/urn_shot12.png [new file with mode: 0644]
docs/en/source/urn_shot2.png [new file with mode: 0644]
docs/en/source/urn_shot3.png [new file with mode: 0644]
docs/en/source/urn_shot4.png [new file with mode: 0644]
docs/en/source/urn_shot5.png [new file with mode: 0644]
docs/en/source/urn_shot6.png [new file with mode: 0644]
docs/en/source/urn_shot7.png [new file with mode: 0644]
docs/en/source/urn_shot8.png [new file with mode: 0644]
docs/en/source/urn_shot9.png [new file with mode: 0644]
docs/en/source/usingopengl.txt [new file with mode: 0644]
docs/en/source/usingopengl2.txt [new file with mode: 0644]
docs/en/source/usingqdial.png [new file with mode: 0644]
docs/en/source/variables.txt [new file with mode: 0644]
docs/en/source/videomusicplayer.jpg [new file with mode: 0644]
docs/en/source/visualsrc1.jpg [new file with mode: 0644]
docs/en/source/visualsrc2.jpg [new file with mode: 0644]
docs/en/source/web.txt [new file with mode: 0644]
docs/en/source/weighthistory_app.png [new file with mode: 0644]
docs/en/source/whatisnew.txt [new file with mode: 0644]
docs/en/source/whatisnew10.txt [new file with mode: 0644]
docs/en/source/whatisnew11.txt [new file with mode: 0644]
docs/en/source/whatisnew12.txt [new file with mode: 0644]
docs/en/source/whatisnew2.txt [new file with mode: 0644]
docs/en/source/whatisnew3.txt [new file with mode: 0644]
docs/en/source/whatisnew4.txt [new file with mode: 0644]
docs/en/source/whatisnew5.txt [new file with mode: 0644]
docs/en/source/whatisnew6.txt [new file with mode: 0644]
docs/en/source/whatisnew7.txt [new file with mode: 0644]
docs/en/source/whatisnew8.txt [new file with mode: 0644]
docs/en/source/whatisnew9.txt [new file with mode: 0644]
docs/en/source/windowflags.png [new file with mode: 0644]
docs/en/source/winstartupman.jpg [new file with mode: 0644]
docs/en/source/zerolib.txt [new file with mode: 0644]
docs/en/target/BMI.png [new file with mode: 0644]
docs/en/target/Fedora.png [new file with mode: 0644]
docs/en/target/Fedora2.png [new file with mode: 0644]
docs/en/target/Fedora3.png [new file with mode: 0644]
docs/en/target/allegro.txt [new file with mode: 0644]
docs/en/target/analogclock.png [new file with mode: 0644]
docs/en/target/asciitable.png [new file with mode: 0644]
docs/en/target/autocomplete.png [new file with mode: 0644]
docs/en/target/bignumber.txt [new file with mode: 0644]
docs/en/target/calcapp.jpg [new file with mode: 0644]
docs/en/target/calendar.png [new file with mode: 0644]
docs/en/target/callstack.png [new file with mode: 0644]
docs/en/target/cameraandbackground.png [new file with mode: 0644]
docs/en/target/cardsmainmenu.png [new file with mode: 0644]
docs/en/target/cardsqt.png [new file with mode: 0644]
docs/en/target/checkandconvert.txt [new file with mode: 0644]
docs/en/target/checkersgame.png [new file with mode: 0644]
docs/en/target/chessgame.png [new file with mode: 0644]
docs/en/target/classeslist.png [new file with mode: 0644]
docs/en/target/codeeditors.txt [new file with mode: 0644]
docs/en/target/codegenerator.txt [new file with mode: 0644]
docs/en/target/compiler.txt [new file with mode: 0644]
docs/en/target/conf.py [new file with mode: 0644]
docs/en/target/consolecolors.png [new file with mode: 0644]
docs/en/target/contribute.txt [new file with mode: 0644]
docs/en/target/controlstructures.txt [new file with mode: 0644]
docs/en/target/controlstructures2.txt [new file with mode: 0644]
docs/en/target/controlstructures3.txt [new file with mode: 0644]
docs/en/target/dateandtime.txt [new file with mode: 0644]
docs/en/target/debug.txt [new file with mode: 0644]
docs/en/target/debugshot1.png [new file with mode: 0644]
docs/en/target/debugshot2.png [new file with mode: 0644]
docs/en/target/debugshot3.png [new file with mode: 0644]
docs/en/target/debugshot4.png [new file with mode: 0644]
docs/en/target/declarative.txt [new file with mode: 0644]
docs/en/target/demo.txt [new file with mode: 0644]
docs/en/target/deployincloud.txt [new file with mode: 0644]
docs/en/target/distribute.txt [new file with mode: 0644]
docs/en/target/distribute_ring2exe.txt [new file with mode: 0644]
docs/en/target/dssapp.png [new file with mode: 0644]
docs/en/target/editor1.png [new file with mode: 0644]
docs/en/target/editor2.png [new file with mode: 0644]
docs/en/target/editor3.jpg [new file with mode: 0644]
docs/en/target/editor4.jpg [new file with mode: 0644]
docs/en/target/editor5.png [new file with mode: 0644]
docs/en/target/embedding.txt [new file with mode: 0644]
docs/en/target/empapp.png [new file with mode: 0644]
docs/en/target/evaldebug.txt [new file with mode: 0644]
docs/en/target/ex10.jpg [new file with mode: 0644]
docs/en/target/ex11.jpg [new file with mode: 0644]
docs/en/target/ex12.jpg [new file with mode: 0644]
docs/en/target/ex12r.jpg [new file with mode: 0644]
docs/en/target/ex13.jpg [new file with mode: 0644]
docs/en/target/ex14.jpg [new file with mode: 0644]
docs/en/target/ex15.jpg [new file with mode: 0644]
docs/en/target/ex16.jpg [new file with mode: 0644]
docs/en/target/ex17.jpg [new file with mode: 0644]
docs/en/target/ex18.jpg [new file with mode: 0644]
docs/en/target/ex19.jpg [new file with mode: 0644]
docs/en/target/ex1_basicshapes.png [new file with mode: 0644]
docs/en/target/ex20.jpg [new file with mode: 0644]
docs/en/target/ex21.jpg [new file with mode: 0644]
docs/en/target/ex21_2.jpg [new file with mode: 0644]
docs/en/target/ex22.jpg [new file with mode: 0644]
docs/en/target/ex23.jpg [new file with mode: 0644]
docs/en/target/ex24.jpg [new file with mode: 0644]
docs/en/target/ex24_2.jpg [new file with mode: 0644]
docs/en/target/ex25.jpg [new file with mode: 0644]
docs/en/target/ex26.jpg [new file with mode: 0644]
docs/en/target/ex28.jpg [new file with mode: 0644]
docs/en/target/ex4.jpg [new file with mode: 0644]
docs/en/target/ex5.jpg [new file with mode: 0644]
docs/en/target/ex6.jpg [new file with mode: 0644]
docs/en/target/ex7.jpg [new file with mode: 0644]
docs/en/target/ex8.jpg [new file with mode: 0644]
docs/en/target/ex9.jpg [new file with mode: 0644]
docs/en/target/extension.txt [new file with mode: 0644]
docs/en/target/extension_tutorial.txt [new file with mode: 0644]
docs/en/target/faq.txt [new file with mode: 0644]
docs/en/target/fdeventcode.png [new file with mode: 0644]
docs/en/target/fdeventmethod.png [new file with mode: 0644]
docs/en/target/fdlistitems.png [new file with mode: 0644]
docs/en/target/fdms.png [new file with mode: 0644]
docs/en/target/fdsayhello1.png [new file with mode: 0644]
docs/en/target/fifteen2.png [new file with mode: 0644]
docs/en/target/files.txt [new file with mode: 0644]
docs/en/target/findinfiles.png [new file with mode: 0644]
docs/en/target/flappybird.png [new file with mode: 0644]
docs/en/target/formdesigner.png [new file with mode: 0644]
docs/en/target/formdesigner.txt [new file with mode: 0644]
docs/en/target/formdesignerandroid.png [new file with mode: 0644]
docs/en/target/formtranslation1.png [new file with mode: 0644]
docs/en/target/foxringfuncsdoc.txt [new file with mode: 0644]
docs/en/target/fp.txt [new file with mode: 0644]
docs/en/target/freeglutshot1.png [new file with mode: 0644]
docs/en/target/freeglutshot2.png [new file with mode: 0644]
docs/en/target/freeglutshot3.png [new file with mode: 0644]
docs/en/target/freeglutshot4.png [new file with mode: 0644]
docs/en/target/freeglutshot5.png [new file with mode: 0644]
docs/en/target/freeglutshot6.png [new file with mode: 0644]
docs/en/target/freeglutshot7.png [new file with mode: 0644]
docs/en/target/freeglutshot8.png [new file with mode: 0644]
docs/en/target/functions.txt [new file with mode: 0644]
docs/en/target/functions2.txt [new file with mode: 0644]
docs/en/target/functions3.txt [new file with mode: 0644]
docs/en/target/functionslist.png [new file with mode: 0644]
docs/en/target/game2048_shot1.png [new file with mode: 0644]
docs/en/target/gameengine.txt [new file with mode: 0644]
docs/en/target/gameengineandorid.txt [new file with mode: 0644]
docs/en/target/gameengineshot1.png [new file with mode: 0644]
docs/en/target/gameengineshot11.png [new file with mode: 0644]
docs/en/target/gameengineshot12.png [new file with mode: 0644]
docs/en/target/gameengineshot13.png [new file with mode: 0644]
docs/en/target/gameengineshot14.png [new file with mode: 0644]
docs/en/target/gameengineshot15.png [new file with mode: 0644]
docs/en/target/gameengineshot2.png [new file with mode: 0644]
docs/en/target/gameengineshot3.png [new file with mode: 0644]
docs/en/target/gameengineshot5.png [new file with mode: 0644]
docs/en/target/gameengineshot6.png [new file with mode: 0644]
docs/en/target/gameengineshot7.png [new file with mode: 0644]
docs/en/target/gameoflife.jpg [new file with mode: 0644]
docs/en/target/generalinfo.txt [new file with mode: 0644]
docs/en/target/getinput.txt [new file with mode: 0644]
docs/en/target/getquotesmac.png [new file with mode: 0644]
docs/en/target/getting_started.txt [new file with mode: 0644]
docs/en/target/getting_started2.txt [new file with mode: 0644]
docs/en/target/getting_started3.txt [new file with mode: 0644]
docs/en/target/gm800lefd.png [new file with mode: 0644]
docs/en/target/gmleveleditor.png [new file with mode: 0644]
docs/en/target/gmshot1.png [new file with mode: 0644]
docs/en/target/gmshot2.png [new file with mode: 0644]
docs/en/target/gmshot3.png [new file with mode: 0644]
docs/en/target/go.png [new file with mode: 0644]
docs/en/target/goldmagic800.txt [new file with mode: 0644]
docs/en/target/index.txt [new file with mode: 0644]
docs/en/target/introduction.txt [new file with mode: 0644]
docs/en/target/juliancalendar.png [new file with mode: 0644]
docs/en/target/knighttour.png [new file with mode: 0644]
docs/en/target/languagedesign.txt [new file with mode: 0644]
docs/en/target/libcurl.txt [new file with mode: 0644]
docs/en/target/libsdl.txt [new file with mode: 0644]
docs/en/target/libuv.txt [new file with mode: 0644]
docs/en/target/linuxmint.png [new file with mode: 0644]
docs/en/target/lists.txt [new file with mode: 0644]
docs/en/target/lowlevel.txt [new file with mode: 0644]
docs/en/target/manycubes.png [new file with mode: 0644]
docs/en/target/manytreeitems.png [new file with mode: 0644]
docs/en/target/mathfunc.txt [new file with mode: 0644]
docs/en/target/matzring.png [new file with mode: 0644]
docs/en/target/maze.png [new file with mode: 0644]
docs/en/target/menubardesigner.png [new file with mode: 0644]
docs/en/target/metaprog.txt [new file with mode: 0644]
docs/en/target/minesweeper.png [new file with mode: 0644]
docs/en/target/more3dsamples.jpg [new file with mode: 0644]
docs/en/target/more3dsamples2.jpg [new file with mode: 0644]
docs/en/target/multilanguage.txt [new file with mode: 0644]
docs/en/target/mysql.txt [new file with mode: 0644]
docs/en/target/natural.txt [new file with mode: 0644]
docs/en/target/naturallibrary.txt [new file with mode: 0644]
docs/en/target/newcalc.png [new file with mode: 0644]
docs/en/target/newcalc2.png [new file with mode: 0644]
docs/en/target/number2words.png [new file with mode: 0644]
docs/en/target/objectslib1.png [new file with mode: 0644]
docs/en/target/objectslib2.png [new file with mode: 0644]
docs/en/target/odbc.txt [new file with mode: 0644]
docs/en/target/oop.txt [new file with mode: 0644]
docs/en/target/operators.txt [new file with mode: 0644]
docs/en/target/othellogame.png [new file with mode: 0644]
docs/en/target/outputwin.png [new file with mode: 0644]
docs/en/target/performancetips.txt [new file with mode: 0644]
docs/en/target/ponggame.png [new file with mode: 0644]
docs/en/target/postgresql.txt [new file with mode: 0644]
docs/en/target/printpreviewdialog.png [new file with mode: 0644]
docs/en/target/programstructure.txt [new file with mode: 0644]
docs/en/target/qt.txt [new file with mode: 0644]
docs/en/target/qt3d.txt [new file with mode: 0644]
docs/en/target/qt3d_ex1.png [new file with mode: 0644]
docs/en/target/qt3d_ex10.png [new file with mode: 0644]
docs/en/target/qt3d_ex11.png [new file with mode: 0644]
docs/en/target/qt3d_ex12.png [new file with mode: 0644]
docs/en/target/qt3d_ex13.png [new file with mode: 0644]
docs/en/target/qt3d_ex14.png [new file with mode: 0644]
docs/en/target/qt3d_ex15.png [new file with mode: 0644]
docs/en/target/qt3d_ex16.png [new file with mode: 0644]
docs/en/target/qt3d_ex17.png [new file with mode: 0644]
docs/en/target/qt3d_ex18.png [new file with mode: 0644]
docs/en/target/qt3d_ex2.png [new file with mode: 0644]
docs/en/target/qt3d_ex3.png [new file with mode: 0644]
docs/en/target/qt3d_ex4.png [new file with mode: 0644]
docs/en/target/qt3d_ex5.png [new file with mode: 0644]
docs/en/target/qt3d_ex6.png [new file with mode: 0644]
docs/en/target/qt3d_ex7.png [new file with mode: 0644]
docs/en/target/qt3d_ex8.png [new file with mode: 0644]
docs/en/target/qt3d_ex9.png [new file with mode: 0644]
docs/en/target/qt3dex18.png [new file with mode: 0644]
docs/en/target/qtclassconvertor.png [new file with mode: 0644]
docs/en/target/qtclassesdoc.txt [new file with mode: 0644]
docs/en/target/qtmobile.txt [new file with mode: 0644]
docs/en/target/raylib_3dcamera.png [new file with mode: 0644]
docs/en/target/raylib_3dcamerafree.png [new file with mode: 0644]
docs/en/target/raylib_3dpicking.png [new file with mode: 0644]
docs/en/target/raylib_basicshapes.png [new file with mode: 0644]
docs/en/target/raylib_basicwindow.png [new file with mode: 0644]
docs/en/target/raylib_bezierlines.png [new file with mode: 0644]
docs/en/target/raylib_camerafirstperson.png [new file with mode: 0644]
docs/en/target/raylib_collisionarea.png [new file with mode: 0644]
docs/en/target/raylib_colorspalette.png [new file with mode: 0644]
docs/en/target/raylib_cubicmap.png [new file with mode: 0644]
docs/en/target/raylib_drawring.png [new file with mode: 0644]
docs/en/target/raylib_drawring2.png [new file with mode: 0644]
docs/en/target/raylib_ex1.png [new file with mode: 0644]
docs/en/target/raylib_followingeyes.png [new file with mode: 0644]
docs/en/target/raylib_fullscreen.png [new file with mode: 0644]
docs/en/target/raylib_geometricshapes.png [new file with mode: 0644]
docs/en/target/raylib_imagedrawing.png [new file with mode: 0644]
docs/en/target/raylib_imagegeneration.png [new file with mode: 0644]
docs/en/target/raylib_inputkeys.png [new file with mode: 0644]
docs/en/target/raylib_inputmouse.png [new file with mode: 0644]
docs/en/target/raylib_inputmt.png [new file with mode: 0644]
docs/en/target/raylib_mousewheel.png [new file with mode: 0644]
docs/en/target/raylib_musicplaying.png [new file with mode: 0644]
docs/en/target/raylib_rectanglescaling.png [new file with mode: 0644]
docs/en/target/raylib_soundloading.png [new file with mode: 0644]
docs/en/target/raylib_texturesource.png [new file with mode: 0644]
docs/en/target/raylib_twocubes.png [new file with mode: 0644]
docs/en/target/reference.txt [new file with mode: 0644]
docs/en/target/resources.txt [new file with mode: 0644]
docs/en/target/ring15freeglut.png [new file with mode: 0644]
docs/en/target/ring15freeglut2.png [new file with mode: 0644]
docs/en/target/ring15opengl.png [new file with mode: 0644]
docs/en/target/ring15reportshot.png [new file with mode: 0644]
docs/en/target/ringalleg_shot1.jpg [new file with mode: 0644]
docs/en/target/ringalleg_shot2.jpg [new file with mode: 0644]
docs/en/target/ringalleg_shot3.jpg [new file with mode: 0644]
docs/en/target/ringalleg_shot4.jpg [new file with mode: 0644]
docs/en/target/ringalleg_shot5.jpg [new file with mode: 0644]
docs/en/target/ringalleg_shot6.jpg [new file with mode: 0644]
docs/en/target/ringalleg_shot7.jpg [new file with mode: 0644]
docs/en/target/ringallegrofuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringapps.txt [new file with mode: 0644]
docs/en/target/ringapps_shot1.png [new file with mode: 0644]
docs/en/target/ringapps_shot2.png [new file with mode: 0644]
docs/en/target/ringapps_shot3.png [new file with mode: 0644]
docs/en/target/ringapps_shot4.png [new file with mode: 0644]
docs/en/target/ringapps_shot5.jpg [new file with mode: 0644]
docs/en/target/ringapps_shot6.jpg [new file with mode: 0644]
docs/en/target/ringbeep.txt [new file with mode: 0644]
docs/en/target/ringconsolecolorsfuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringcube3d.png [new file with mode: 0644]
docs/en/target/ringemacs.png [new file with mode: 0644]
docs/en/target/ringemb.txt [new file with mode: 0644]
docs/en/target/ringformdesigner.png [new file with mode: 0644]
docs/en/target/ringfreeglutfuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringincloud.png [new file with mode: 0644]
docs/en/target/ringinvscode.png [new file with mode: 0644]
docs/en/target/ringlibcurlfuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringlibsdlandroid_shot1.png [new file with mode: 0644]
docs/en/target/ringlibsdlandroid_shot2.png [new file with mode: 0644]
docs/en/target/ringlibsdlfuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringlibuvfuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringlibzipfuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringmurmurhashfuncsdoc.txt [new file with mode: 0644]
docs/en/target/ringnatural.png [new file with mode: 0644]
docs/en/target/ringnotepad.txt [new file with mode: 0644]
docs/en/target/ringnotepad_screenshot.png [new file with mode: 0644]
docs/en/target/ringonmanjarolinux.png [new file with mode: 0644]
docs/en/target/ringopengl11funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl12funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl13funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl14funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl15funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl20funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl21funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl30funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl31funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl32funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl33funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl40funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl41funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl42funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl43funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl44funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl45funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringopengl46funcsdoc.txt [new file with mode: 0644]
docs/en/target/ringpm.txt [new file with mode: 0644]
docs/en/target/ringqt_shot1.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot10.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot11.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot12.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot13.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot14.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot15-B.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot15.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot16.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot17.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot18.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot19.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot2.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot20.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot21.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot22.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot23.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot24.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot25.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot26.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot27.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot28.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot29.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot3.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot30.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot31.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot32.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot33.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot34.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot35.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot36.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot37.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot38.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot39.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot4.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot40.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot41.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot42.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot43.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot44.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot45.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot46.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot47.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot48.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot49.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot5-b.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot5.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot50.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot51.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot52.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot6.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot7.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot8.jpg [new file with mode: 0644]
docs/en/target/ringqt_shot9.jpg [new file with mode: 0644]
docs/en/target/ringqtandroid_shot1.png [new file with mode: 0644]
docs/en/target/ringqtobjects.txt [new file with mode: 0644]
docs/en/target/ringqtpixmap2.png [new file with mode: 0644]
docs/en/target/ringraylib.txt [new file with mode: 0644]
docs/en/target/ringrepl.png [new file with mode: 0644]
docs/en/target/ringzip.txt [new file with mode: 0644]
docs/en/target/rnote15events.png [new file with mode: 0644]
docs/en/target/rnote15output.png [new file with mode: 0644]
docs/en/target/rnote15shot1.png [new file with mode: 0644]
docs/en/target/rnote15shot2.png [new file with mode: 0644]
docs/en/target/rnote15shot3.png [new file with mode: 0644]
docs/en/target/rnote19.jpg [new file with mode: 0644]
docs/en/target/rnotedistribute.png [new file with mode: 0644]
docs/en/target/rnotedistributemenu.png [new file with mode: 0644]
docs/en/target/rnotefd.png [new file with mode: 0644]
docs/en/target/rnotelinenumber.png [new file with mode: 0644]
docs/en/target/rnotemenu_browser.png [new file with mode: 0644]
docs/en/target/rnotemenu_edit.png [new file with mode: 0644]
docs/en/target/rnotemenu_file.png [new file with mode: 0644]
docs/en/target/rnotemenu_help.png [new file with mode: 0644]
docs/en/target/rnotemenu_mode.png [new file with mode: 0644]
docs/en/target/rnotemenu_program.png [new file with mode: 0644]
docs/en/target/rnotemenu_tools.png [new file with mode: 0644]
docs/en/target/rnotemenu_view.png [new file with mode: 0644]
docs/en/target/rnotemodernstyle.png [new file with mode: 0644]
docs/en/target/rnotemodernstyle2.png [new file with mode: 0644]
docs/en/target/rnotestylemenu.png [new file with mode: 0644]
docs/en/target/rnotetoolsterminal.png [new file with mode: 0644]
docs/en/target/rnotetoolsterminal2.png [new file with mode: 0644]
docs/en/target/runwebapp1.png [new file with mode: 0644]
docs/en/target/runwebapp2.png [new file with mode: 0644]
docs/en/target/scope.txt [new file with mode: 0644]
docs/en/target/scope2.txt [new file with mode: 0644]
docs/en/target/secfunc.txt [new file with mode: 0644]
docs/en/target/shotringnotepad.png [new file with mode: 0644]
docs/en/target/shotrotatetext.png [new file with mode: 0644]
docs/en/target/sixteenpuzzle.jpg [new file with mode: 0644]
docs/en/target/snake.png [new file with mode: 0644]
docs/en/target/snakesgame.png [new file with mode: 0644]
docs/en/target/sokoban.jpg [new file with mode: 0644]
docs/en/target/sourcecode.txt [new file with mode: 0644]
docs/en/target/sqlite.txt [new file with mode: 0644]
docs/en/target/starsfighter.png [new file with mode: 0644]
docs/en/target/stdlib.txt [new file with mode: 0644]
docs/en/target/stdlibclasses.txt [new file with mode: 0644]
docs/en/target/stopwatch.png [new file with mode: 0644]
docs/en/target/string2constant.png [new file with mode: 0644]
docs/en/target/strings.txt [new file with mode: 0644]
docs/en/target/sudoku.jpg [new file with mode: 0644]
docs/en/target/sumpuzzle.png [new file with mode: 0644]
docs/en/target/superman.png [new file with mode: 0644]
docs/en/target/syntaxflexibility.txt [new file with mode: 0644]
docs/en/target/systemfunc.txt [new file with mode: 0644]
docs/en/target/tesseragame.png [new file with mode: 0644]
docs/en/target/tests_shot.png [new file with mode: 0644]
docs/en/target/thering.jpg [new file with mode: 0644]
docs/en/target/tictactoe.jpg [new file with mode: 0644]
docs/en/target/tictactoe3d.png [new file with mode: 0644]
docs/en/target/ttsapp.png [new file with mode: 0644]
docs/en/target/typehints.txt [new file with mode: 0644]
docs/en/target/urlappmacshot3.png [new file with mode: 0644]
docs/en/target/urlappmacshot4.png [new file with mode: 0644]
docs/en/target/urlappmainshot.png [new file with mode: 0644]
docs/en/target/urlappshot1.png [new file with mode: 0644]
docs/en/target/urlappshot2.png [new file with mode: 0644]
docs/en/target/urn_shot1.png [new file with mode: 0644]
docs/en/target/urn_shot10.png [new file with mode: 0644]
docs/en/target/urn_shot11.png [new file with mode: 0644]
docs/en/target/urn_shot12.png [new file with mode: 0644]
docs/en/target/urn_shot2.png [new file with mode: 0644]
docs/en/target/urn_shot3.png [new file with mode: 0644]
docs/en/target/urn_shot4.png [new file with mode: 0644]
docs/en/target/urn_shot5.png [new file with mode: 0644]
docs/en/target/urn_shot6.png [new file with mode: 0644]
docs/en/target/urn_shot7.png [new file with mode: 0644]
docs/en/target/urn_shot8.png [new file with mode: 0644]
docs/en/target/urn_shot9.png [new file with mode: 0644]
docs/en/target/usingopengl.txt [new file with mode: 0644]
docs/en/target/usingopengl2.txt [new file with mode: 0644]
docs/en/target/usingqdial.png [new file with mode: 0644]
docs/en/target/variables.txt [new file with mode: 0644]
docs/en/target/videomusicplayer.jpg [new file with mode: 0644]
docs/en/target/visualsrc1.jpg [new file with mode: 0644]
docs/en/target/visualsrc2.jpg [new file with mode: 0644]
docs/en/target/web.txt [new file with mode: 0644]
docs/en/target/weighthistory_app.png [new file with mode: 0644]
docs/en/target/whatisnew.txt [new file with mode: 0644]
docs/en/target/whatisnew10.txt [new file with mode: 0644]
docs/en/target/whatisnew11.txt [new file with mode: 0644]
docs/en/target/whatisnew12.txt [new file with mode: 0644]
docs/en/target/whatisnew2.txt [new file with mode: 0644]
docs/en/target/whatisnew3.txt [new file with mode: 0644]
docs/en/target/whatisnew4.txt [new file with mode: 0644]
docs/en/target/whatisnew5.txt [new file with mode: 0644]
docs/en/target/whatisnew6.txt [new file with mode: 0644]
docs/en/target/whatisnew7.txt [new file with mode: 0644]
docs/en/target/whatisnew8.txt [new file with mode: 0644]
docs/en/target/whatisnew9.txt [new file with mode: 0644]
docs/en/target/windowflags.png [new file with mode: 0644]
docs/en/target/winstartupman.jpg [new file with mode: 0644]
docs/en/target/zerolib.txt [new file with mode: 0644]
docs/ja-jp/LICENSE [new file with mode: 0644]
docs/ja-jp/Makefile [new file with mode: 0644]
docs/ja-jp/README.md [new file with mode: 0644]
docs/ja-jp/buildepub.bat [new file with mode: 0644]
docs/ja-jp/buildhtml.bat [new file with mode: 0644]
docs/ja-jp/buildhtmlhelp.bat [new file with mode: 0644]
docs/ja-jp/buildlatex.bat [new file with mode: 0644]
docs/ja-jp/make.bat [new file with mode: 0644]
docs/ja-jp/pygments_lexer/ring.py [new file with mode: 0644]
docs/ja-jp/run.bat [new file with mode: 0644]
docs/ja-jp/source/BMI.png [new file with mode: 0644]
docs/ja-jp/source/Fedora.png [new file with mode: 0644]
docs/ja-jp/source/Fedora2.png [new file with mode: 0644]
docs/ja-jp/source/Fedora3.png [new file with mode: 0644]
docs/ja-jp/source/_static/cover.png [new file with mode: 0644]
docs/ja-jp/source/_static/epub-cover.html [new file with mode: 0644]
docs/ja-jp/source/allegro.txt [new file with mode: 0644]
docs/ja-jp/source/analogclock.png [new file with mode: 0644]
docs/ja-jp/source/asciitable.png [new file with mode: 0644]
docs/ja-jp/source/autocomplete.png [new file with mode: 0644]
docs/ja-jp/source/bignumber.txt [new file with mode: 0644]
docs/ja-jp/source/calcapp.jpg [new file with mode: 0644]
docs/ja-jp/source/calendar.png [new file with mode: 0644]
docs/ja-jp/source/callstack.png [new file with mode: 0644]
docs/ja-jp/source/cameraandbackground.png [new file with mode: 0644]
docs/ja-jp/source/cardsmainmenu.png [new file with mode: 0644]
docs/ja-jp/source/cardsqt.png [new file with mode: 0644]
docs/ja-jp/source/checkandconvert.txt [new file with mode: 0644]
docs/ja-jp/source/checkersgame.png [new file with mode: 0644]
docs/ja-jp/source/chessgame.png [new file with mode: 0644]
docs/ja-jp/source/classeslist.png [new file with mode: 0644]
docs/ja-jp/source/codeeditors.txt [new file with mode: 0644]
docs/ja-jp/source/codegenerator.txt [new file with mode: 0644]
docs/ja-jp/source/compiler.txt [new file with mode: 0644]
docs/ja-jp/source/conf.py [new file with mode: 0644]
docs/ja-jp/source/consolecolors.png [new file with mode: 0644]
docs/ja-jp/source/contribute.txt [new file with mode: 0644]
docs/ja-jp/source/controlstructures.txt [new file with mode: 0644]
docs/ja-jp/source/controlstructures2.txt [new file with mode: 0644]
docs/ja-jp/source/controlstructures3.txt [new file with mode: 0644]
docs/ja-jp/source/dateandtime.txt [new file with mode: 0644]
docs/ja-jp/source/debug.txt [new file with mode: 0644]
docs/ja-jp/source/debugshot1.png [new file with mode: 0644]
docs/ja-jp/source/debugshot2.png [new file with mode: 0644]
docs/ja-jp/source/debugshot3.png [new file with mode: 0644]
docs/ja-jp/source/debugshot4.png [new file with mode: 0644]
docs/ja-jp/source/declarative.txt [new file with mode: 0644]
docs/ja-jp/source/demo.txt [new file with mode: 0644]
docs/ja-jp/source/deployincloud.txt [new file with mode: 0644]
docs/ja-jp/source/distribute.txt [new file with mode: 0644]
docs/ja-jp/source/distribute_ring2exe.txt [new file with mode: 0644]
docs/ja-jp/source/dssapp.png [new file with mode: 0644]
docs/ja-jp/source/editor1.png [new file with mode: 0644]
docs/ja-jp/source/editor2.png [new file with mode: 0644]
docs/ja-jp/source/editor3.jpg [new file with mode: 0644]
docs/ja-jp/source/editor4.jpg [new file with mode: 0644]
docs/ja-jp/source/editor5.png [new file with mode: 0644]
docs/ja-jp/source/embedding.txt [new file with mode: 0644]
docs/ja-jp/source/empapp.png [new file with mode: 0644]
docs/ja-jp/source/evaldebug.txt [new file with mode: 0644]
docs/ja-jp/source/ex10.jpg [new file with mode: 0644]
docs/ja-jp/source/ex11.jpg [new file with mode: 0644]
docs/ja-jp/source/ex12.jpg [new file with mode: 0644]
docs/ja-jp/source/ex12r.jpg [new file with mode: 0644]
docs/ja-jp/source/ex13.jpg [new file with mode: 0644]
docs/ja-jp/source/ex14.jpg [new file with mode: 0644]
docs/ja-jp/source/ex15.jpg [new file with mode: 0644]
docs/ja-jp/source/ex16.jpg [new file with mode: 0644]
docs/ja-jp/source/ex17.jpg [new file with mode: 0644]
docs/ja-jp/source/ex18.jpg [new file with mode: 0644]
docs/ja-jp/source/ex19.jpg [new file with mode: 0644]
docs/ja-jp/source/ex1_basicshapes.png [new file with mode: 0644]
docs/ja-jp/source/ex20.jpg [new file with mode: 0644]
docs/ja-jp/source/ex21.jpg [new file with mode: 0644]
docs/ja-jp/source/ex21_2.jpg [new file with mode: 0644]
docs/ja-jp/source/ex22.jpg [new file with mode: 0644]
docs/ja-jp/source/ex23.jpg [new file with mode: 0644]
docs/ja-jp/source/ex24.jpg [new file with mode: 0644]
docs/ja-jp/source/ex24_2.jpg [new file with mode: 0644]
docs/ja-jp/source/ex25.jpg [new file with mode: 0644]
docs/ja-jp/source/ex26.jpg [new file with mode: 0644]
docs/ja-jp/source/ex28.jpg [new file with mode: 0644]
docs/ja-jp/source/ex4.jpg [new file with mode: 0644]
docs/ja-jp/source/ex5.jpg [new file with mode: 0644]
docs/ja-jp/source/ex6.jpg [new file with mode: 0644]
docs/ja-jp/source/ex7.jpg [new file with mode: 0644]
docs/ja-jp/source/ex8.jpg [new file with mode: 0644]
docs/ja-jp/source/ex9.jpg [new file with mode: 0644]
docs/ja-jp/source/extension.txt [new file with mode: 0644]
docs/ja-jp/source/extension_tutorial.txt [new file with mode: 0644]
docs/ja-jp/source/faq.txt [new file with mode: 0644]
docs/ja-jp/source/fdeventcode.png [new file with mode: 0644]
docs/ja-jp/source/fdeventmethod.png [new file with mode: 0644]
docs/ja-jp/source/fdlistitems.png [new file with mode: 0644]
docs/ja-jp/source/fdms.png [new file with mode: 0644]
docs/ja-jp/source/fdsayhello1.png [new file with mode: 0644]
docs/ja-jp/source/fifteen2.png [new file with mode: 0644]
docs/ja-jp/source/files.txt [new file with mode: 0644]
docs/ja-jp/source/findinfiles.png [new file with mode: 0644]
docs/ja-jp/source/flappybird.png [new file with mode: 0644]
docs/ja-jp/source/formdesigner.png [new file with mode: 0644]
docs/ja-jp/source/formdesigner.txt [new file with mode: 0644]
docs/ja-jp/source/formdesignerandroid.png [new file with mode: 0644]
docs/ja-jp/source/formtranslation1.png [new file with mode: 0644]
docs/ja-jp/source/foxringfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/fp.txt [new file with mode: 0644]
docs/ja-jp/source/freeglutshot1.png [new file with mode: 0644]
docs/ja-jp/source/freeglutshot2.png [new file with mode: 0644]
docs/ja-jp/source/freeglutshot3.png [new file with mode: 0644]
docs/ja-jp/source/freeglutshot4.png [new file with mode: 0644]
docs/ja-jp/source/freeglutshot5.png [new file with mode: 0644]
docs/ja-jp/source/freeglutshot6.png [new file with mode: 0644]
docs/ja-jp/source/freeglutshot7.png [new file with mode: 0644]
docs/ja-jp/source/freeglutshot8.png [new file with mode: 0644]
docs/ja-jp/source/functions.txt [new file with mode: 0644]
docs/ja-jp/source/functions2.txt [new file with mode: 0644]
docs/ja-jp/source/functions3.txt [new file with mode: 0644]
docs/ja-jp/source/functionslist.png [new file with mode: 0644]
docs/ja-jp/source/game2048_shot1.png [new file with mode: 0644]
docs/ja-jp/source/gameengine.txt [new file with mode: 0644]
docs/ja-jp/source/gameengineandorid.txt [new file with mode: 0644]
docs/ja-jp/source/gameengineshot1.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot11.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot12.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot13.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot14.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot15.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot2.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot3.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot5.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot6.png [new file with mode: 0644]
docs/ja-jp/source/gameengineshot7.png [new file with mode: 0644]
docs/ja-jp/source/gameoflife.jpg [new file with mode: 0644]
docs/ja-jp/source/generalinfo.txt [new file with mode: 0644]
docs/ja-jp/source/getinput.txt [new file with mode: 0644]
docs/ja-jp/source/getquotesmac.png [new file with mode: 0644]
docs/ja-jp/source/getting_started.txt [new file with mode: 0644]
docs/ja-jp/source/getting_started2.txt [new file with mode: 0644]
docs/ja-jp/source/getting_started3.txt [new file with mode: 0644]
docs/ja-jp/source/gm800lefd.png [new file with mode: 0644]
docs/ja-jp/source/gmleveleditor.png [new file with mode: 0644]
docs/ja-jp/source/gmshot1.png [new file with mode: 0644]
docs/ja-jp/source/gmshot2.png [new file with mode: 0644]
docs/ja-jp/source/gmshot3.png [new file with mode: 0644]
docs/ja-jp/source/go.png [new file with mode: 0644]
docs/ja-jp/source/goldmagic800.txt [new file with mode: 0644]
docs/ja-jp/source/index.txt [new file with mode: 0644]
docs/ja-jp/source/introduction.txt [new file with mode: 0644]
docs/ja-jp/source/juliancalendar.png [new file with mode: 0644]
docs/ja-jp/source/knighttour.png [new file with mode: 0644]
docs/ja-jp/source/languagedesign.txt [new file with mode: 0644]
docs/ja-jp/source/libcurl.txt [new file with mode: 0644]
docs/ja-jp/source/libsdl.txt [new file with mode: 0644]
docs/ja-jp/source/libuv.txt [new file with mode: 0644]
docs/ja-jp/source/linuxmint.png [new file with mode: 0644]
docs/ja-jp/source/lists.txt [new file with mode: 0644]
docs/ja-jp/source/lowlevel.txt [new file with mode: 0644]
docs/ja-jp/source/manycubes.png [new file with mode: 0644]
docs/ja-jp/source/manytreeitems.png [new file with mode: 0644]
docs/ja-jp/source/mathfunc.txt [new file with mode: 0644]
docs/ja-jp/source/matzring.png [new file with mode: 0644]
docs/ja-jp/source/maze.png [new file with mode: 0644]
docs/ja-jp/source/menubardesigner.png [new file with mode: 0644]
docs/ja-jp/source/metaprog.txt [new file with mode: 0644]
docs/ja-jp/source/minesweeper.png [new file with mode: 0644]
docs/ja-jp/source/more3dsamples.jpg [new file with mode: 0644]
docs/ja-jp/source/more3dsamples2.jpg [new file with mode: 0644]
docs/ja-jp/source/multilanguage.txt [new file with mode: 0644]
docs/ja-jp/source/mysql.txt [new file with mode: 0644]
docs/ja-jp/source/natural.txt [new file with mode: 0644]
docs/ja-jp/source/naturallibrary.txt [new file with mode: 0644]
docs/ja-jp/source/newcalc.png [new file with mode: 0644]
docs/ja-jp/source/newcalc2.png [new file with mode: 0644]
docs/ja-jp/source/number2words.png [new file with mode: 0644]
docs/ja-jp/source/objects.inv [new file with mode: 0644]
docs/ja-jp/source/objectslib1.png [new file with mode: 0644]
docs/ja-jp/source/objectslib2.png [new file with mode: 0644]
docs/ja-jp/source/odbc.txt [new file with mode: 0644]
docs/ja-jp/source/oop.txt [new file with mode: 0644]
docs/ja-jp/source/operators.txt [new file with mode: 0644]
docs/ja-jp/source/othellogame.png [new file with mode: 0644]
docs/ja-jp/source/outputwin.png [new file with mode: 0644]
docs/ja-jp/source/performancetips.txt [new file with mode: 0644]
docs/ja-jp/source/ponggame.png [new file with mode: 0644]
docs/ja-jp/source/postgresql.txt [new file with mode: 0644]
docs/ja-jp/source/printpreviewdialog.png [new file with mode: 0644]
docs/ja-jp/source/programstructure.txt [new file with mode: 0644]
docs/ja-jp/source/qt.txt [new file with mode: 0644]
docs/ja-jp/source/qt3d.txt [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex1.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex10.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex11.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex12.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex13.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex14.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex15.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex16.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex17.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex18.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex2.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex3.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex4.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex5.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex6.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex7.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex8.png [new file with mode: 0644]
docs/ja-jp/source/qt3d_ex9.png [new file with mode: 0644]
docs/ja-jp/source/qt3dex18.png [new file with mode: 0644]
docs/ja-jp/source/qtclassconvertor.png [new file with mode: 0644]
docs/ja-jp/source/qtclassesdoc.txt [new file with mode: 0644]
docs/ja-jp/source/qtmobile.txt [new file with mode: 0644]
docs/ja-jp/source/raylib_3dcamera.png [new file with mode: 0644]
docs/ja-jp/source/raylib_3dcamerafree.png [new file with mode: 0644]
docs/ja-jp/source/raylib_3dpicking.png [new file with mode: 0644]
docs/ja-jp/source/raylib_basicshapes.png [new file with mode: 0644]
docs/ja-jp/source/raylib_basicwindow.png [new file with mode: 0644]
docs/ja-jp/source/raylib_bezierlines.png [new file with mode: 0644]
docs/ja-jp/source/raylib_camerafirstperson.png [new file with mode: 0644]
docs/ja-jp/source/raylib_collisionarea.png [new file with mode: 0644]
docs/ja-jp/source/raylib_colorspalette.png [new file with mode: 0644]
docs/ja-jp/source/raylib_cubicmap.png [new file with mode: 0644]
docs/ja-jp/source/raylib_drawring.png [new file with mode: 0644]
docs/ja-jp/source/raylib_drawring2.png [new file with mode: 0644]
docs/ja-jp/source/raylib_ex1.png [new file with mode: 0644]
docs/ja-jp/source/raylib_followingeyes.png [new file with mode: 0644]
docs/ja-jp/source/raylib_fullscreen.png [new file with mode: 0644]
docs/ja-jp/source/raylib_geometricshapes.png [new file with mode: 0644]
docs/ja-jp/source/raylib_imagedrawing.png [new file with mode: 0644]
docs/ja-jp/source/raylib_imagegeneration.png [new file with mode: 0644]
docs/ja-jp/source/raylib_inputkeys.png [new file with mode: 0644]
docs/ja-jp/source/raylib_inputmouse.png [new file with mode: 0644]
docs/ja-jp/source/raylib_inputmt.png [new file with mode: 0644]
docs/ja-jp/source/raylib_mousewheel.png [new file with mode: 0644]
docs/ja-jp/source/raylib_musicplaying.png [new file with mode: 0644]
docs/ja-jp/source/raylib_rectanglescaling.png [new file with mode: 0644]
docs/ja-jp/source/raylib_soundloading.png [new file with mode: 0644]
docs/ja-jp/source/raylib_texturesource.png [new file with mode: 0644]
docs/ja-jp/source/raylib_twocubes.png [new file with mode: 0644]
docs/ja-jp/source/reference.txt [new file with mode: 0644]
docs/ja-jp/source/resources.txt [new file with mode: 0644]
docs/ja-jp/source/ring15freeglut.png [new file with mode: 0644]
docs/ja-jp/source/ring15freeglut2.png [new file with mode: 0644]
docs/ja-jp/source/ring15opengl.png [new file with mode: 0644]
docs/ja-jp/source/ring15reportshot.png [new file with mode: 0644]
docs/ja-jp/source/ringalleg_shot1.jpg [new file with mode: 0644]
docs/ja-jp/source/ringalleg_shot2.jpg [new file with mode: 0644]
docs/ja-jp/source/ringalleg_shot3.jpg [new file with mode: 0644]
docs/ja-jp/source/ringalleg_shot4.jpg [new file with mode: 0644]
docs/ja-jp/source/ringalleg_shot5.jpg [new file with mode: 0644]
docs/ja-jp/source/ringalleg_shot6.jpg [new file with mode: 0644]
docs/ja-jp/source/ringalleg_shot7.jpg [new file with mode: 0644]
docs/ja-jp/source/ringallegrofuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringapps.txt [new file with mode: 0644]
docs/ja-jp/source/ringapps_shot1.png [new file with mode: 0644]
docs/ja-jp/source/ringapps_shot2.png [new file with mode: 0644]
docs/ja-jp/source/ringapps_shot3.png [new file with mode: 0644]
docs/ja-jp/source/ringapps_shot4.png [new file with mode: 0644]
docs/ja-jp/source/ringapps_shot5.jpg [new file with mode: 0644]
docs/ja-jp/source/ringapps_shot6.jpg [new file with mode: 0644]
docs/ja-jp/source/ringbeep.txt [new file with mode: 0644]
docs/ja-jp/source/ringconsolecolorsfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringcube3d.png [new file with mode: 0644]
docs/ja-jp/source/ringemacs.png [new file with mode: 0644]
docs/ja-jp/source/ringemb.txt [new file with mode: 0644]
docs/ja-jp/source/ringformdesigner.png [new file with mode: 0644]
docs/ja-jp/source/ringfreeglutfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringincloud.png [new file with mode: 0644]
docs/ja-jp/source/ringinvscode.png [new file with mode: 0644]
docs/ja-jp/source/ringlibcurlfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringlibsdlandroid_shot1.png [new file with mode: 0644]
docs/ja-jp/source/ringlibsdlandroid_shot2.png [new file with mode: 0644]
docs/ja-jp/source/ringlibsdlfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringlibuvfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringlibzipfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringmurmurhashfuncsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringnatural.png [new file with mode: 0644]
docs/ja-jp/source/ringnotepad.txt [new file with mode: 0644]
docs/ja-jp/source/ringnotepad_screenshot.png [new file with mode: 0644]
docs/ja-jp/source/ringonmanjarolinux.png [new file with mode: 0644]
docs/ja-jp/source/ringopengl11funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl12funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl13funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl14funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl15funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl20funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl21funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl30funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl31funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl32funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl33funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl40funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl41funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl42funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl43funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl44funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl45funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringopengl46funcsdoc.txt [new file with mode: 0644]
docs/ja-jp/source/ringpm.txt [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot1.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot10.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot11.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot12.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot13.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot14.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot15-B.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot15.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot16.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot17.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot18.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot19.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot2.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot20.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot21.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot22.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot23.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot24.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot25.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot26.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot27.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot28.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot29.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot3.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot30.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot31.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot32.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot33.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot34.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot35.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot36.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot37.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot38.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot39.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot4.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot40.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot41.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot42.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot43.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot44.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot45.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot46.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot47.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot48.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot49.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot5-b.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot5.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot50.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot51.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot52.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot6.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot7.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot8.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqt_shot9.jpg [new file with mode: 0644]
docs/ja-jp/source/ringqtandroid_shot1.png [new file with mode: 0644]
docs/ja-jp/source/ringqtobjects.txt [new file with mode: 0644]
docs/ja-jp/source/ringqtpixmap2.png [new file with mode: 0644]
docs/ja-jp/source/ringraylib.txt [new file with mode: 0644]
docs/ja-jp/source/ringrepl.png [new file with mode: 0644]
docs/ja-jp/source/ringzip.txt [new file with mode: 0644]
docs/ja-jp/source/rnote15events.png [new file with mode: 0644]
docs/ja-jp/source/rnote15output.png [new file with mode: 0644]
docs/ja-jp/source/rnote15shot1.png [new file with mode: 0644]
docs/ja-jp/source/rnote15shot2.png [new file with mode: 0644]
docs/ja-jp/source/rnote15shot3.png [new file with mode: 0644]
docs/ja-jp/source/rnote19.jpg [new file with mode: 0644]
docs/ja-jp/source/rnotedistribute.png [new file with mode: 0644]
docs/ja-jp/source/rnotedistributemenu.png [new file with mode: 0644]
docs/ja-jp/source/rnotefd.png [new file with mode: 0644]
docs/ja-jp/source/rnotelinenumber.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_browser.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_edit.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_file.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_help.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_mode.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_program.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_tools.png [new file with mode: 0644]
docs/ja-jp/source/rnotemenu_view.png [new file with mode: 0644]
docs/ja-jp/source/rnotemodernstyle.png [new file with mode: 0644]
docs/ja-jp/source/rnotemodernstyle2.png [new file with mode: 0644]
docs/ja-jp/source/rnotestylemenu.png [new file with mode: 0644]
docs/ja-jp/source/rnotetoolsterminal.png [new file with mode: 0644]
docs/ja-jp/source/rnotetoolsterminal2.png [new file with mode: 0644]
docs/ja-jp/source/runwebapp1.png [new file with mode: 0644]
docs/ja-jp/source/runwebapp2.png [new file with mode: 0644]
docs/ja-jp/source/scope.txt [new file with mode: 0644]
docs/ja-jp/source/scope2.txt [new file with mode: 0644]
docs/ja-jp/source/secfunc.txt [new file with mode: 0644]
docs/ja-jp/source/shotringnotepad.png [new file with mode: 0644]
docs/ja-jp/source/shotrotatetext.png [new file with mode: 0644]
docs/ja-jp/source/sixteenpuzzle.jpg [new file with mode: 0644]
docs/ja-jp/source/snake.png [new file with mode: 0644]
docs/ja-jp/source/snakesgame.png [new file with mode: 0644]
docs/ja-jp/source/sokoban.jpg [new file with mode: 0644]
docs/ja-jp/source/sourcecode.txt [new file with mode: 0644]
docs/ja-jp/source/sqlite.txt [new file with mode: 0644]
docs/ja-jp/source/starsfighter.png [new file with mode: 0644]
docs/ja-jp/source/stdlib.txt [new file with mode: 0644]
docs/ja-jp/source/stdlibclasses.txt [new file with mode: 0644]
docs/ja-jp/source/stopwatch.png [new file with mode: 0644]
docs/ja-jp/source/string2constant.png [new file with mode: 0644]
docs/ja-jp/source/strings.txt [new file with mode: 0644]
docs/ja-jp/source/sudoku.jpg [new file with mode: 0644]
docs/ja-jp/source/sumpuzzle.png [new file with mode: 0644]
docs/ja-jp/source/superman.png [new file with mode: 0644]
docs/ja-jp/source/syntaxflexibility.txt [new file with mode: 0644]
docs/ja-jp/source/systemfunc.txt [new file with mode: 0644]
docs/ja-jp/source/tesseragame.png [new file with mode: 0644]
docs/ja-jp/source/tests_shot.png [new file with mode: 0644]
docs/ja-jp/source/thering.jpg [new file with mode: 0644]
docs/ja-jp/source/tictactoe.jpg [new file with mode: 0644]
docs/ja-jp/source/tictactoe3d.png [new file with mode: 0644]
docs/ja-jp/source/ttsapp.png [new file with mode: 0644]
docs/ja-jp/source/typehints.txt [new file with mode: 0644]
docs/ja-jp/source/urlappmacshot3.png [new file with mode: 0644]
docs/ja-jp/source/urlappmacshot4.png [new file with mode: 0644]
docs/ja-jp/source/urlappmainshot.png [new file with mode: 0644]
docs/ja-jp/source/urlappshot1.png [new file with mode: 0644]
docs/ja-jp/source/urlappshot2.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot1.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot10.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot11.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot12.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot2.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot3.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot4.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot5.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot6.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot7.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot8.png [new file with mode: 0644]
docs/ja-jp/source/urn_shot9.png [new file with mode: 0644]
docs/ja-jp/source/usingopengl.txt [new file with mode: 0644]
docs/ja-jp/source/usingopengl2.txt [new file with mode: 0644]
docs/ja-jp/source/usingqdial.png [new file with mode: 0644]
docs/ja-jp/source/variables.txt [new file with mode: 0644]
docs/ja-jp/source/videomusicplayer.jpg [new file with mode: 0644]
docs/ja-jp/source/visualsrc1.jpg [new file with mode: 0644]
docs/ja-jp/source/visualsrc2.jpg [new file with mode: 0644]
docs/ja-jp/source/web.txt [new file with mode: 0644]
docs/ja-jp/source/weighthistory_app.png [new file with mode: 0644]
docs/ja-jp/source/whatisnew.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew10.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew11.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew12.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew2.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew3.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew4.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew5.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew6.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew7.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew8.txt [new file with mode: 0644]
docs/ja-jp/source/whatisnew9.txt [new file with mode: 0644]
docs/ja-jp/source/windowflags.png [new file with mode: 0644]
docs/ja-jp/source/winstartupman.jpg [new file with mode: 0644]
docs/ja-jp/source/zerolib.txt [new file with mode: 0644]

diff --git a/docs/en/Makefile b/docs/en/Makefile
new file mode 100644 (file)
index 0000000..010bc66
--- /dev/null
@@ -0,0 +1,192 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = build
+
+# User-friendly check for sphinx-build
+ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
+$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
+endif
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) target
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) target
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
+
+help:
+       @echo "Please use \`make <target>' where <target> is one of"
+       @echo "  html       to make standalone HTML files"
+       @echo "  dirhtml    to make HTML files named index.html in directories"
+       @echo "  singlehtml to make a single large HTML file"
+       @echo "  pickle     to make pickle files"
+       @echo "  json       to make JSON files"
+       @echo "  htmlhelp   to make HTML files and a HTML help project"
+       @echo "  qthelp     to make HTML files and a qthelp project"
+       @echo "  applehelp  to make an Apple Help Book"
+       @echo "  devhelp    to make HTML files and a Devhelp project"
+       @echo "  epub       to make an epub"
+       @echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+       @echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+       @echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
+       @echo "  text       to make text files"
+       @echo "  man        to make manual pages"
+       @echo "  texinfo    to make Texinfo files"
+       @echo "  info       to make Texinfo files and run them through makeinfo"
+       @echo "  gettext    to make PO message catalogs"
+       @echo "  changes    to make an overview of all changed/added/deprecated items"
+       @echo "  xml        to make Docutils-native XML files"
+       @echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
+       @echo "  linkcheck  to check all external links for integrity"
+       @echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+       @echo "  coverage   to run coverage check of the documentation (if enabled)"
+
+clean:
+       rm -rf $(BUILDDIR)/*
+
+html:
+       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+       $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+       @echo
+       @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+       @echo
+       @echo "Build finished; now you can process the pickle files."
+
+json:
+       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+       @echo
+       @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+       @echo
+       @echo "Build finished; now you can run HTML Help Workshop with the" \
+             ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+       @echo
+       @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+             ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+       @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Ring.qhcp"
+       @echo "To view the help file:"
+       @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Ring.qhc"
+
+applehelp:
+       $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
+       @echo
+       @echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
+       @echo "N.B. You won't be able to view it unless you put it in" \
+             "~/Library/Documentation/Help or install it in your application" \
+             "bundle."
+
+devhelp:
+       $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+       @echo
+       @echo "Build finished."
+       @echo "To view the help file:"
+       @echo "# mkdir -p $$HOME/.local/share/devhelp/Ring"
+       @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Ring"
+       @echo "# devhelp"
+
+epub:
+       $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+       @echo
+       @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo
+       @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+       @echo "Run \`make' in that directory to run these through (pdf)latex" \
+             "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo "Running LaTeX files through pdflatex..."
+       $(MAKE) -C $(BUILDDIR)/latex all-pdf
+       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+latexpdfja:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo "Running LaTeX files through platex and dvipdfmx..."
+       $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
+       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+       $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+       @echo
+       @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+       $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+       @echo
+       @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo
+       @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+       @echo "Run \`make' in that directory to run these through makeinfo" \
+             "(use \`make info' here to do that automatically)."
+
+info:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo "Running Texinfo files through makeinfo..."
+       make -C $(BUILDDIR)/texinfo info
+       @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+       $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+       @echo
+       @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+       @echo
+       @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+       @echo
+       @echo "Link check complete; look for any errors in the above output " \
+             "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+       @echo "Testing of doctests in the sources finished, look at the " \
+             "results in $(BUILDDIR)/doctest/output.txt."
+
+coverage:
+       $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
+       @echo "Testing of coverage in the sources finished, look at the " \
+             "results in $(BUILDDIR)/coverage/python.txt."
+
+xml:
+       $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
+       @echo
+       @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+
+pseudoxml:
+       $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
+       @echo
+       @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
diff --git a/docs/en/README.md b/docs/en/README.md
new file mode 100644 (file)
index 0000000..763e8c0
--- /dev/null
@@ -0,0 +1,18 @@
+In this folder we have the Ring programming language documentation (Created using Sphinx).
+
+(1) Install Python 2.7
+
+(2) Download https://bootstrap.pypa.io/get-pip.py 
+
+(3) Run : python get-pip.py
+
+(4) Run : pip install sphinx==1.3.1
+
+(5) To use the pygments lexer, copy ring.py to C:\Python27\Lib\site-packages\pygments\lexers
+
+(6) Then run : python _mapping.py
+
+(7) To generate CHM file, Use Microsoft Help Workshop : https://www.microsoft.com/en-us/download/details.aspx?id=21138
+
+(8) To generate PDF file, Use Lyx (https://www.lyx.org/Download) and MiKTEX (https://miktex.org/download)
+
diff --git a/docs/en/_config.yml b/docs/en/_config.yml
new file mode 100644 (file)
index 0000000..c419263
--- /dev/null
@@ -0,0 +1 @@
+theme: jekyll-theme-cayman
\ No newline at end of file
diff --git a/docs/en/buildhtml.bat b/docs/en/buildhtml.bat
new file mode 100644 (file)
index 0000000..d210288
--- /dev/null
@@ -0,0 +1 @@
+make html
diff --git a/docs/en/buildhtmlhelp.bat b/docs/en/buildhtmlhelp.bat
new file mode 100644 (file)
index 0000000..4968f0a
--- /dev/null
@@ -0,0 +1 @@
+make htmlhelp
\ No newline at end of file
diff --git a/docs/en/buildlatex.bat b/docs/en/buildlatex.bat
new file mode 100644 (file)
index 0000000..3b4fa83
--- /dev/null
@@ -0,0 +1 @@
+make latex
\ No newline at end of file
diff --git a/docs/en/en-level1.tmx b/docs/en/en-level1.tmx
new file mode 100644 (file)
index 0000000..2c36964
--- /dev/null
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE tmx SYSTEM "tmx11.dtd">
+<tmx version="1.1">
+  <header creationtool="OmegaT" o-tmf="OmegaT TMX" adminlang="EN-US" datatype="plaintext" creationtoolversion="4.3.0_0_e0e1b4cc" segtype="sentence" srclang="EN"/>
+  <body>
+<!-- Default translations -->
+    <tu>
+      <tuv lang="EN">
+        <seg>(28) Form Designer - Nice Aliginment for Toolbox Icons.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T083007Z" creationid="isVowel" creationdate="20200202T083007Z">
+        <seg>(28) Form Designer - Nice Alignment for Toolbox Icons.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>* Writen in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T090858Z" creationid="isVowel" creationdate="20200202T090858Z">
+        <seg>* Written in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>, IsVowel (Japan)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091657Z" creationid="isVowel" creationdate="20200202T091657Z">
+        <seg>, isVowel (Japan)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>After modifing the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063748Z" creationid="isVowel" creationdate="20200202T063748Z">
+        <seg>After modifying the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only english.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091750Z" creationid="isVowel" creationdate="20200202T091750Z">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only English.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Hello it is me            # What a beatiful programming world!</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091113Z" creationid="isVowel" creationdate="20200202T091113Z">
+        <seg>Hello it is me            # What a beautiful programming world!</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Next, another part of the configutaiton file, it's important because we can learn from it how to add</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062822Z" creationid="isVowel" creationdate="20200202T062822Z">
+        <seg>Next, another part of the configuration file, it's important because we can learn from it how to add</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>One shoud understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091717Z" creationid="isVowel" creationdate="20200202T091717Z">
+        <seg>One should understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Ring is a distruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091756Z" creationid="isVowel" creationdate="20200202T091756Z">
+        <seg>Ring is a disruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>So the Garabage Collector will manage these C pointers.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063717Z" creationid="isVowel" creationdate="20200202T063717Z">
+        <seg>So the Garbage Collector will manage these C pointers.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The best way to assesing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091821Z" creationid="isVowel" creationdate="20200202T091821Z">
+        <seg>The best way to assessing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The default type for constant is Number</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062746Z" creationid="isVowel" creationdate="20200202T062746Z">
+        <seg>The default type for constant is Number.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The library provideds classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T082913Z" creationid="isVowel" creationdate="20200202T082913Z">
+        <seg>The library provides classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intutively.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091811Z" creationid="isVowel" creationdate="20200202T091811Z">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intuitively.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>There are several innovations outthere with a clear commitment from its designer to simplicity, flexibility and learnability.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091734Z" creationid="isVowel" creationdate="20200202T091727Z">
+        <seg>There are several innovations out-there with a clear commitment from its designer to simplicity, flexibility and learn-ability.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>This is useful to separate the extension configuraition file to many files</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063659Z" creationid="isVowel" creationdate="20200202T063659Z">
+        <seg>This is useful to separate the extension configuration file to many files</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>To build th executable file for Windows, Linux or macOS</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T155709Z" creationid="isVowel" creationdate="20200202T155709Z">
+        <seg>To build the executable file for Windows, Linux or macOS</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>We can get paramters values using the next functions</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T154625Z" creationid="isVowel" creationdate="20200202T154625Z">
+        <seg>We can get parameters values using the next functions</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>We can see this configuration file as a complete example about using the code generator</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063453Z" creationid="isVowel" creationdate="20200202T063453Z">
+        <seg>We can see this configuration file as a complete example about using the code generator.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>You can determine the pointer name before the strucuture member name.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062212Z" creationid="isVowel" creationdate="20200202T062212Z">
+        <seg>You can determine the pointer name before the structure member name.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062947Z" creationid="isVowel" creationdate="20200202T062947Z">
+        <seg>Before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>filename.exe              (Will ge generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T155533Z" creationid="isVowel" creationdate="20200202T155533Z">
+        <seg>filename.exe              (Will be generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>if we are using C_CONSTANT_TYPE_POINTER   then we will need the second global variable</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063247Z" creationid="isVowel" creationdate="20200202T063052Z">
+        <seg>If we are using C_CONSTANT_TYPE_POINTER then we will need the second global variable</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>note:: the behaviour of this function can be changed by the Ring code</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T154517Z" creationid="isVowel" creationdate="20200202T154517Z">
+        <seg>note:: the behavior of this function can be changed by the Ring code</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>the screen but we can control it using the Mouse and/or the Keyborad</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T061048Z" creationid="isVowel" creationdate="20200202T061048Z">
+        <seg>the screen but we can control it using the Mouse and/or the Keyboard</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062708Z" creationid="isVowel" creationdate="20200202T062708Z">
+        <seg>Using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>when the code generator take this file as input</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062920Z" creationid="isVowel" creationdate="20200202T062920Z">
+        <seg>When the code generator take this file as input</seg>
+      </tuv>
+    </tu>
+<!-- Alternative translations -->
+  </body>
+</tmx>
diff --git a/docs/en/en-level2.tmx b/docs/en/en-level2.tmx
new file mode 100644 (file)
index 0000000..099dab3
--- /dev/null
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE tmx SYSTEM "tmx14.dtd">
+<tmx version="1.4">
+  <header creationtool="OmegaT" o-tmf="OmegaT TMX" adminlang="EN-US" datatype="plaintext" creationtoolversion="4.3.0_0_e0e1b4cc" segtype="sentence" srclang="EN"/>
+  <body>
+<!-- Default translations -->
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>(28) Form Designer - Nice Aliginment for Toolbox Icons.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T083007Z" creationid="isVowel" creationdate="20200202T083007Z">
+        <seg>(28) Form Designer - Nice Alignment for Toolbox Icons.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>* Writen in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T090858Z" creationid="isVowel" creationdate="20200202T090858Z">
+        <seg>* Written in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>, IsVowel (Japan)</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091657Z" creationid="isVowel" creationdate="20200202T091657Z">
+        <seg>, isVowel (Japan)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>After modifing the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T063748Z" creationid="isVowel" creationdate="20200202T063748Z">
+        <seg>After modifying the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only english.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091750Z" creationid="isVowel" creationdate="20200202T091750Z">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only English.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>Hello it is me            # What a beatiful programming world!</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091113Z" creationid="isVowel" creationdate="20200202T091113Z">
+        <seg>Hello it is me            # What a beautiful programming world!</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>Next, another part of the configutaiton file, it's important because we can learn from it how to add</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T062822Z" creationid="isVowel" creationdate="20200202T062822Z">
+        <seg>Next, another part of the configuration file, it's important because we can learn from it how to add</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>One shoud understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091717Z" creationid="isVowel" creationdate="20200202T091717Z">
+        <seg>One should understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>Ring is a distruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091756Z" creationid="isVowel" creationdate="20200202T091756Z">
+        <seg>Ring is a disruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>So the Garabage Collector will manage these C pointers.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T063717Z" creationid="isVowel" creationdate="20200202T063717Z">
+        <seg>So the Garbage Collector will manage these C pointers.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>The best way to assesing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091821Z" creationid="isVowel" creationdate="20200202T091821Z">
+        <seg>The best way to assessing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>The default type for constant is Number</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T062746Z" creationid="isVowel" creationdate="20200202T062746Z">
+        <seg>The default type for constant is Number.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>The library provideds classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T082913Z" creationid="isVowel" creationdate="20200202T082913Z">
+        <seg>The library provides classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intutively.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091811Z" creationid="isVowel" creationdate="20200202T091811Z">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intuitively.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>There are several innovations outthere with a clear commitment from its designer to simplicity, flexibility and learnability.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T091734Z" creationid="isVowel" creationdate="20200202T091727Z">
+        <seg>There are several innovations out-there with a clear commitment from its designer to simplicity, flexibility and learn-ability.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>This is useful to separate the extension configuraition file to many files</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T063659Z" creationid="isVowel" creationdate="20200202T063659Z">
+        <seg>This is useful to separate the extension configuration file to many files</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>To build th executable file for Windows, Linux or macOS</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T155709Z" creationid="isVowel" creationdate="20200202T155709Z">
+        <seg>To build the executable file for Windows, Linux or macOS</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>We can get paramters values using the next functions</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T154625Z" creationid="isVowel" creationdate="20200202T154625Z">
+        <seg>We can get parameters values using the next functions</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>We can see this configuration file as a complete example about using the code generator</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T063453Z" creationid="isVowel" creationdate="20200202T063453Z">
+        <seg>We can see this configuration file as a complete example about using the code generator.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>You can determine the pointer name before the strucuture member name.</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T062212Z" creationid="isVowel" creationdate="20200202T062212Z">
+        <seg>You can determine the pointer name before the structure member name.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T062947Z" creationid="isVowel" creationdate="20200202T062947Z">
+        <seg>Before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>filename.exe              (Will ge generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T155533Z" creationid="isVowel" creationdate="20200202T155533Z">
+        <seg>filename.exe              (Will be generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>if we are using C_CONSTANT_TYPE_POINTER   then we will need the second global variable</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T063247Z" creationid="isVowel" creationdate="20200202T063052Z">
+        <seg>If we are using C_CONSTANT_TYPE_POINTER then we will need the second global variable</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>note:: the behaviour of this function can be changed by the Ring code</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T154517Z" creationid="isVowel" creationdate="20200202T154517Z">
+        <seg>note:: the behavior of this function can be changed by the Ring code</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>the screen but we can control it using the Mouse and/or the Keyborad</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T061048Z" creationid="isVowel" creationdate="20200202T061048Z">
+        <seg>the screen but we can control it using the Mouse and/or the Keyboard</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T062708Z" creationid="isVowel" creationdate="20200202T062708Z">
+        <seg>Using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv xml:lang="EN">
+        <seg>when the code generator take this file as input</seg>
+      </tuv>
+      <tuv xml:lang="EN-US" changeid="isVowel" changedate="20200202T062920Z" creationid="isVowel" creationdate="20200202T062920Z">
+        <seg>When the code generator take this file as input</seg>
+      </tuv>
+    </tu>
+<!-- Alternative translations -->
+  </body>
+</tmx>
diff --git a/docs/en/en-omegat.tmx b/docs/en/en-omegat.tmx
new file mode 100644 (file)
index 0000000..2c36964
--- /dev/null
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE tmx SYSTEM "tmx11.dtd">
+<tmx version="1.1">
+  <header creationtool="OmegaT" o-tmf="OmegaT TMX" adminlang="EN-US" datatype="plaintext" creationtoolversion="4.3.0_0_e0e1b4cc" segtype="sentence" srclang="EN"/>
+  <body>
+<!-- Default translations -->
+    <tu>
+      <tuv lang="EN">
+        <seg>(28) Form Designer - Nice Aliginment for Toolbox Icons.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T083007Z" creationid="isVowel" creationdate="20200202T083007Z">
+        <seg>(28) Form Designer - Nice Alignment for Toolbox Icons.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>* Writen in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T090858Z" creationid="isVowel" creationdate="20200202T090858Z">
+        <seg>* Written in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>, IsVowel (Japan)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091657Z" creationid="isVowel" creationdate="20200202T091657Z">
+        <seg>, isVowel (Japan)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>After modifing the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063748Z" creationid="isVowel" creationdate="20200202T063748Z">
+        <seg>After modifying the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only english.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091750Z" creationid="isVowel" creationdate="20200202T091750Z">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only English.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Hello it is me            # What a beatiful programming world!</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091113Z" creationid="isVowel" creationdate="20200202T091113Z">
+        <seg>Hello it is me            # What a beautiful programming world!</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Next, another part of the configutaiton file, it's important because we can learn from it how to add</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062822Z" creationid="isVowel" creationdate="20200202T062822Z">
+        <seg>Next, another part of the configuration file, it's important because we can learn from it how to add</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>One shoud understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091717Z" creationid="isVowel" creationdate="20200202T091717Z">
+        <seg>One should understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Ring is a distruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091756Z" creationid="isVowel" creationdate="20200202T091756Z">
+        <seg>Ring is a disruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>So the Garabage Collector will manage these C pointers.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063717Z" creationid="isVowel" creationdate="20200202T063717Z">
+        <seg>So the Garbage Collector will manage these C pointers.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The best way to assesing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091821Z" creationid="isVowel" creationdate="20200202T091821Z">
+        <seg>The best way to assessing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The default type for constant is Number</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062746Z" creationid="isVowel" creationdate="20200202T062746Z">
+        <seg>The default type for constant is Number.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The library provideds classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T082913Z" creationid="isVowel" creationdate="20200202T082913Z">
+        <seg>The library provides classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intutively.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091811Z" creationid="isVowel" creationdate="20200202T091811Z">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intuitively.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>There are several innovations outthere with a clear commitment from its designer to simplicity, flexibility and learnability.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091734Z" creationid="isVowel" creationdate="20200202T091727Z">
+        <seg>There are several innovations out-there with a clear commitment from its designer to simplicity, flexibility and learn-ability.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>This is useful to separate the extension configuraition file to many files</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063659Z" creationid="isVowel" creationdate="20200202T063659Z">
+        <seg>This is useful to separate the extension configuration file to many files</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>To build th executable file for Windows, Linux or macOS</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T155709Z" creationid="isVowel" creationdate="20200202T155709Z">
+        <seg>To build the executable file for Windows, Linux or macOS</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>We can get paramters values using the next functions</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T154625Z" creationid="isVowel" creationdate="20200202T154625Z">
+        <seg>We can get parameters values using the next functions</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>We can see this configuration file as a complete example about using the code generator</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063453Z" creationid="isVowel" creationdate="20200202T063453Z">
+        <seg>We can see this configuration file as a complete example about using the code generator.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>You can determine the pointer name before the strucuture member name.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062212Z" creationid="isVowel" creationdate="20200202T062212Z">
+        <seg>You can determine the pointer name before the structure member name.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062947Z" creationid="isVowel" creationdate="20200202T062947Z">
+        <seg>Before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>filename.exe              (Will ge generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T155533Z" creationid="isVowel" creationdate="20200202T155533Z">
+        <seg>filename.exe              (Will be generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>if we are using C_CONSTANT_TYPE_POINTER   then we will need the second global variable</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063247Z" creationid="isVowel" creationdate="20200202T063052Z">
+        <seg>If we are using C_CONSTANT_TYPE_POINTER then we will need the second global variable</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>note:: the behaviour of this function can be changed by the Ring code</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T154517Z" creationid="isVowel" creationdate="20200202T154517Z">
+        <seg>note:: the behavior of this function can be changed by the Ring code</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>the screen but we can control it using the Mouse and/or the Keyborad</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T061048Z" creationid="isVowel" creationdate="20200202T061048Z">
+        <seg>the screen but we can control it using the Mouse and/or the Keyboard</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062708Z" creationid="isVowel" creationdate="20200202T062708Z">
+        <seg>Using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>when the code generator take this file as input</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062920Z" creationid="isVowel" creationdate="20200202T062920Z">
+        <seg>When the code generator take this file as input</seg>
+      </tuv>
+    </tu>
+<!-- Alternative translations -->
+  </body>
+</tmx>
diff --git a/docs/en/make.bat b/docs/en/make.bat
new file mode 100644 (file)
index 0000000..4872d3e
--- /dev/null
@@ -0,0 +1,263 @@
+@ECHO OFF
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+       set SPHINXBUILD=sphinx-build
+)
+set BUILDDIR=build
+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% target
+set I18NSPHINXOPTS=%SPHINXOPTS% target
+if NOT "%PAPER%" == "" (
+       set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+       set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+       :help
+       echo.Please use `make ^<target^>` where ^<target^> is one of
+       echo.  html       to make standalone HTML files
+       echo.  dirhtml    to make HTML files named index.html in directories
+       echo.  singlehtml to make a single large HTML file
+       echo.  pickle     to make pickle files
+       echo.  json       to make JSON files
+       echo.  htmlhelp   to make HTML files and a HTML help project
+       echo.  qthelp     to make HTML files and a qthelp project
+       echo.  devhelp    to make HTML files and a Devhelp project
+       echo.  epub       to make an epub
+       echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
+       echo.  text       to make text files
+       echo.  man        to make manual pages
+       echo.  texinfo    to make Texinfo files
+       echo.  gettext    to make PO message catalogs
+       echo.  changes    to make an overview over all changed/added/deprecated items
+       echo.  xml        to make Docutils-native XML files
+       echo.  pseudoxml  to make pseudoxml-XML files for display purposes
+       echo.  linkcheck  to check all external links for integrity
+       echo.  doctest    to run all doctests embedded in the documentation if enabled
+       echo.  coverage   to run coverage check of the documentation if enabled
+       goto end
+)
+
+if "%1" == "clean" (
+       for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
+       del /q /s %BUILDDIR%\*
+       goto end
+)
+
+
+REM Check if sphinx-build is available and fallback to Python version if any
+%SPHINXBUILD% 2> nul
+if errorlevel 9009 goto sphinx_python
+goto sphinx_ok
+
+:sphinx_python
+
+set SPHINXBUILD=python -m sphinx.__init__
+%SPHINXBUILD% 2> nul
+if errorlevel 9009 (
+       echo.
+       echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+       echo.installed, then set the SPHINXBUILD environment variable to point
+       echo.to the full path of the 'sphinx-build' executable. Alternatively you
+       echo.may add the Sphinx directory to PATH.
+       echo.
+       echo.If you don't have Sphinx installed, grab it from
+       echo.http://sphinx-doc.org/
+       exit /b 1
+)
+
+:sphinx_ok
+
+
+if "%1" == "html" (
+       %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html 
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The HTML pages are in %BUILDDIR%/html.
+       goto end
+)
+
+if "%1" == "dirhtml" (
+       %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
+       goto end
+)
+
+if "%1" == "singlehtml" (
+       %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
+       goto end
+)
+
+if "%1" == "pickle" (
+       %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can process the pickle files.
+       goto end
+)
+
+if "%1" == "json" (
+       %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can process the JSON files.
+       goto end
+)
+
+if "%1" == "htmlhelp" (
+       %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in %BUILDDIR%/htmlhelp.
+       goto end
+)
+
+if "%1" == "qthelp" (
+       %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in %BUILDDIR%/qthelp, like this:
+       echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Ring.qhcp
+       echo.To view the help file:
+       echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Ring.ghc
+       goto end
+)
+
+if "%1" == "devhelp" (
+       %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished.
+       goto end
+)
+
+if "%1" == "epub" (
+       %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The epub file is in %BUILDDIR%/epub.
+       goto end
+)
+
+if "%1" == "latex" (
+       %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
+       goto end
+)
+
+if "%1" == "latexpdf" (
+       %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+       cd %BUILDDIR%/latex
+       make all-pdf
+       cd %~dp0
+       echo.
+       echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+       goto end
+)
+
+if "%1" == "latexpdfja" (
+       %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+       cd %BUILDDIR%/latex
+       make all-pdf-ja
+       cd %~dp0
+       echo.
+       echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+       goto end
+)
+
+if "%1" == "text" (
+       %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The text files are in %BUILDDIR%/text.
+       goto end
+)
+
+if "%1" == "man" (
+       %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The manual pages are in %BUILDDIR%/man.
+       goto end
+)
+
+if "%1" == "texinfo" (
+       %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
+       goto end
+)
+
+if "%1" == "gettext" (
+       %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
+       goto end
+)
+
+if "%1" == "changes" (
+       %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.The overview file is in %BUILDDIR%/changes.
+       goto end
+)
+
+if "%1" == "linkcheck" (
+       %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Link check complete; look for any errors in the above output ^
+or in %BUILDDIR%/linkcheck/output.txt.
+       goto end
+)
+
+if "%1" == "doctest" (
+       %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Testing of doctests in the sources finished, look at the ^
+results in %BUILDDIR%/doctest/output.txt.
+       goto end
+)
+
+if "%1" == "coverage" (
+       %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Testing of coverage in the sources finished, look at the ^
+results in %BUILDDIR%/coverage/python.txt.
+       goto end
+)
+
+if "%1" == "xml" (
+       %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The XML files are in %BUILDDIR%/xml.
+       goto end
+)
+
+if "%1" == "pseudoxml" (
+       %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
+       goto end
+)
+
+:end
diff --git a/docs/en/omegat.project b/docs/en/omegat.project
new file mode 100644 (file)
index 0000000..3ddce23
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<omegat>
+    <project version="1.0">
+        <source_dir>__DEFAULT__</source_dir>
+        <source_dir_excludes>
+            <mask>**/.svn/**</mask>
+            <mask>**/CVS/**</mask>
+            <mask>**/.cvs/**</mask>
+            <mask>**/desktop.ini</mask>
+            <mask>**/Thumbs.db</mask>
+            <mask>**/.DS_Store</mask>
+        </source_dir_excludes>
+        <target_dir>__DEFAULT__</target_dir>
+        <tm_dir>__DEFAULT__</tm_dir>
+        <glossary_dir>__DEFAULT__</glossary_dir>
+        <glossary_file>__DEFAULT__</glossary_file>
+        <dictionary_dir>__DEFAULT__</dictionary_dir>
+        <source_lang>EN</source_lang>
+        <target_lang>EN-US</target_lang>
+        <source_tok>org.omegat.tokenizer.LuceneEnglishTokenizer</source_tok>
+        <target_tok>org.omegat.tokenizer.LuceneEnglishTokenizer</target_tok>
+        <sentence_seg>true</sentence_seg>
+        <support_default_translations>true</support_default_translations>
+        <remove_tags>false</remove_tags>
+        <external_command></external_command>
+    </project>
+</omegat>
diff --git a/docs/en/omegat/ignored_words.txt b/docs/en/omegat/ignored_words.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/docs/en/omegat/last_entry.properties b/docs/en/omegat/last_entry.properties
new file mode 100644 (file)
index 0000000..304a6d1
--- /dev/null
@@ -0,0 +1,4 @@
+#Mon Feb 03 09:26:27 JST 2020
+LAST_ENTRY_FILE=resources.txt
+LAST_ENTRY_SRC=..
+LAST_ENTRY_NUMBER=38330
diff --git a/docs/en/omegat/learned_words.txt b/docs/en/omegat/learned_words.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/docs/en/omegat/project_save.tmx b/docs/en/omegat/project_save.tmx
new file mode 100644 (file)
index 0000000..9ce73c3
--- /dev/null
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE tmx SYSTEM "tmx11.dtd">
+<tmx version="1.1">
+  <header creationtool="OmegaT" o-tmf="OmegaT TMX" adminlang="EN-US" datatype="plaintext" creationtoolversion="4.3.0_0_e0e1b4cc" segtype="sentence" srclang="EN"/>
+  <body>
+<!-- Default translations -->
+    <tu>
+      <tuv lang="EN">
+        <seg>(28) Form Designer - Nice Aliginment for Toolbox Icons.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T083007Z" creationid="isVowel" creationdate="20200202T083007Z">
+        <seg>(28) Form Designer - Nice Alignment for Toolbox Icons.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>* Error (E5) : The file type is not correct - the VM expect a ring object file</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200203T000111Z" creationid="isVowel" creationdate="20200203T000111Z">
+        <seg>* Error (E5) : The file type is not correct - the VM expect a Ring Object File</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>* In RingQt for Android, The Ring Object File (ringo) will be executed directly from resources.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200203T000448Z" creationid="isVowel" creationdate="20200203T000448Z">
+        <seg>* In RingQt for Android, The Ring Object File (*.ringo) will be executed directly from resources.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>* RingQt for Android : Better code for executing the ring object file (ringo)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200203T000433Z" creationid="isVowel" creationdate="20200203T000002Z">
+        <seg>* RingQt for Android : Better code for executing the Ring Object File (*.ringo)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>* Writen in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T090858Z" creationid="isVowel" creationdate="20200202T090858Z">
+        <seg>* Written in ANSI C (The code is generated + Looks identical to Handwritten Code)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>, IsVowel (Japan)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091657Z" creationid="isVowel" creationdate="20200202T091657Z">
+        <seg>, isVowel (Japan)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>After modifing the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063748Z" creationid="isVowel" creationdate="20200202T063748Z">
+        <seg>After modifying the configuration file, You will need to generate the code, You can learn from</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Also using Ring object file remove the loading time required for compiling the application.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200203T000410Z" creationid="isVowel" creationdate="20200203T000410Z">
+        <seg>Also using Ring Object File remove the loading time required for compiling the application.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>At first the Ring compiler will be used to generate the Ring object file (*.ringo)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200203T000042Z" creationid="isVowel" creationdate="20200203T000042Z">
+        <seg>At first the Ring compiler will be used to generate the Ring Object File (*.ringo)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Click on "Enviroment Variables..."</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200203T002236Z" creationid="isVowel" creationdate="20200203T002236Z">
+        <seg>Click on "Environment Variables..."</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only english.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091750Z" creationid="isVowel" creationdate="20200202T091750Z">
+        <seg>Even the language keywords can be overwritten to serve one's own keywords in any human language not only English.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Hello it is me            # What a beatiful programming world!</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091113Z" creationid="isVowel" creationdate="20200202T091113Z">
+        <seg>Hello it is me            # What a beautiful programming world!</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Next, another part of the configutaiton file, it's important because we can learn from it how to add</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062822Z" creationid="isVowel" creationdate="20200202T062822Z">
+        <seg>Next, another part of the configuration file, it's important because we can learn from it how to add</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>One shoud understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091717Z" creationid="isVowel" creationdate="20200202T091717Z">
+        <seg>One should understand its foundation before she can shape an opinion worth considering.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>Ring is a distruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091756Z" creationid="isVowel" creationdate="20200202T091756Z">
+        <seg>Ring is a disruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>So the Garabage Collector will manage these C pointers.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063717Z" creationid="isVowel" creationdate="20200202T063717Z">
+        <seg>So the Garbage Collector will manage these C pointers.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The best way to assesing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091821Z" creationid="isVowel" creationdate="20200202T091821Z">
+        <seg>The best way to assessing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The default type for constant is Number</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062746Z" creationid="isVowel" creationdate="20200202T062746Z">
+        <seg>The default type for constant is Number.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The library provideds classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T082913Z" creationid="isVowel" creationdate="20200202T082913Z">
+        <seg>The library provides classes for Lists and String where the index starts from 0.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intutively.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091811Z" creationid="isVowel" creationdate="20200202T091811Z">
+        <seg>The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intuitively.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>There are several innovations outthere with a clear commitment from its designer to simplicity, flexibility and learnability.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T091734Z" creationid="isVowel" creationdate="20200202T091727Z">
+        <seg>There are several innovations out-there with a clear commitment from its designer to simplicity, flexibility and learn-ability.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>This is useful to separate the extension configuraition file to many files</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063659Z" creationid="isVowel" creationdate="20200202T063659Z">
+        <seg>This is useful to separate the extension configuration file to many files</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>To build th executable file for Windows, Linux or macOS</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T155709Z" creationid="isVowel" creationdate="20200202T155709Z">
+        <seg>To build the executable file for Windows, Linux or macOS</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>We can get paramters values using the next functions</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T154625Z" creationid="isVowel" creationdate="20200202T154625Z">
+        <seg>We can get parameters values using the next functions</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>We can see this configuration file as a complete example about using the code generator</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063453Z" creationid="isVowel" creationdate="20200202T063453Z">
+        <seg>We can see this configuration file as a complete example about using the code generator.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>You can determine the pointer name before the strucuture member name.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062212Z" creationid="isVowel" creationdate="20200202T062212Z">
+        <seg>You can determine the pointer name before the structure member name.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062947Z" creationid="isVowel" creationdate="20200202T062947Z">
+        <seg>Before using &lt;constant&gt; and &lt;/constant&gt; we can use &lt;runcode&gt; and &lt;/runcode&gt;</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>filename.exe              (Will ge generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T155533Z" creationid="isVowel" creationdate="20200202T155533Z">
+        <seg>filename.exe              (Will be generated by the Visual C/C++ Linker)</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>if we are using C_CONSTANT_TYPE_POINTER   then we will need the second global variable</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T063247Z" creationid="isVowel" creationdate="20200202T063052Z">
+        <seg>If we are using C_CONSTANT_TYPE_POINTER then we will need the second global variable</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>note:: the behaviour of this function can be changed by the Ring code</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T154517Z" creationid="isVowel" creationdate="20200202T154517Z">
+        <seg>note:: the behavior of this function can be changed by the Ring code</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>the screen but we can control it using the Mouse and/or the Keyborad</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T061048Z" creationid="isVowel" creationdate="20200202T061048Z">
+        <seg>the screen but we can control it using the Mouse and/or the Keyboard</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>then call the ring_state_runcode() function to execut Ring code using the same state.</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T160607Z" creationid="isVowel" creationdate="20200202T160607Z">
+        <seg>then call the ring_state_runcode() function to execute Ring code using the same state.</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062708Z" creationid="isVowel" creationdate="20200202T062708Z">
+        <seg>Using &lt;filter&gt; and &lt;/filter&gt; we can include/exclude parts of the configuration file</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>when the code generator take this file as input</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200202T062920Z" creationid="isVowel" creationdate="20200202T062920Z">
+        <seg>When the code generator take this file as input</seg>
+      </tuv>
+    </tu>
+    <tu>
+      <tuv lang="EN">
+        <seg>you get one Ring object file for the complete project (many source code files).</seg>
+      </tuv>
+      <tuv lang="EN-US" changeid="isVowel" changedate="20200203T000326Z" creationid="isVowel" creationdate="20200203T000326Z">
+        <seg>you get one Ring Object File for the complete project (many source code files).</seg>
+      </tuv>
+    </tu>
+<!-- Alternative translations -->
+  </body>
+</tmx>
diff --git a/docs/en/omegat/project_stats.txt b/docs/en/omegat/project_stats.txt
new file mode 100644 (file)
index 0000000..98a1b34
--- /dev/null
@@ -0,0 +1,138 @@
+20/02/03 9:26
+プロジェクトの翻訳状況
+
+                 分節数        単語数    文字数(空白を除く)  文字数(空白を含む)  ファイル数 
+合計:              86629   303980     2321198         2561373        125   
+未翻訳:           86592   303493     2318704         2558421        125   
+繰り返しを除いた:    33798   171200     1167666         1311349        125   
+繰り返しを除いた未翻訳:   33763   170734     1165282         1308526        125   
+
+
+ファイルごとの翻訳状況:
+
+ファイル名                                すべての分節数   未翻訳分節数      繰り返しを除いた分節数       繰り返しを除いた未翻訳分節数      すべての単語数   未翻訳単語数      繰り返しを除いた単語数       繰り返しを除いた未翻訳単語数      すべての文字数(空白を除く)      未翻訳文字数(空白を除く) 繰り返しを除いた文字数(空白を除く)  繰り返しを除いた未翻訳文字数(空白を除く) すべての文字数(空白を含む)      未翻訳文字数(空白を含む) 繰り返しを除いた文字数(空白を含む)  繰り返しを除いた未翻訳文字数(空白を含む) 
+allegro.txt                        412    411          238                237     1165   1151          886                872            8865           8809                 6665                       6609             9641           9573                 7322                       7254   
+bignumber.txt                      136    136           83                 83      381    381          309                309            2927           2927                 2218                       2218             3469           3469                 2664                       2664   
+checkandconvert.txt                423    423          200                200     1259   1259         1088               1088            7555           7555                 5657                       5657             8586           8586                 6640                       6640   
+codeeditors.txt                    111    111           72                 72      377    377          345                345            2424           2424                 2065                       2065             2710           2710                 2334                       2334   
+codegenerator.txt                 1132   1121          831                820     3968   3834         3674               3540           29514          28829                26410                      25725            32082          31276                28840                      28034   
+compiler.txt                      1153   1153          463                463     2365   2365         1066               1066           15133          15133                 5433                       5433            18324          18324                 6740                       6740   
+contribute.txt                      91     91           60                 60      374    374          363                363            2470           2470                 2201                       2201             2720           2720                 2451                       2451   
+controlstructures.txt              332    332          147                147      993    993          757                757            5066           5066                 3479                       3479             5944           5944                 4225                       4225   
+controlstructures2.txt             173    173           44                 44      439    439          218                218            2402           2402                 1083                       1083             2770           2770                 1315                       1315   
+controlstructures3.txt             228    228           56                 56      551    551          245                245            3215           3215                 1312                       1312             3636           3636                 1548                       1548   
+dateandtime.txt                    213    213          127                127      619    619          554                554            3991           3991                 3247                       3247             4566           4566                 3805                       3805   
+debug.txt                          182    182           81                 81      574    574          401                401            3460           3460                 2191                       2191             3929           3929                 2525                       2525   
+declarative.txt                    277    277          137                137      986    986          799                799            5337           5337                 4130                       4130             6159           6159                 4840                       4840   
+demo.txt                           157    157           73                 73      366    366          242                242            1728           1728                 1122                       1122             2003           2003                 1338                       1338   
+deployincloud.txt                  137    137           83                 83      638    638          595                595            3897           3897                 3375                       3375             4411           4411                 3871                       3871   
+distribute.txt                      87     87           53                 53      439    439          416                416            2766           2766                 2378                       2378             3124           3124                 2728                       2728   
+distribute_ring2exe.txt            429    426          285                282     2315   2280         2048               2013           14451          14284                12341                      12174            16390          16190                14090                      13890   
+embedding.txt                      124    123           64                 63      538    525          459                446            3417           3344                 2764                       2691             3845           3760                 3163                       3078   
+evaldebug.txt                      148    148           57                 57      432    432          338                338            2318           2318                 1635                       1635             2627           2627                 1912                       1912   
+extension.txt                      600    598          380                378     2380   2358         2198               2176           18129          18028                15909                      15808            20192          20071                17859                      17738   
+extension_tutorial.txt            1376   1376          300                300     3760   3760         1697               1697           20986          20986                 9743                       9743            23567          23567                11043                      11043   
+faq.txt                           1651   1651         1057               1057     9768   9768         9099               9099           53201          53201                47132                      47132            61580          61580                55181                      55181   
+files.txt                          538    538          270                270     1534   1534         1287               1287            9567           9567                 7224                       7224            10652          10652                 8225                       8225   
+formdesigner.txt                   145    145           92                 92      640    640          618                618            3716           3716                 3305                       3305             4273           4273                 3855                       3855   
+foxringfuncsdoc.txt                922    922          510                510     3153   3153         2884               2884           31132          31132                20315                      20315            34133          34133                23103                      23103   
+fp.txt                             227    227          113                113      628    628          491                491            3478           3478                 2574                       2574             3958           3958                 3000                       3000   
+functions.txt                      159    159           79                 79      599    599          520                520            3635           3635                 2939                       2939             4135           4135                 3401                       3401   
+functions2.txt                     166    166           29                 29      602    602          159                159            3641           3641                  830                        830             4138           4138                  977                        977   
+functions3.txt                     174    174           31                 31      602    602          162                162            3808           3808                  903                        903             4304           4304                 1053                       1053   
+gameengine.txt                    2148   2148          782                782     6202   6202         3588               3588           42849          42849                22038                      22038            47830          47830                24885                      24885   
+gameengineandorid.txt               74     74           45                 45      358    358          337                337            2327           2327                 2011                       2011             2570           2570                 2245                       2245   
+generalinfo.txt                    167    167          125                125     1397   1397         1374               1374            7161           7161                 6883                       6883             8439           8439                 8155                       8155   
+getinput.txt                        77     77           25                 25      197    197          124                124            1190           1190                  690                        690             1361           1361                  811                        811   
+getting_started.txt                149    149           63                 63      489    489          411                411            2830           2830                 2113                       2113             3268           3268                 2515                       2515   
+getting_started2.txt               117    117           22                 22      424    424          130                130            2505           2505                  740                        740             2899           2899                  870                        870   
+getting_started3.txt               134    134           36                 36      490    490          239                239            3076           3076                 1412                       1412             3491           3491                 1616                       1616   
+goldmagic800.txt                    76     76           52                 52      499    499          487                487            2486           2486                 2281                       2281             2900           2900                 2690                       2690   
+index.txt                          148    148          144                144      640    640          637                637            5140           5140                 5088                       5088             5657           5657                 5603                       5603   
+introduction.txt                   251    250          226                225     1733   1720         1725               1712            9850           9784                 9666                       9600            11468          11388                11283                      11203   
+languagedesign.txt                 463    462          258                257     2180   2171         1844               1835           12533          12489                 9536                       9492            14556          14504                11270                      11218   
+libcurl.txt                        151    151           92                 92      513    513          440                440            4422           4422                 3590                       3590             4806           4806                 3949                       3949   
+libsdl.txt                         322    322          129                129      827    827          450                450            7671           7671                 3857                       3857             8111           8111                 4138                       4138   
+libuv.txt                          426    426          177                177     1103   1103          641                641            8405           8405                 4829                       4829             9213           9213                 5324                       5324   
+lists.txt                          553    553          289                289     1798   1798         1523               1523           10551          10551                 8133                       8133            12054          12054                 9530                       9530   
+lowlevel.txt                      1137   1137          508                508     3144   3144         2072               2072           21847          21847                13642                      13642            24369          24369                15385                      15385   
+mathfunc.txt                       288    288          201                201     1096   1096         1012               1012            6125           6125                 5233                       5233             7009           7009                 6080                       6080   
+metaprog.txt                       930    930          369                369     2493   2493         1793               1793           15528          15528                10848                      10848            17326          17326                12348                      12348   
+multilanguage.txt                   85     85           62                 62      402    402          392                392            3040           3040                 2827                       2827             3373           3373                 3157                       3157   
+mysql.txt                          486    486          219                219     1460   1460         1088               1088           10194          10194                 7080                       7080            11206          11206                 7909                       7909   
+natural.txt                        488    488          167                167     1493   1493          862                862            8759           8759                 4807                       4807             9991           9991                 5584                       5584   
+naturallibrary.txt                 341    341          185                185     1099   1099          897                897            7379           7379                 5700                       5700             8207           8207                 6416                       6416   
+odbc.txt                           459    459          224                224     1574   1574         1190               1190           10767          10767                 7519                       7519            12026          12026                 8548                       8548   
+oop.txt                            863    863          431                431     2890   2890         2276               2276           16065          16065                11821                      11821            18578          18578                13995                      13995   
+operators.txt                      205    205          107                107      504    504          452                452            7592           7592                 3323                       3323             9079           9079                 4710                       4710   
+performancetips.txt                238    238           92                 92      756    756          444                444            4494           4494                 2507                       2507             5151           5151                 2894                       2894   
+postgresql.txt                     374    374          268                268     1479   1479         1273               1273           10879          10879                 9325                       9325            11841          11841                10184                      10184   
+programstructure.txt               119    119           61                 61      433    433          392                392            2742           2742                 2209                       2209             3111           3111                 2566                       2566   
+qt.txt                            3939   3939         1984               1984     9789   9789         7291               7291           77749          77749                55524                      55524            83766          83766                60215                      60215   
+qt3d.txt                          1335   1335          437                437     3912   3912         1619               1619           39462          39462                15005                      15005            41526          41526                15896                      15896   
+qtclassesdoc.txt                  9242   9242         6617               6617    36446  36446        30419              30419          295618         295618               243762                     243762           322390         322390               266041                     266041   
+qtmobile.txt                       151    151           82                 82      785    785          686                686            4756           4756                 3857                       3857             5407           5407                 4450                       4450   
+reference.txt                      490    489          398                397     2179   2164         2135               2120           20457          20396                14958                      14897            25092          25014                19592                      19514   
+resources.txt                       48     48           27                 27      162    162          149                149            1247           1247                 1039                       1039             1341           1341                 1132                       1132   
+ringallegrofuncsdoc.txt            635    635          631                631     4151   4151         4150               4150           37518          37518                37447                      37447            40863          40863                40792                      40792   
+ringapps.txt                       504    497          402                395     3629   3499         3526               3396           20139          19442                19011                      18314            23359          22538                22174                      21353   
+ringbeep.txt                        68     68           29                 29      221    221          163                163            1482           1482                  991                        991             1642           1642                 1115                       1115   
+ringconsolecolorsfuncsdoc.txt       41     41           37                 37       50     50           49                 49             681            681                  598                        598              726            726                  643                        643   
+ringemb.txt                        282    282          165                165      983    983          870                870            6585           6585                 5462                       5462             7332           7332                 6151                       6151   
+ringfreeglutfuncsdoc.txt           287    287          283                283      697    697          696                696            7395           7395                 7322                       7322             7990           7990                 7917                       7917   
+ringlibcurlfuncsdoc.txt            284    284          280                280      534    534          533                533            7888           7888                 7817                       7817             8420           8420                 8349                       8349   
+ringlibsdlfuncsdoc.txt             874    874          870                870     3666   3666         3665               3665           33554          33554                33485                      33485            36275          36275                36206                      36206   
+ringlibuvfuncsdoc.txt              285    285          281                281     2295   2295         2294               2294           17053          17053                16986                      16986            19066          19066                18999                      18999   
+ringlibzipfuncsdoc.txt              18     18           14                 14       74     74           73                 73             634            634                  565                        565              698            698                  629                        629   
+ringmurmurhashfuncsdoc.txt          51     51           31                 31      294    294          286                286            2002           2002                 1787                       1787             2234           2234                 2018                       2018   
+ringnotepad.txt                    245    245          124                124     1125   1125          989                989            6262           6262                 4961                       4961             7217           7217                 5837                       5837   
+ringopengl11funcsdoc.txt           876    876          826                826     2996   2996         2708               2708           24391          24391                22263                      22263            26980          26980                24610                      24610   
+ringopengl12funcsdoc.txt           916    916           42                 42     3085   3085          101                101           25312          25312                 1019                       1019            27941          27941                 1069                       1069   
+ringopengl13funcsdoc.txt          1012   1012           98                 98     3195   3195          122                122           27064          27064                 1850                       1850            29789          29789                 1956                       1956   
+ringopengl14funcsdoc.txt          1051   1051           41                 41     3234   3234           51                 51           27961          27961                  995                        995            30725          30725                 1044                       1044   
+ringopengl15funcsdoc.txt          1101   1101           52                 52     3290   3290           68                 68           29023          29023                 1160                       1160            31837          31837                 1220                       1220   
+ringopengl20funcsdoc.txt          1185   1185           86                 86     3379   3379          101                101           30746          30746                 1821                       1821            33644          33644                 1915                       1915   
+ringopengl21funcsdoc.txt          1465   1465          548                548     5674   5674         4417               4417           48141          48141                30969                      30969            52286          52286                34071                      34071   
+ringopengl30funcsdoc.txt          1570   1570          107                107     5808   5808          146                146           50445          50445                 2402                       2402            54695          54695                 2517                       2517   
+ringopengl31funcsdoc.txt          1604   1604           36                 36     5854   5854           58                 58           51154          51154                  807                        807            55438          55438                  851                        851   
+ringopengl32funcsdoc.txt          1626   1626           24                 24     5876   5876           34                 34           51799          51799                  743                        743            56105          56105                  775                        775   
+ringopengl33funcsdoc.txt          1627   1627            3                  3     5878   5878           14                 14           51813          51813                  112                        112            56120          56120                  123                        123   
+ringopengl40funcsdoc.txt          1640   1640           15                 15     5891   5891           25                 25           52225          52225                  510                        510            56545          56545                  533                        533   
+ringopengl41funcsdoc.txt          1640   1640            2                  2     5891   5891           12                 12           52225          52225                   98                         98            56545          56545                  108                        108   
+ringopengl42funcsdoc.txt          1648   1648           10                 10     5899   5899           20                 20           52480          52480                  353                        353            56808          56808                  371                        371   
+ringopengl43funcsdoc.txt          1650   1650            4                  4     5901   5901           14                 14           52541          52541                  159                        159            56871          56871                  171                        171   
+ringopengl44funcsdoc.txt          1653   1653            5                  5     5904   5904           15                 15           52638          52638                  195                        195            56971          56971                  208                        208   
+ringopengl45funcsdoc.txt          1654   1654            3                  3     5905   5905           13                 13           52672          52672                  132                        132            57006          57006                  143                        143   
+ringopengl46funcsdoc.txt          1675   1675           23                 23     5926   5926           33                 33           53265          53265                  691                        691            57620          57620                  722                        722   
+ringpm.txt                         498    498          300                300     1624   1624         1457               1457           12502          12502                10495                      10495            13921          13921                11811                      11811   
+ringqtobjects.txt                  168    168          117                117      921    921          877                877            6303           6303                 5769                       5769             7031           7031                 6475                       6475   
+ringraylib.txt                    1811   1811         1208               1208     7173   7173         6206               6206           53827          53827                45662                      45662            58993          58993                50350                      50350   
+ringzip.txt                        143    143           70                 70      347    347          282                282            3022           3022                 1853                       1853             3217           3217                 2026                       2026   
+scope.txt                          749    749          323                323     3686   3686         3059               3059           19283          19283                15133                      15133            22652          22652                18064                      18064   
+scope2.txt                         151    151           67                 67      622    622          512                512            3601           3601                 2538                       2538             4133           4133                 3015                       3015   
+secfunc.txt                        308    308          160                160      912    912          752                752            7520           7520                 6038                       6038             8321           8321                 6740                       6740   
+sourcecode.txt                     570    569          105                104     1286   1282          417                413            9761           9730                 2706                       2675            10485          10451                 2987                       2953   
+sqlite.txt                         115    115           42                 42      228    228          144                144            1688           1688                 1003                       1003             1876           1876                 1111                       1111   
+stdlib.txt                        1123   1123          454                454     2664   2664         2081               2081           19174          19174                12988                      12988            20954          20954                14576                      14576   
+stdlibclasses.txt                 1298   1298          636                636     4210   4210         3123               3123           30879          30879                18523                      18523            34110          34110                21171                      21171   
+strings.txt                        377    377          171                171     1095   1095          890                890            6579           6579                 4766                       4766             7442           7442                 5535                       5535   
+syntaxflexibility.txt              511    511          210                210     1555   1555         1167               1167            9527           9527                 6575                       6575            10843          10843                 7657                       7657   
+systemfunc.txt                     341    341          154                154     1002   1002          853                853            6656           6656                 5073                       5073             7533           7533                 5909                       5909   
+typehints.txt                      109    109           61                 61      327    327          282                282            1873           1873                 1423                       1423             2141           2141                 1665                       1665   
+usingopengl.txt                   1872   1872          546                546     5156   5156         1929               1929           37854          37854                13170                      13170            41713          41713                14730                      14730   
+usingopengl2.txt                   927    927          379                379     2726   2726         1378               1378           20720          20720                 8781                       8781            22472          22472                 9754                       9754   
+variables.txt                       88     88           50                 50      408    408          368                368            2135           2135                 1869                       1869             2509           2509                 2217                       2217   
+web.txt                           2043   2043         1029               1029     6370   6370         4979               4979           47718          47718                35517                      35517            52695          52695                39764                      39764   
+whatisnew.txt                      462    460          127                125     1872   1844         1083               1055           11063          10919                 5683                       5539            12667          12497                 6679                       6509   
+whatisnew10.txt                    176    176           90                 90      799    799          663                663            4705           4705                 3338                       3338             5443           5443                 3958                       3958   
+whatisnew11.txt                    429    429          251                251     1484   1484         1208               1208            9411           9411                 7116                       7116            10640          10640                 8209                       8209   
+whatisnew12.txt                    281    280          109                108     1105   1093          673                661            7165           7101                 4057                       3993             8103           8026                 4654                       4577   
+whatisnew2.txt                     277    277          104                104     1168   1168          758                758            7179           7179                 4098                       4098             8111           8111                 4756                       4756   
+whatisnew3.txt                     374    374          132                132     1261   1261          692                692            7947           7947                 3846                       3846             8900           8900                 4450                       4450   
+whatisnew4.txt                     389    389          127                127     1350   1350          677                677            8158           8158                 3869                       3869             9257           9257                 4453                       4453   
+whatisnew5.txt                    1673   1673          256                256     5238   5238         1561               1561           37230          37230                 9357                       9357            41682          41682                10860                      10860   
+whatisnew6.txt                     347    347          157                157     1443   1443         1040               1040            8256           8256                 5514                       5514             9525           9525                 6484                       6484   
+whatisnew7.txt                     359    359           89                 89     1238   1238          517                517            7884           7884                 2980                       2980             8857           8857                 3432                       3432   
+whatisnew8.txt                     472    471          123                122     1707   1692          954                939            9418           9338                 4738                       4658            10815          10720                 5597                       5502   
+whatisnew9.txt                     492    489          131                130     1833   1804          876                868           11855          11698                 5020                       4973            13680          13496                 5833                       5778   
+zerolib.txt                        152    151           29                 28      474    460          186                172            3292           3224                 1024                        956             3624           3543                 1156                       1075   
diff --git a/docs/en/pygments_lexer/ring.py b/docs/en/pygments_lexer/ring.py
new file mode 100644 (file)
index 0000000..164eacd
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+"""
+    pygments.lexers.ring
+    ~~~~~~~~~~~~~~~~~~~~~~
+
+    Lexer for the Ring language.
+
+    :copyright: Copyright 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+"""
+
+import re
+
+from pygments.lexer import RegexLexer, include, default
+from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
+    Number, Punctuation, Error
+
+__all__ = ['RingLexer']
+
+
+class RingLexer(RegexLexer):
+    """
+    For `Ring <http://Ring-code.org/>`_ source code.
+
+    .. versionadded:: 1.5
+    """
+
+    name = 'Ring'
+    aliases = ['ring', 'ring']
+    filenames = ['*.ring', '*.rh']
+    mimetypes = ['text/x-ring']
+
+    flags = re.MULTILINE | re.IGNORECASE | re.UNICODE
+
+    def underscorize(words):
+        newWords = []
+        new = ""
+        for word in words:
+            for ch in word:
+                new += (ch + "_?")
+            newWords.append(new)
+            new = ""
+        return "|".join(newWords)
+
+    keywords = [
+               'again','and','but','bye','call','case','catch','class','def','do','done',
+               'else','elseif','end','exit','for','from','func','get','give','if','import',
+               'in','load','loop','new','next','not','off','ok','on','or','other','package'
+               'private','put','return','see','step','switch','to','try','while','changeringkeyword',
+               'changeringoperator','loadsyntax','endfunc','endclass','endpackage'
+    ]
+
+    keywordsPseudo = [
+        'null', 'true', 'false'
+    ]
+
+    opWords = [
+        'and', 'or', 'not'
+    ]
+
+    types = [
+        'list', 'string', 'stack', 'queue', 'tree', 'hashtable'
+       ]
+
+    tokens = {
+        'root': [
+            (r'##.*$', String.Doc),
+            (r'#.*$', Comment),
+            (r'[*=><+\-/@$~&%!?|\\\[\]]', Operator),
+            (r'\.\.|\.|,|\[\.|\.\]|\{\.|\.\}|\(\.|\.\)|\{|\}|\(|\)|:|\^|`|;',
+             Punctuation),
+
+            # Strings
+            (r'(?:[\w]+)"', String, 'rdqs'),
+            (r'"""', String, 'tdqs'),
+            ('"', String, 'dqs'),
+
+            # Char
+            ("'", String.Char, 'chars'),
+
+            # Keywords
+            (r'(%s)\b' % underscorize(opWords), Operator.Word),
+            (r'(p_?r_?o_?c_?\s)(?![(\[\]])', Keyword, 'funcname'),
+            (r'(%s)\b' % underscorize(keywords), Keyword),
+            (r'(%s)\b' % underscorize(['from', 'import', 'include']),
+             Keyword.Namespace),
+            (r'(v_?a_?r)\b', Keyword.Declaration),
+            (r'(%s)\b' % underscorize(types), Keyword.Type),
+            (r'(%s)\b' % underscorize(keywordsPseudo), Keyword.Pseudo),
+            # Identifiers
+            (r'\b((?![_\d])\w)(((?!_)\w)|(_(?!_)\w))*', Name),
+            # Numbers
+            (r'[0-9][0-9_]*(?=([e.]|\'f(32|64)))',
+             Number.Float, ('float-suffix', 'float-number')),
+            (r'0x[a-f0-9][a-f0-9_]*', Number.Hex, 'int-suffix'),
+            (r'0b[01][01_]*', Number.Bin, 'int-suffix'),
+            (r'0o[0-7][0-7_]*', Number.Oct, 'int-suffix'),
+            (r'[0-9][0-9_]*', Number.Integer, 'int-suffix'),
+            # Whitespace
+            (r'\s+', Text),
+            (r'.+$', Error),
+        ],
+        'chars': [
+            (r'\\([\\abcefnrtvl"\']|x[a-f0-9]{2}|[0-9]{1,3})', String.Escape),
+            (r"'", String.Char, '#pop'),
+            (r".", String.Char)
+        ],
+        'strings': [
+            (r'(?<!\$)\$(\d+|#|\w+)+', String.Interpol),
+            (r'[^\\\'"$\n]+', String),
+            # quotes, dollars and backslashes must be parsed one at a time
+            (r'[\'"\\]', String),
+            # unhandled string formatting sign
+            (r'\$', String)
+            # newlines are an error (use "nl" state)
+        ],
+        'dqs': [
+            (r'\\([\\abcefnrtvl"\']|\n|x[a-f0-9]{2}|[0-9]{1,3})',
+             String.Escape),
+            (r'"', String, '#pop'),
+            include('strings')
+        ],
+        'rdqs': [
+            (r'"(?!")', String, '#pop'),
+            (r'""', String.Escape),
+            include('strings')
+        ],
+        'tdqs': [
+            (r'"""(?!")', String, '#pop'),
+            include('strings'),
+            include('nl')
+        ],
+        'funcname': [
+            (r'((?![\d_])\w)(((?!_)\w)|(_(?!_)\w))*', Name.Function, '#pop'),
+            (r'`.+`', Name.Function, '#pop')
+        ],
+        'nl': [
+            (r'\n', String)
+        ],
+        'float-number': [
+            (r'\.(?!\.)[0-9_]*', Number.Float),
+            (r'e[+-]?[0-9][0-9_]*', Number.Float),
+            default('#pop')
+        ],
+        'float-suffix': [
+            (r'\'f(32|64)', Number.Float),
+            default('#pop')
+        ],
+        'int-suffix': [
+            (r'\'i(32|64)', Number.Integer.Long),
+            (r'\'i(8|16)', Number.Integer),
+            default('#pop')
+        ],
+    }
diff --git a/docs/en/run.bat b/docs/en/run.bat
new file mode 100644 (file)
index 0000000..dcf7f53
--- /dev/null
@@ -0,0 +1,4 @@
+cd build\html
+start index.html
+cd..
+cd..
diff --git a/docs/en/source/BMI.png b/docs/en/source/BMI.png
new file mode 100644 (file)
index 0000000..179db0c
Binary files /dev/null and b/docs/en/source/BMI.png differ
diff --git a/docs/en/source/Fedora.png b/docs/en/source/Fedora.png
new file mode 100644 (file)
index 0000000..f6a5406
Binary files /dev/null and b/docs/en/source/Fedora.png differ
diff --git a/docs/en/source/Fedora2.png b/docs/en/source/Fedora2.png
new file mode 100644 (file)
index 0000000..32ddb4d
Binary files /dev/null and b/docs/en/source/Fedora2.png differ
diff --git a/docs/en/source/Fedora3.png b/docs/en/source/Fedora3.png
new file mode 100644 (file)
index 0000000..19b705e
Binary files /dev/null and b/docs/en/source/Fedora3.png differ
diff --git a/docs/en/source/allegro.txt b/docs/en/source/allegro.txt
new file mode 100644 (file)
index 0000000..34b5f8c
--- /dev/null
@@ -0,0 +1,494 @@
+.. index:: 
+       single: Graphics and Game Programming; Introduction
+
+===================================================
+Graphics and 2D Games programming using RingAllegro
+===================================================
+
+In this chapter we will learn how to use the allegro game programming library 
+in our Ring applications.
+
+We have the file gamelib.ring that load the DLL library that contains wrappers for the Allegro functions
+
+.. code-block:: ring
+
+       Load "allegro.rh"
+       if iswindows()
+               LoadLib("ring_allegro.dll")
+       but ismacosx()
+               LoadLib("libringallegro.dylib")
+       else
+               LoadLib("libringallegro.so")
+       ok
+
+The file gamelib.ring uses the Load instruction to execute the file allegro.rh which is a ring source
+code file contains constants to be used in our programs.
+Then using the function LoadLib() we can load the DLL library "ring_allegro.dll".
+
+To write portable code we can change the gamelib.ring to check the platform before 
+loading the DLL/So file.
+
+.. index:: 
+       pair: Graphics and Game Programming; Drawing, Animation and Input
+
+Drawing, Animation and Input
+============================
+
+The next example uses the Allegro library for drawing, moving objects on the screen and getting
+input from the keyboard and the mouse.
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)
+
+       al_show_native_message_box(display, "Hello", "Welcome",
+                               "Using Allegro from the Ring programming language", 
+                               "", 0);
+
+       al_clear_to_color(al_map_rgb(0,0,255))
+
+       BOUNCER_SIZE = 40
+       bouncer_x = 10
+       bouncer_y = 20
+       bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE)
+       al_set_target_bitmap(bouncer)
+       al_clear_to_color(al_map_rgb(255,0,255))
+
+       for x = 1 to 30
+               bouncer_x += x 
+               bouncer_y += x
+               al_set_target_bitmap(al_get_backbuffer(display))
+               al_clear_to_color(al_map_rgb(0,0,0))
+               al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0)
+               al_draw_bitmap(bouncer, 200+bouncer_x,200+ bouncer_y, 0)
+               al_flip_display()
+               al_rest(0.1)
+       next
+
+       al_clear_to_color(al_map_rgb(255,255,255))
+       image = al_load_bitmap("man2.jpg")
+       al_draw_bitmap(image,200,200,0)
+       al_flip_display()
+       al_rest(2)
+
+       event_queue = al_create_event_queue()
+       al_register_event_source(event_queue, al_get_display_event_source(display))
+
+       ev = al_new_allegro_event()
+       timeout = al_new_allegro_timeout()
+       al_init_timeout(timeout, 0.06)
+
+       FPS = 60
+       timer = al_create_timer(1.0 / FPS)
+       al_register_event_source(event_queue, al_get_timer_event_source(timer))
+       al_start_timer(timer)
+       redraw = true
+
+       SCREEN_W = 640
+       SCREEN_H = 480
+       BOUNCER_SIZE = 32
+       bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0
+       bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0
+       bouncer_dx = -4.0
+       bouncer_dy = 4.0
+
+       al_install_mouse()
+       al_register_event_source(event_queue, al_get_mouse_event_source())
+
+       al_install_keyboard()
+       al_register_event_source(event_queue, al_get_keyboard_event_source())
+
+       KEY_UP = 1
+       KEY_DOWN = 2
+       KEY_LEFT = 3
+       KEY_RIGHT = 4
+       Key = [false,false,false,false]
+
+       while true
+               al_init_timeout(timeout, 0.06)
+               al_wait_for_event_until(event_queue, ev, timeout)
+               switch al_get_allegro_event_type(ev)
+               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                       exit
+               on ALLEGRO_EVENT_TIMER
+                       
+                       # Animation
+                       if bouncer_x < 0 or bouncer_x > SCREEN_W - BOUNCER_SIZE
+                               bouncer_dx = -bouncer_dx
+                       ok
+        
+                       if bouncer_y < 0 or bouncer_y > SCREEN_H - BOUNCER_SIZE
+                               bouncer_dy = -bouncer_dy
+                       ok
+        
+                       bouncer_x += bouncer_dx
+                       bouncer_y += bouncer_dy
+                       
+                       # Keyboard
+                       if key[KEY_UP] and bouncer_y >= 4.0
+                               bouncer_y -= 4.0
+                       ok 
+                       if key[KEY_DOWN] and bouncer_y <= SCREEN_H - BOUNCER_SIZE - 4.0
+                               bouncer_y += 4.0
+                       ok 
+                       if key[KEY_LEFT] and bouncer_x >= 4.0
+                               bouncer_x -= 4.0
+                       ok 
+                       if key[KEY_RIGHT] and bouncer_x <= SCREEN_W - BOUNCER_SIZE - 4.0
+                               bouncer_x += 4.0
+                       ok
+        
+                       redraw = true
+                       
+               on ALLEGRO_EVENT_MOUSE_AXES
+                       bouncer_x = al_get_allegro_event_mouse_x(ev)
+                       bouncer_y = al_get_allegro_event_mouse_y(ev)
+               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                       bouncer_x = al_get_allegro_event_mouse_x(ev)
+                       bouncer_y = al_get_allegro_event_mouse_y(ev)
+               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                       exit
+               on ALLEGRO_EVENT_KEY_DOWN
+                       switch al_get_allegro_event_keyboard_keycode(ev)
+                               on ALLEGRO_KEY_UP
+                                       key[KEY_UP] = true
+                               on ALLEGRO_KEY_DOWN
+                                       key[KEY_DOWN] = true
+                               on ALLEGRO_KEY_LEFT
+                                       key[KEY_LEFT] = true
+                               on ALLEGRO_KEY_RIGHT
+                                       key[KEY_RIGHT] = true
+                       off
+               on ALLEGRO_EVENT_KEY_UP
+                       switch al_get_allegro_event_keyboard_keycode(ev)
+                               on ALLEGRO_KEY_UP
+                                       key[KEY_UP] = false
+                               on ALLEGRO_KEY_DOWN
+                                       key[KEY_DOWN] = false
+                               on ALLEGRO_KEY_LEFT
+                                       key[KEY_LEFT] = false
+                               on ALLEGRO_KEY_RIGHT
+                                       key[KEY_RIGHT] = false
+                               on ALLEGRO_KEY_ESCAPE
+                                       exit
+                       off
+               off
+               if redraw and al_is_event_queue_empty(event_queue)
+                       redraw = false          
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0)
+                       al_flip_display()
+               ok
+               callgc()
+       end
+
+       al_destroy_timer(timer)
+       al_destroy_allegro_event(ev)
+       al_destroy_allegro_timeout(timeout)
+       al_destroy_event_queue(event_queue)
+       al_destroy_bitmap(bouncer)
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+
+.. note:: In the previous example we used the function callgc() which is a Ring function to force calling the Garbage collector inside the While/End loop.
+
+Program Output:
+
+At first the program display a messagebox
+
+.. image:: ringalleg_shot1.jpg
+       :alt: Displaying a messagebox from our program
+
+Then we see two rectangles are moving on the screen
+
+.. image:: ringalleg_shot2.jpg
+       :alt: Animation - Moving two rectangles in the screen 
+
+Then we see an image displayed on the screen
+
+.. image:: ringalleg_shot3.jpg
+       :alt: Displaying an image on the screen
+
+Finally we have one rectangle, and we see it moving all of the time on
+the screen but we can control it using the Mouse and/or the Keyborad 
+
+.. image:: ringalleg_shot4.jpg
+       :alt: Animation and Getting Input from keyboard and the mouse to move the object
+
+.. index:: 
+       pair: Graphics and Game Programming; TrueType Fonts
+
+Using TrueType Fonts
+====================
+
+In this example we will see how to use TrueType Fonts *.ttf in our Games using Allegro
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_font_addon()
+       al_init_ttf_addon()
+
+       display = al_create_display(800,600)
+
+       al_clear_to_color(al_map_rgb(0,0,255))
+       font = al_load_ttf_font("pirulen.ttf",14,0 )
+       al_draw_text(font, al_map_rgb(255,255,255), 10, 10,ALLEGRO_ALIGN_LEFT,
+                "Welcome to the Ring programming language")
+       al_flip_display()
+       al_rest(2)
+
+       al_destroy_display(display)
+
+Screen Shot:
+
+.. image:: ringalleg_shot5.jpg
+       :alt: Using TrueType Fonts
+
+.. index:: 
+       pair: Graphics and Game Programming; Playing Sound
+
+Playing Sound Files
+===================
+
+The next example play a sound file
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_install_audio()
+       al_init_acodec_addon()
+       al_reserve_samples(1) 
+
+       sample = al_load_sample( "footstep.wav" )
+
+       sampleid = al_new_allegro_sample_id()
+       al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,sampleid)
+
+       display = al_create_display(640,480)
+       al_clear_to_color(al_map_rgb(0,0,255))
+       al_flip_display()
+       al_rest(10)
+
+       al_destroy_allegro_sample_id(sampleid)
+       al_destroy_sample(sample)
+       al_destroy_display(display)
+
+       al_exit()
+
+.. index:: 
+       pair: Graphics and Game Programming; Scaling and Rotating Images
+
+Scaling and Rotating Images
+===========================
+
+The next example display and rotate an image
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)
+       al_set_target_bitmap(al_get_backbuffer(display))
+       al_clear_to_color(al_map_rgb(255,255,255))
+
+       image = al_load_bitmap("man2.jpg")
+       al_draw_rotated_bitmap(image,0,0,250,250,150,0)
+       al_draw_scaled_bitmap(image,0,0,250,250,20,20,400,400,0)
+
+       al_flip_display()
+       al_rest(2)
+
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+Screen Shot:
+
+.. image:: ringalleg_shot6.jpg
+       :alt: Scaling and Rotating Images
+
+.. index:: 
+       pair: Graphics and Game Programming; Transparent Image
+
+Display Transparent Image
+=========================
+
+The next example display image with white background on another image
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)    
+       imageback = al_load_bitmap("palace.jpg")
+       al_draw_bitmap(imageback,0,0,0)
+
+       image = al_load_bitmap("man4.png")
+       al_convert_mask_to_alpha(image,al_map_rgb(255,255,255))
+       al_draw_bitmap(image,0,0,0)
+       al_flip_display()
+       al_rest(10)
+
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+Screen Shot:
+
+.. image:: ringalleg_shot7.jpg
+       :alt: Transparent Image
+
+.. index:: 
+       pair: Graphics and Game Programming; Threads
+
+Using Threads
+=============
+
+In this example we will learn how to use threads from the Allegro library
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       o1 = new mythreads 
+
+       Func Main
+               al_init()
+               for k = 1 to 5
+                       al_create_thread("o1.thread1()")
+                       al_create_thread("o1.thread2()")
+                       al_create_thread("o1.thread3()")
+               next
+               al_rest(2)
+
+       Class Mythreads
+
+               cAppName = "Threads Application"
+
+               Func Thread1
+                       for x = 1 to 5
+                               see x + nl      
+                       next
+                       See 'Thread(1) : Application Name : '  + cAppName + nl
+
+               Func Thread2
+                       for x = 1 to 5
+                               see '*****' + x + nl    
+                       next
+                       See 'Thread(2) : Application Name : '  + cAppName + nl
+
+               Func Thread3
+                       for x = 1 to 5
+                               see '!!!!' + x + nl     
+                       next
+                       See 'Thread(3) : Application Name : '  + cAppName + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****1
+       *****4
+       *****2
+       !!!!1
+       *****5
+       *****3
+       1
+       !!!!2
+       Thread(2) : Application Name : Threads Application
+       1
+       *****4
+       !!!!1
+       2
+       !!!!3
+       !!!!4
+       *****5
+       !!!!2
+       3
+       2
+       !!!!5
+       Thread(2) : Application Name : Threads Application
+       !!!!3
+       4
+       3
+       Thread(3) : Application Name : Threads Application
+       !!!!4
+       5
+       4
+       !!!!5
+       Thread(1) : Application Name : Threads Application
+       5
+       Thread(3) : Application Name : Threads Application
+       Thread(1) : Application Name : Threads Application
diff --git a/docs/en/source/analogclock.png b/docs/en/source/analogclock.png
new file mode 100644 (file)
index 0000000..261d19f
Binary files /dev/null and b/docs/en/source/analogclock.png differ
diff --git a/docs/en/source/asciitable.png b/docs/en/source/asciitable.png
new file mode 100644 (file)
index 0000000..747b1e8
Binary files /dev/null and b/docs/en/source/asciitable.png differ
diff --git a/docs/en/source/autocomplete.png b/docs/en/source/autocomplete.png
new file mode 100644 (file)
index 0000000..29ab605
Binary files /dev/null and b/docs/en/source/autocomplete.png differ
diff --git a/docs/en/source/bignumber.txt b/docs/en/source/bignumber.txt
new file mode 100644 (file)
index 0000000..f94beba
--- /dev/null
@@ -0,0 +1,163 @@
+.. index:: 
+       single: bignumber; Introduction
+
+=================
+BigNumber Library
+=================
+
+In this chapter we will learn about using the Big Number library in the Ring programming language.
+
+Developers : Bert Mariani, Gal Zsolt (~ CalmoSoft ~)
+
+.. index:: 
+       pair: bignumber; Loading the library
+
+Loading the library
+===================
+
+Before using the next function load the bignumber.ring library
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+       # Use Big Number library functions
+
+.. index:: 
+       pair: bignumber; Examples
+
+Examples
+========
+
+Using the BigNumber library we can do arithmetic operations on huge numbers.
+
+Example:
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+
+       num1 = "62345678901234567891678345123456789"    ### Big
+       num2 =  "1237894567890123419871236545"          ### Small
+       num3 =     "64"                                 ### Divide Small
+       num4 = "765432"                 
+       num5 =      "3"                                 ### Power            
+    
+       ? "Add big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 + a2                    a3.Print() ? nl
+
+       ? "Substract big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 - a2                    a3.Print() ? nl
+
+       ? "Multiply big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()      
+       a3 = a1 * a2                    a3.print() ? nl
+
+       ? "Divide big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+    
+       ? "Divide big numbers: by very small number" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num3)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+
+       ? "Power of big number:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num5)        a2.print()
+       a3 = a1 ^ a2                    a3.print() ? nl
+    
+Output:
+
+.. code-block:: none
+
+       Add big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       62345680139129135781801764994693334
+
+
+       Substract big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       52345687663340000001554925252220244
+
+
+       Multiply big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       77177377243260150103462178714197454736432472780119682305154005
+
+
+       Divide big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       50364288
+
+
+       Divide big numbers: by very small number
+       62345678901234567891678345123456789
+       64
+       974151232831790123307474142554012
+
+
+       Power of big number:
+       62345678901234567891678345123456789
+       3
+       242336636261471172092347146031727004 (Output continue in next line)
+       371698195628343934238988256152289508 (Output continue in next line)
+       493964611043228971692389860897069
+
+
+.. index:: 
+       pair: bignumber; BigNumber Functions
+
+BigNumber Functions
+===================
+
+The library contains the next functions
+
+.. code-block:: none
+
+       FuncAdd(num1,num2)
+       FuncSubtract(num1,num2)
+       FuncCompare(num1,num2)
+       FuncDivide(num1,num2)
+       FuncMultiply(num1,num2)
+       FuncPower(num1,num2)
+       FuncBinaryToDecimal(num1)
+       FuncDecimalToBinary(num1)
+       printBinaryDigits(binList)
+       printDecimalDigits(decList)
+
+.. index:: 
+       pair: bignumber; BigNumber Class
+
+BigNumber Class
+===============
+
+The library contains the next class
+
+.. code-block:: ring
+
+       class BigNumber 
+               func init aPara 
+               func operator cOperator, Para
+               func print 
+               func value
+
+.. index:: 
+       pair: bignumber; Library Source Code 
+
+Library Source Code
+===================
+
+You can see the library source code in : ring/ringlibs/bignumber folder
+
+Source Code : https://github.com/ring-lang/ring/blob/master/ringlibs/bignumber/bignumber.ring
+
diff --git a/docs/en/source/calcapp.jpg b/docs/en/source/calcapp.jpg
new file mode 100644 (file)
index 0000000..f48b4fc
Binary files /dev/null and b/docs/en/source/calcapp.jpg differ
diff --git a/docs/en/source/calendar.png b/docs/en/source/calendar.png
new file mode 100644 (file)
index 0000000..66c80eb
Binary files /dev/null and b/docs/en/source/calendar.png differ
diff --git a/docs/en/source/callstack.png b/docs/en/source/callstack.png
new file mode 100644 (file)
index 0000000..ac1d35b
Binary files /dev/null and b/docs/en/source/callstack.png differ
diff --git a/docs/en/source/cameraandbackground.png b/docs/en/source/cameraandbackground.png
new file mode 100644 (file)
index 0000000..28a847c
Binary files /dev/null and b/docs/en/source/cameraandbackground.png differ
diff --git a/docs/en/source/cardsmainmenu.png b/docs/en/source/cardsmainmenu.png
new file mode 100644 (file)
index 0000000..5009e83
Binary files /dev/null and b/docs/en/source/cardsmainmenu.png differ
diff --git a/docs/en/source/cardsqt.png b/docs/en/source/cardsqt.png
new file mode 100644 (file)
index 0000000..efdba1f
Binary files /dev/null and b/docs/en/source/cardsqt.png differ
diff --git a/docs/en/source/checkandconvert.txt b/docs/en/source/checkandconvert.txt
new file mode 100644 (file)
index 0000000..5bfabd8
--- /dev/null
@@ -0,0 +1,585 @@
+.. index:: 
+       single: Data Type; Introduction
+
+==============================
+Check Data Type and Conversion
+==============================
+
+In this chapter we are going to learn about the functions that can be used for
+
+* Checking Data Type
+* Checking Character
+* Conversion
+
+.. index:: 
+       pair: Data Type; Check Data Type
+
+Check Data Type
+===============
+
+The next functions can be used to check the data type
+
+* isstring()
+* isnumber()
+* islist()
+* type()
+* isnull()
+
+.. index:: 
+       pair: Data Type; IsString()
+
+IsString() Function
+===================
+
+Using the IsString() function we can know if the value is a string or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsString(value) ---> 1 if the value is a string or 0 if not     
+
+Example:
+
+.. code-block:: ring
+
+       see isstring(5) + nl +          # print 0
+           isstring("hello") + nl      # print 1
+
+.. index:: 
+       pair: Data Type; IsNumber()
+
+IsNumber() Function
+===================
+
+Using the IsNumber() function we can know if the value is a number or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsNumber(value) ---> 1 if the value is a number or 0 if not     
+
+Example:
+
+.. code-block:: ring
+
+       see isnumber(5) + nl +          # print 1
+           isnumber("hello") + nl      # print 0
+
+.. index:: 
+       pair: Data Type; IsList()
+
+IsList() Function
+===================
+
+Using the IsList() function we can know if the value is a list or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsList(value) ---> 1 if the value is a list or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       see islist(5) + nl +            # print 0
+           islist("hello") + nl +      # print 0
+           islist([1,3,5])             # print 1
+       
+.. index:: 
+       pair: Data Type; Type()
+
+Type() Function
+===============
+
+We can know the type of a value using the Type() Function.
+
+
+Syntax:
+
+.. code-block:: ring
+
+       Type(value) ---> The Type as String 
+
+Example:
+
+.. code-block:: ring
+
+           see Type(5) + nl +          # print NUMBER
+           Type("hello") + nl +        # print STRING
+           Type([1,3,5])               # print LIST
+
+.. index:: 
+       pair: Data Type; IsNULL()
+
+IsNULL() Function
+=================
+
+We can check the value to know if it's null or not using the IsNULL() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsNULL(value) ---> 1 if the value is NULL or 0 if not   
+
+Example:
+
+.. code-block:: ring
+
+           see isnull(5) + nl +        # print 0
+           isnull("hello") + nl +      # print 0
+           isnull([1,3,5]) + nl +      # print 0
+           isnull("") + nl +           # print 1
+           isnull("NULL")              # print 1
+
+.. index:: 
+       pair: Data Type; Check Character
+
+Check Character
+===============
+
+The next functions can be used to check character
+
+* isalnum()
+* isalpha()
+* iscntrl()
+* isdigit()
+* isgraph()
+* islower()
+* isprint()
+* ispunct()
+* isspace()
+* isupper()
+* isxdigit()
+
+.. index:: 
+       pair: Data Type; IsAlNum()
+
+IsAlNum() Function
+==================
+
+We can test a character or a string using the IsAlNum() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsAlNum(value) ---> 1 if the value is digit/letter or 0 if not  
+
+Example:
+
+.. code-block:: ring
+
+       see isalnum("Hello") + nl +     # print 1
+           isalnum("123456") + nl +    # print 1
+           isalnum("ABCabc123") + nl + # print 1
+           isalnum("How are you")      # print 0 because of spaces
+
+.. index:: 
+       pair: Data Type; IsAlpha()
+
+IsAlpha() Function
+==================
+
+We can test a character or a string using the IsAlpha() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsAlpha(value) ---> 1 if the value is a letter or 0 if not      
+
+Example:
+
+.. code-block:: ring
+
+       see isalpha("Hello") + nl +     # print 1
+           isalpha("123456") + nl +    # print 0
+           isalpha("ABCabc123") + nl + # print 0
+           isalpha("How are you")      # print 0
+
+.. index:: 
+       pair: Data Type; IsCntrl()
+
+IsCntrl() Function
+==================
+
+We can test a character or a string using the IsCntrl() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsCntrl(value) ---> 1 if the value is a control character (no printing position) 
+                           or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       See iscntrl("hello") + nl +     # print 0 
+           iscntrl(nl)                 # print 1
+
+.. index:: 
+       pair: Data Type; IsDigit()
+
+IsDigit() Function
+==================
+
+We can test a character or a string using the IsDigit() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsDigit(value) ---> 1 if the value is a digit or 0 if not       
+
+Example:
+
+.. code-block:: ring
+
+       see isdigit("0123456789") + nl +        # print 1
+           isdigit("0123a")                    # print 0
+
+.. index:: 
+       pair: Data Type; IsGraph()
+
+IsGraph() Function
+==================
+
+We can test a character or a string using the IsGraph() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsGraph(value) ---> 1 if the value can be printed (Except space) or 0 if not    
+
+Example:
+
+.. code-block:: ring
+
+       see isgraph("abcdef") + nl +    # print 1
+           isgraph("abc def")          # print 0
+
+
+.. index:: 
+       pair: Data Type; IsLower()
+
+IsLower() Function 
+==================
+
+We can test a character or a string using the IsLower() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsLower(value) ---> 1 if the value is lowercase letter or 0 if not      
+
+Example:
+
+.. code-block:: ring
+
+       see islower("abcDEF") + nl +    # print 0
+           islower("ghi")              # print 1
+
+
+.. index:: 
+       pair: Data Type; IsPrint()
+
+IsPrint() Function
+==================
+
+We can test a character or a string using the IsPrint() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsPrint(value) ---> 1 if the value occupies a printing position or 0 if not     
+
+Example:
+
+.. code-block:: ring
+
+       see isprint("Hello") + nl +             # print 1
+           isprint("Nice to see you") + nl +   # print 1
+           isprint(nl)                         # print 0
+
+.. index:: 
+       pair: Data Type; IsPunct()
+
+IsPunct() Function
+==================
+
+We can test a character or a string using the IsPunct() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsPunct(value) ---> 1 if the value is a punctuation character or 0 if not       
+
+Example:
+
+.. code-block:: ring
+
+       see ispunct("hello") + nl +     # print 0
+           ispunct(",")                # print 1
+
+.. index:: 
+       pair: Data Type; IsSpace()
+
+IsSpace() Function
+==================
+
+We can test a character or a string using the IsSpace() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsSpace(value) ---> 1 if the value is a white-space or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       see isspace("   ") + nl +       # print 1
+           isspace("test")             # print 0
+
+
+.. index:: 
+       pair: Data Type; IsUpper()
+
+IsUpper() Function
+==================
+
+We can test a character or a string using the IsUpper() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsUpper(value) ---> 1 if the value is an uppercase alphabetic letter or 0 if not        
+
+Example:
+
+.. code-block:: ring
+
+       see isupper("welcome") + nl +    # print 0 
+           isupper("WELCOME")           # print 1
+
+
+.. index:: 
+       pair: Data Type; IsXdigit()
+
+IsXdigit() Function
+===================
+
+We can test a character or a string using the IsXdigit() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsXdigit(value) ---> 1 if the value is a hexdecimal digit character or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       see isxdigit("0123456789abcdef") + nl +  # print 1
+           isxdigit("123z")                     # print 0
+
+
+.. index:: 
+       pair: Data Type; Conversion
+
+Conversion
+==========
+
+The next functions can be used for conversion
+
+* number()
+* string()
+* ascii()
+* char()
+* hex()
+* dec()
+* str2hex()
+* hex2str()
+
+.. index:: 
+       pair: Data Type; Number()
+
+Number() Function
+=================
+
+We can convert strings to numbers using the Number() function or the + operator.
+
+Syntax:
+
+.. code-block:: ring
+
+       Number(string) ---> Number
+       0 + string ---> Number
+
+Example:
+
+.. code-block:: ring
+
+       see number("5") + 5 + nl        # print 10
+       see 0 + "10" + 2                # print 12      
+
+.. index:: 
+       pair: Data Type; String()
+
+String() Function
+=================
+
+We can convert numbers to strings using the String() function or the + operator.
+
+Syntax:
+
+.. code-block:: ring
+
+       String(number) ---> String
+       "" + number ---> String
+
+Example:
+
+.. code-block:: ring
+
+       see string(5) + 5 + nl          # print 55
+       see "" + 10 + 2                 # print 102     
+
+.. index:: 
+       pair: Data Type; Ascii()
+
+Ascii() Function
+================
+
+We can get the ASCII code for a letter using the Ascii() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Ascii(character) ---> ASCII Code
+
+Example:
+
+.. code-block:: ring
+
+       See ascii("m") + nl +   # print 109
+           ascii("M")          # print 77
+
+.. index:: 
+       pair: Data Type; Char()
+
+Char() Function
+===============
+
+We can convert the ASCII code to character using the Char() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Char(ASCII Code) ---> character
+
+Example:
+
+.. code-block:: ring
+
+       See char(109) + nl +    # print m
+           char(77)            # print M
+
+
+.. index:: 
+       pair: Data Type; Hex()
+
+Hex() Function
+==============
+
+We can convert decimal to hexadecimal using the Hex() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Hex(decimal) ---> hexadecimal
+
+Example:
+
+.. code-block:: ring
+
+       See hex(10) + nl +      # print a
+           hex(200)            # print c8
+
+.. index:: 
+       pair: Data Type; Dec()
+
+Dec() Function
+==============
+
+We can convert hexadecimal to decimal using the Dec() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Dec(hexadecimal) ---> decimal
+
+Example:
+
+.. code-block:: ring
+
+       See dec("a") + nl +     # print 10
+           dec("c8")           # print 200
+
+.. index:: 
+       pair: Data Type; Str2Hex()
+
+Str2hex() Function
+==================
+
+We can convert string characters to hexadecimal characters using the Str2hex() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Str2hex(string) ---> hexadecimal string
+
+Example:
+
+.. code-block:: ring
+
+       See str2hex("hello")    # print 68656c6c6f
+
+.. index:: 
+       pair: Data Type; Hex2str()
+
+Hex2str() Function
+==================
+
+We can convert hexadecimal characters to string using the Hex2str() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Hex2Str(Hexadecimal string) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       See hex2str("68656c6c6f")       # print hello
diff --git a/docs/en/source/checkersgame.png b/docs/en/source/checkersgame.png
new file mode 100644 (file)
index 0000000..287820b
Binary files /dev/null and b/docs/en/source/checkersgame.png differ
diff --git a/docs/en/source/chessgame.png b/docs/en/source/chessgame.png
new file mode 100644 (file)
index 0000000..0f9649a
Binary files /dev/null and b/docs/en/source/chessgame.png differ
diff --git a/docs/en/source/classeslist.png b/docs/en/source/classeslist.png
new file mode 100644 (file)
index 0000000..35b9c46
Binary files /dev/null and b/docs/en/source/classeslist.png differ
diff --git a/docs/en/source/codeeditors.txt b/docs/en/source/codeeditors.txt
new file mode 100644 (file)
index 0000000..838b3e0
--- /dev/null
@@ -0,0 +1,151 @@
+.. index:: 
+       single: Using Other Code Editors; Introduction
+
+========================
+Using Other Code Editors
+========================
+
+In the Ring/Editor folder you will find extensions for the next editors
+
+* Notepad++
+* Geany
+* Atom
+* Sublime Text 2
+* Visual Studio IDE
+* Emacs
+* Visual Studio Code (VSCode)
+
+.. index:: 
+       pair: Using Other Code Editors; Using Notepad++
+
+
+Using Notepad++
+===============
+
+Folder : ring/editor/notepad_plus_plus
+
+* Open Notepad++
+* Open the "Language" menu
+* Select "Define your language..."
+* Click "Import..."
+* select `Ring.xml`
+* Select "OK" on the "Import successful" dialog and close the "User Defined Language" dialog/panel
+* You may need to restart notepad++
+
+.. image:: editor1.png
+       :alt: Using Notepad++
+
+.. index:: 
+       pair: Using Other Code Editors; Using Geany
+
+Using Geany
+===========
+
+Folder : ring/editor/geany
+
+* Run Geany editor
+* Click on "Tools -> configuration files -> filetypes_extensions.conf"  menu
+* Add this line "Ring=*.ring;" without quotes after [Extensions]
+* In unbuntu copy file "filetypes.Ring.conf" to folder "/home/USERNAME/filetypes.Ring.conf"
+* You can run your files by pressing F5 button
+
+.. image:: editor2.png
+       :alt: Using Geany
+
+
+.. index:: 
+       pair: Using Other Code Editors; Using Atom
+
+Using Atom
+==========
+
+Folder : ring/editor/atom
+
+Just Copy the folder atom-language-ring to the next path
+
+.. code-block:: none
+
+       "C:\Users\{UserName}\.atom\Packages"
+
+.. image:: editor3.jpg
+       :alt: Using Atom
+
+.. index:: 
+       pair: Using Other Code Editors; Using Sublime Text 2
+
+Using Sublime Text 2
+====================
+
+Folder : ring/editor/sublime text 2
+
+In the folder Sublime_Text_2 you will find the next three files
+
+1 - ring.json-tmlanguage
+
+2 - ring.sublime-build
+
+3 - ring.tmlanguage
+
+Just Copy the files to the next path
+
+.. code-block:: none
+
+       "C:\Users\{UserName}\AppData\Roaming\Sublime Text 2\Packages\User\"
+
+The file ring.sublime-build includes the next line
+
+.. code-block:: none
+
+       "cmd": ["B:\\ring\\bin\\ring.exe","$file"],
+
+You can modify it according to the ring.exe path in your machine 
+
+
+.. image:: editor4.jpg
+       :alt: Using Sublime Text 2
+
+
+.. index:: 
+       pair: Using Other Code Editors; Using Visual Studio IDE
+
+Using Visual Studio IDE
+=======================
+
+Folder : ring/editor/visualstudio
+
+Check the ReadMe file for installation instructions.   
+
+.. image:: editor5.png
+       :alt: Using Visual Studio
+
+.. index:: 
+       pair: Using Other Code Editors; Using Emacs Editor
+
+Using Emacs Editor
+==================
+
+Folder : ring/editor/emacs
+
+Check the ReadMe file for installation instructions.   
+
+Screen Shot:
+
+.. image:: ringemacs.png
+       :alt: Ring mode for Emacs Editor
+
+
+.. index:: 
+       pair: Using Other Code Editors; Visual Studio Code
+
+Visual Studio Code
+==================
+
+Folder : ring/vscode
+
+Check the ReadMe file for installation instructions.   
+
+Screen Shot:
+
+.. image:: ringinvscode.png
+       :alt: Ring in Visual Studio Code
+
diff --git a/docs/en/source/codegenerator.txt b/docs/en/source/codegenerator.txt
new file mode 100644 (file)
index 0000000..af22c71
--- /dev/null
@@ -0,0 +1,1289 @@
+.. index:: 
+       single: Code Generator; Introduction
+
+============================================
+Code Generator for wrapping C/C++ Libraries 
+============================================
+
+In this chapter we will learn how to use the code generator to wrap C/C++ Libraries 
+to use it in our Ring applications.
+
+.. index:: 
+       pair: Code Generator; Using the tool
+
+Using the tool
+==============
+
+The code generator program is parsec.ring that can be executed as any ring code using the
+ring language.
+
+URL : https://github.com/ring-lang/ring/tree/master/extensions/codegen
+
+for example to read a configuration file called test.cf to generate the source code file test.c
+run parsec.ring as in the next command
+
+.. code-block:: ring
+
+       ring parsec.ring test.cf test.c
+
+.. index:: 
+       pair: Code Generator; Configuration file
+
+
+Configuration file 
+==================
+
+The configuration file (*.cf) is the input file that we pass to the code generator. This file 
+determine the functions prototypes that we need to use from a C/C++ library.
+
+Writing configuration files is simple according to the next rules
+
+.. index:: 
+       pair: Code Generator; function prototype
+
+Using the function prototype
+============================
+
+* To generate code that wraps a C function, we just write the C function prototype
+
+Example:
+
+.. code-block:: ring
+
+       ALLEGRO_DISPLAY *al_create_display(int w, int h)
+       void al_destroy_display(ALLEGRO_DISPLAY *display)
+       int al_get_new_display_flags(void)
+       void al_set_new_display_flags(int flags)
+       int al_get_new_display_option(int option, int *importance)
+
+The previous example will guide the code generator to generate 5 functions that wraps the 
+al_create_display(), al_destroy_display(), al_get_new_display_flags(), al_set_new_diplay_flas()
+and al_get_new_display_option() functions.
+
+The generated code will be as in the next example
+
+.. code-block:: ring
+
+       RING_FUNC(ring_al_create_display)
+       {
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               RING_API_RETCPOINTER(al_create_display( (int ) RING_API_GETNUMBER(1),
+                                        (int ) RING_API_GETNUMBER(2)),"ALLEGRO_DISPLAY");
+       }
+
+
+       RING_FUNC(ring_al_destroy_display)
+       {
+         if ( RING_API_PARACOUNT != 1 ) {
+               RING_API_ERROR(RING_API_MISS1PARA);
+               return ;
+         }
+         if ( ! RING_API_ISPOINTER(1) ) {
+               RING_API_ERROR(RING_API_BADPARATYPE);
+               return ;
+         }
+         al_destroy_display((ALLEGRO_DISPLAY *) RING_API_GETCPOINTER(1,"ALLEGRO_DISPLAY"));
+       }
+
+
+       RING_FUNC(ring_al_get_new_display_flags)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               RING_API_RETNUMBER(al_get_new_display_flags());
+       }
+
+
+       RING_FUNC(ring_al_set_new_display_flags)
+       {
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               al_set_new_display_flags( (int ) RING_API_GETNUMBER(1));
+       }
+
+
+       RING_FUNC(ring_al_get_new_display_option)
+       {
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISSTRING(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               RING_API_RETNUMBER(al_get_new_display_option( (int ) RING_API_GETNUMBER(1),
+                                       RING_API_GETINTPOINTER(2)));
+               RING_API_ACCEPTINTVALUE(2) ;
+       }
+
+from the previous example we can see how much of time and effort is saved using the Code Generator.
+
+.. index:: 
+       pair: Code Generator; Adding code to the generated code
+
+Adding code to the generated code
+=================================
+       
+* To generate code directly type it between <code> and </code>
+
+Example :
+
+.. code-block:: ring
+
+       <code>
+               /* some C code will be written here */
+       </code>
+
+We use this feature when we need to do something without the help of the code generator. for
+example including header files and defining constants using Macro.
+
+.. index:: 
+       pair: Code Generator; Prefix for Functions Names
+
+Prefix for Functions Names 
+==========================
+
+* To determine a prefix in all of the functions names type it between <funcstart> and </funcstart>
+       for example when we wrap the Allegro game programming library and we need all of the library 
+       functions to start with "al" we type the next code in the configuration file
+
+.. code-block:: ring
+
+       <funcstart>
+       al
+       </funcstart>
+
+.. index:: 
+       pair: Code Generator; Wrap structures
+
+Generate function to wrap structures
+====================================
+
+* To generate functions that wrap structures (create/delete/get structure members)
+just type the structures names between  <struct> and </struct> also after the structure name
+you can type the structure members between { } separated by comma.
+
+Example 
+
+.. code-block:: ring
+
+       <struct>
+       ALLEGRO_COLOR
+       ALLEGRO_EVENT { type , keyboard.keycode , mouse.x , mouse.y }
+       </struct>
+
+from the previous example we will generate two function to create/delete the structure ALLEGRO_COLOR
+Also we will generate two functions to create/delete the structure ALLEGRO_EVENT and four functions
+to get the structure ALLEGRO_EVENT members (type, keyboard.keycode, mouse.x, mouse.y).
+
+.. index:: 
+       pair: Code Generator; Determine Structure Members Types
+
+Determine Structure Members Types
+=================================
+
+You can determine the pointer name before the strucuture member name.
+
+Example:
+
+.. code-block:: none
+
+       SDL_Surface {flags,SDL_PixelFormat *format,w,h,pitch,void *pixels}
+
+.. index:: 
+       pair: Code Generator; Defining Constants
+
+Defining Constants
+==================
+
+You can define constants using <constant> and </constant>
+
+The generator will generate the required functions to get the constant values
+
+And will define the constants to be used with the same name in Ring code using *.rh file that
+will be generated too.
+
+rh = Ring Header
+
+Example:
+
+.. code-block:: ring
+
+       <constant>
+       MIX_DEFAULT_FORMAT
+       SDL_QUIT
+       SDL_BUTTON_LEFT
+       SDL_BUTTON_MIDDLE
+       SDL_BUTTON_RIGHT
+       </constant>
+
+.. note:: You will need to pass the *.rh file name to parsec.ring after the generated source file name.
+
+Example:
+
+.. code-block:: ring
+
+       ring ..\codegen\parsec.ring libsdl.cf ring_libsdl.c ring_libsdl.rh
+
+.. index:: 
+       pair: Code Generator; Register New Functions
+
+Register New Functions
+======================
+
+We can register functions by typing the function prototype between <register> and </register>
+We need this feature only when we don't provide the function prototype as input directly where
+we need to write the code of this function.
+
+Example:
+
+.. code-block:: ring
+
+       <register>
+       void al_exit(void)
+       </register>
+
+       <code>
+       RING_FUNC(ring_al_exit)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+       }
+       exit(0);
+       }
+       </code>
+
+In the previous example we register the al_exit() function. This function is not part of the Allegro
+Library, it's just an extra function that we need to add. Then the code if this function is written
+inside <code> and </code>. This function call the exit() function from the C language library.
+
+.. index:: 
+       pair: Code Generator; Comments in configuration file
+
+Writing comments in the configuration file
+==========================================
+
+* To type comments just type it between <comment> and </comment>
+
+Example:
+
+.. code-block:: ring
+
+       <comment>
+       configuration files
+       </comment>
+
+.. index:: 
+       pair: Code Generator; Executing code during code generation
+
+Executing code during code generation
+=====================================
+
+* To ask from the code generator to execute Ring code during reading the configuration file, just 
+write the code between <runcode> and </runcode>
+
+Example:
+
+.. code-block:: ring
+
+       <runcode>
+       aNumberTypes + "al_fixed"
+       </runcode>
+
+The previoud line of code add the string "al_fixed" to the list aNumberTypes, This list contains 
+types that can be considered as numbers when the code generator find it in the function prototype.
+
+.. index:: 
+       pair: Code Generator; Enum and Numbers
+
+Enum and Numbers
+================
+
+We have the list aEnumTypes to use for adding each Enumeration we uses in the functions prototype.
+
+Example:
+
+.. code-block:: ring
+
+       <runcode>
+       aNumberTypes + "qreal"
+       aNumberTypes + "qint64"
+       aEnumTypes + "Qt::GestureType"
+       aEnumTypes + "Qt::GestureFlag"
+       </runcode>
+
+
+.. index:: 
+       pair: Code Generator; Filtering using Expressions
+
+Filtering using Expressions
+===========================
+
+using <filter> and </filter> we can include/exclude parts of the configuration file
+based on a condition, for example 
+
+.. code-block:: ring
+
+               <filter> iswindows() 
+                       ... functions related to windows
+               </filter>
+
+.. index:: 
+       pair: Code Generator; Constants Type
+
+Constants Type
+==============
+
+The default type for constant is Number 
+But Some constants may be another type, for example (pointer : void *)
+
+before using <constant> and </constant> we can use <runcode> and </runcode>
+to determine the constant type using two global variables used by the code generator.
+
+The first variable is $nDefaultConstantType which can be
+* C_CONSTANT_TYPE_NUMBER       
+* C_CONSTANT_TYPE_STRING
+* C_CONSTANT_TYPE_POINTER
+
+if we are using C_CONSTANT_TYPE_POINTER        then we will need the second global variable
+which is $cDefaultConstantPointerType to determine the pointer type.
+
+Example :
+
+The next example uses this feature to define constants in the FreeGLUT library
+
+.. code-block:: ring
+
+       <runcode>
+       $nDefaultConstantType = C_CONSTANT_TYPE_POINTER 
+       $cDefaultConstantPointerType = "void"
+       </runcode>
+       <constant>
+               GLUT_STROKE_ROMAN  
+               GLUT_STROKE_MONO_ROMAN
+               GLUT_BITMAP_9_BY_15   
+               GLUT_BITMAP_8_BY_13   
+               GLUT_BITMAP_TIMES_ROMAN_10
+               GLUT_BITMAP_TIMES_ROMAN_24 
+               GLUT_BITMAP_HELVETICA_10   
+               GLUT_BITMAP_HELVETICA_12   
+               GLUT_BITMAP_HELVETICA_18   
+       </constant>
+
+.. index:: 
+       pair: Code Generator; Configuration file for the Allegro library
+
+Configuration file for the Allegro Library
+==========================================
+
+The next configuration file enable us to use the Allegro library functions.
+The configuration file size is less than 1000 lines. when the code generator take this file as input
+the generated source code file in the C language will be 12000 lines of code!
+
+We can see this configuration file as a complete example about using the code generator
+Also we can use it to know the functions that can be used from RingAllegro when you use it
+to create 2D games!
+
+.. code-block:: ring
+
+       <code>
+       #define ALLEGRO_NO_MAGIC_MAIN
+
+       #include <allegro5/allegro.h>
+       #include "allegro5/allegro_image.h"
+       #include <allegro5/allegro_font.h>
+       #include <allegro5/allegro_ttf.h>
+       #include <allegro5/allegro_audio.h>
+       #include <allegro5/allegro_acodec.h>
+       #include <allegro5/allegro_opengl.h>
+       #include <allegro5/allegro_direct3d.h>
+       #include <allegro5/allegro_color.h>
+       #include <allegro5/allegro_memfile.h>
+       #include "allegro5/allegro_native_dialog.h"
+       #include <allegro5/allegro_physfs.h>
+       #include <allegro5/allegro_primitives.h>
+       </code>
+
+       <funcstart>
+       al
+       </funcstart>
+
+       <struct>
+       ALLEGRO_EVENT { type , keyboard.keycode , mouse.x , mouse.y }
+       ALLEGRO_TIMEOUT
+       ALLEGRO_SAMPLE_ID
+       ALLEGRO_COLOR
+       </struct>
+
+       <register>
+       void al_exit(void)
+       </register>
+
+       <code>
+       RING_FUNC(ring_al_exit)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               exit(0);
+       }
+       </code>
+
+       int al_init(void)
+
+       <comment>
+       configuration files
+       </comment>
+
+       <runcode>
+       aNumberTypes + "al_fixed"
+       </runcode>
+
+       ALLEGRO_CONFIG *al_create_config(void)
+       void al_destroy_config(ALLEGRO_CONFIG *config)
+       ALLEGRO_CONFIG *al_load_config_file(const char *filename)
+       ALLEGRO_CONFIG *al_load_config_file_f(ALLEGRO_FILE *file)
+       bool al_save_config_file(const char *filename, const ALLEGRO_CONFIG *config)
+       bool al_save_config_file_f(ALLEGRO_FILE *file, const ALLEGRO_CONFIG *config)
+       void al_add_config_section(ALLEGRO_CONFIG *config, const char *name)
+
+.. note:: 
+       we just provided part of the configuration file, for complete copy check the Ring source
+       code distribution.
+
+.. index:: 
+       pair: Code Generator; Threads Support
+
+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.
+
+.. code-block:: ring
+
+       <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) ) {
+                       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)
+
+.. index:: 
+       pair: Code Generator; Wrapping C++ Classes
+
+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, abstract and staticmethods"
+* 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 that 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".
+* The staticmethods instruction means that method doesn't need an object to be called.
+* 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   
+* 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++)
+
+.. index:: 
+       pair: Code Generator; Using configuration file that wrap C++ library
+
+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.
+
+.. code-block:: ring
+
+       ring parsec.ring generator\qt.cf ring_qt.cpp ring_qt.ring
+
+
+.. index:: 
+       pair: Code Generator; Qt configuration file
+
+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.
+
+.. code-block:: ring
+
+       <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"
+       #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>
+       #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>
+
+
+       <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)
+       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)
+       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)
+       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)
+       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)
+       QString selectedText(void)
+       int selectionStart(void)
+       void setAlignment(int)
+       void setBuddy(QWidget *buddy)
+       void setIndent(int)
+       void setMargin(int)
+       void setOpenExternalLinks(bool open)
+       void setScaledContents(bool)
+       void setSelection(int start, int length)
+       void setTextFormat(int)
+       void setTextInteractionFlags(int flags)
+       void setWordWrap(bool on)
+       QString text(void)
+       int textFormat(void)
+       int textInteractionFlags(void)
+       bool wordWrap(void)
+       void clear(void)
+       void setMovie(QMovie *movie)
+       void setNum(double num)
+       void setPicture(QPicture)
+       void setPixmap(QPixmap)
+       void setText(QString)
+
+       <class>
+       name: QPushButton
+       para: QWidget *
+       parent: QWidget
+       codename: GPushButton
+       passvmpointer
+       </class>
+
+       void setText(const char *)
+       void setClickEvent(const char *)
+       void setIcon(QIcon)
+       void setIconSize(QSize)
+
+       <class>
+       name: QLineEdit
+       para: QWidget *
+       parent: QWidget
+       codename: GLineEdit
+       passvmpointer
+       </class>
+
+       int alignment(void)
+       void backspace(void)
+       QCompleter *completer(void)
+       QMenu *createStandardContextMenu(void)
+       void cursorBackward(bool mark, int steps)
+       void cursorForward(bool mark, int steps)
+       int cursorMoveStyle(void)
+       int cursorPosition(void)
+       int cursorPositionAt(QPoint)
+       void cursorWordBackward(bool mark)
+       void cursorWordForward(bool mark)
+       void del(void)
+       void deselect(void)
+       QString displayText(void)
+       bool dragEnabled(void)
+       int echoMode(void)
+       void end(bool mark)
+       void getTextMargins(int *left, int *top, int *right, int *bottom)
+       bool hasAcceptableInput(void)
+       bool hasFrame(void)
+       bool hasSelectedText(void)
+       void home(bool mark)
+       QString inputMask(void)
+       void insert(QString)
+       bool isModified(void)
+       bool isReadOnly(void)
+       bool isRedoAvailable(void)
+       bool isUndoAvailable(void)
+       int maxLength(void)
+       QString placeholderText(void)
+       QString selectedText(void)
+       int selectionStart(void)
+       void setAlignment(int flag)
+       void setCompleter(QCompleter *c)
+       void setCursorMoveStyle(int style)
+       void setCursorPosition(int)
+       void setDragEnabled(bool b)
+       void setEchoMode(int)
+       void setFrame(bool)
+       void setInputMask(QString)
+       void setMaxLength(int)
+       void setModified(bool)
+       void setPlaceholderText(QString)
+       void setReadOnly(bool)
+       void setSelection(int start, int length)
+       void setTextMargins(int left, int top, int right, int bottom)
+       void setValidator(QValidator *v)
+       QString text(void)
+       QMargins textMargins(void)
+       QValidator *validator(void)
+
+       void clear(void)
+       void copy(void) 
+       void cut(void)
+       void paste(void)
+       void redo(void)
+       void selectAll(void)
+       void setText(QString)
+       void undo(void)
+
+       void setTextChangedEvent(const char *)
+       void setcursorPositionChangedEvent(const char *)
+       void seteditingFinishedEvent(const char *)
+       void setreturnPressedEvent(const char *)
+       void setselectionChangedEvent(const char *)
+       void settextEditedEvent(const char *)
+
+.. note:: 
+
+       Most of the content of the previous configuration file is removed from this documentation, 
+        for a complete version see the Ring source code distribution.
+
+.. index:: 
+       pair: Code Generator; Static Methods
+
+Static Methods
+==============
+
+Starting from Ring 1.8 the code generator support the staticmethods option.
+
+So the code generator can know that the class doesn't need an object to call the methods.
+
+Example:
+
+.. code-block:: none
+
+       <class>
+       name: QStandardPaths
+       para: void
+       nonew
+       staticmethods
+       </class>
+
+       QString displayName(QStandardPaths::StandardLocation type)
+       QString findExecutable(QString executableName, QStringList paths))
+
+.. index:: 
+       pair: Code Generator; Loading Files
+
+Loading Files
+=============
+
+Starting from Ring 1.9 the code generator support the <loadfile> command.
+
+.. code-block:: ring
+
+       <loadfile> filename.cf
+
+This is useful to separate the extension configuraition file to many files
+
+Example:
+
+The file : qt_module_network.cf in the RingQt Extension
+
+.. code-block:: ring
+
+       <comment>
+                                       Module (network)
+       </comment>
+
+       <loadfile> qabstractsocket.cf
+       <loadfile> qnetworkproxy.cf
+       <loadfile> qtcpsocket.cf
+       <loadfile> qtcpserver.cf
+       <loadfile> qhostaddress.cf
+       <loadfile> qhostinfo.cf
+       <loadfile> qnetworkrequest.cf
+       <loadfile> qnetworkaccessmanager.cf
+       <loadfile> qnetworkreply.cf
+
+.. index:: 
+       pair: Code Generator; Managed Classes
+
+Managed Classes
+===============
+
+Starting from Ring 1.9 the code generator support the <managed> option when defining classes.
+
+Using this option, the generator will use RING_API_RETMANAGEDCPOINTER() to return the C pointer.
+
+So the Garabage Collector will manage these C pointers.
+
+Example
+
+.. code-block:: ring
+
+       <class>
+       name: QFont
+       para: QString, int, int, bool
+       managed
+       </class>
+
+
+.. index:: 
+       pair: Code Generator; Configuration Files Examples
+
+Configuration Files Examples
+============================
+
+You can learn from the next examples
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/classes/qt.cf
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/libsdl.cf
+
+After modifing the configuration file, You will need to generate the code, You can learn from
+the next examples
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencode.bat
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/gencode.bat
+
+After generating the code, You will need to build the library, You can learn from the next examples
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/buildvc.bat
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildmingw32.bat
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/buildvc.bat
diff --git a/docs/en/source/compiler.txt b/docs/en/source/compiler.txt
new file mode 100644 (file)
index 0000000..08322ba
--- /dev/null
@@ -0,0 +1,942 @@
+.. index:: 
+       single: Command Line Options; Introduction
+
+====================
+Command Line Options
+====================
+
+The ring language takes source code file (*.ring) or the object file (*.ringo) as input to execute, 
+also the language provide other options like
+
+============   =======================================================
+Option         Description     
+============   =======================================================
+-tokens        Print a list of tokens in the source code file
+-rules         Print grammar rules applied on the tokens
+-ic            Print the intermediate byte code (before execution)
+-icfinal       Print the final byte code (after execution)
+-cgi           Print http response header before error messages
+-norun         Don't run the program after compiling
+-ins           Print instruction operation code before execution
+-performance   Print clock before and after program execution
+-go            Generate Object File
+-geo           Generate embedded object file (C source code)
+-w             Display Warnings 
+============   =======================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Tokens
+
+Printing Tokens
+===============
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               See "Hello World" + nl
+               for x = 1 to 10
+                       see x + nl
+               next
+               test()
+
+       func test
+               see "welcome" + nl
+               o1 = new point { x=10 y=20 z=30 }
+               see o1
+
+       class point x y z
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -tokens -norun
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Tokens - Generated by the Scanner
+       ===================================================
+
+          Keyword : FUNC
+       Identifier : main
+          EndLine
+          Keyword : SEE
+          Literal : Hello World
+         Operator : +
+       Identifier : nl
+          EndLine
+          Keyword : FOR
+       Identifier : x
+         Operator : =
+           Number : 1
+          Keyword : TO
+           Number : 10
+          EndLine
+          Keyword : SEE
+       Identifier : x
+         Operator : +
+       Identifier : nl
+          EndLine
+          Keyword : NEXT
+          EndLine
+       Identifier : test
+         Operator : (
+         Operator : )
+          EndLine
+          Keyword : FUNC
+       Identifier : test
+          EndLine
+          Keyword : SEE
+          Literal : welcome
+         Operator : +
+       Identifier : nl
+          EndLine
+       Identifier : o1
+         Operator : =
+          Keyword : NEW
+       Identifier : point
+         Operator : {
+       Identifier : x
+         Operator : =
+           Number : 10
+       Identifier : y
+         Operator : =
+           Number : 20
+       Identifier : z
+         Operator : =
+           Number : 30
+         Operator : }
+          EndLine
+          Keyword : SEE
+       Identifier : o1
+          EndLine
+          Keyword : CLASS
+       Identifier : point
+       Identifier : x
+       Identifier : y
+       Identifier : z
+          EndLine
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Rules
+
+Printing Rules
+==============
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -rules -norun
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Grammar Rules Used by The Parser
+       ===================================================
+
+       Rule : Program --> {Statement}
+
+       Line 1
+       Rule : Statement  --> 'Func' Identifier [ParaList]
+
+       Line 2
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 3
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'For' Identifier '=' Expr to Expr ['step' Expr]
+
+       Line 4
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 5
+       Rule : Next --> 'Next'
+
+       Line 6
+       Rule : Mixer -> '(' [Expr { ',' Expr} ] ')'
+
+       Line 8
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Statement  --> 'Func' Identifier [ParaList]
+
+       Line 9
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 10
+       Rule : Factor --> New Identifier {'.' Identifier }
+       Rule : Mixer --> '{' {Statement} BraceEnd
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : BraceEnd --> '}'
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+
+       Line 11
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 13
+       Rule : Statement  --> 'Class' Identifier
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Intermediate Code
+
+Printing Intermediate Code
+==========================
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -ic -norun
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Byte Code - Before Execution by the VM
+       ===================================================
+
+                PC      OPCode        Data
+
+                 1  ReturnNull
+                 2        Func    main
+                 3     NewLine       2
+                 4     FuncExE
+                 5       PushC   Hello World
+                 6       LoadA      nl      0
+                 7       PushV
+                 8         SUM       0
+                 9       Print
+                10     NewLine       3
+                11    ExitMark      29     28
+                12  LoadAFirst       x
+                13       PushN   1.000000
+                14  BeforeEqual       0
+                15  Assignment
+                16       PushN   1.000000
+                17  StepNumber
+                18  JumpVarLENum       x  10.000000    29
+                19     NewLine       4
+                20     FuncExE
+                21       LoadA       x      0
+                22       PushV
+                23       LoadA      nl      0
+                24       PushV
+                25         SUM       0
+                26       Print
+                27     NewLine       5
+                28     IncJump       x     18
+                29  POPExitMark
+                30     POPStep
+                31     NewLine       6
+                32    LoadFunc    test
+                33        Call       0
+                34  NoOperation
+                35     NewLine       8
+                36       PushV
+                37   FreeStack
+                38  ReturnNull
+                39        Func    test
+                40     NewLine       9
+                41     FuncExE
+                42       PushC   welcome
+                43       LoadA      nl      0
+                44       PushV
+                45         SUM       0
+                46       Print
+                47     NewLine      10
+                48       LoadA      o1      0
+                49  AssignmentPointer
+                50         New   point
+                51    SetScope
+                52       PushV
+                53  BraceStart
+                54       LoadA       x      0     58
+                55  AssignmentPointer
+                56       PushN   10.000000
+                57  BeforeEqual       0
+                58  Assignment       0      0
+                59   FreeStack
+                60       LoadA       y      0     64
+                61  AssignmentPointer
+                62       PushN   20.000000
+                63  BeforeEqual       0
+                64  Assignment       0      0
+                65   FreeStack
+                66       LoadA       z      0     70
+                67  AssignmentPointer
+                68       PushN   30.000000
+                69  BeforeEqual       0
+                70  Assignment       0      0
+                71   FreeStack
+                72    LoadFunc   ismethod
+                73       LoadA    self      0
+                74       PushV
+                75       PushC   braceend
+                76        Call
+                77  NoOperation
+                78       PushV
+                79       JumpZ      85
+                80    LoadFunc   braceend
+                81        Call
+                82  NoOperation
+                83       PushV
+                84   FreeStack
+                85    BraceEnd
+                86   FreeStack
+                87     NewLine      11
+                88     FuncExE
+                89       LoadA      o1      0
+                90       PushV
+                91       Print
+                92     NewLine      13
+                93  ReturnNull
+                94       Class   point  006E8BC0
+                95    NewLabel
+                96       LoadA       x      0
+                97       PushV
+                98   FreeStack
+                99       LoadA       y      0
+               100       PushV
+               101   FreeStack
+               102       LoadA       z      0
+               103       PushV
+               104   FreeStack
+               105  ReturnNull
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Final Intermediate Code
+
+Printing Final Intermediate Code
+================================
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -icfinal
+
+Output:
+
+.. code-block:: ring
+
+       Hello World
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       welcome
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+
+       ===================================================
+       Byte Code - After Execution by the VM
+       ===================================================
+
+                PC      OPCode        Data
+
+                 1  ReturnNull
+                 2        Func    main
+                 3     NewLine       2
+                 4     FuncExE
+                 5       PushC   Hello World
+                 6       PushP   007D3670      0
+                 7       PushV
+                 8         SUM       0
+                 9       Print
+                10     NewLine       3
+                11    ExitMark      29     28
+                12  LoadAFirst       x
+                13       PushN   1.000000
+                14  BeforeEqual       0
+                15  Assignment
+                16       PushN   1.000000
+                17  StepNumber
+                18  JumpVarLPLENum       x  10.000000    29
+                19     NewLine       4
+                20     FuncExE
+                21  PushPLocal       x      0
+                22       PushV
+                23       PushP   007D3670      0
+                24       PushV
+                25         SUM       0
+                26       Print
+                27     NewLine       5
+                28   IncLPJump       x     18
+                29  POPExitMark
+                30     POPStep
+                31     NewLine       6
+                32   LoadFuncP    test
+                33        Call       0
+                34  NoOperation
+                35     NewLine       8
+                36       PushV
+                37   FreeStack
+                38  ReturnNull
+                39        Func    test
+                40     NewLine       9
+                41     FuncExE
+                42       PushC   welcome
+                43       PushP   007D3670      0
+                44       PushV
+                45         SUM       0
+                46       Print
+                47     NewLine      10
+                48  PushPLocal      o1      0
+                49  AssignmentPointer
+                50         New   point
+                51    SetScope
+                52       PushV
+                53  BraceStart
+                54       LoadA       x      0     58
+                55  AssignmentPointer
+                56       PushN   10.000000
+                57  BeforeEqual       0
+                58  SetProperty       0    106
+                59   FreeStack
+                60       LoadA       y      0     64
+                61  AssignmentPointer
+                62       PushN   20.000000
+                63  BeforeEqual       0
+                64  SetProperty       0    141
+                65   FreeStack
+                66       LoadA       z      0     70
+                67  AssignmentPointer
+                68       PushN   30.000000
+                69  BeforeEqual       0
+                70  SetProperty       0    176
+                71   FreeStack
+                72    LoadFunc   ismethod
+                73       LoadA    self      0
+                74       PushV
+                75       PushC   braceend
+                76        Call
+                77  NoOperation
+                78       PushV
+                79       JumpZ      85
+                80    LoadFunc   braceend
+                81        Call
+                82  NoOperation
+                83       PushV
+                84   FreeStack
+                85    BraceEnd
+                86   FreeStack
+                87     NewLine      11
+                88     FuncExE
+                89  PushPLocal      o1      0
+                90       PushV
+                91       Print
+                92     NewLine      13
+                93  ReturnNull
+                94       Class   point  007D8470
+                95    NewLabel
+                96       LoadA       x      0
+                97       PushV
+                98   FreeStack
+                99       LoadA       y      0
+               100       PushV
+               101   FreeStack
+               102       LoadA       z      0
+               103       PushV
+               104   FreeStack
+               105  ReturnNull
+               106    LoadFunc   ismethod
+               107       LoadA   ring_gettemp_var      0
+               108       PushV
+               109       PushC    setx
+               110        Call       0
+               111  NoOperation
+               112       PushV
+               113       JumpZ     132
+               114     NewLine       2
+               115       LoadA   ring_gettemp_var      0
+               116  LoadMethod    setx
+               117       LoadA   ring_settemp_var      0
+               118       PushV
+               119        Call       0      1
+               120  AfterCallMethod
+               121       PushV
+               122   FreeStack
+               123     NewLine       3
+               124       LoadA   ring_tempflag_var      0    128
+               125  AssignmentPointer
+               126       PushN   0.000000
+               127  BeforeEqual       0
+               128  Assignment       0      0
+               129   FreeStack
+               130     NewLine       4
+               131        Jump     140
+               132     NewLine       5
+               133       PushP   007D37D8      0    137
+               134  AssignmentPointer
+               135       PushN   1.000000
+               136  BeforeEqual       0
+               137  Assignment       0      0
+               138   FreeStack
+               139     NewLine       6
+               140      Return
+               141    LoadFunc   ismethod
+               142       LoadA   ring_gettemp_var      0
+               143       PushV
+               144       PushC    sety
+               145        Call       0
+               146  NoOperation
+               147       PushV
+               148       JumpZ     167
+               149     NewLine       2
+               150       LoadA   ring_gettemp_var      0
+               151  LoadMethod    sety
+               152       LoadA   ring_settemp_var      0
+               153       PushV
+               154        Call       0      1
+               155  AfterCallMethod
+               156       PushV
+               157   FreeStack
+               158     NewLine       3
+               159       LoadA   ring_tempflag_var      0    163
+               160  AssignmentPointer
+               161       PushN   0.000000
+               162  BeforeEqual       0
+               163  Assignment       0      0
+               164   FreeStack
+               165     NewLine       4
+               166        Jump     175
+               167     NewLine       5
+               168       PushP   007D37D8      0    172
+               169  AssignmentPointer
+               170       PushN   1.000000
+               171  BeforeEqual       0
+               172  Assignment       0      0
+               173   FreeStack
+               174     NewLine       6
+               175      Return
+               176    LoadFunc   ismethod
+               177       LoadA   ring_gettemp_var      0
+               178       PushV
+               179       PushC    setz
+               180        Call       0
+               181  NoOperation
+               182       PushV
+               183       JumpZ     202
+               184     NewLine       2
+               185       LoadA   ring_gettemp_var      0
+               186  LoadMethod    setz
+               187       LoadA   ring_settemp_var      0
+               188       PushV
+               189        Call       0      1
+               190  AfterCallMethod
+               191       PushV
+               192   FreeStack
+               193     NewLine       3
+               194       LoadA   ring_tempflag_var      0    198
+               195  AssignmentPointer
+               196       PushN   0.000000
+               197  BeforeEqual       0
+               198  Assignment       0      0
+               199   FreeStack
+               200     NewLine       4
+               201        Jump     210
+               202     NewLine       5
+               203       PushP   007D37D8      0    207
+               204  AssignmentPointer
+               205       PushN   1.000000
+               206  BeforeEqual       0
+               207  Assignment       0      0
+               208   FreeStack
+               209     NewLine       6
+               210      Return
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; CGI Support
+
+
+CGI Support
+===========
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -cgi
+
+.. index:: 
+       pair: Command Line Options; No Run
+
+No Run 
+======
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -norun
+
+.. index:: 
+       pair: Command Line Options; Printing Instruction Operation Code
+
+Printing Instruction Operation Code
+===================================
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -ins
+
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+
+       Operation  : ReturnNull  
+       PC         : 1  
+       Line Number    : 1  , File test.ring 
+        
+       SP (After) : 0  - FuncSP : 0 
+        LineNumber 1 
+       ===================================================
+       .....
+       .....
+       .....
+       
+.. tip:: Output removed from the previous example because it's very large!
+
+.. index:: 
+       pair: Command Line Options; Performance
+
+Performance
+===========
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -performance
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Date  : 2015/09/15 Time : 15:56:17
+       Clock : 0 
+       ===================================================
+       Hello World
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       welcome
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       
+       ===================================================
+       Date  : 2015/09/15 Time : 15:56:17
+       Clock : 0 
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Generate Object File
+
+Generate Object File
+====================
+
+You can generate object file (*.ringo) from your source code file (*.ring) 
+using -go option
+
+.. tip::
+
+       You will get one object file to use for distributing/running your application which may contains one or many
+       ring source files that you can keep or distribute based on the application (commercial or open source).
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -go
+
+To run the compiled object file
+
+.. code-block:: ring
+
+       ring test.ringo
+
+
+.. index:: 
+       pair: Command Line Options; Generate Embedded Object File
+
+Generate Embedded Object File
+=============================
+
+You can generate embedded object file (C source code) from your source code file (*.ring) 
+using -geo option
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -geo
+
+This command will generate at least three files
+
+.. code-block:: ring
+
+       test.c
+       ringappcode.c
+       ringappcode.h
+
+More files could be generated based on the project size
+
+The generated files will pass the byte code to Ring VM to be executed
diff --git a/docs/en/source/conf.py b/docs/en/source/conf.py
new file mode 100644 (file)
index 0000000..444c370
--- /dev/null
@@ -0,0 +1,377 @@
+# -*- coding: utf-8 -*-
+#
+# Ring documentation build configuration file, created by
+# sphinx-quickstart on Sun May 03 10:07:42 2015.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.mathjax',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.viewcode'
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
+source_suffix = '.txt'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'Ring'
+copyright = u'2016-2020, Ring Team'
+author = u'Ring Team'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '1.12'
+# The full version, including alpha/beta/rc tags.
+release = '1.12'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = []
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#html_theme = 'alabaster'
+
+html_theme = "classic"
+html_theme_options = {
+    "rightsidebar": "true",
+    "relbarbgcolor": "black"
+}
+
+#html_theme = "sphinx_rtd_theme"
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
+#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
+#html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+#html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+#html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'Ringdoc'
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+       'classoptions': ',oneside,openany',
+       'babel': '\\usepackage[english]{babel}',
+       'pointsize': '18pt'
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+
+# Latex figure (float) alignment
+#'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+  (master_doc, 'Ring.tex', u'Ring Documentation',
+   u'Ring Team', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'ring', u'Ring Documentation',
+     [author], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  (master_doc, 'Ring', u'Ring Documentation',
+   author, 'Ring', 'One line description of project.',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False
+
+
+# -- Options for Epub output ----------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = project
+epub_author = author
+epub_publisher = author
+epub_copyright = copyright
+
+# The basename for the epub file. It defaults to the project name.
+#epub_basename = project
+
+# The HTML theme for the epub output. Since the default themes are not optimized
+# for small screen space, using the same theme for HTML and epub output is
+# usually not wise. This defaults to 'epub', a theme designed to save visual
+# space.
+#epub_theme = 'epub'
+
+# The language of the text. It defaults to the language option
+# or 'en' if the language is not set.
+#epub_language = ''
+
+# The scheme of the identifier. Typical schemes are ISBN or URL.
+#epub_scheme = ''
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#epub_identifier = ''
+
+# A unique identification for the text.
+#epub_uid = ''
+
+# A tuple containing the cover image and cover page html template filenames.
+#epub_cover = ()
+
+# A sequence of (type, uri, title) tuples for the guide element of content.opf.
+#epub_guide = ()
+
+# HTML files that should be inserted before the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_pre_files = []
+
+# HTML files shat should be inserted after the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_post_files = []
+
+# A list of files that should not be packed into the epub file.
+epub_exclude_files = ['search.html']
+
+# The depth of the table of contents in toc.ncx.
+#epub_tocdepth = 3
+
+# Allow duplicate toc entries.
+#epub_tocdup = True
+
+# Choose between 'default' and 'includehidden'.
+#epub_tocscope = 'default'
+
+# Fix unsupported image types using the Pillow.
+#epub_fix_images = False
+
+# Scale large images.
+#epub_max_image_width = 0
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#epub_show_urls = 'inline'
+
+# If false, no index is generated.
+#epub_use_index = True
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'https://docs.python.org/': None}
diff --git a/docs/en/source/consolecolors.png b/docs/en/source/consolecolors.png
new file mode 100644 (file)
index 0000000..57e03bc
Binary files /dev/null and b/docs/en/source/consolecolors.png differ
diff --git a/docs/en/source/contribute.txt b/docs/en/source/contribute.txt
new file mode 100644 (file)
index 0000000..b5b37d5
--- /dev/null
@@ -0,0 +1,129 @@
+.. index:: 
+       single: How to contribute?; Introduction
+
+==================
+How to contribute?
+==================
+
+Ring is a free-open source project, Everyone is welcome to contribute to Ring.
+
+Project Home : https://github.com/ring-lang/ring
+
+You can help in many parts in the project
+
+* Documentation
+* Testing
+* Samples
+* Applications
+* Editors Support
+* Libraries in Ring
+* Extensions in C/C++
+* Compiler and Virtual Machine (VM)
+* Ideas and suggestions
+
+.. index:: 
+       pair: How to contribute?; Special thanks to contributors
+
+
+Special thanks to contributors
+==============================
+
+Throughout the creation of this project, Ring relied heavily on contributions from experts along with college students.  
+Their input was invaluable, and we want to take a moment to thank them and recognize them for all of their hard work.
+
+Ring Team: http://ring-lang.sf.net/team.html
+
+.. index:: 
+       pair: How to contribute?; Documentation
+
+Documentation
+=============
+
+You can modify anything in the documentation, by updating the text files (*.txt)
+in this folder : https://github.com/ring-lang/ring/tree/master/docs/source
+
+The documentation is created using Sphinx : http://www.sphinx-doc.org/en/stable/
+
+.. index:: 
+       pair: How to contribute?; Testing
+
+Testing
+=======
+
+You can write new tests in this folder 
+
+https://github.com/ring-lang/ring/tree/master/tests/scripts
+
+
+.. index:: 
+       pair: How to contribute?; Samples
+
+Samples
+=======
+
+You can add new samples to this folder
+
+https://github.com/ring-lang/ring/tree/master/samples/other
+
+.. index:: 
+       pair: How to contribute?; Applications
+
+Applications
+============
+
+You can add new applications to this folder
+
+https://github.com/ring-lang/ring/tree/master/applications
+
+.. index:: 
+       pair: How to contribute?; Libraries in Ring
+
+.. index:: 
+       pair: How to contribute?; Editors Support
+
+Editors Support
+===============
+
+You can help in supporting Ring in different code editors
+
+Check the next folder
+
+https://github.com/ring-lang/ring/tree/master/editor
+
+Libraries in Ring
+=================
+
+You can update and add libraries to this folder
+
+https://github.com/ring-lang/ring/tree/master/ringlibs
+
+.. index:: 
+       pair: How to contribute?; Extensions in C/C++
+
+
+Extensions in C/C++
+===================
+
+You can add and update extensions in this folder
+
+https://github.com/ring-lang/ring/tree/master/extensions
+
+.. index:: 
+       pair: How to contribute?; Compiler and Virtual Machine (VM)
+
+Compiler and Virtual Machine (VM)
+=================================
+
+* Source Code (C Language) : https://github.com/ring-lang/ring/tree/master/src
+* Visual Source (PWCT) : https://github.com/ring-lang/ring/tree/master/visualsrc
+
+.. index:: 
+       pair: How to contribute?; Ideas and suggestions
+
+Ideas and suggestions
+=====================
+
+You can share your ideas, suggestions and questions in this group
+
+https://groups.google.com/forum/#!forum/ring-lang
+
diff --git a/docs/en/source/controlstructures.txt b/docs/en/source/controlstructures.txt
new file mode 100644 (file)
index 0000000..dfb8418
--- /dev/null
@@ -0,0 +1,442 @@
+.. index:: 
+       single: Control Structures - First Style; Introduction
+
+================================
+Control Structures - First Style
+================================
+
+In this chapter we are going to learn about the control structures provided by
+the Ring programming language.
+
+.. index:: 
+       pair: Control Structures; Branching
+
+
+Branching
+=========
+
+* If Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       if Expression
+               Block of statements
+       but Expression
+               Block of statements
+       else
+               Block of statements
+       ok
+
+Example:
+
+.. code-block:: ring
+
+       see " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " give nOption
+
+       if nOption = 1  see "Enter your name : " give name see "Hello " + name + nl
+       but nOption = 2 see "Sample : using if statement" + nl
+       but nOption = 3 bye
+       else see "bad option..." + nl
+       ok
+              
+
+.. index:: 
+       pair: Control Structures - First Style; Switch Statement
+
+* Switch Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       switch Expression
+       on Expression
+               Block of statements
+       other
+               Block of statements
+       off             
+
+Example:
+
+.. code-block:: ring
+
+       See " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " Give nOption
+
+       Switch nOption
+       On 1 See "Enter your name : " Give name See "Hello " + name + nl
+       On 2 See "Sample : using switch statement" + nl
+       On 3 Bye
+       Other See "bad option..." + nl
+       Off
+
+
+.. index:: 
+       pair: Control Structures - First Style; Looping
+
+Looping
+=======
+
+.. index:: 
+       pair: Control Structures - First Style; While Loop
+
+* While Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       while Expression
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       While True
+
+               See " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Give nOption
+
+               Switch nOption
+               On 1 
+                       See "Enter your name : " 
+                       Give name 
+                       See "Hello " + name + nl
+               On 2 
+                       See "Sample : using while loop" + nl
+               On 3 
+                       Bye
+               Other 
+                       See "bad option..." + nl
+               Off
+       End
+
+.. index:: 
+       pair: Control Structures - First Style; For Loop
+
+* For Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier=expression to expression [step expression]
+               Block of statements
+       next
+
+Example:
+
+.. code-block:: ring
+
+       # print numbers from 1 to 10
+       for x = 1 to 10  see x + nl  next
+
+Example:
+
+.. code-block:: ring
+
+       # Dynamic loop
+       See "Start : " give nStart       
+       See "End   : " give nEnd
+       See "Step  : " give nStep
+       For x = nStart to nEnd Step nStep
+               see x + nl
+       Next
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 0 to 10
+       for x = 0 to 10 step 2
+               see x + nl
+       next
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 10 to 0
+       for x = 10 to 0 step -2
+               see x + nl
+       next
+
+
+.. index:: 
+       pair: Control Structures - First Style; For In Loop
+
+* For in Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier in List/String  [step expression]
+               Block of statements
+       next
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       for x in aList  see x + nl  next  # print numbers from 1 to 10
+
+.. index:: 
+       pair: Control Structures - First Style; Step Option
+
+Using The Step option with For in
+=================================
+
+We can use the Step option with For in to skip number of items in each iteration
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       # print odd items inside the list
+       for x in aList step 2
+               see x + nl  
+       next  
+
+
+.. index:: 
+       pair: Control Structures - First Style; for in to modify lists
+
+Using For in to modify lists
+=============================
+
+When we use (For in) we get items by reference.
+
+This means that we can read/edit items inside the loop.
+       
+Example:
+
+.. code-block:: ring
+
+       aList = 1:5     # create list contains numbers from 1 to 5
+       # replace list numbers with strings
+       for x in aList  
+               switch x
+               on 1  x = "one"
+               on 2  x = "two"
+               on 3  x = "three"
+               on 4  x = "four"
+               on 5  x = "five"
+               off
+       next
+       see aList       # print the list items
+
+.. index:: 
+       pair: Control Structures - First Style; Do Again Loop
+
+Do Again Loop
+=============
+
+Syntax:
+
+.. code-block:: ring
+       
+       do
+               Block of statements
+       again expression
+
+Example:
+
+.. code-block:: ring
+
+       x = 1 
+       do 
+               see x + nl 
+               x++ 
+       again x <= 10
+
+.. index:: 
+       pair: Control Structures - First Style; Exit
+
+Exit Command
+============
+
+Used to go outside one or more of loops.
+
+
+Syntax:
+
+.. code-block:: ring
+
+       exit [expression]       # inside loop
+
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               see x + nl
+               if x = 5 exit ok
+       next
+
+.. index:: 
+       pair: Control Structures - First Style; Exit from two loops
+
+Exit from two loops
+===================
+
+The next example presents how to use the exit command to exit from two loops in one jump.
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               for y = 1 to 10
+                       see "x=" + x + " y=" + y + nl
+                       if x = 3 and y = 5
+                               exit 2     # exit from 2 loops 
+                       ok
+               next
+       next                    
+
+.. index:: 
+       pair: Control Structures - First Style; Loop Command
+
+Loop Command
+============
+
+Used to jump to the next iteration in the loop.
+
+Syntax:
+
+.. code-block:: ring
+
+       loop [expression]       # inside loop
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               if x = 3
+                       see "Number Three" + nl
+                       loop
+               ok
+               see x + nl
+       next
+
+.. index:: 
+       pair: Control Structures - First Style; Short-circuit evaluation
+
+Short-circuit evaluation
+========================
+
+The logical operators and/or follow the `short-circuit evaluation <http://en.wikipedia.org/wiki/Short-circuit_evaluation>`_.
+
+If the first argument of the AND operator is zero, then there is no need to evaluate the second
+argument and the result will be zero.
+
+If the first argument of the OR operator is one, then there is no need to evaluate the second
+argument and the result will be one.
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** nice 
+       ** nice 
+       ** great        
+       */
+
+       x = 0 y = 10
+
+       if (x = 0 and nice()) and (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl   return 1
+
+
+Example:
+
+.. code-block:: ring
+
+       # No output
+
+       x = 0 y = 10
+
+       if (x = 1 and nice()) and (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl   return 1
+
+
+Example:
+
+.. code-block:: ring
+
+       /* output 
+       ** nice
+       ** great
+       */
+       x = 0 y = 10
+
+       if (x = 0 and nice()) or (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl  return 1                    
+
+
+.. index:: 
+       pair: Control Structures - First Style; Comments about evaluation
+
+Comments about evaluation
+=========================
+
+* True, False, nl & NULL are variables defined by the language
+
+* True = 1
+
+* False = 0 
+
+* nl = new line
+
+* NULL = empty string = ""
+
+* Everything evaluates to true except 0 (False).
+
+Example:
+
+.. code-block:: ring
+
+       # output = message from the if statement
+
+       if 5    # 5 evaluates to true because it's not zero (0).
+               see "message from the if statement" + nl
+       ok
diff --git a/docs/en/source/controlstructures2.txt b/docs/en/source/controlstructures2.txt
new file mode 100644 (file)
index 0000000..3713d99
--- /dev/null
@@ -0,0 +1,219 @@
+.. index:: 
+       single: Control Structures - Second Style; Introduction
+
+=================================
+Control Structures - Second Style
+=================================
+
+In this chapter we are going to learn about the second style of control structures
+provided by the Ring programming language.
+
+.. index:: 
+       pair: Control Structures - Second Style; Branching
+
+
+Branching
+=========
+
+.. index:: 
+       pair: Control Structures - Second Style; If Statement
+
+* If Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       if Expression
+               Block of statements
+       elseif Expression
+               Block of statements
+       else
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       put " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " get nOption
+
+       if nOption = 1  put "Enter your name : " get name put "Hello " + name + nl
+       elseif nOption = 2 put "Sample : using if statement" + nl
+       elseif nOption = 3 bye
+       else put "bad option..." + nl
+       end
+
+.. index:: 
+       pair: Control Structures - Second Style; Switch Statement
+
+* Switch Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       switch Expression
+       case Expression
+               Block of statements
+       else
+               Block of statements
+       end             
+
+Example:
+
+.. code-block:: ring
+
+       Put " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " Get nOption
+
+       Switch nOption
+       Case 1 Put "Enter your name : " Get name Put "Hello " + name + nl
+       Case 2 Put "Sample : using switch statement" + nl
+       Case 3 Bye
+       Else Put "bad option..." + nl
+       End
+
+.. index:: 
+       pair: Control Structures - Second Style; Looping
+
+Looping
+=======
+
+* While Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       while Expression
+               Block of statements
+       end
+
+
+Example:
+
+.. code-block:: ring
+
+       While True
+
+               Put " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Get nOption
+
+               Switch nOption
+               Case 1 
+                       Put "Enter your name : " 
+                       Get name 
+                       Put "Hello " + name + nl
+               Case 2 
+                       Put "Sample : using while loop" + nl
+               Case 3 
+                       Bye
+               Else 
+                       Put "bad option..." + nl
+               End
+       End
+.. index:: 
+       pair: Control Structures - Second Style; For Loop
+
+
+* For Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier=expression to expression [step expression]
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       # print numbers from 1 to 10
+       for x = 1 to 10  put x + nl  end
+
+Example:
+
+.. code-block:: ring
+
+       # Dynamic loop
+       Put "Start : " get nStart       
+       Put "End   : " get nEnd
+       Put "Step  : " get nStep
+       For x = nStart to nEnd Step nStep
+               Put x + nl
+       End
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 0 to 10
+       for x = 0 to 10 step 2
+               Put x + nl
+       end
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 10 to 0
+       for x = 10 to 0 step -2
+               put x + nl
+       end
+
+
+.. index:: 
+       pair: Control Structures - Second Style; For In Loop
+
+* For in Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier in List/String  [step expression]
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       for x in aList  put x + nl  end  # print numbers from 1 to 10
+
+.. index:: 
+       pair: Control Structures - Second Style; Exceptions
+
+Exceptions
+==========
+
+.. code-block:: ring
+
+       try
+               Block of statements
+       catch
+               Block of statements
+       end
diff --git a/docs/en/source/controlstructures3.txt b/docs/en/source/controlstructures3.txt
new file mode 100644 (file)
index 0000000..5a1cbce
--- /dev/null
@@ -0,0 +1,293 @@
+.. index:: 
+       single: Control Structures - Third Style; Introduction
+
+================================
+Control Structures - Third Style
+================================
+
+In this chapter we are going to learn about the third style of control structures
+provided by the Ring programming language.
+
+.. index:: 
+       pair: Control Structures - Third Style; Branching
+
+
+Branching
+=========
+
+.. index:: 
+       pair: Control Structures - Third Style; If Statement
+
+* If Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       if Expression {
+               Block of statements
+       elseif Expression
+               Block of statements
+       else
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       print(" 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+           ")
+
+       nOption = getnumber()
+
+       if nOption = 1  {
+               print("Enter your name : ") 
+               name = getstring()      
+               print("Hello #{name}\n")
+       elseif nOption = 2 
+               print("Sample : using if statement\n")
+       elseif nOption = 3 
+               bye
+       else 
+               print("bad option...\n")
+       }
+
+.. index:: 
+       pair: Control Structures - Third Style; Switch Statement
+
+* Switch Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       switch Expression {
+       case Expression
+               Block of statements
+       else
+               Block of statements
+       }       
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       print(" 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+             ")
+
+       nOption = GetString()
+
+       switch nOption {
+       case 1 
+               print("Enter your name : ")
+               name = getstring()
+               print("Hello #{name}\n")
+       case 2 
+               print("Sample : using switch statement\n")
+       case 3 
+               Bye
+       else 
+               print("bad option...\n")
+       }
+
+
+.. index:: 
+       pair: Control Structures; Looping
+
+Looping
+=======
+
+.. index:: 
+       pair: Control Structures - Third Style; While Loop
+
+* While Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       while Expression {
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       While True {
+
+               print(" 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                         ")
+
+               nOption = GetString()
+
+               switch nOption {
+               case 1 
+                       print("Enter your name : ")
+                       name = getstring()
+                       print("Hello #{name}\n")
+               case 2 
+                       print("Sample : using switch statement\n")
+               case 3 
+                       Bye
+               else 
+                       print("bad option...\n")
+               }
+
+       }
+
+.. index:: 
+       pair: Control Structures - Third Style; For Loop
+
+* For Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier=expression to expression [step expression] {
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       # print numbers from 1 to 10
+       load "stdlib.ring"
+       for x = 1 to 10  { 
+               print("#{x}\n") 
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # Dynamic loop
+       print("Start : ") nStart = getnumber()
+       print("End   : ") nEnd = getnumber()
+       print("Step  : ") nStep = getnumber()
+       for x = nStart to nEnd step nStep {
+               print("#{x}\n") 
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # print even numbers from 0 to 10
+       for x = 0 to 10 step 2 {
+               print("#{x}\n") 
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # print even numbers from 10 to 0
+       for x = 10 to 0 step -2 {
+               print("#{x}\n") 
+       }
+
+
+.. index:: 
+       pair: Control Structures - Third Style; For In Loop
+
+* For in Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier in List/String  [step expression] {
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       for x in aList { print("#{x}\n") }  # print numbers from 1 to 10
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       # print odd items inside the list
+       for x in aList step 2 {
+               print("#{x}\n") 
+       }
+
+When we use (For in) we get items by reference.
+
+This means that we can read/edit items inside the loop.
+       
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:5     # create list contains numbers from 1 to 5
+       # replace list numbers with strings
+       for x in aList {
+               switch x {
+               case 1  x = "one"
+               case 2  x = "two"
+               case 3  x = "three"
+               case 4  x = "four"
+               case 5  x = "five"
+               }
+       }
+       print(aList)    # print the list items
+
+
+.. index:: 
+       pair: Control Structures - Third Style; Exceptions
+
+Exceptions
+==========
+
+.. code-block:: ring
+
+       try {
+               Block of statements
+       catch
+               Block of statements
+       }
\ No newline at end of file
diff --git a/docs/en/source/dateandtime.txt b/docs/en/source/dateandtime.txt
new file mode 100644 (file)
index 0000000..1c559c6
--- /dev/null
@@ -0,0 +1,270 @@
+.. index:: 
+       single: Date and Time; Introduction
+
+=============
+Date and Time
+=============
+
+In this chapter we are going to learn about the date and time functions.
+
+.. index:: 
+       pair: Date and Time; clock()
+
+
+Clock() Function
+================
+
+Syntax:
+
+.. code-block:: ring
+
+        Clock() ---> The number of clock ticks from program start
+
+Example:
+
+.. code-block:: ring
+       
+       See "Calculate performance" + nl
+       t1 = clock()
+       for x = 1 to 1000000 next
+       see clock() - t1 
+
+.. index:: 
+       pair: Date and Time; ClosPerSecond()
+
+ClocksPerSecond() Function
+==========================
+
+Return how many clocks in one second
+
+Syntax:
+
+.. code-block:: ring
+
+       clockspersecond() ---> Number of clocks in one second
+
+Example:
+
+.. code-block:: ring
+
+       # Wait 1 second
+       t = clock()
+       while clock() - t <= clockspersecond() end
+
+.. index:: 
+       pair: Date and Time; Time()
+
+Time() Function
+===============
+
+We can get the system time using the Time() function.
+
+Example:
+
+.. code-block:: ring
+       
+       See "Time : " + time()
+
+
+.. index:: 
+       pair: Date and Time; Date()
+
+Date() Function
+===============
+
+We can get the date using the Date() function.
+
+Syntax:
+
+.. code-block:: ring
+
+        Date() ---> String represent the date "dd/mm/yyyy"
+
+Example:
+
+.. code-block:: ring
+
+       See "Date : " + date()  # Date : 24/05/2015
+
+
+.. index:: 
+       pair: Date and Time; TimeList()
+
+TimeList() Function
+===================
+
+We can print the date and the time information using the TimeList() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       TimeList() ---> List contains the time and date information.
+
+The next table presents the list items
+
+======  ===================================
+index  value
+====== ===================================
+1              abbreviated weekday name 
+2              full weekday name
+3              abbreviated month name
+4              full month name
+5              Date & Time
+6              Day of the month
+7              Hour (24)
+8              Hour (12)
+9              Day of the year
+10             Month of the year
+11             Minutes after hour
+12             AM or PM
+13             Seconds after the hour
+14             Week of the year (sun-sat)
+15             day of the week
+16             date
+17             time
+18             year of the century             
+19             year
+20             time zone
+21             percent sign
+====== ===================================
+
+Example:
+
+.. code-block:: ring
+
+       /* Output:
+       ** Sun                  abbreviated weekday name 
+       ** Sunday               full weekday name
+       ** May                  abbreviated month name
+       ** May                  full month name
+       ** 05/24/15 09:58:38    Date & Time
+       ** 24                   Day of the month
+       ** 09                   Hour (24)
+       ** 09                   Hour (12)
+       ** 144                  Day of the year
+       ** 05                   Month of the year
+       ** 58                   Minutes after hour
+       ** AM                   AM or PM
+       ** 38                   Seconds after the hour
+       ** 21                   Week of the year (sun-sat)
+       ** 0                    day of the week
+       ** 05/24/15             date
+       ** 09:58:38             time
+       ** 15                   year of the century             
+       ** 2015                 year
+       ** Arab Standard Time   time zone
+       ** %                    percent sign
+       */
+       
+       See TimeList() 
+
+Example:
+
+.. code-block:: ring
+
+       See "Day Name : " + TimeList()[2]       # Sunday
+
+Example:
+
+.. code-block:: ring
+
+       See "Month Name : " + TimeList()[4]     # May
+
+.. index:: 
+       pair: Date and Time; AddDays()
+
+AddDays() Function
+==================
+
+Syntax:
+
+.. code-block:: ring
+
+       AddDays(cDate,nDays) ---> Date from cDate and after nDays
+
+Example:
+
+.. code-block:: ring
+
+       cDate = date()
+       see cDate + nl                  # 24/05/2015
+       cDate = adddays(cDate,10)
+       see cDate + nl                  # 03/06/2015
+
+.. index:: 
+       pair: Date and Time; DiffDays()
+
+DiffDays() Function
+===================
+
+Syntax:
+
+.. code-block:: ring
+
+       DiffDays(cDate1,cDate2) ---> number of days (Date1 - Date2)
+
+Example:
+
+.. code-block:: ring
+
+       cDate1 = date()
+       see cDate1 + nl                                         # 24/05/2015
+       cDate2 = adddays(cDate1,10)
+       see cDate2 + nl                                         # 03/06/2015
+       see "DiffDays = " + diffdays(cDate1,cDate2) + nl        # -10
+       see "DiffDays = " + diffdays(cDate2,cDate1) + nl        # 10
+       
+.. index:: 
+       pair: Date and Time; EpochTime()
+
+EpochTime() Function
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       EpochTime( cDate, cTime ) ---> Epoch Seconds
+
+Example:
+
+.. code-block:: ring
+
+       ###-------------------------------------------------------------
+       # EpochTime()
+       # Example ---  EpochSec = EpochTime( Date(), Time() )
+       # Call Format: EpochSec = EpochTime( "15/07/2016", "10:15:30" )
+       #              EpochSec = 1468577730
+       #---------------------------------------------------------------
+
+       Func EpochTime(Date, Time)
+
+           arrayDate = split(Date, "/")
+           arrayTime = split(Time, ":")
+
+           Year = arrayDate[3] ; Month  = arrayDate[2] ; Day    = arrayDate[1]
+           Hour = arrayTime[1] ; Minute = arrayTime[2] ; Second = arrayTime[3]
+
+           cDate1    = Day +"/"+ Month +"/"+ Year
+           cDate2    = "01/01/" + Year
+           DayOfYear = DiffDays( cDate1, cDate2)
+
+           ### Formula
+           tm_sec  = Second    * 1
+           tm_min  = Minute    * 60
+           tm_hour = Hour      * 3600
+           tm_yday = DayOfYear * 86400
+           tm_year = Year      - 1900
+
+           tm_year1 =         ( tm_year -  70)          * 31536000
+           tm_year2 = ( floor(( tm_year -  69) /   4 )) * 86400
+           tm_year3 = ( floor(( tm_year -   1) / 100 )) * 86400
+           tm_year4 = ( floor(( tm_year + 299) / 400 )) * 86400
+
+           ### Result
+           EpochSec = tm_sec + tm_min + tm_hour + tm_yday +
+                      tm_year1 + tm_year2 - tm_year3 + tm_year4
+
+       return EpochSec
+       
diff --git a/docs/en/source/debug.txt b/docs/en/source/debug.txt
new file mode 100644 (file)
index 0000000..d49620c
--- /dev/null
@@ -0,0 +1,238 @@
+.. index:: 
+       single: The Trace Library and the Interactive Debugger; Introduction
+
+==============================================
+The Trace Library and the Interactive Debugger
+==============================================
+
+In this chapter we will learn about the Trace Library and the Interactive Debugger
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Loading the Trace library
+
+Loading the Trace library
+=========================
+
+To start using the Trace library, We must load it first!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Trace All Events
+
+Trace All Events
+================
+
+The next example demonstrates the Trace library usage to trace all events.
+
+.. code-block:: ring
+
+       # Trace All Events
+       trace(:AllEvents)
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+
+       mytest()
+
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Trace control flow between functions
+
+Trace control flow between functions
+====================================
+
+The next example demonstrates the Trace library usage 
+to trace the control flow between functions.
+
+.. code-block:: ring
+
+       Trace(:Functions)
+
+       test1()
+
+       func test1
+               see :test1 + nl
+               test2()
+
+       func test2
+               see :test2 + nl
+               see test3() + nl
+
+       func test3
+               see :test3 + nl
+               return "test 3 output" 
+       
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Pass Error
+
+Pass Error
+==========
+
+The next example demonstrates the Trace library usage 
+to pass an error!
+
+.. code-block:: ring
+
+       Trace(:PassError)
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               test2() # Runtime Error!
+               see "We can continue!"
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Interactive Debugger
+
+Interactive Debugger
+====================
+
+The next example demonstrates the Trace library usage 
+to use the Interactive Debugger
+
+.. code-block:: ring
+
+       Trace(:Debugger)
+
+       test1()
+       see "good bye!" + nl
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               test2() # Runtime Error!
+               see "After Error!" +nl
+               see "t = " see t see nl
+               see "x = " see x see nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Execute Program Line by Line
+
+Execute Program Line by Line
+============================
+
+The next example demonstrates the Trace library usage 
+to execute the program line by line!
+
+.. code-block:: ring
+
+       Trace(:LineByLine)
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               test2()
+               see "After Error!" +nl
+               see "t = " + t + nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; BreakPoint
+       
+BreakPoint
+==========
+
+The next example demonstrates the Trace library usage 
+to stop at a breakpoint!
+
+.. code-block:: ring
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Disable BreakPoints
+
+Disable BreakPoints
+===================
+
+The next example demonstrates the Trace library usage 
+and how to disable the Breakpoints!
+
+.. code-block:: ring
+
+       NoBreakPoints()
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Using the Interactive Debugger
+               
+Using the Interactive Debugger
+==============================
+
+The next example uses a Breakpoint to open the Interactive Debugger!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+
+Screen Shots:
+
+We have the Interactive Debugger at the Breakpoint!
+
+.. image:: debugshot1.png
+       :alt: Interactive Debugger
+
+We can print the variables values
+
+.. image:: debugshot2.png
+       :alt: Interactive Debugger
+
+We can change the variables values then continue execution
+
+.. image:: debugshot3.png
+       :alt: Interactive Debugger
+
+We can run the Interactive Debugger in the Output Window
+
+.. image:: debugshot4.png
+       :alt: Interactive Debugger
+
diff --git a/docs/en/source/debugshot1.png b/docs/en/source/debugshot1.png
new file mode 100644 (file)
index 0000000..7e7f953
Binary files /dev/null and b/docs/en/source/debugshot1.png differ
diff --git a/docs/en/source/debugshot2.png b/docs/en/source/debugshot2.png
new file mode 100644 (file)
index 0000000..c6ba5b1
Binary files /dev/null and b/docs/en/source/debugshot2.png differ
diff --git a/docs/en/source/debugshot3.png b/docs/en/source/debugshot3.png
new file mode 100644 (file)
index 0000000..56087f6
Binary files /dev/null and b/docs/en/source/debugshot3.png differ
diff --git a/docs/en/source/debugshot4.png b/docs/en/source/debugshot4.png
new file mode 100644 (file)
index 0000000..00d3e47
Binary files /dev/null and b/docs/en/source/debugshot4.png differ
diff --git a/docs/en/source/declarative.txt b/docs/en/source/declarative.txt
new file mode 100644 (file)
index 0000000..b66821c
--- /dev/null
@@ -0,0 +1,349 @@
+.. index:: 
+       single: Declarative Programming; Introduction
+
+===============================================
+Declarative Programming using Nested Structures
+===============================================
+
+In this chapter we are going to learn how to build declarative programming world using nested structures on the top
+of object oriented.
+
+We will learn about
+
+* Creating Objects inside Lists
+* Composition and Returning Objects and Lists by Reference
+* Executing code after the end of object access 
+* Declarative Programming on the top of Object-Oriented
+
+.. index:: 
+       pair: Declarative Programming; Objects inside lists
+
+Creating Objects inside Lists
+=============================
+
+We can create objects inside lists during list definition.
+Also we can add objects to the list at any time using the Add() function or the + operator.
+
+Example:
+
+.. code-block:: ring
+
+       alist = [new point, new point, new point]       # create list contains three objects 
+
+       alist + [1,2,3]                                 # add another item to the list
+
+       see "Item 4 is a list contains 3 items" + nl
+       see alist[4] 
+
+       add(alist , new point)
+       alist + new point
+
+       alist[5] { x = 100 y = 200 z = 300 }
+       alist[6] { x = 50 y = 150 z = 250 }
+
+       see "Object inside item 5" + nl
+       see alist[5]
+       see "Object inside item 6" + nl
+       see alist[6]
+
+       class point x y z
+
+Output:
+
+.. code-block:: ring
+
+       Item 4 is a list contains 3 items
+       1
+       2
+       3
+       Object inside item 5
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       Object inside item 6
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+.. index:: 
+       pair: Declarative Programming; Return object by reference
+
+Composition and Returning Objects and Lists by Reference
+========================================================
+
+When we use composition and have object as one of the class attributes, when we return that object it will be returned by reference.
+
+if the caller used the assignment operator, another copy of the object will be created.
+
+The caller can avoid using the assignment operator and use the returned reference directly to access the object.
+
+The same is done also if the attribute is a list (not object).
+
+.. note:: Objects and Lists are treated using the same rules. When you pass them to function they are passed by reference, 
+       when you return them from functions they are returned by value except if it's an object attribute where a return by reference 
+       will be done.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Container
+       myobj = o1.addobj()     # the assignment will create another copy
+       myobj.x = 100
+       myobj.y = 200
+       myobj.z = 300
+       see o1.aobjs[1]         # print the object inside the container 
+       see myobj               # print the copy
+
+       Class Container
+               aObjs = []
+               func addobj
+                       aobjs + new point
+                       return aobjs[len(aobjs)]        # return object by reference
+
+       Class point 
+               x  = 10
+               y  = 20
+               z  = 30
+
+Output:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+
+Example(2):
+
+.. code-block:: ring
+
+       func main
+               o1 = new screen  {
+                       content[point()] { 
+                               x = 100 
+                               y = 200
+                               z = 300         
+                       }
+                       content[point()] { 
+                               x = 50 
+                               y = 150
+                               z = 250         
+                       }
+               }
+               see o1.content[1]
+               see o1.content[2]
+
+       Class Screen
+               content = []
+               func point
+                       content + new point
+                       return len(content)
+
+       Class point 
+               x  = 10
+               y  = 20
+               z  = 30
+
+Output:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+Example(3):
+
+.. code-block:: ring
+
+       func main
+               o1 = New Screen  {
+                       point() {               # access the object using reference 
+                               x = 100 
+                               y = 200
+                               z = 300         
+                       }
+                       point() {               # access the object using reference 
+                               x = 50 
+                               y = 150
+                               z = 250         
+                       }
+               }
+               see o1.content[1]               
+               see o1.content[2]
+
+       Class Screen
+               content = []
+               func point
+                       content + new point
+                       return content[len(content)]    # return the object by reference
+
+       Class point x=10 y=20 z=30
+
+Output:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+
+.. index:: 
+       pair: Declarative Programming; executing code after the end of object access
+
+Executing code after the end of object access 
+=============================================
+
+We can access an object using { } to use object attributes and methods.
+
+if the object contains a method called BraceEnd(), it will be executed before the end of the object access.
+
+Example: 
+
+.. code-block:: ring
+
+       New Point { See "How are you?" + nl }
+
+       Class Point x y z
+               func braceend
+                       see "I'm fine, Thank you!" + nl
+
+Output:
+
+.. code-block:: ring
+
+       How are you?
+       I'm fine, Thank you!
+
+
+.. index:: 
+       pair: Declarative Programming; Declarative programming on the top of Object-Oriented
+
+Declarative Programming on the top of Object-Oriented
+=====================================================
+
+The next features enable us to build and use declartive programming environment using nested structures on the top of object oriented 
+
+* using {} to access the object attributes and methods
+* BraceEnd() Method
+* returning objects by reference
+* Setter/Getter Methods (optional)
+
+Example: 
+
+.. code-block:: ring
+
+       # Declartive Programming (Nested Structures)
+
+       Screen() 
+       {
+
+               point() 
+               {                       
+                       x = 100 
+                       y = 200
+                       z = 300         
+               }
+
+               point() 
+               {                        
+                       x = 50 
+                       y = 150
+                       z = 250         
+               }
+       }
+
+       # Functions and Classes
+
+       Func screen return new screen
+
+       Class Screen
+
+               content = []
+
+               func point
+                       content + new point
+                       return content[len(content)]    
+
+               func braceend
+                       see "I have " + len(content) + " points!"
+
+       Class point 
+
+               x=10 y=20 z=30
+
+               func braceend           
+                       see self        
+
+Output:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+       I have 2 points!
+
+.. index:: 
+       pair: Declarative Programming; More Beatiful Code
+
+More beautiful Code
+===================
+
+We can get better results and a more beautiful code when we can avoid writing () after the method name
+when the methods doesn't take parameters.
+This feature is not provided directly by the Ring language because there is a difference between object methods
+and object attributes. We can get a similar effect on the syntax of the code when we define a getter method for
+the object attribute. For example instead of defining the point() method. we will define the point attribute then
+the getpoint() method that will be executed once you try to get the value of the point attribute.
+since we write the variable name direcly without () we can write point instead of point() and the method getpoint()
+will create the object and return the object reference for us.
+
+Example:
+
+.. code-block:: ring
+
+       new Container 
+       {
+               Point 
+               { 
+                       x=10 
+                       y=20 
+                       z=30 
+               }
+       }
+
+       Class Container
+               aObjs = []
+               point
+               func getpoint
+                       aObjs + new Point
+                       return aObjs[len(aObjs)]
+
+       Class Point x y z
+               func braceend
+                       see "3D Point" + nl + x + nl + y + nl + z + nl
+
+Output
+
+.. code-block:: ring
+
+       3D Point
+       10
+       20
+       30
+
diff --git a/docs/en/source/demo.txt b/docs/en/source/demo.txt
new file mode 100644 (file)
index 0000000..d6ed7d5
--- /dev/null
@@ -0,0 +1,200 @@
+.. index:: 
+       single: Demo Programs; Introduction
+
+=============
+Demo Programs
+=============
+
+In this chapter we will see simple demo programs
+
+* Language Shell
+* Main Menu
+
+.. index:: 
+       pair: Demo Programs; Language Shell
+
+Language Shell
+==============
+
+We can create simple interactive programming environment using the next program
+
+.. code-block:: ring
+
+       while true 
+               see nl + "code:> "
+               give cCode 
+               try
+                       eval(cCode) 
+               catch
+                       see cCatchError
+               done
+       end
+
+Output:
+
+.. code-block:: ring
+
+       code:> see "hello world"
+       hello world
+       code:> for x = 1 to 10 see x + nl next
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+       code:> func test see "Hello from test" + nl
+
+       code:> test()
+       Hello from test
+
+       code:> bye
+
+.. index:: 
+       pair: Demo Programs; Main Menu
+
+Main Menu
+=========
+
+Example:
+
+.. code-block:: ring
+
+       # Demo Program
+
+       while true
+
+               see "
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               " give nMenu see nl
+
+               # we can use Switch-ON-Other-OFF instead of IF-BUT-ELSE-OK
+
+               Switch nMenu
+               On 1 sayhello() 
+               On 2 Sum()
+               On 3 Stars()
+               On 4 
+                       see "Enter Number : " give x
+                       see "Output : " 
+
+                       Try     
+                               see Fact(number(x))
+                       Catch
+                               see "Error in parameters!" + nl
+                       Done
+
+               On "5" return 
+               Other see "bad option" + nl
+               Off
+
+       end
+
+       func sayhello
+               see "Enter your name ? " give fname
+               see "Hello " + fname + nl
+
+       func sum
+               see "number 1 : " give num1 see "number 2 : " give num2
+               see "Sum : " see 0 + num1 + num2
+
+       func stars
+               for x = 1 to 10
+                       see space(8)
+                       for y = 1 to x see "*" next see nl
+               next
+
+       func fact x if x = 0 return 1 else return x * fact(x-1) ok
+
+       func space x y = "" for t=1 to x y += " " next return y
+
+Output:
+
+.. code-block:: ring
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               1
+
+       Enter your name ? Mahmoud Fayed
+       Hello Mahmoud Fayed
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               2
+
+       number 1 : 3
+       number 2 : 4
+       Sum : 7
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               3
+
+               *
+               **
+               ***
+               ****
+               *****
+               ******
+               *******
+               ********
+               *********
+               **********
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               4
+
+       Enter Number : 5
+       Output : 120
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               5
diff --git a/docs/en/source/deployincloud.txt b/docs/en/source/deployincloud.txt
new file mode 100644 (file)
index 0000000..47267d0
--- /dev/null
@@ -0,0 +1,199 @@
+.. index:: 
+       single: Deploying Web Applications in the Cloud; Introduction
+
+=======================================
+Deploying Web Applications in the Cloud
+=======================================
+
+In this chapter we will learn about deploying Ring Web Applications in the Cloud using Heroku
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Introduction
+
+Introduction
+============
+
+We created a new project and tutorial to explain how to deploy Ring web applications in the Cloud using Heroku
+
+Demo : http://testring.herokuapp.com/
+
+Project : https://github.com/ring-lang/RingWebAppOnHeroku
+
+Heroku Website : https://www.heroku.com/
+
+.. image:: ringincloud.png
+       :alt: Ring Web Application in the Cloud
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Usage
+
+Usage
+=====
+
+To use this project and deploy it on Heroku
+
+(1) Create Heroku account
+
+(2) Open your Heroku account and create new application
+
+Example : testring
+
+Note (You have to select a unique name for your application)
+
+(3) Open the command prompt, Create new folder : MyApp
+
+.. code-block:: none
+
+       md MyApp
+
+(4) Open the application folder
+
+.. code-block:: none
+
+       cd MyApp        
+
+(5) Clone this projet using Git (Don't forget the dot in the end to clone in the current directory)
+
+.. code-block:: none
+
+       git clone https://github.com/ring-lang/RingWebAppOnHeroku .
+
+(6) Login to Heroku (Enter your Email and Password)
+
+.. code-block:: none
+
+       heroku login
+
+(7) Add heroku (remote) to your Git project
+
+change testring to your application name
+
+.. code-block:: none
+
+       heroku git:remote -a testring
+
+(8) Set the buildpacks (So Heroku can know how to support your project)
+
+.. code-block:: none
+
+       heroku buildpacks:add --index 1 https://github.com/ring-lang/heroku-buildpack-apt
+       heroku buildpacks:add --index 2 https://github.com/ring-lang/heroku-buildpack-ring
+
+(9) Now build your project and deploy it
+
+.. code-block:: none
+
+       git push heroku master
+
+(10) Test your project (In the browser)
+
+.. code-block:: none
+
+       heroku open
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Ring source code files and permissions
+
+Ring source code files and permissions
+======================================
+
+To be able to run your new Ring scripts, Set the permission of the file to be executable using Git
+
+For example, if you created a file : myscript.ring
+
+.. code-block:: none
+
+       git update-index --chmod=+x myscript.ring 
+       git commit -m "Update file permission"  
+
+If you are using TortoiseGit, From windows explorer, select the file
+
+Right click ---> Properties ---> Git ---> Executable (+x)
+
+Then commit and deploy!
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Hello World program
+
+Hello World program
+===================
+
+file : ringapp/helloworld.ring
+
+To run it : http://testring.herokuapp.com/ringapp/helloworld.ring
+
+.. code-block:: ring
+
+       #!/app/runring.sh -cgi
+
+       see "content-type: text/html" +nl+nl    
+       see "Hello, World!" + nl
+
+file : ringapp/helloworld2.ring
+
+To run it : http://testring.herokuapp.com/ringapp/helloworld2.ring
+
+.. code-block:: ring
+
+       #!/app/runring.sh -cgi
+       load "weblib.ring"
+       import System.Web
+       new page {
+               text("Hello, World!")
+       }
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Application Database
+
+Application Database
+====================
+
+When you depoly the application, Everything will works directly!
+
+No change is required, but in practice, You will need to update the next files to use your database
+
+There are two scripts to interact with the database (We are using PostgreSQL in the cloud)
+
+You will need to update the connection string in these files if you will use another database
+
+* file: ringapp/database/newdb.ring (We run it using the browser for one time to create the tables)
+* file: ringapp/datalib.ring (Class: Database)
+
+In your practical projects, You can write better code (To be able to change the database)
+
+Also you can create configuration file (To write the connection string in one place)
+
+Database service : https://www.heroku.com/postgres
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Deploying after updates
+
+Deploying after updates
+=======================
+
+Just use Git and commit then push to heroku
+
+file: build.bat contains the next commands for quick tests
+
+.. code-block:: none
+
+       git add .
+       git commit -m "Update RingWebAppOnHeroku"
+       git push heroku master
+       heroku open
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Local Tests
+
+Local Tests
+===========
+
+Local tests using Ring Notepad on Windows (Using local Apache Web Server)
+
+Replace the first line in the file : ringapp/index.ring with
+
+.. code-block:: ring
+
+       #!ring -cgi 
+       
+Then run it from Ring Notepad (Ctrl+F6)
diff --git a/docs/en/source/distribute.txt b/docs/en/source/distribute.txt
new file mode 100644 (file)
index 0000000..6e8c277
--- /dev/null
@@ -0,0 +1,131 @@
+.. index:: 
+       single: Distributing Ring Application; Introduction
+
+==============================
+Distributing Ring Applications
+==============================
+
+In this chapter we will learn about distributing Ring applications.
+
+The next method is old and was used in Ring 1.5 and previous versions!
+
+Starting from Ring 1.6 we have a nice tool called Ring2EXE
+
+Using Ring2EXE we can distribute applications quickly for Windows, Linux and macOS 
+
+Check the Ring2EXE chapter for more information!
+
+
+.. index:: 
+       pair: Distributing Ring Application; Distributing Applications for Microsoft Windows
+
+Distributing Applications for Microsoft Windows
+===============================================
+
+Step 1:
+
+.. code-block:: none
+
+       Copy c:\ring\bin folder to be for example c:\myapp
+
+Step 2:
+
+.. code-block:: none
+
+       Rename c:\myapp\ring.exe to c:\myapp\myapp.exe
+
+Step 3:
+
+.. code-block:: none
+
+       Create a file c:\myapp\ring.ring 
+
+And write
+
+.. code-block:: ring
+
+       Load "myapp.ring"
+
+When you run myapp.exe the file ring.ring will be executed automatically
+
+So your file myapp.ring will be called and executed
+
+Or just rename myapp.ring to ring.ring
+
+It's a fast way to distribute applications.
+
+.. index:: 
+       pair: Distributing Ring Application; Protecting the Source Code
+
+Protecting the Source Code
+==========================
+
+Step 1:
+
+Execute the next command 
+
+.. code-block:: none
+
+       ring myapp.ring -go
+
+This will generate one object file (myapp.ringo) from the project files (*.ring)
+
+Step 2:
+
+.. code-block:: none
+
+       Rename myapp.ringo to ring.ringo
+
+When you run the executable file (ring.exe) or (myapp.exe) the file ring.ringo will be executed.
+
+.. index:: 
+       pair: Distributing Ring Application; The files ring.ring and ring.ringo
+
+The files ring.ring and ring.ringo
+==================================
+
+Ring will run ring.ring or ring.ringo only when
+
+(1) The file exist in the current directory
+(2) No file is passed to (ring.exe) to execute
+
+We added the support to ring.ring (and ring.ringo) for a way to distribute Ring apps (before Ring2EXE)
+
+.. index:: 
+       pair: Distributing Ring Application; Creating Windows Installer
+
+Creating Windows Installer
+==========================
+
+There are many tools that you can use to distribute your application.
+
+Check : nullsoft scriptable install system
+
+URL : http://nsis.sourceforge.net/Main_Page
+
+.. index:: 
+       pair: Distributing Ring Application; Using C/C++ Compiler and Linker
+
+Using C/C++ Compiler and Linker
+===============================
+
+Another method to distribute applications is to use a C/C++ compiler.
+
+Ring can be embedded in C/C++ projects, We can create executable files using a C/C++ compiler
+by embedding the Ring language in our project.
+
+Check the "Embedding Ring Language in C/C++ Programs" chapter.
+
+Using this way we will avoid using ring.ring or ring.ringo files.
+
+.. index:: 
+       pair: Distributing Ring Application; Distributing Applications and Games for Mobile
+
+Distributing Applications and Games for Mobile
+==============================================
+
+Ring can be embedded in a Qt projects or LibSDL projects to build Mobile applications and Games.
+
+You can build the Qt project or the LibSDL project and get the Android package directly (*.apk)
+
+Check Ring distributions for Mobile development using Qt or LibSDL.
\ No newline at end of file
diff --git a/docs/en/source/distribute_ring2exe.txt b/docs/en/source/distribute_ring2exe.txt
new file mode 100644 (file)
index 0000000..0160bfe
--- /dev/null
@@ -0,0 +1,607 @@
+.. index:: 
+       single: Distributing Ring Application using Ring2EXE; Introduction
+
+=============================================
+Distributing Ring Applications using Ring2EXE
+=============================================
+
+In this chapter we will learn about distributing Ring applications.
+
+Starting from Ring 1.6 we have a nice tool called Ring2EXE (Written in Ring itself)
+
+Using Ring2EXE we can distribute applications quickly for Windows, Linux, macOS and Mobile devices
+
+.. note:: We can use the Distribute Menu in the Ring Notepad application (More Easy)
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Using Ring2EXE
+
+Using Ring2EXE
+==============
+
+.. code-block:: none
+
+               ring2exe filename.ring [Options]
+
+This will set filename.ring as input to the program    
+
+The next files will be generated 
+
+.. code-block:: none
+
+               filename.ringo          (The Ring Object File - by Ring Compiler)
+               filename.c              (The C Source code file
+                                        Contains the ringo file content
+                                        Will be generated by this program)
+               filename_buildvc.bat    (Will be executed to build filename.c using Visual C/C++)
+               filename_buildgcc.bat   (Will be executed to build filename.c using GNU C/C++)
+               filename_buildclang.bat (Will be executed to build filename.c using CLang C/C++)
+               filename.obj            (Will be generated by the Visual C/C++ compiler) 
+               filename.exe            (Will ge generated by the Visual C/C++ Linker)
+               filename                (Executable File - On Linux & MacOS X platforms)
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; How Ring2EXE works?
+
+How Ring2EXE works?
+===================
+
+At first the Ring compiler will be used to generate the Ring object file (*.ringo)
+
+If we have a C compiler (optional), This object file will be embedded inside a C source code file
+
+Then using the C compiler and the Ring library (Contains the Ring Virtual Machine) the executable file
+
+will be generated!
+
+If we don't have a C compiler, the Ring executable will be copied and renamed to your application name
+
+And your Ring object file (*.ringo) will become ring.ringo to be executed at startup of the executable file.
+
+So it's better and easy to have a C compiler on your machine to be used by Ring2EXE. 
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Example
+
+Example 
+=======
+
+We have test.ring contains the next code
+
+.. code-block:: ring
+
+       see "Hello, World!" + nl
+
+To build th executable file for Windows, Linux or macOS
+
+.. code-block:: none
+       
+               ring2exe test.ring 
+
+To run the program (Windows)
+
+.. code-block:: none
+
+               test 
+
+To run the program (Linux and macOS)
+
+.. code-block:: none
+
+               ./test
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Options
+
+Options
+=======
+
+.. code-block:: none
+
+               -keep            : Don't delete Temp. Files
+               -static          : Build Standalone Executable File 
+                                  (Don't use ring.dll/ring.so/ring.dylib)
+               -gui             : Build GUI Application (Hide the Console Window)
+               -dist            : Prepare application for distribution 
+               -allruntime      : Include all libraries in distribution
+               -mobileqt        : Prepare Qt Project to distribute Ring Application for Mobile
+               -noqt            : Remove RingQt from distribution
+               -noallegro       : Remove RingAllegro from distribution
+               -noopenssl       : Remove RingOpenSSL from distribution
+               -nolibcurl       : Remove RingLibCurl from distribution
+               -nomysql         : Remove RingMySQL from distribution
+               -noodbc          : Remove RingODBC from distribution
+               -nosqlite        : Remove RingSQLite from distribution
+               -noopengl        : Remove RingOpenGL from distribution
+               -nofreeglut      : Remove RingFreeGLUT from distribution
+               -nolibzip        : Remove RingLibZip from distribution
+               -noconsolecolors : Remove RingConsoleColors from distribution
+               -nomurmuhash     : Remove RingMurmurHash from distribution
+               -nocruntime      : Remove C Runtime from distribution
+               -qt              : Add RingQt to distribution
+               -allegro         : Add RingAllegro to distribution
+               -openssl         : Add RingOpenSSL to distribution
+               -libcurl         : Add RingLibCurl to distribution
+               -mysql           : Add RingMySQL to distribution
+               -odbc            : Add RingODBC to distribution
+               -sqlite          : Add RingSQLite to distribution
+               -postgresql      : Add RingPostgreSQL to distribution
+               -opengl          : Add RingOpenGL to distribution
+               -freeglut        : Add RingFreeGLUT to distribution
+               -libzip          : Add RingLibZip to distribution
+               -libuv           : Add RingLibuv to distribution
+               -consolecolors   : Add RingConsoleColors to distribution
+               -murmurhash      : Add RingMurmurHash to distribution
+               -cruntime        : Add C Runtime to distribution
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building standalone console application
+
+Building standalone console application
+=======================================
+
+Using the "-static" option we can build executable console application
+
+So we don't have to use ring.dll, ring.so or ring.dylib 
+
+This avoid only the need to Ring dynamic link library
+
+If you are using another libraries, You will need to include it with your application. 
+
+.. code-block:: none
+
+               ring2exe test.ring -static
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Distributing RingAllegro Applications
+
+Distributing RingAllegro Applications
+=====================================
+
+We have test2.ring contains the next code
+
+.. code-block:: ring
+
+
+       # Just a simple program to test Ring2EXE Tool!
+       # Using RingAllegro
+
+       load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+               }     
+
+
+To build the executable file and prepare for distributing the Game
+
+We use "-dist" option and "-allruntime" to include all libraries
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -allruntime
+
+After executing the previous command
+
+On Windows we will have : target/windows folder
+
+On Linux we will have   : target/linux folder
+
+On macOS we will have   : target/macos folder
+
+The previous command will add all of the Ring runtime libraries to our distribution
+
+But we may need only RingAllegro, So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -allegro -cruntime
+
+This will produce smaller size distribution and will avoid the runtime files that we don't need!
+
+
+Also we could use the "-gui" option to hide the console window
+
+So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -gui -allegro -cruntime
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Distributing RingAllegro Applications
+
+Distributing RingQt Applications
+================================
+
+We have test3.ring contains the next code
+
+.. code-block:: ring
+
+       # Just a simple program to test Ring2EXE Tool!
+       # Using RingQt
+
+       load "guilib.ring"
+
+       new qApp {
+               new qWidget() {
+                       setwindowtitle("Hello, World!")
+                       resize(400,400)
+                       show()
+               }
+               exec()
+       }
+
+
+To build the executable file and prepare for distributing the GUI application
+
+We use "-dist" option and "-allruntime" to include all libraries
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -allruntime
+
+After executing the previous command
+
+On Windows we will have : target/windows folder
+
+On Linux we will have   : target/linux folder
+
+On macOS we will have   : target/macos folder
+
+The previous command will add all of the Ring runtime libraries to our distribution
+
+But we may need only RingQt, So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -qt -cruntime
+
+This will produce smaller size distribution and will avoid the runtime files that we don't need!
+
+Also we could use the "-gui" option to hide the console window
+
+So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -gui -qt -cruntime
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Distributing Applications for Mobile using RingQt
+
+Distributing Applications for Mobile using RingQt
+=================================================
+
+To prepare a Qt project for your RingQt application (test3.ring) use the "-mobileqt" option
+
+Example :
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -mobileqt
+
+After executing the previous command, We will have the Qt project in target/mobile/qtproject folder
+
+The main project file will be project.pro which we can open using the Qt Creator IDE.
+
+Also we will have the resource file : project.qrc 
+
+Another important file is our C++ main file : main.cpp
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building the Cards Game for Mobile using RingQt
+
+Building the Cards Game for Mobile using RingQt
+===============================================
+
+For a better example, consider building an Android package for the Cards game that comes with the
+
+Ring language in this folder : ring/application/cards
+
+The Cards game folder contains three files
+
+cards.ring : The Game source code
+
+cards.jpg : The image file used by the game
+
+project.qrc : Resource file to be used with the Qt project
+
+The resource file contains the next content
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>cards.ringo</file>
+                       <file>cards.jpg</file>
+               </qresource>
+       </RCC>
+
+We have two files in the resource file
+
+The first file is cards.ringo (The Ring Object File) and the second file is cards.jpg (The image file)
+
+As a start, Ring2EXE will generate this resource file in target/mobile/qtproject/project.qrc
+
+But this file will contains only cards.ringo (That Ring2EXE will generate by calling Ring compiler)
+
+We need to update this resource file to add the image file : cards.jpg 
+
+After this update, we copy the resource file to the main application folder
+
+So when we use Ring2EXE again, Our updated resource file will be used!
+
+Now to build the cards game for Mobile
+
+(1) Run the next command
+
+.. code-block:: none
+
+       ring2exe cards.ring -dist -mobileqt
+
+(2) Open target/mobile/qtproject/project.pro using Qt creator
+
+(3) Build and Run using Qt Creator 
+
+
+How the Cards game will find the image file ?
+
+RingQt comes with a simple function : AppFile() that we can use to determine the files that we may
+
+access on Desktop or Mobile platforms
+
+The next code from cards.ring
+
+.. code-block:: ring
+
+       mypic = new QPixmap(AppFile("cards.jpg"))
+
+So all what you need is using AppFile() function around your image files!
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building the Weight History Application for Mobile using RingQt
+
+Building the Weight History Application for Mobile using RingQt
+===============================================================
+
+Another example to distribute your application for Mobile Devices using Ring2EXE and Qt
+
+consider building an Android package for the Weight History application that comes with the
+
+Ring language in this folder : ring/application/weighthistory 
+
+The Weight History application folder contains four files
+
+weighthistory.ring : The application source code
+
+weighthistory.db  : The SQLite database
+
+project.qrc : The resource file for the Qt project
+
+main.cpp : The main C++ source file for the Qt project
+
+To build the Weight History application for Mobile
+
+(1) Run the next command
+
+.. code-block:: none
+
+       ring2exe weighthistory.ring -dist -mobileqt
+
+(2) Open target/mobile/qtproject/project.pro using Qt creator
+
+(3) Build and Run using Qt Creator 
+
+The resource file (project.qrc) contains two files
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>weighthistory.ringo</file>
+                       <file>weighthistory.db</file>
+               </qresource>
+       </RCC>
+
+The first file is weighthistory.ringo (Ring Object File - Generated by Ring2EXE by calling Ring compiler)
+
+The database file : weighthistory.db
+
+The main.cpp contains the next little update, To copy the database file from resources to a writable location
+
+on the mobile device
+
+.. code-block:: none
+
+    QString path3 ;
+    path3 = path+"/weighthistory.db";
+    QFile::copy(":/weighthistory.db",path3);
+
+You will need to do this with database files only!
+
+When we use Ring2EXE, the tool will check for project.qrc and main.cpp, if they exist then your updated
+
+files will be used in target/mobile/qtproject instead of the default version generated by Ring2EXE
+
+So Use Ring2EXE to generate these files, Then copy them to your application folder when you update them.
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building the Form Designer for Mobile using RingQt
+
+Building the Form Designer for Mobile using RingQt
+==================================================
+
+To build the Form Designer application (ring/applications/formdesigner) for Mobile
+
+(1) Run the next command
+
+.. code-block:: none
+
+       ring2exe formdesigner.ring -dist -mobileqt
+
+(2) Open target/mobile/qtproject/project.pro using Qt creator
+
+(3) Build and Run using Qt Creator 
+
+in the folder ring/application/formdesigner You will find the resource file : project.qrc
+
+It will be used automatically by Ring2EXE 
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>formdesigner.ringo</file>
+                       <file>image/allevents.png</file>
+                       <file>image/checkbox.png</file>
+                       <file>image/close.png</file>
+                       <file>image/combobox.bmp</file>
+                       <file>image/datepicker.bmp</file>
+                       <file>image/dial.png</file>
+                       <file>image/formdesigner.png</file>
+                       <file>image/frame.png</file>
+                       <file>image/grid.bmp</file>
+                       <file>image/hyperlink.png</file>
+                       <file>image/image.png</file>
+                       <file>image/label.png</file>
+                       <file>image/layout.png</file>
+                       <file>image/lcdnumber.png</file>
+                       <file>image/listview.png</file>
+                       <file>image/lock.png</file>
+                       <file>image/new.png</file>
+                       <file>image/open.png</file>
+                       <file>image/progressbar.png</file>
+                       <file>image/project.png</file>
+                       <file>image/pushbutton.png</file>
+                       <file>image/radiobutton.png</file>
+                       <file>image/save.png</file>
+                       <file>image/saveas.png</file>
+                       <file>image/select.png</file>
+                       <file>image/slider.png</file>
+                       <file>image/spinner.bmp</file>
+                       <file>image/statusbar.png</file>
+                       <file>image/tab.png</file>
+                       <file>image/textarea.png</file>
+                       <file>image/textfield.png</file>
+                       <file>image/timer.png</file>
+                       <file>image/toolbar.png</file>
+                       <file>image/tree.bmp</file>
+                       <file>image/videowidget.png</file>
+                       <file>image/webview.png</file>
+               </qresource>
+       </RCC>
+
+As we did in the Cards game, The Form Designer will use the AppFile() function to determine the
+name of the Image files.
+
+The next code from ring/applications/formdesigner/mainwindow/formdesignerview.ring
+
+.. code-block:: ring
+
+       func CreateToolBar
+               aBtns = [
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/new.png"))
+                                       setclickevent(Method(:NewAction))
+                                       settooltip("New File")
+                               } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/open.png"))
+                                       setclickevent(Method(:OpenAction))
+                                       settooltip("Open File")
+                               } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/save.png"))
+                                       setclickevent(Method(:SaveAction))
+                                       settooltip("Save")
+                                } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/saveas.png"))
+                                       setclickevent(Method(:SaveAsAction))
+                                       settooltip("Save As")
+                                } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/close.png"))
+                                       setclickevent(Method(:ExitAction))
+                                       settooltip("Exit")
+                               }
+                       ]
+
+               tool1 = win.addtoolbar("files")  {
+                       for x in aBtns { addwidget(x) addseparator() }
+               }
+
+From this example, We know that we can use sub folders for images.
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Creating the Qt resource file using Folder2qrc
+
+Creating the Qt resource file using Folder2qrc
+==============================================
+
+When we have large RingQt project that contains a lot of images and files, We need to add these files 
+to the resource file ( *.qrc ) when distributing applications for Mobile devices. 
+
+Instead of adding these files one by one, Ring 1.6 comes with a simple tool that save our time, It's
+called Folder2qrc.
+
+Example:
+
+.. code-block:: none
+
+       folder2qrc formdesigner.ring
+
+We determine the main source file while we are in the application folder, and Folder2qrc will check all
+of the files in the current folder and sub folders, Then add them to the resource file after the
+mainfile.ringo (In our example this will be formdesigner.ringo)
+
+The output file will be : project.qrc
+
+You can open it and remove the files that you don't need in the resources!
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Important Information about Ring2EXE
+
+Important Information about Ring2EXE
+====================================
+
+* Using Ring2EXE to prepare distribution will delete all of the files in the old distribution
+
+for example, if you have target/windows folder then used
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -allruntime
+
+The files in target/windows will be deleted before adding the files again
+
+This is important when you prepare a distribution for Mobile devices
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -mobileqt
+
+If you modified the resource file : project.qrc or the main file : main.cpp
+
+Don't forget to copy them to the application folder!
+
+So Ring2EXE can use the updated version if you tried the previous command again!
+
+* Ring2EXE is written in Ring, and you can read the source code from
+
+       https://github.com/ring-lang/ring/blob/master/ring2exe/ring2exe.ring
+
+* The libraries information are stored in a separated files, So these files can be updated in the future
+automatically to support new libraries
+
+       https://github.com/ring-lang/ring/blob/master/ring2exe/libs
+
diff --git a/docs/en/source/dssapp.png b/docs/en/source/dssapp.png
new file mode 100644 (file)
index 0000000..34b1e25
Binary files /dev/null and b/docs/en/source/dssapp.png differ
diff --git a/docs/en/source/editor1.png b/docs/en/source/editor1.png
new file mode 100644 (file)
index 0000000..57aeaf7
Binary files /dev/null and b/docs/en/source/editor1.png differ
diff --git a/docs/en/source/editor2.png b/docs/en/source/editor2.png
new file mode 100644 (file)
index 0000000..2301202
Binary files /dev/null and b/docs/en/source/editor2.png differ
diff --git a/docs/en/source/editor3.jpg b/docs/en/source/editor3.jpg
new file mode 100644 (file)
index 0000000..1db0ab1
Binary files /dev/null and b/docs/en/source/editor3.jpg differ
diff --git a/docs/en/source/editor4.jpg b/docs/en/source/editor4.jpg
new file mode 100644 (file)
index 0000000..dc00a5d
Binary files /dev/null and b/docs/en/source/editor4.jpg differ
diff --git a/docs/en/source/editor5.png b/docs/en/source/editor5.png
new file mode 100644 (file)
index 0000000..800a900
Binary files /dev/null and b/docs/en/source/editor5.png differ
diff --git a/docs/en/source/embedding.txt b/docs/en/source/embedding.txt
new file mode 100644 (file)
index 0000000..590eec7
--- /dev/null
@@ -0,0 +1,158 @@
+.. index:: 
+       single: Embedding Ring Language in C/C++ Programs; Introduction
+
+=============================================
+Embedding Ring Language in C/C++ Programs
+=============================================
+
+We can use the Ring language from C/C++ programs using the next functions
+
+.. code-block:: C
+
+       RingState *ring_state_init();
+       ring_state_runcode(RingState *pState,const char *cCode);
+       ring_state_delete(RingState *pState);
+
+.. index:: 
+       pair: Embedding Ring Language in C/C++ Programs; Ring State
+
+Ring State
+==========
+
+The idea is to use the ring_state_init() to create new state for the Ring Language
+then call the ring_state_runcode() function to execut Ring code using the same state.
+When we are done, we call the ring_state_delete() to free the memory.
+
+Example:
+
+.. code-block:: C
+
+       #include "ring.h"
+       #include "stdlib.h"
+       int main(int argc, char *argv[])
+       {       
+         RingState *pState = ring_state_init();
+         printf("welcome\n");
+         ring_state_runcode(pState,"see 'hello world from the ring programming language'+nl");
+         ring_state_delete(pState);
+       }
+
+Output:
+
+.. code-block:: C
+
+       welcome
+       hello world from the ring programming language
+
+.. index:: 
+       pair: Embedding Ring Language in C/C++ Programs; Ring State Functions
+
+Ring State Functions
+====================
+
+The Ring API comes with the next functions to create and delete the state.
+Also we have functions to create new variables and get variables values.
+
+.. code-block:: C
+
+       RingState * ring_state_init ( void ) ;
+       RingState * ring_state_delete ( RingState *pRingState ) ;
+       void ring_state_runcode ( RingState *pRingState,const char *cStr ) ;
+       List * ring_state_findvar ( RingState *pRingState,const char *cStr ) ;
+       List * ring_state_newvar ( RingState *pRingState,const char *cStr ) ;
+       void ring_state_main ( int argc, char *argv[] ) ;
+       void ring_state_runfile ( RingState *pRingState,const char *cFileName ) ;
+       void ring_state_runobjectfile ( RingState *pRingState,const char *cFileName ) ;
+
+.. index:: 
+       pair: Embedding Ring Language in C/C++ Programs; Ring State Variables
+
+Ring State Variables
+====================
+
+We can create more than one ring state in the same program and we can create and modify variable values.
+
+To get the variable list we can use the ring_state_findvar() function.
+
+To create new variable we can use the ring_state_newvar() function.
+
+Example:
+
+.. code-block:: C
+
+       #include "ring.h"
+       #include "stdlib.h"
+       
+       int main(int argc, char *argv[])
+       {
+         List *pList;
+
+         RingState *pState = ring_state_init();
+         RingState *pState2 = ring_state_init();
+
+         printf("welcome\n");
+         ring_state_runcode(pState,"see 'hello world from the ring programming language'+nl");
+
+         printf("Again from C we will call ring code\n");
+         ring_state_runcode(pState,"for x = 1 to 10 see x + nl next");
+
+         ring_state_runcode(pState2,"for x = 1 to 5 see x + nl next");
+
+         printf("Now we will display the x variable value from ring code\n");
+         ring_state_runcode(pState,"see 'x value : ' + x + nl ");
+         ring_state_runcode(pState2,"see 'x value : ' + x + nl ");
+
+         pList = ring_state_findvar(pState,"x");
+
+         printf("Printing Ring variable value from C , %.0f\n",
+                       ring_list_getdouble(pList,RING_VAR_VALUE));
+
+         printf("now we will set the ring variable value from C\n");
+         ring_list_setdouble(pList,RING_VAR_VALUE,20);
+
+         ring_state_runcode(pState,"see 'x value after update : ' + x + nl ");
+
+         pList = ring_state_newvar(pState,"v1");
+         ring_list_setdouble(pList,RING_VAR_VALUE,10); 
+
+         pList = ring_state_newvar(pState,"v2");
+         ring_list_setdouble(pList,RING_VAR_VALUE,20);
+
+         ring_state_runcode(pState,"see 'v1 + v2 = ' see v1+v2 see nl");
+
+         ring_state_runcode(pState,"see 'end of test' + nl");
+
+         ring_state_delete(pState);
+         ring_state_delete(pState2);
+       }
+
+Output:
+
+.. code-block:: ring
+
+       welcome
+       hello world from the ring programming language
+       Again from C we will call ring code
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       1
+       2
+       3
+       4
+       5
+       Now we will display the x variable value from ring code
+       x value : 11
+       x value : 6
+       Printing Ring variable value from C , 11
+       now we will set the ring variable value from C
+       x value after update : 20
+       v1 + v2 = 30
+       end of test
\ No newline at end of file
diff --git a/docs/en/source/empapp.png b/docs/en/source/empapp.png
new file mode 100644 (file)
index 0000000..14a8945
Binary files /dev/null and b/docs/en/source/empapp.png differ
diff --git a/docs/en/source/evaldebug.txt b/docs/en/source/evaldebug.txt
new file mode 100644 (file)
index 0000000..bb862fc
--- /dev/null
@@ -0,0 +1,204 @@
+.. index:: 
+       single: Eval() and Debugging; Introduction
+
+====================
+Eval() and Debugging
+====================
+
+In this chapter we are going to learn about
+
+* Error Handling using Try/Catch/Done
+
+* Eval() function
+
+* Raise() function
+
+* Assert() function
+
+.. index:: 
+       pair: Eval() and Debugging; Try/Carch/Done
+
+Try/Catch/Done
+==============
+
+Syntax:
+
+.. code-block:: ring
+
+       Try
+               Statements...
+       Catch
+               Statements...
+       Done
+
+The statements in the Try block will be executed, if any error happens then
+the statements in the catch block will be executed.
+
+Inside the catch block we can use the variable cCatchError to get the error message
+
+Example:
+
+.. code-block:: ring
+
+       Try
+               see 5/0
+       Catch
+               see "Catch!" + nl + cCatchError
+       Done
+
+Output:
+
+.. code-block:: ring
+
+       Catch!
+       Error (R1) : Cann't divide by zero !
+
+
+.. index:: 
+       pair: Eval() and Debugging; Eval()
+
+Eval() Function
+===============
+
+We can execute code during the runtime from string using the Eval() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Eval(cCode)
+
+Example:
+
+.. code-block:: ring
+
+       Eval("nOutput = 5+2*5 " )
+       See "5+2*5 = " + nOutput + nl                    
+       Eval("for x = 1 to 10 see x + nl next")          
+       Eval("func test see 'message from test!' ")      
+       test()
+
+Output:
+
+.. code-block:: ring
+
+       5+2*5 = 15
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       message from test!
+
+
+We can use the Return command to return a value
+
+Example:
+
+.. code-block:: ring
+
+       see Eval("return 5*5")
+
+Output:
+
+.. code-block:: ring
+
+       25
+
+.. index:: 
+       pair: Eval() and Debugging; Raise()
+
+Raise() Function
+================
+
+We can raise an exception using the Raise() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Raise(cErrorMessage)
+
+The function will display the error message then end the execution of the program.
+
+We can use Try/Catch/Done to avoid exceptions generated by raise() function.
+
+Example:
+
+.. code-block:: ring
+
+       nMode = 10
+
+       if nMode < 0 or nMode > 5
+               raise("Error : nMode not in the range 1:4")
+       ok
+
+Output:
+
+.. code-block:: ring
+
+       Line 4 Error : nMode not in the range 1:4
+       In raise in file tests\raise.ring
+
+Example:
+
+.. code-block:: ring
+
+       try 
+               testmode(6)
+       catch
+               see "avoid raise!"
+       done
+
+       testmode(-1)
+
+       func testmode nMode
+
+               if nMode < 0 or nMode > 5
+                       raise("Error : nMode not in the range 1:4")
+               ok
+
+Output:
+
+.. code-block:: ring
+
+       avoid raise!
+       Line 12 Error : nMode not in the range 1:4
+       In raise In function testmode() in file tests\raise2.ring
+       called from line 7  in file tests\raise2.ring
+
+.. index:: 
+       pair: Eval() and Debugging; Assert()
+
+Assert() Function
+=================
+
+We can use the Assert() function to test conditions before executing the code
+
+If the test fail the program will be terminated with an error message contains the assert condition.
+
+Syntax:
+
+.. code-block:: ring
+
+       Assert( condition )
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       assert( x = 10)
+       assert( x = 100 ) 
+
+Output:
+
+.. code-block:: ring
+
+       Line 3 Assertion Failed!
+       In assert in file tests\assert.ring
diff --git a/docs/en/source/ex10.jpg b/docs/en/source/ex10.jpg
new file mode 100644 (file)
index 0000000..c7d34b4
Binary files /dev/null and b/docs/en/source/ex10.jpg differ
diff --git a/docs/en/source/ex11.jpg b/docs/en/source/ex11.jpg
new file mode 100644 (file)
index 0000000..bd10d2e
Binary files /dev/null and b/docs/en/source/ex11.jpg differ
diff --git a/docs/en/source/ex12.jpg b/docs/en/source/ex12.jpg
new file mode 100644 (file)
index 0000000..d5587de
Binary files /dev/null and b/docs/en/source/ex12.jpg differ
diff --git a/docs/en/source/ex12r.jpg b/docs/en/source/ex12r.jpg
new file mode 100644 (file)
index 0000000..d7da373
Binary files /dev/null and b/docs/en/source/ex12r.jpg differ
diff --git a/docs/en/source/ex13.jpg b/docs/en/source/ex13.jpg
new file mode 100644 (file)
index 0000000..5bfbacc
Binary files /dev/null and b/docs/en/source/ex13.jpg differ
diff --git a/docs/en/source/ex14.jpg b/docs/en/source/ex14.jpg
new file mode 100644 (file)
index 0000000..fa8d512
Binary files /dev/null and b/docs/en/source/ex14.jpg differ
diff --git a/docs/en/source/ex15.jpg b/docs/en/source/ex15.jpg
new file mode 100644 (file)
index 0000000..576bbe8
Binary files /dev/null and b/docs/en/source/ex15.jpg differ
diff --git a/docs/en/source/ex16.jpg b/docs/en/source/ex16.jpg
new file mode 100644 (file)
index 0000000..c2c5051
Binary files /dev/null and b/docs/en/source/ex16.jpg differ
diff --git a/docs/en/source/ex17.jpg b/docs/en/source/ex17.jpg
new file mode 100644 (file)
index 0000000..4dc5b73
Binary files /dev/null and b/docs/en/source/ex17.jpg differ
diff --git a/docs/en/source/ex18.jpg b/docs/en/source/ex18.jpg
new file mode 100644 (file)
index 0000000..3d92b66
Binary files /dev/null and b/docs/en/source/ex18.jpg differ
diff --git a/docs/en/source/ex19.jpg b/docs/en/source/ex19.jpg
new file mode 100644 (file)
index 0000000..702808c
Binary files /dev/null and b/docs/en/source/ex19.jpg differ
diff --git a/docs/en/source/ex1_basicshapes.png b/docs/en/source/ex1_basicshapes.png
new file mode 100644 (file)
index 0000000..8f4fe48
Binary files /dev/null and b/docs/en/source/ex1_basicshapes.png differ
diff --git a/docs/en/source/ex20.jpg b/docs/en/source/ex20.jpg
new file mode 100644 (file)
index 0000000..fb03f57
Binary files /dev/null and b/docs/en/source/ex20.jpg differ
diff --git a/docs/en/source/ex21.jpg b/docs/en/source/ex21.jpg
new file mode 100644 (file)
index 0000000..360d3f2
Binary files /dev/null and b/docs/en/source/ex21.jpg differ
diff --git a/docs/en/source/ex21_2.jpg b/docs/en/source/ex21_2.jpg
new file mode 100644 (file)
index 0000000..9c7cb82
Binary files /dev/null and b/docs/en/source/ex21_2.jpg differ
diff --git a/docs/en/source/ex22.jpg b/docs/en/source/ex22.jpg
new file mode 100644 (file)
index 0000000..d3f0e6f
Binary files /dev/null and b/docs/en/source/ex22.jpg differ
diff --git a/docs/en/source/ex23.jpg b/docs/en/source/ex23.jpg
new file mode 100644 (file)
index 0000000..0ca8c02
Binary files /dev/null and b/docs/en/source/ex23.jpg differ
diff --git a/docs/en/source/ex24.jpg b/docs/en/source/ex24.jpg
new file mode 100644 (file)
index 0000000..4ba5ad6
Binary files /dev/null and b/docs/en/source/ex24.jpg differ
diff --git a/docs/en/source/ex24_2.jpg b/docs/en/source/ex24_2.jpg
new file mode 100644 (file)
index 0000000..74377d8
Binary files /dev/null and b/docs/en/source/ex24_2.jpg differ
diff --git a/docs/en/source/ex25.jpg b/docs/en/source/ex25.jpg
new file mode 100644 (file)
index 0000000..3d9c4de
Binary files /dev/null and b/docs/en/source/ex25.jpg differ
diff --git a/docs/en/source/ex26.jpg b/docs/en/source/ex26.jpg
new file mode 100644 (file)
index 0000000..925901d
Binary files /dev/null and b/docs/en/source/ex26.jpg differ
diff --git a/docs/en/source/ex28.jpg b/docs/en/source/ex28.jpg
new file mode 100644 (file)
index 0000000..d4735e8
Binary files /dev/null and b/docs/en/source/ex28.jpg differ
diff --git a/docs/en/source/ex4.jpg b/docs/en/source/ex4.jpg
new file mode 100644 (file)
index 0000000..82ec53d
Binary files /dev/null and b/docs/en/source/ex4.jpg differ
diff --git a/docs/en/source/ex5.jpg b/docs/en/source/ex5.jpg
new file mode 100644 (file)
index 0000000..ff19ab6
Binary files /dev/null and b/docs/en/source/ex5.jpg differ
diff --git a/docs/en/source/ex6.jpg b/docs/en/source/ex6.jpg
new file mode 100644 (file)
index 0000000..ea52801
Binary files /dev/null and b/docs/en/source/ex6.jpg differ
diff --git a/docs/en/source/ex7.jpg b/docs/en/source/ex7.jpg
new file mode 100644 (file)
index 0000000..e34e60d
Binary files /dev/null and b/docs/en/source/ex7.jpg differ
diff --git a/docs/en/source/ex8.jpg b/docs/en/source/ex8.jpg
new file mode 100644 (file)
index 0000000..4ea8d7c
Binary files /dev/null and b/docs/en/source/ex8.jpg differ
diff --git a/docs/en/source/ex9.jpg b/docs/en/source/ex9.jpg
new file mode 100644 (file)
index 0000000..d7bbac8
Binary files /dev/null and b/docs/en/source/ex9.jpg differ
diff --git a/docs/en/source/extension.txt b/docs/en/source/extension.txt
new file mode 100644 (file)
index 0000000..73d5a35
--- /dev/null
@@ -0,0 +1,720 @@
+.. index:: 
+       single: Extension; Introduction
+
+===================================
+Extension using the C/C++ languages
+===================================
+
+We can extend the Ring Virtual Machine (RingVM) by adding new functions written in the C programming language or C++. 
+The RingVM comes with many functions written in C that we can call like any Ring function.
+
+We can extend the language by writing new functions then rebuilding the RingVM again, or we can create shared 
+library (DLL/So) file to extend the RingVM without the need to rebuild it.
+
+The Ring language source code comes with two files to add new modules to the RingVM, ring_ext.h and ring_ext.c
+
+.. index:: 
+       pair: Extension; ring_ext.h
+
+ring_ext.h
+==========
+
+The file ring_ext.h contains constants that we can change to include/exclude modules during the build process.
+
+.. code-block:: C
+
+       #ifndef ringext_h
+       #define ringext_h
+       /* Constants */
+       #define RING_VM_LISTFUNCS       1
+       #define RING_VM_REFMETA         1
+       #define RING_VM_MATH            1
+       #define RING_VM_FILE            1
+       #define RING_VM_OS              1
+       #define RING_VM_MYSQL           1
+       #define RING_VM_ODBC            1
+       #define RING_VM_OPENSSL         1
+       #define RING_VM_CURL            1
+       #define RING_VM_DLL             1
+       #endif
+
+
+.. index:: 
+       pair: Extension; ring_ext.c
+
+ring_ext.c
+==========
+
+The file ring_ext.c check constants defined in ring_ext.h before calling the start-up function in each module.
+
+Each module contains a function that register the module functions in the RingVM.
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       void ring_vm_extension ( RingState *pRingState )
+       {
+               /* Reflection and Meta-programming */
+               #if RING_VM_REFMETA
+                       ring_vm_refmeta_loadfunctions(pRingState);
+               #endif
+               /* List Functions */
+               #if RING_VM_LISTFUNCS
+                       ring_vm_listfuncs_loadfunctions(pRingState);
+               #endif
+               /* Math */
+               #if RING_VM_MATH
+                       ring_vm_math_loadfunctions(pRingState);
+               #endif
+               /* File */
+               #if RING_VM_FILE
+                       ring_vm_file_loadfunctions(pRingState);
+               #endif
+               /* OS */
+               #if RING_VM_OS
+                       ring_vm_os_loadfunctions(pRingState);
+               #endif
+               /* MySQL */
+               #if RING_VM_MYSQL
+                       ring_vm_mysql_loadfunctions(pRingState);
+               #endif
+               /* ODBC */
+               #if RING_VM_ODBC
+                       ring_vm_odbc_loadfunctions(pRingState);
+               #endif
+               /* OPENSSL */
+               #if RING_VM_OPENSSL
+                       ring_vm_openssl_loadfunctions(pRingState);
+               #endif
+               /* CURL */
+               #if RING_VM_CURL
+                       ring_vm_curl_loadfunctions(pRingState);
+               #endif
+               /* DLL */
+               #if RING_VM_DLL
+                       ring_vm_dll_loadfunctions(pRingState);
+               #endif
+       }
+
+.. index:: 
+       pair: Extension; Module Organization
+
+Module Organization
+===================
+
+Each module starts by include the ring header file (ring.h).
+This files contains the Ring API that we can use to extend the RingVM.
+
+Each module comes with a function to register the module functions in the RingVM 
+The registration is done by using ring_vm_funcregister() function.
+
+
+The ring_vm_funcregister() function takes two parameters, the first is the function name
+that will be used by Ring programs to call the function. The second parameter is the 
+function pointer in the C program.
+
+for example, the ring_vmmath.c module contains the next code to register the module functions
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       void ring_vm_math_loadfunctions ( RingState *pRingState )
+       {
+               ring_vm_funcregister("sin",ring_vm_math_sin);
+               ring_vm_funcregister("cos",ring_vm_math_cos);
+               ring_vm_funcregister("tan",ring_vm_math_tan);
+               ring_vm_funcregister("asin",ring_vm_math_asin);
+               ring_vm_funcregister("acos",ring_vm_math_acos);
+               ring_vm_funcregister("atan",ring_vm_math_atan);
+               ring_vm_funcregister("atan2",ring_vm_math_atan2);
+               ring_vm_funcregister("sinh",ring_vm_math_sinh);
+               ring_vm_funcregister("cosh",ring_vm_math_cosh);
+               ring_vm_funcregister("tanh",ring_vm_math_tanh);
+               ring_vm_funcregister("exp",ring_vm_math_exp);
+               ring_vm_funcregister("log",ring_vm_math_log);
+               ring_vm_funcregister("log10",ring_vm_math_log10);
+               ring_vm_funcregister("ceil",ring_vm_math_ceil);
+               ring_vm_funcregister("floor",ring_vm_math_floor);
+               ring_vm_funcregister("fabs",ring_vm_math_fabs);
+               ring_vm_funcregister("pow",ring_vm_math_pow);
+               ring_vm_funcregister("sqrt",ring_vm_math_sqrt);
+               ring_vm_funcregister("unsigned",ring_vm_math_unsigned);
+               ring_vm_funcregister("decimals",ring_vm_math_decimals);
+               ring_vm_funcregister("murmur3hash",ring_vm_math_murmur3hash);
+       }
+
+.. tip:: Remember that the function ring_vm_math_loadfunctions() will be called by the 
+                ring_vm_extension() function (in the ring_ext.c file). 
+
+.. index:: 
+       pair: Extension; Function Structure
+
+Function Structure
+==================
+
+Each module function may contains the next steps
+
+1 - Check Parameters Count
+
+2 - Check Parameters Type
+
+3 - Get Parameters Values
+
+4 - Execute Code/Call Functions
+
+5 - Return Value
+
+The structure is very similar to any function (Input - Process - Output)
+But here we will use the Ring API for the steps 1,2,3 and 5.
+
+
+.. index:: 
+       pair: Extension; Check Parameters Count
+
+Check Parameters Count
+======================
+
+We can check the parameters count using the RING_API_PARACOUNT macro.
+
+We can compare RING_API_PARACOUNT with any numeric value using == or != operators.
+
+
+Example:
+
+.. code-block:: C
+
+       if ( RING_API_PARACOUNT != 1 ) {
+               /* code */
+       }
+
+       
+Example:
+
+.. code-block:: C
+
+       if ( RING_API_PARACOUNT == 1 ) {
+               /* code */
+       }
+
+.. index:: 
+       pair: Extension; Display Error Message
+
+Display Error Message
+=====================
+
+We can display error messages using the RING_API_ERROR() function.
+
+The function will display the error and end the execution of the program.
+
+.. note:: the behaviour of this function can be changed by the Ring code 
+                 using Try/Catch/Done statements, so in your C code, use Return after this function.
+                 
+
+Syntax:
+
+.. code-block:: C
+
+       RING_API_ERROR(const char *cErrorMsg);
+       
+
+The Ring API comes with some of predefined error messages that we can use
+
+.. code-block:: C
+
+       #define RING_API_MISS1PARA "Bad parameters count, the function expect one parameter"
+       #define RING_API_MISS2PARA "Bad parameters count, the function expect two parameters"
+       #define RING_API_MISS3PARA "Bad parameters count, the function expect three parameters"
+       #define RING_API_MISS4PARA "Bad parameters count, the function expect four parameters"
+       #define RING_API_BADPARATYPE    "Bad parameter type!"
+       #define RING_API_BADPARACOUNT   "Bad parameters count!"
+       #define RING_API_BADPARARANGE   "Bad parameters value, error in range!"
+       #define RING_API_NOTPOINTER     "Error in parameter, not pointer!"
+       #define RING_API_NULLPOINTER    "Error in parameter, NULL pointer!"
+       #define RING_API_EMPTYLIST      "Bad parameter, empty list!"
+
+.. index:: 
+       pair: Extension; Check Parameters Type
+
+Check Parameters Type
+=====================
+
+We can check the parameter type using the next functions
+
+.. code-block:: C
+
+       int RING_API_ISNUMBER(int nParameterNumber);
+       int RING_API_ISSTRING(int nParameterNumber);
+       int RING_API_ISLIST(int nParameterNumber);
+       int RING_API_ISPOINTER(int nParameterNumber);
+
+The output of these functions will be 1 (True) or 0 (False).   
+
+.. index:: 
+       pair: Extension; Get Parameters Values
+
+Get Parameters Values
+=====================
+
+We can get paramters values using the next functions
+
+.. code-block:: C
+
+       double RING_API_GETNUMBER(int nParameterNumber);
+       const char *RING_API_GETSTRING(int nParameterNumber);
+       int RING_API_GETSTRINGSIZE(int nParameterNumber);
+       List *RING_API_GETLIST(int nParameterNumber);
+       void *RING_API_GETCPOINTER(int nParameterNumber, const char *cPoinerType);
+       int RING_API_GETPOINTERTYPE(int nParameterNumber);
+
+       
+.. index:: 
+       pair: Extension; Return Value
+
+Return Value
+============
+
+We can return values from our function using the next functions.
+
+.. code-block:: C
+
+       RING_API_RETNUMBER(double nValue);
+       RING_API_RETSTRING(const char *cString);
+       RING_API_RETSTRING2(const char *cString,int nStringSize);
+       RING_API_RETLIST(List *pList);
+       RING_API_RETCPOINTER(void *pValue,const char *cPointerType);
+       RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                       void (* pFreeFunc)(void *,void *))
+
+.. index:: 
+       pair: Extension; Function Prototype
+
+
+Function Prototype
+==================
+
+When we define new function to be used for RingVM extension, we use the next prototype
+
+.. code-block:: C
+
+       void my_function_name( void *pPointer );
+       
+or we can use the RING_FUNC() Macro
+
+.. code-block:: C
+
+       RING_FUNC(my_function_name);
+
+       
+.. index:: 
+       pair: Extension; Sin() Implementation
+
+Sin() Function Implementation
+=============================
+
+The next code represents the sin() function implementation using the Ring API and 
+the sin() C function.
+
+
+.. code-block:: C
+
+       void ring_vm_math_sin ( void *pPointer )
+       {
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISNUMBER(1) ) {
+                       RING_API_RETNUMBER(sin(RING_API_GETNUMBER(1)));
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+
+.. index:: 
+       pair: Extension; Fopen() and Fclose() Implementation
+
+Fopen() and Fclose() Functions Implementation
+=============================================
+
+The next code represents the fopen() function implementation 
+using the Ring API and the fopen() C Function.
+
+The function takes two parameters, the first parameter is the file name as string.
+The second parameter is the mode as string.
+
+In the file ring_vmfile.h we have some constants to use as the pointer type like
+
+.. code-block:: C
+
+       #define RING_VM_POINTER_FILE    "file"
+       #define RING_VM_POINTER_FILEPOS "filepos"
+
+The function implementation in ring_vmfile.c
+
+.. code-block:: C
+
+       void ring_vm_file_fopen ( void *pPointer )
+       {
+               FILE *fp  ;
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( RING_API_ISSTRING(1) && RING_API_ISSTRING(2) ) {
+                       fp = fopen(RING_API_GETSTRING(1),RING_API_GETSTRING(2));
+                       RING_API_RETCPOINTER(fp,RING_VM_POINTER_FILE);
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+
+The next code represents the fclose() function implementation
+
+.. code-block:: C
+
+       void ring_vm_file_fclose ( void *pPointer )
+       {
+               FILE *fp  ;
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISPOINTER(1) ) {
+                       fp = (FILE *) RING_API_GETCPOINTER(1,RING_VM_POINTER_FILE) ;
+                       if ( fp != NULL ) {
+                               RING_API_RETNUMBER(fclose(fp));
+                               RING_API_SETNULLPOINTER(1);
+                       }
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+From fopen() and fclose() implementation we learned
+
+1 - how to return C pointer using RING_API_RETCPOINTER() function
+
+2 - how to check if the parameter is a pointer using the RING_API_ISPOINTER() function
+
+3 - how to get C pointer value using the RING_API_GETCPOINTER() function
+
+4 - how to set the C pointer variable (in RingVM) to NULL using the RING_API_SETNULLPOINTER() function
+
+.. index:: 
+       pair: Extension; RING API - list Functions
+
+Ring API - List Functions
+=========================
+
+In this section we will learn about the list functions provided by the Ring API to create new lists and 
+manipulate the list items.
+
+.. code-block:: C
+
+       List * ring_list_new ( int nSize ) ;
+       void ring_list_newitem ( List *pList ) ;
+       Item * ring_list_getitem ( List *pList,int index ) ;
+       List * ring_list_delete ( List *pList ) ;
+       void ring_list_deleteitem ( List *pList,int index ) ;
+       void ring_list_print ( List *pList ) ;
+       int ring_list_gettype ( List *pList, int index ) ;
+       void ring_list_setint ( List *pList, int index ,int number ) ;
+       void ring_list_addint ( List *pList,int x ) ;
+       void ring_list_setpointer ( List *pList, int index ,void *pValue ) ;
+       void ring_list_addpointer ( List *pList,void *pValue ) ;
+       void ring_list_setfuncpointer ( List *pList, int index ,void (*pFunc)(void *) ) ;
+       void ring_list_addfuncpointer ( List *pList,void (*pFunc)(void *) ) ;
+       int ring_list_isfuncpointer ( List *pList, int index ) ;
+       void ring_list_setdouble ( List *pList, int index ,double number ) ;
+       void ring_list_adddouble ( List *pList,double x ) ;
+       void ring_list_setstring ( List *pList, int index ,const char *str ) ;
+       void ring_list_setstring2 ( List *pList, int index ,const char *str,int nStrSize ) ;
+       void ring_list_addstring ( List *pList,const char *str ) ;
+       void ring_list_addstring2 ( List *pList,const char *str,int nStrSize ) ;
+       List * ring_list_newlist ( List *pList ) ;
+       List * ring_list_getlist ( List *pList, int index ) ;
+       void ring_list_setlist ( List *pList, int index ) ;
+       void ring_list_setactiveitem ( List *pList, Items *pItems, int index ) ;
+       void ring_list_copy ( List *pNewList, List *pList ) ;
+       int ring_list_isnumber ( List *pList, int index ) ;
+       int ring_list_isstring ( List *pList, int index ) ;
+       int ring_list_islist ( List *pList, int index ) ;
+       int ring_list_ispointer ( List *pList, int index ) ;
+       void ring_list_deleteallitems ( List *pList ) ;
+       void ring_list_insertitem ( List *pList,int x ) ;
+       void ring_list_insertint ( List *pList,int nPos,int x ) ;
+       void ring_list_insertdouble ( List *pList,int nPos,double x ) ;
+       void ring_list_insertpointer ( List *pList,int nPos,void *pValue ) ;
+       void ring_list_insertstring ( List *pList,int nPos,const char *str ) ;
+       void ring_list_insertstring2 ( List *pList,int nPos,const char *str,int nStrSize ) ;
+       void ring_list_insertfuncpointer ( List *pList,int nPos,void (*pFunc)(void *) ) ;
+       List * ring_list_insertlist ( List *pList,int nPos ) ;
+       int ring_list_isiteminsidelist ( List *pList,Item *pItem ) ;
+       int ring_list_findstring ( List *pList,const char *str,int nColumn ) ;
+       int ring_list_finddouble ( List *pList,double nNum1,int nColumn ) ;
+       void ring_list_sortnum ( List *pList,int left,int right,int nColumn ) ;
+       void ring_list_sortstr ( List *pList,int left,int right,int nColumn ) ;
+       int ring_list_binarysearchnum ( List *pList,double nNum1,int nColumn ) ;
+       int ring_list_binarysearchstr ( List *pList,const char *cFind,int nColumn ) ;
+       void ring_list_swap ( List *pList,int x,int y ) ;
+       double ring_list_getdoublecolumn ( List *pList,int nIndex,int nColumn ) ;
+       char * ring_list_getstringcolumn ( List *pList,int nIndex,int nColumn ) ;
+       void ring_list_genarray ( List *pList ) ;
+       void ring_list_deletearray ( List *pList ) ;
+       void ring_list_genhashtable ( List *pList ) ;
+       void ring_list_genhashtable2 ( List *pList ) ;
+       void ring_list_refcopy ( List *pNewList, List *pList ) ;
+       void ring_list_clear ( List *pList ) ;
+       /* Macro */
+       ring_list_isdouble(pList,index)
+       ring_list_isint(pList,index) 
+       ring_list_deletelastitem(x)
+       ring_list_gethashtable(x) 
+       ring_list_getint(pList,index)
+       ring_list_getpointer(pList,index)
+       ring_list_getfuncpointer(pList,index)
+       ring_list_callfuncpointer(pList,index,x)
+       ring_list_getdouble(pList,index) 
+       ring_list_getstring(pList,index) 
+       ring_list_getstringobject(pList,index) 
+       ring_list_getstringsize(pList,index)
+       ring_list_getsize(x) (x->nSize)
+
+.. index:: 
+       pair: Extension; RING API - String Functions
+
+Ring API - String Functions
+===========================
+
+In this section we will learn about the string functions provided by the Ring API to create new string and 
+manipulate the string content.
+
+.. code-block:: C
+
+       String * ring_string_new ( const char *str ) ;
+       String * ring_string_new2 ( const char *str,int nStrSize ) ;
+       String * ring_string_delete ( String *pString ) ;
+       int ring_string_size ( String *pString ) ;
+       void ring_string_set ( String *pString,const char *str ) ;
+       void ring_string_set2 ( String *pString,const char *str,int nStrSize ) ;
+       void ring_string_add ( String *pString,const char *str ) ;
+       void ring_string_add2 ( String *pString,const char *str,int nStrSize ) ;
+       void ring_string_print ( String *pString ) ;
+       void ring_string_setfromint ( String *pString,int x ) ;
+       char * ring_string_lower ( char *cStr ) ;
+       char * ring_string_upper ( char *cStr ) ;
+       char * ring_string_lower2 ( char *cStr,int nStrSize ) ;
+       char * ring_string_upper2 ( char *cStr,int nStrSize ) ;
+       char * ring_string_find ( char *cStr1,char *cStr2 ) ;
+       char * ring_string_find2 ( char *cStr1,int nStrSize1,char *cStr2,int nStrSize2 ) ;
+       /* Macro */
+       ring_string_tolower(x)
+       ring_string_toupper(x)
+       ring_string_get(x)
+
+
+.. index:: 
+       pair: Extension; MySQL_Columns() Implementation
+
+MySQL_Columns() Function Implementation
+=======================================
+
+The next code presents the MySQL_Columns() function implementation.
+
+This function returns table columns information.
+
+.. code-block:: C
+
+       void ring_vm_mysql_columns ( void *pPointer )
+       {
+               MYSQL *con  ;
+               MYSQL_RES *result  ;
+               int nColumns,x  ;
+               MYSQL_ROW row  ;
+               MYSQL_FIELD *field  ;
+               List *pList, *pList2  ;
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISPOINTER(1) ) {
+                       con = (MYSQL *) RING_API_GETCPOINTER(1,RING_VM_POINTER_MYSQL) ;
+                       if ( con == NULL ) {
+                               return ;
+                       }
+                       result = mysql_store_result(con);
+                       if ( result == NULL ) {
+                               RING_API_RETNUMBER(0);
+                               return ;
+                       }
+                       pList = RING_API_NEWLIST ;
+                       nColumns = mysql_num_fields(result);
+                       if ( row = mysql_fetch_row(result) ) {
+                               while ( field = mysql_fetch_field(result) ) {
+                                       pList2 = ring_list_newlist(pList);
+                                       ring_list_addstring(pList2,field->name);
+                                       ring_list_adddouble(pList2,field->length);
+                                       ring_list_adddouble(pList2,field->type);
+                                       ring_list_adddouble(pList2,field->flags);
+                               }
+                       }
+                       mysql_free_result(result);
+                       RING_API_RETLIST(pList);
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+Lists are of type List, in the previoud function we declared two pointers of type List
+using List *pList, *pList2;
+       
+.. note:: The function uses RING_API_NEWLIST to create new list instead of ring_list_new()
+                 to create the list in Temp. Memory related to the function scope. This way we can
+                 return the list from the function. Also we don't delete the list, if it's stored in 
+                 a variable by Ring Code it will be saved, if not it will be automatically deleted by RingVM.
+                 
+
+The list can contains sub lists, we used the function ring_list_newlist() to create a sublist.
+
+The function ring_list_addstring() is used to add string items to the list/sublist.
+
+The function ring_list_adddouble() is used to add numeric items to the list/sublist.
+
+.. note:: All numeric items in lists returned from RingVM extension functions must be of type double
+          and added to the list using ring_list_adddouble() function.
+                 
+
+We return the list from the extension function using the RING_API_RETLIST() function.
+
+.. index:: 
+       pair: Extension; Shared Libraries
+
+Dynamic/Shared Libraries (DLL/So/Dylib) and LoadLib() function
+==============================================================
+
+Instead of rebuilding the RingVM after writing new functions using C/C++ and the Ring API, we can create
+a DLL/So/Dylib file and dynamically use the functions provided by this file in the runtime using the LoadLib() function.
+
+Dynamic library example in C
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       RING_DLL __declspec(dllexport) 
+
+       RING_FUNC(ring_ringlib_dlfunc)
+       {
+               printf("Message from dlfunc");
+       }
+
+       RING_DLL void ringlib_init(RingState *pRingState)
+       {
+               ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc); 
+       }
+
+the idea is to create the ringlib_init() function, this function will be called by the RingVM when we use the generated DLL 
+file though the LoadLib() function.
+
+Inside the ringlib_init() function we can register the module function or call a function that do the registration process
+for all of the module functions.
+
+The next Ring code demonstrates how to use the DLL library during the runtime.
+
+.. code-block:: ring
+
+       See "Dynamic DLL" + NL
+       LoadLib("ringlib.dll")
+       dlfunc()
+
+Output:
+
+.. code-block:: ring
+
+       Dynamic DLL
+       Message from dlfunc
+
+
+.. index:: 
+       pair: Extension; Using RING_API_RETMANAGEDCPOINTER()
+
+Using RING_API_RETMANAGEDCPOINTER()
+===================================
+
+Using RING_API_RETMANAGEDCPOINTER() the Ring extensions written in C/C++ languages can return a managed
+pointer to Ring. This pointer can be controlled by the Ring VM using reference counting.
+
+This is important to avoid the need to write code that free the unmanaged resources like QPixMap objects in RingQt.
+
+Also the Code Generator for extensions is updated to automatically use RING_API_RETMANAGEDCPOINTER() based on need.
+
+Syntax:
+
+.. code-block:: ring
+
+               RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                               void (* pFreeFunc)(void *,void *))
+
+Example:
+
+The next example from ring_qt.cpp - QPixMap Class - Scaled() Method.
+
+.. code-block:: none
+
+       RING_FUNC(ring_QPixmap_scaled)
+       {
+               QPixmap *pObject ;
+               if ( RING_API_PARACOUNT != 5 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               RING_API_IGNORECPOINTERTYPE ;
+               if ( ! RING_API_ISPOINTER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               pObject = (QPixmap *) RING_API_GETCPOINTER(1,"QPixmap");
+               if ( ! RING_API_ISNUMBER(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(3) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(4) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(5) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               {
+                       QPixmap *pValue ; 
+                       pValue = new QPixmap() ;
+                       *pValue = pObject->scaled( (int ) RING_API_GETNUMBER(2),
+                                (int ) RING_API_GETNUMBER(3),
+                                (Qt::AspectRatioMode )  (int) RING_API_GETNUMBER(4),
+                                (Qt::TransformationMode )  (int) RING_API_GETNUMBER(5));
+                       RING_API_RETMANAGEDCPOINTER(pValue,"QPixmap",ring_QPixmap_freefunc);
+               }
+       }
+
+The function that will free the memory takes two parameters (Ring State and the allocated Memory Pointer)
+
+Example:
+
+.. code-block:: none
+
+       void ring_QPixmap_freefunc(void *pState,void *pPointer)
+       {
+               QPixmap *pObject ; 
+               pObject = (QPixmap *) pPointer;
+               delete pObject ;
+       }
+
diff --git a/docs/en/source/extension_tutorial.txt b/docs/en/source/extension_tutorial.txt
new file mode 100644 (file)
index 0000000..ada700a
--- /dev/null
@@ -0,0 +1,1503 @@
+.. index:: 
+       single: Tutorial: Ring Extensions in C/C++; Tutorial: Ring Extensions in C/C++
+
+==================================
+Tutorial: Ring Extensions in C/C++
+==================================
+
+In this chapter we will see simple examples about using C code in Ring programs
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Hello World
+
+Hello World
+===========
+
+Sample : ring/extensions/tutorial/helloworld
+
+The file mylib.c contains
+
+.. code-block:: c
+
+       #include "ring.h"
+
+       #include "stdlib.h"
+
+       RING_FUNC(ring_myfunction)
+       {       
+               printf("Hello, World!");
+       }
+
+       RING_API void ringlib_init(RingState *pRingState)
+       {
+               ring_vm_funcregister("myfunction",ring_myfunction);
+       }
+
+As we see in the source code, we start with including the ring.h file which contains the definitions for Ring API
+
+Then we use the RING_FUNC macro to define new functions, it's a good idea to start the function definition with ring_ to make these definitions unique and different than normal C functions
+
+Then we have the function ringlib_init that will be called when the extension is loaded by the Ring VM
+
+In this function we use the ring_vm_funcregister() function to register the new functions in Ring VM
+
+Then we build the extension using :
+
+buildvc.bat
+
+The file buildvc.bat contains the next commands to build the extension using Visual C/C++
+
+
+.. code-block:: none
+
+       cls
+       call ../../../src/locatevc.bat
+       cl /c /DEBUG mylib.c -I"..\..\..\include"
+       link /DEBUG mylib.obj  ..\..\..\lib\ring.lib /DLL /OUT:mylib.dll /SUBSYSTEM:CONSOLE,"5.01" 
+       del mylib.obj
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       loadlib("mylib.dll")
+
+       ? "Calling a C Function"
+       myfunction()
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Build the extension on different platforms
+
+Build the extension on different platforms
+==========================================
+
+Sample : ring/extensions/tutorial/helloworld2
+
+This extension is the same as the first one but in this time, we support Windows, Linux and macOS.
+
+We will use the next files
+
+.. code-block:: none
+
+       buildvc.bat
+       buildgcc.sh
+       buildclang.sh
+
+Where we use buildvc.bat in Windows, buildgcc.sh in Linux and buildclang.sh in macOS
+
+The file buildgcc.sh contains the next commands
+
+.. code-block:: none
+
+       gcc -c -fpic mylib.c -I $PWD/../../../include 
+       gcc -shared -o libmylib.so mylib.o -L $PWD/../../../lib -lring
+       sudo cp libmylib.so /usr/lib
+       sudo cp libmylib.so /usr/lib64
+
+The file buildclang.sh contains 
+
+.. code-block:: none
+
+       clang -c -fpic mylib.c -I $PWD/../../../include
+       clang -dynamiclib -o libmylib.dylib mylib.o  -L $PWD/../../../lib  -lring
+       cp libmylib.dylib /usr/local/lib
+
+This time we use mylib.ring instead of using LoadLib() function directly
+
+In mylib.ring we have the next code
+
+.. code-block:: ring
+
+       if iswindows()
+               LoadLib("mylib.dll")
+       but ismacosx()
+               LoadLib("libmylib.dylib")
+       else
+               LoadLib("libmylib.so")
+       ok
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Sum Two Numbers
+
+Sum Two Numbers
+===============
+
+Sample : ring/extensions/tutorial/sumtwonumbers
+
+In this extension we learn how to create a C function to sum two numbers
+
+This extension is an update to the (Hello World 2) extension in : ring/extensions/tutorial/helloworld2 folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_sumtwonumbers)
+       {
+               double nNum1,nNum2,nSum;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! (RING_API_ISNUMBER(1) && RING_API_ISNUMBER(2)) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Sum Numbers 
+                       nNum1 = RING_API_GETNUMBER(1);
+                       nNum2 = RING_API_GETNUMBER(2);
+                       nSum  = nNum1 + nNum2 ;
+               // Return Output
+                       RING_API_RETNUMBER(nSum);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("sumtwonumbers",ring_sumtwonumbers);
+
+The previous code is written to check errors, and to be easy to understand
+
+We can write short code like
+
+.. code-block:: c
+
+               RING_API_RETNUMBER(RING_API_GETNUMBER(1) + RING_API_GETNUMBER(2));
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Say Hello
+
+Say Hello
+=========
+
+Sample : ring/extensions/tutorial/sayhello
+
+In this extension we learn how to create a C function that get a name as string then say hello.
+
+This extension is an update to the (sumtwonumbers) extension in : ring/extensions/tutorial/sumtwonumbers folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_sayhello)
+       {
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISSTRING(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               printf("Hello %s\n",RING_API_GETSTRING(1));
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("sayhello",ring_sayhello);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Sum List of Numbers
+
+Sum List of Numbers
+===================
+
+Sample : ring/extensions/tutorial/sumlist
+
+In this extension we learn how to create a C function that sum list of numbers.
+
+This extension is an update to the (sayhello) extension in : ring/extensions/tutorial/sayhello folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_sumlist)
+       {
+               List *pList;
+               int x,nSum;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISLIST(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Sum List Numbers 
+                       nSum = 0;
+                       pList = RING_API_GETLIST(1);
+                       for(x=1 ; x <= ring_list_getsize(pList) ; x++) {
+                               if ( ring_list_isdouble(pList,x) ) {
+                                       nSum += (int) ring_list_getdouble(pList,x) ;
+                               }
+                       }
+               // Return Output 
+                       RING_API_RETNUMBER(nSum);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("sumlist",ring_sumlist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Increment List Items
+
+Increment List Items
+====================
+
+Sample : ring/extensions/tutorial/incrementlist
+
+In this extension we learn how to create a C function that increment the list items.
+
+This extension is an update to the (sumlist) extension in : ring/extensions/tutorial/sumlist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_inclist)
+       {
+               List *pList;
+               int x,nSum;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Increment List Items
+                       nSum = 0;
+                       pList = RING_API_GETLIST(1);
+                       for(x=1 ; x <= ring_list_getsize(pList) ; x++) {
+                               if ( ring_list_isdouble(pList,x) ) {
+                                       ring_list_setdouble(pList,x,
+                                               ring_list_getdouble(pList,x)+
+                                               RING_API_GETNUMBER(2)) ;
+                               }       
+                       }
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("inclist",ring_inclist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: ring
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Filter List Items
+
+Filter List Items
+=================
+
+Sample : ring/extensions/tutorial/filterlist
+
+In this extension we learn how to create a C function that filter the list items.
+
+This extension is an update to the (incrementlist) extension in : ring/extensions/tutorial/incrementlist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_filterlist)
+       {
+               List *pList;
+               int x;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Filter List Items
+                       pList = RING_API_GETLIST(1);
+                       for(x = ring_list_getsize(pList) ; x >= 1 ; x--) 
+                               if ( ring_list_isdouble(pList,x) ) 
+                                       if ( ! (ring_list_getdouble(pList,x) >
+                                                        RING_API_GETNUMBER(2)) )
+                                               ring_list_deleteitem(pList,x) ;
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("filterlist",ring_filterlist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Replicate List Items
+
+Replicate List Items
+====================
+
+Sample : ring/extensions/tutorial/replicatelist
+
+In this extension we learn how to create a C function that add more items to the list.
+
+This extension is an update to the (filterlist) extension in : ring/extensions/tutorial/filterlist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_replicatelist)
+       {
+               List *pList;
+               int x,y,nTimes,nSize;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Replicate List Items
+                       pList = RING_API_GETLIST(1);
+                       nSize = ring_list_getsize(pList);
+                       nTimes = (int) RING_API_GETNUMBER(2);
+                       if (nTimes < 1) {
+                               RING_API_ERROR("Error: The second parameter must be >= 1 \n");
+                               return;
+                       }
+                       for(x = 1 ; x <= nTimes ; x++) 
+                               for(y = 1 ; y <= nSize ; y++) 
+                                       if ( ring_list_isdouble(pList,y) ) 
+                                               ring_list_adddouble(pList,
+                                                       ring_list_getdouble(pList,y));
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("replicatelist",ring_replicatelist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Generate List
+
+Generate List
+=============
+
+Sample : ring/extensions/tutorial/generatelist
+
+In this extension we learn how to create a C function that create new list and add items to the list.
+
+This extension is an update to the (replicatelist) extension in : ring/extensions/tutorial/replicatelist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_generatelist)
+       {
+               List *pList;
+               int x,nSize;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISNUMBER(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Create the List
+                       pList = RING_API_NEWLIST;
+               // Generate List Items
+                       nSize = (int) RING_API_GETNUMBER(1);
+                       if (nSize < 1) {
+                               RING_API_ERROR("Error: The list size must be >= 1 \n");
+                               return;
+                       }
+                       for(x = 1 ; x <= nSize ; x++) 
+                               ring_list_adddouble(pList,(double) x);
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("generatelist",ring_generatelist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Display List
+
+Display List
+============
+
+Sample : ring/extensions/tutorial/displaylist
+
+In this extension we learn how to create a C function that display all of the list items including nested lists
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       void mylib_displaylist(List *pList);
+
+       RING_FUNC(ring_displaylist)
+       {
+               List *pList;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISLIST(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Get the List
+                       pList = RING_API_GETLIST(1);
+               // Display the List Items including Nested Lists
+                       mylib_displaylist(pList);
+       }
+
+       void mylib_displaylist(List *pList) {
+               int x;
+               for (x=1; x <= ring_list_getsize(pList); x++) {
+                       if ( ring_list_isdouble(pList,x) ) {
+                               printf("Number : %f \n", ring_list_getdouble(pList,x) ) ;
+                       } else if ( ring_list_isstring(pList,x) ) {
+                               printf("String : %s \n", ring_list_getstring(pList,x) ) ;
+                       } else if ( ring_list_islist(pList,x) ) {
+                               printf("Sub List..\n");
+                               mylib_displaylist( ring_list_getlist(pList,x) );                
+                       }
+               }
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("displaylist",ring_displaylist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Update Table
+
+Update Table
+============
+
+Sample : ring/extensions/tutorial/updatetable
+
+In this extension we learn how to create a C function that update a table contains rows and columns
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_updatetable)
+       {
+               List *pList, *pRow;
+               int nRow,nCol;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Get the List (Represent a Table)
+                       pList = RING_API_GETLIST(1);
+               // Update the Table Rows and Columns
+               for (nRow = 1 ; nRow <= ring_list_getsize(pList) ; nRow++ ) {
+                       if ( ring_list_islist(pList,nRow) ) {
+                       pRow = ring_list_getlist(pList,nRow);
+                       for (nCol = 1 ; nCol <= ring_list_getsize(pRow) ; nCol++ ) {
+                               if ( ring_list_isdouble(pRow,nCol) ) {
+                                       ring_list_setdouble(pRow,nCol,RING_API_GETNUMBER(2));
+                               } else {
+                                       RING_API_ERROR("Error : We expect numbers!\n");
+                                       return ;
+                               }
+                       }
+                       } else {
+                               RING_API_ERROR("Error : The parameter is not a table! \n");
+                               return ;
+                       }
+               }
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("updatetable",ring_updatetable);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+       ? ""
+
+       ? "Create List (2,2)"
+       aList = newList(2,2)
+       ? "Update the list using C code - set all cells to 10"
+       UpdateTable(aList,10)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       Create List (2,2)
+       Update the list using C code - set all cells to 10
+       aList[1][1] : 10
+       aList[1][2] : 10
+       aList[2][1] : 10
+       aList[2][2] : 10
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Create Table
+
+Create Table
+============
+
+Sample : ring/extensions/tutorial/createtable
+
+In this extension we learn how to create a C function that create a table contains rows and columns
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_createtable)
+       {
+               List *pList, *pRow;
+               int x,y,nRows,nCols;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISNUMBER(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Create the List
+                       pList = RING_API_NEWLIST;
+               // Create the table items
+                       nRows = (int) RING_API_GETNUMBER(1);
+                       nCols = (int) RING_API_GETNUMBER(2);
+                       if ( (nRows < 1) || (nCols < 1) ) {
+                       RING_API_ERROR("Error: The table rows and columns must be >= 1 \n");
+                       return;
+                       }
+                       for(x = 1 ; x <= nRows ; x++) {
+                               pRow = ring_list_newlist(pList);
+                               for(y = 1 ; y <= nCols ; y++) 
+                                       ring_list_adddouble(pRow,0.0);
+                       }
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("createtable",ring_createtable);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+       ? ""
+
+       ? "Create List (2,2)"
+       aList = newList(2,2)
+       ? "Update the list using C code - set all cells to 10"
+       UpdateTable(aList,10)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+       ? ""
+
+       ? "Create List (3,3) using C code"
+       aList = CreateTable(3,3)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[1][3] : " + aList[1][3]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+       ? "aList[2][3] : " + aList[2][3]
+       ? "aList[3][1] : " + aList[3][1]
+       ? "aList[3][2] : " + aList[3][2]
+       ? "aList[3][3] : " + aList[3][3]
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       Create List (2,2)
+       Update the list using C code - set all cells to 10
+       aList[1][1] : 10
+       aList[1][2] : 10
+       aList[2][1] : 10
+       aList[2][2] : 10
+
+       Create List (3,3) using C code
+       aList[1][1] : 0
+       aList[1][2] : 0
+       aList[1][3] : 0
+       aList[2][1] : 0
+       aList[2][2] : 0
+       aList[2][3] : 0
+       aList[3][1] : 0
+       aList[3][2] : 0
+       aList[3][3] : 0
diff --git a/docs/en/source/faq.txt b/docs/en/source/faq.txt
new file mode 100644 (file)
index 0000000..12b6a8f
--- /dev/null
@@ -0,0 +1,2248 @@
+.. index:: 
+       single: Frequently Asked Questions; Introduction
+
+================================
+Frequently Asked Questions (FAQ)
+================================
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why do we need Yet Another Programming Language (YAPL)?
+
+Why do we need Yet Another Programming Language (YAPL)?
+=======================================================
+
+The language comes with better support for natural language programming and declarative
+programming. The innovation comes in supporting these paradigms with new practical techniques
+on the top of object-oriented programming and functional programming. Ring provides the programmers
+with the tools required to build a natural language like Supernova or a declarative language
+like REBOL and QML without the need to know anything about (compilers and parsing). You get
+the language constructs ready for use to create domain-specific languages in a fraction of time.
+
+Take a look at the Supernova programming language, in this language you can type: 
+(I want window and the window title is hello world.) and it will create a GUI window 
+with "Hello, World!" as the window title. When I created Supernova language in 2010, i discovered
+that using the natural code can be (similar to English and without limits and we can use the power
+of human language in programming) but to implement that you need a new language that has: 
+
+(1) General Purpose 
+
+(2) Practical 
+
+(3) Can create natural languages very quickly. 
+
+So we can get a system that can increase ease of use and productivity to the maximum level. 
+
+So I created Ring because it was the best way to achieve this goal.
+
+Supernova was just a test of the idea, it helped getting a better view of the advantages and
+the disadvantages of the idea. And After testing the new ideas you are provided with something
+practical. So now we have Ring after Supernova. A story that is maybe similar to having Python 
+after ABC.Where Python avoids the problems of ABC, but keeps the advantages of ABC. Also, Ring
+learns from Ruby and ROR's story. The language power could appear in frameworks better than the
+direct usage as a general purpose language. Also Ring comes with a clear goal/motivation; 
+(Creating a new version of the PWCT Software) something that was learned from the design the 
+C language in a certain way to create the Unix Operating System. In other words, you have a 
+goal that directs you in each design decision.
+
+You will understand the value of our decisions once you start trying to solve the problem
+that we will use Ring to solve. The questions is: could you enable any one in the world 
+without knowledge about computer programming concepts to create very powerful software?
+Scientifically the answer is (visual Programming) and (natural Programming). 
+In practice we are still away from switching to these paradigms without introducing 
+other problems. Ring is designed to solve this problem.
+It is designed to provide natural programming in a practical way. And to create a powerful 
+visual programming tool. Ring is designed to be a new world of programming after 10 years 
+of research in visual programming and natural languages.
+
+The Ring Programming Language (Compiler+VM) is developed 100% using visual programming without
+writing a single line of code. I used my tool (Programming Without Coding Technology) to design
+everything and get the C code generated for me. 
+
+Advantages ? 
+
+(1) Faster 
+
+(2) No Syntax Errors 
+
+(3) Easy to understand and manage the code because the abstraction level is higher
+
+(4) No critical disadvantages because you can control everything as writing your code.
+
+Using my experience in using visual programming for 10 years and natural programming for 5 years,
+I designed Ring to move the knowledge to mainstream programmers by providing a practical language 
+that supports these ideas.
+
+
+I agree that each programmer/developer has the freedom to form his opinions about any software
+including programming languages. Ring is not an exception but you may miss the idea behind the 
+language. It is innovative and may help you to think differently about how to solve your problems.
+Maybe this is not clear to many programmers because It is a practical language and includes many
+features known to programmers and when a programmer looks at the language they maight think that 
+nothing new because it's familiar. I created Ring to solve problems in a different way. Where I
+will start programming just by describing the software using new natural interfaces that I will
+implement later when I move from the design stage to the implementation stage. 
+(I don't determine the time to switch between stages, You are free to use Agile methods). 
+Since Ring is a new language you have 3 options:
+
+(1) To not care at all for now.
+
+(2) Think of the future of the language and help us if you understand the idea and want to contribute.
+
+(3) Wait and come back again in the future to use it. 
+
+Summary:
+
+* Ring is designed based on a need to develop a new version of the PWCT software. 
+Once we finish PWCT 2.0 we will have good and large software developed using Ring.
+
+* We will push declarative and natural paradigms many steps forward. Also in next versions 
+we have a plan to present a new paradigm for network programming and concurrency. We tested this
+new paradigm through simple prototypes during the last years and we will integrate it with Ring 
+in future releases.
+
+.. index:: 
+       pair: Frequently Asked Questions; Why is Ring weakly typed?
+
+Why is Ring weakly typed?
+=========================
+
+Because it's faster and more natural, and this is important for the language's goals. One
+of the rules is: the data type at the beginning affects the final result. 
+For example, when you type "Print : " + 5 , The String comes first, so 5
+will be converted to a String. While when you type 5 + "10" The number comes first so "10"
+will be converted to 10. This helps a lot to quickly convert between numbers and strings using
+the same operator. If you want to prevent conversion (Write code that prevent conversion) In
+these cases you will notice that what you are writing is less code (And can be removed). 
+
+Weakly typed = automatic conversion and *automatic* is *good thing* and is better than *manual*
+if you know how to use it correctly.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over Lisp or Smalltalk?
+
+What are the advantages to using Ring over Lisp or Smalltalk?
+====================================================================
+
+Smalltalk and Lisp are GREAT languages. I like many of the concepts behind them but I'm sure
+that selecting the right programming language is based on the problem and comes after the problem's
+definition. I have a problem that I want to solve and these GREAT languages are not ideal for 
+this problem so I designed Ring.
+
+When you design a new language, You can learn from the past but you must look forward and live
+in the future. What you know about natural programming maybe based on the *old knowledge* about
+the power of these paradigms in the practical world and I agree with you but I see other
+techniques that can be applied to get this to work in practice. What you miss about
+*natural language* is that they are *context sensitive* and this means we can use it and think
+differently about how we can express our ideas. 
+
+Example : I want window contains 3 buttons. 
+
+In one sentence I created 4 objects (The window and the three buttons) and added the buttons
+to the window. The idea of natural programming is to get many things done like that.
+
+.. index:: 
+       pair: Frequently Asked Questions; Why is Ring largely focussed on UI creation?
+
+Why is Ring largely focussed on UI creation?
+============================================
+
+Yes UI creation is one of the important things in the language features because it is designed
+to create a visual programming tool, But the language is a multi-paradigm language where we can
+select the programming paradigm based on the problem.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Is Ring some sort of an improvement of PHP?
+
+Is Ring some sort of an improvement of PHP?
+==========================================
+
+Ring is not designed to replace PHP, Lua or Smalltalk. Ring's support for declarative
+programming and natural language programming is very innovative and much better than staying 
+with procedural, object-oriented and functional languages. Ring see the future in programming
+without code (using natural languages) and is designed to support that.
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages of using Ring over native C or C++?
+
+What are the advantages of using Ring over native C or C++?
+===========================================================
+
+Ring provides a better way to mix between different programming paradigms in solving problems.
+
+The different programming paradigms play well together in the same language. 
+
+(1) It's easy to switch from one programming paradigm to another one because the language constructs use similar syntax for similar concepts.
+
+(2) The paradigms are provided to interact and used together in different layers in the software. 
+
+for example you can create a game engine using object-oriented programming but write the game code using declarative programming or natural programming and behind the scenes your declarative or natural code will use the object-oriented classes.
+
+(3) Ring is more productive and natural than C/C++.
+
+(4) Ring is a dynamic language. We can generate and execute code during the runtime. Ring is dynamically typed and weakly typed for flexibility.
+
+(5) The Garbage collector is generational (escape analysis) and also uses reference counting. it's very fast and still provides control to the programmer who can delete memory at any time.
+
+(6) Ring's compiler and virtual machine are just 20,000 lines of ANSI C code that can be compiled and used in any platform.
+
+(7) You can use C/C++ libraries and Ring comes with code generator to create wrappers from C functions or C++ classes. so when you need more performance or when you need to use more libraries you can easily do that.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What is the difference between Ring and Python? And is Ring Open Source?
+
+What is the difference between Ring and Python? And is Ring Open Source?
+========================================================================
+
+Yes the language is Open Source (MIT license)
+
+In general I like Python and Ruby but I was looking for a language more suitable for creating the next version of
+the Programming Without Coding Technology (PWCT) software so I started the Ring design.
+
+Some simple changes that matters for my goal are 
+
+(1) Not case sensitive
+
+(2) The list index start from 1
+
+(3) You can call functions before definition
+
+(4) Don't use Python syntax like (indentation, using self, :, pass & _) 
+
+(5) Weakly typed (convert automatically between types based on context)
+
+(6) The programs follow simple and constant structure (Statements then functions then packages and classes)
+
+(7) Using the '=' operator for assignment and for testing values
+
+Critical changes are
+
+(1) Small Language : The Ring compiler + Virtual Machine = 15K lines of C code , the other 500K lines are related to libraries and are optional when we go for using the language in C/C++ programs.
+
+(2) The Garbage collector : Uses Escape Analysis/Reference counting and give the programmer the ability to determine when to delete memory using the assignment operator
+
+(3) Compact Syntax : Ring is not line sensitive, you don't need to write ; or press ENTER to separate between statements
+
+(4) Using { } to access the object then using the object attributes and methods directly
+
+(5) Natural Programming : It's very easy to create natural interfaces using Ring based on OOP
+
+(6) Declarative Programming using Nested Structure
+
+The Ring programming language is designed based on my experience from using many other
+languages like C, C++, C#, Lua, PHP, Python, Ruby, Harbour, Basic and Supernova
+And the language comes with innovative features added to achieve the language goal
+
+* Applications programming language.
+* Productivity and developing high quality solutions that can scale.
+* Small and fast language that can be embedded in C/C++ projects.
+* Simple language that can be used in education and introducing Compiler/VM concepts.
+* General-Purpose language that can be used for creating domain-specific libraries, frameworks and tools.
+* Practical language designed for creating the next version of the Programming Without Coding Technology software.
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over Python and Ruby?
+
+What are the advantages to using Ring over Perl, PHP, Python or Ruby?
+=====================================================================
+
+(1) Ring is New and Innovative. The language will let you think different about programming.
+
+(2) Ring is Smaller. (Lessons learned from the Lua language)
+
+(3) Ring is Simple. (Lessons learned from the BASIC and Clipper/Harbour languages)
+
+(4) Ring is more Natural. (Lessons learned from the Supernova language)
+
+(5) Ring is more Declarative. (Lessons learned from REBOL and QML languages)
+
+(6) Ring Implementation is Transparent, Visual and comes with Rich Features.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over Tcl and Lua?
+
+What are the advantages to using Ring over Tcl or Lua?
+======================================================
+
+(1) Clean Code (More Natural)
+
+(2) More Features (A lot of useful programming paradigms)
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over C# or Java?
+
+What are the advantages to using Ring over C# or Java?
+======================================================
+
+(1) Compact Code (Clean and Natural), More Productivity and Flexibility.
+
+(2) Better support for Declarative Programming and Natural Programming
+
+
+.. index:: 
+       pair: Frequently Asked Questions; The documentation says functional programming is supported, but then this happens?
+
+
+The documentation says functional programming is supported, but then this happens?
+==================================================================================
+
+The question was about this code
+
+.. code-block:: ring
+
+       f = func {
+           a = 42
+           return func { return a }
+       }
+       innerF = call f()
+       call innerF()
+
+Output:
+
+.. code-block:: none
+
+       Using uninitialized variable : a In function _ring_anonymous_func_16601()
+
+The Answer:
+
+* It's Anonymous Functions, i.e. Not Closures.
+
+* Many developers asked about supporting Closures and during language development we may add new features that doesn't go against the language goals or spirit.
+
+* You can use classes and objects when you want to merge between the state and functions to provide a clear solution.
+
+* You can use Lists and put the anonymous function inside the List then return the list that contains the state and the function. Pass the list to the function when you use it.
+
+* You can use eval() and substr() to add the variable value directly to the anonymous function before return.
+
+* We protect you from other scopes when you define the function. In Ring we provided the Three Scopes Rule where at each point you have only at maximum three scopes (Global, Object Scope and Local Scope).
+
+* We don't get everything from everywhere to be like others! We don't need to do that. If we will think like that then we will create a very complex language or we will save our time and use other languages.
+
+* When you think about learning or studying a new language concentrate about (What is new?) and (What is better in this language?) to know when to use it. Don't compare a new language just released little months ago with languages started many years ago and expect to find everything that you used to have.
+
+* Each programming language miss features in other languages. The idea is not the Features. it's the spirit and ability behind all of the features together.
+
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why the ability to define your own languages Instead of just handing over the syntax so you can parse it using whatever code you like?
+
+Why the ability to define your own languages Instead of just handing over the syntax so you can parse it using whatever code you like?
+======================================================================================================================================
+
+It's innovation - You create natural statements without the need to learn about parsing. 
+You just use Classes which is intelligent decision (where later we can mix between classes to
+support more statements based on the context - We can change and translate the defined 
+statements and many more!). Also the statements are added in Ring World where you can use
+any Ring statement.
+
+.. index:: 
+       pair: Frequently Asked Questions; Why you can specify the number of loops you want to break out of?
+
+Why you can specify the number of loops you want to break out of?
+=================================================================
+
+The language supports programming in the small and programming in the large. The selection
+of what features to use is based on what are you going to do. Any programmer can write 
+poorly code in any language if he/she wants to do that. The idea is what must be done in 
+the language design to prevent errors without causing other problems like killing flexibility.
+
+Read some source code in the Linux Kernel and Ruby Implementation for example, You will find good
+usage for GOTO as a practical example that General Rules are not for All Use Cases and great
+programmers know when to break the rules. I'm not saying go and use GOTO or saying Ring add
+things like that. But the ability to break more than one loop and/or the ability to break the
+loop from sub functions is practical for small programs.
+
+Anyway these are some of the small new things added by the language (Not the big idea).
+
+.. index:: 
+       pair: Frequently Asked Questions; Why Ring uses 'See', 'Give', 'But' and 'Ok' Keywords?
+
+Why Ring uses 'See', 'Give', 'But' and 'Ok' Keywords?
+=====================================================
+
+See and Give are selected not to be "opposite actions" but to reflect what I want to do as a programmer.
+
+When I want to see something on the screen I use 'See'.
+
+When I want to give some input to the program I use 'Give'.
+
+My selection of "but" and "ok" is based on selecting keywords that can be written quickly.
+
+Also using "but" is easy to remember than elseif/elif/elsif where each language select a different keyword.
+
+In Ring 1.1 and later versions All of this is just an option.
+
+You can use 'Put' and 'Get' instead of 'See' and 'Give'
+
+You can use 'elseif' and 'end' insetad of 'But' and 'Ok'
+
+It's your choice. In Ring we have syntax flexibility where we provide more than one style.
+
+Also you can change the language keywords and operators.
+
+Also you can define new natural languages too.
+
+.. index:: 
+       pair: Frequently Asked Questions; Philosophy behind data types in Ring
+
+What is the philosophy behind data types in Ring?
+=================================================
+
+The Ring programming language is designed to be SMALL. 
+The language provides the basic constructs that you need to do anything!
+One of the goals is to keep the basic constructs simple and small as possible.
+
+Using Lists in Ring you can
+
+* Create Arrays (one data type)
+* Create Lists (Mix of data types)
+* Create Tree (Nested arrays)
+* Use String Index (Looks like Dictionary/Hash Table)
+
+The same principle is applied to Numbers
+
+* You can use the number for int value
+* You can use the number for double value
+* You can use the number for Boolean value (True/False)
+
+The sample principle is applied for Strings
+
+* You can use the string for storing one character 
+* You can use the string for storing text (one or many lines)
+* You can use the string for storing binary data
+* You can use the string for storing date
+* You can use the string for storing time
+* You can use the string for storing NULL values (empty strings)
+
+And we have Object Oriented Support + Operator Overloading where the programmer
+can define new data types and use them as default types defined by the language
+
+So We have
+
+* A small and simple language that someone can pick in little days
+* A fast language that provide primitive types (String - Number - List - Object)
+* A flexible language that can be extended using OOP to add new types according to the application domain
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What about the Boolean values in Ring?
+
+What about the Boolean values in Ring?
+======================================
+
+
+You can use true for 1 and false for 0
+
+when you test the result of Boolean expressions in your code.
+
+Just when you print the value using the see command you will see 1 for (true) and 0 for (false)
+
+Why ?
+
+Because Ring contains only 4 types of variables
+
+(1) Number
+
+(2) String
+
+(3) List
+
+(4) Object
+
+The first type (Number) is used to represent int, double and Boolean values.
+
+The second type (String) is used to represent char, array of characters, date and time.
+
+The third type (List) is used to represent Arrays of one type, Arrays of more than one type, Hash (Dictionary), Tree, etc.
+
+The object can be an object created from a Ring class (Any Class) or just a C Pointer that we get from calling a C/C++ function/method.
+
+Why ?
+
+The Ring is designed to give the programmer/developer the most simple constructs that can be used to do everything.
+The programmer/developer can customize the language by creating new classes (and use operator overloading) to get more types that he care about according to the problem domain.
+
+Why ?
+
+Because simple is better, and easy to learn and remember!
+And this provide flexibility to convert between high level types that can be represented using the same basic type
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Goal of including the "Main" function in Ring
+
+What is the goal of including the "Main" function in Ring?
+==========================================================
+
+The main function is very important, you need it when you want to write statements that uses 
+local variables instead of the Global scope.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       myfunc()
+       See "X value = " + X  # here I expect that x will be (10)
+                             # but I will get another value (6) because myfunc() uses x !
+       Func myfunc
+          for x = 1 to 5
+              See x + nl
+          next
+
+Output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       X value = 6
+
+Now using the Main function
+
+.. code-block:: ring
+
+       Func Main 
+          x = 10
+          myfunc()
+          See "X value = " + X                         
+
+       Func myfunc
+          for x = 1 to 5
+              See x + nl
+          next
+
+Output
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       X value = 10
+
+.. index:: 
+       pair: Frequently Asked Questions; List index start from 1
+
+Why the list index start from 1 in Ring?
+========================================
+
+It\'s about how we count in the real world, when we have three apples in our hand
+
+we say 1 2 3 
+
+We don\'t start from 0
+
+The question must be why the other languages start from 0 ?
+
+The answer is, because this is related to the machine and how we deal with values and memory address.
+
+Example
+
+we have array called myarray[5]
+
+In memory : myarray will have an address
+
+The first item will be stored in that address
+
+The second item will come after that address and so on
+
+Now when we need to point to the first item we need the address of myarray
+
+So we type myarray[0] because myarray + 0 result will still point to the first item
+
+for the second item myarray[1] because myarray + 1 result will point to the second item and so on
+
+In Low Level languages or languages near to the machine it\'s good to be like this
+
+But for high level language designed for applications it\'s better to be natural
+
+Example
+
+.. code-block:: ring
+
+       mylist = [1,2,3,4,5]
+       for x = 1 to len(mylist)
+               see x + nl
+       next
+
+In the previous example we start from 1 to the length of the array
+if the index starts from 0 we will write
+
+.. code-block:: ring
+
+       for x = 0 to len(mylist)-1
+
+or remember the for loop in other languages
+
+.. code-block:: ring
+
+       for(x=0 ; x<nMax ; x++ )
+
+You will use the < operator !
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why Ring is not case-sensitive
+
+Why Ring is not case-sensitive?
+===============================
+
+(1) To be more human-friendly
+
+(2) Like Ada, SQL, Pascal, Delphi, Visual Basic, Visual FoxPro, etc. 
+
+(3) To help in supporting Natural Language Programming.
+
+(4) To be able to select your favorite style when writing the language keywords
+
+.. code-block:: ring
+
+       see "lower case!"
+
+.. code-block:: ring
+
+       SEE "UPPER case!"
+
+.. code-block:: ring
+
+       See "First Letter is UPPER case!"
+
+(5) To avoid getting error message when writing quick tests then type "variable" instead of "Variable".
+
+(6) To avoid getting error message when you type "Dosomething()" instead of "doSomething()"
+
+(7) In Ring, No conflict between Variables, Method Names & Classes Names
+
+We can write person as variable name and Person as class name.
+
+.. code-block:: ring
+       
+       person = new Person     
+       class Person 
+               name address phone
+       
+
+.. index:: 
+       pair: Frequently Asked Questions; Why the Assignment operator uses Deep copy?
+
+Why the Assignment operator uses Deep Copy?
+===========================================
+
+"Because it's a poor tradeoff to add complexity for dubious performance gains, a good
+approach to deep vs. shallow copies is to prefer deep copies until proven otherwise."
+       , Steve McConnell, Code Complete 
+
+(1) It's more natural, When you use the assignment operator, You expect a deep copy.
+
+(2) If you don't need a deep copy, Just don't use it! 
+
+(3) The Ring language is designed to reduce references usage as much as possible.
+
+(4) The Ring language is designed to make using references simple and possible in special cases where this make sense.
+
+(5) We have references when this is natural, like passing lists and objects to functions,
+       creating objects (Like GUI Objects) from a C/C++ library, returning an object stored 
+       inside a list.
+
+(6) It is a feature, We can use it to create pure functions. The Value() function in the
+       stdlib uses this feature to pass lists & objects by value when we need this.
+
+(7) When we need references, It's recommended to create a class that manage sharing lists and objects.
+       
+(8) It's more safe at the application level to avoid many logical errors.
+
+(9) In Ring, we start without thinking about the little details and concentrate on the application, You
+       don't have to write the type (Dynamic Typing), You don't have to write explicit
+       conversions between numbers and strings (Weakly Typed) and you don't have to select
+       between using values or references, You don't have to write the scope (Lexical Scoping).
+
+(10) In Ring, we have smart garbage collector (Simple & Fast), We can delete the memory directly
+       at any time using the Assignment operator too. Reducing references usage or using them through
+       managers helps a lot to achieve this goal. by doing this we have full control.
+
+(11) If you want to create references and avoid creating a manager, 
+       You can use Object2Pointer() and Pointer2Object() functions
+       But It's not the Ring way "Spirit" to do things.
+
+.. index:: 
+       pair: Frequently Asked Questions; Constructor methods in Ring
+
+
+Is there constructor methods in Ring?
+=====================================
+
+When you create new object for example
+
+.. code-block:: ring
+
+       new point
+
+1 - Ring will allocate dynamic memory space to be used for the new object attributes that Ring doesn't know anything about them.
+
+2 - Ring will change the current local scope and the current object scope to use the object state created in step (1)
+
+3 - Ring will move the execution to the class Region (After the class name and before any methods)
+
+4 - Any Instructions/Code in the class region will be executed as any Ring code
+
+5 - Control is moved from the class region to the location of (new point) once we reach the end of the class region or we uses a Return command.
+
+So All attributes that added to the object are dynamic attributes, this mean that you can control what attributes will be added through the runtime.
+
+Example:
+
+.. code-block:: ring
+
+       $3D = False
+       see  new point 
+       $3D = True
+       see new point 
+
+       class point
+               x y
+               if not $3D return ok
+               z
+
+Output:
+
+.. code-block:: none
+
+       x: NULL
+       y: NULL
+       x: NULL
+       y: NULL
+       z: NULL
+
+You have an option to call init() method directly when you create a new object 
+
+This method can do anything with the object attributes as it will be called after creating the object and executing the class region code.
+
+
+.. code-block:: ring
+
+       p1 = new point3d(100,200,300)
+       see p1
+
+       class point3d
+               x y z
+               func init p1,p2,p3
+                       x=p1 y=p2 z=p3
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What happens when we create a new object?
+
+What happens when we create a new object?
+=========================================
+
+1- When you create an object, the class region code will be executed and you will have the object attributes based on the code in that region
+
+2- Ring don't care about the object methods until you start calling a method
+
+3- When you call a method, Ring will check the object class and the class parent (if you are using inheritance) and will collect the methods for you to be used now or later from any object that belong to the same class.
+
+4- Since methods are dynamic and each object get the method from the class, you can after creating objects, add new methods and use it with the object or any object created or will be created from the same class.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point {x=10 y=20 z=30}
+       o2 = new point {x=100 y=200 z =300}
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+       o2.print()
+
+       class point x y z
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       30
+       100
+       200
+       300
+
+.. index:: 
+       pair: Frequently Asked Questions; Getter and Setter Methods
+
+Can we use the attributes by accessing the Getter and Setter methods?
+=====================================================================
+
+Yes we can, The setter/getter methods are called automatically when you start using the attributes from outside the class
+Also you can call the methods instead of using the attributes. It's your choice.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Developer
+       o1.name = "Mahmoud"  see o1.name + nl
+       o1 { name = "Gal"  see name }
+       o1 { name = "Bert"  see name }
+
+       o1.setname("Marino")
+       see o1.getname()
+
+       Class Developer
+
+                       name language = "Ring Programming Language"
+
+                       func setname value
+                                       see "Message from SetName() Function!" + nl
+                                       name = value + " - " + language
+
+                       func getname
+                                       see "Message from GetName() Function!" + nl + nl
+                                       return "Mr. " + name + nl
+
+Output
+
+.. code-block:: none
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Mahmoud - Ring Programming Language
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Gal - Ring Programming Language
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Bert - Ring Programming Language
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Marino - Ring Programming Language
+
+.. index:: 
+       pair: Frequently Asked Questions; Search of global names while defining the class attributes
+
+Why should a search of global names be made while defining the class attributes?
+================================================================================
+
+The question is why we don't avoid conflicts with global variable names when we
+define the class attributes ?
+
+At first remember that using the optional $ mark in the global variables names solve
+the problem. Also using the Main function and avoiding global variables may help.
+
+The Answer:
+
+Ring is a dynamic language
+
+We can in the run-time determine the class attributes (Add/Remove) 
+
+We can execute (any code) while defining the class attributes
+
+Example (1)
+
+.. code-block:: ring
+
+       oPerson = new Person
+       Class Person
+          See "Welcome to the Ring language"
+
+Example (2)
+
+Customize attributes based on global variable value
+
+.. code-block:: ring
+
+       $debug = true
+       oPerson = new Person
+       see oPerson
+       Class Person
+           if $debug  date=date()  time=time() ok
+
+In the previous example when we have the $debug flag set to true, we will add the Date and Time
+attributes to the object state.
+
+Example (3)
+
+Store the object index based on global variable
+
+.. code-block:: ring
+
+       $ObjectsCount = 0
+       oPerson = new Person
+       see oPerson
+       oPerson2 = new Person
+       see oPerson2
+       Class Person
+             $ObjectsCount++
+             nIndex = $ObjectsCount
+
+Output:
+
+.. code-block:: ring
+
+       nindex: 1.000000
+       nindex: 2.000000
+
+Common Example: 
+
+* Connect to the database then get table columns (Using global Variable/Object).
+
+* Create class attributes based on the column names.
+
+* Later when you modify the database - you may don't need to modify your code.
+
+It's flexibility but remember that power comes with great responsibility.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Conflict between Global Variables and Class Attributes
+
+
+Why Ring doesn't avoid the conflict between Global Variables and Class Attributes Names?
+========================================================================================
+
+In this use case we have 
+
+1 - Global Variable defined without a special mark like $
+
+2 - Class contains Attributes defined using a special syntax (where we type the attribute name directly after the class)
+
+3 - The Attributes are defined in the class region that allows writing code and using global variables
+
+If I will accepted your proposal about changing how Ring find variables in the class region I must break one of the previous three features which will lead to more problems that are more important than this problem.
+
+I don't like changing the feature number (1) because I would like to keep Ring code more clean and let the programmer decide when to use $ or not.
+
+I don't like changing the feature number (2) because I like this feature and I don't like forcing the programmer to type
+self.attribute 
+
+I don't like changing the feature number (3) because it's very important in many applications to access global variables in the class region.
+
+So what was my decision ? 
+
+I decided to leave this case for the programmer who will decide what to do to avoid this special case
+
+1 - The programmer can avoid using global variables (Better) and can use the Main function (Optional)
+
+2 - The programmer can use $ before the variable name or any mark like global_ or g_
+
+3 - The programmer can use self.attribute after the class name to define the attributes 
+
+In general, for small programs you can use global variables and functions.
+For large programs, use classes and objects and small number of global variables or avoid them at all.
+
+.. index:: 
+       pair: Frequently Asked Questions; Where can I write a program and execute it?
+
+
+Where can I write a program and execute it?
+===========================================
+
+Run the Ring Notepad where you can write/execute programs.
+
+If you want to run programs using the command line
+
+Add Ring/bin folder to the path then
+
+.. code-block:: none
+       ring <filename.ring>|<filename.ringo>
+
+.. index:: 
+       pair: Frequently Asked Questions; How to get the file size using ftell() and fseek() functions?
+
+How to get the file size using ftell() and fseek() functions?
+=============================================================
+
+
+The next function can be used to get the file size without reading the file!
+
+.. code-block:: ring
+
+       func getFileSize fp
+              C_FILESTART = 0
+              C_FILEEND = 2
+              fseek(fp,0,C_FILEEND)
+              nFileSize = ftell(fp)
+              fseek(fp,0,C_FILESTART)
+              return nFileSize
+
+.. note:: The previous function take the fp (file pointer) as parameter, We can get the fp from opening the file using fopen() function.
+
+.. code-block:: ring
+
+       fp = fopen("filename","r")
+
+       see  "File Size : " + getFileSize(fp) + nl
+
+Another solution (Read the file)
+
+.. code-block:: ring
+
+       see len(read("filename"))
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to get the current source file path?
+
+How to get the current source file path?
+========================================
+
+We can use the next function to get the current source file path
+then we can add the path variable to the file name
+
+.. code-block:: ring
+
+       cPath = CurrentPath()
+       func currentpath
+               cFileName = filename()
+               for x = len(cFileName) to 1 step -1
+                       if cFileName[x] = "/"
+                               return left(cFileName,x-1)
+                       ok
+               next
+               return cFileName
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What about predefined parameters or optional parameters in functions?
+
+What about predefined parameters or optional parameters in functions?
+=====================================================================
+
+if you want to use predefined parameters or optional parameters
+Just accept a list that works like hash/dictionary
+
+Example
+
+.. code-block:: ring
+
+       sum([ :a = 1, :b = 2])
+       sum([ :a = 1 ])
+       sum([ :b = 2 ])
+       func sum pList
+               if plist[:a] = NULL pList[:a] = 4 ok
+               if plist[:b] = NULL pList[:b] = 5 ok
+               see pList[:a] + pList[:b] + nl
+
+Output
+
+.. code-block:: none
+
+       3
+       6
+       6
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to print keys or values only in List/Dictionary?
+
+How to print keys or values only in List/Dictionary?
+====================================================
+
+
+If you want to print keys only or values only just select the index of the item (one or two).
+
+Example
+
+.. code-block:: ring
+
+
+       C_COUNTRY = 1
+       C_CITY = 2
+       mylist = [
+               :KSA = "Riyadh" ,
+               :Egypt = "Cairo"
+       ]
+
+       for x in mylist
+               see x[C_COUNTRY] + nl
+       next
+
+       for x in mylist
+               see x[C_CITY] + nl
+       next
+
+Output
+
+.. code-block:: none
+
+       ksa
+       egypt
+       Riyadh
+       Cairo
+
+.. index:: 
+       pair: Frequently Asked Questions; Why I get a strange result when printing nl with lists?
+
+Why I get a strange result when printing nl with lists?
+=======================================================
+
+In the next code
+
+.. code-block:: ring
+
+       list = 1:5        # list = [1,2,3,4,5]
+       see list + nl
+
+New Line will be added to the list then the list will be printed, the default print of the lists 
+will print a newline at the end, You added new newline and You have now 2 newlines to be printed.
+
+.. code-block:: ring   
+
+       See <Expr>
+
+The see command just print the final result of the expression, the expression will be evaluated as it
+
+.. code-block:: ring
+
+       nl = char(13) + char(10) # just a variable that you can change to anything !
+
+The + is an operator
+
+.. code-block:: none
+
+       string + string ---> new string
+       string + number ---> new string
+       number + number ---> new number
+       number + string ---> new number
+
+list + item ---> nothing new will be created but the item will be added to the same list
+
+Exception
+
+number + nl -> New String
+
+This exception is added to easily print numbers then new line.
+
+No need for this with printing lists because after printing the last item we already get a new line.
+
+.. index:: 
+       pair: Frequently Asked Questions; Could you explain the output of the StrCmp() function?
+
+Could you explain the output of the StrCmp() function?
+======================================================
+
+At first remember that you can check strings using '=' operator directly.
+
+.. code-block:: ring
+
+       see strcmp("hello","hello") + nl +
+       strcmp("abc","bcd") + nl +
+       strcmp("bcd","abc") + nl
+
+if the two strings are the same then it returns 0
+
+abc and bcd aren't the same. in the second line it returns -1 and in the third line it returns 1
+
+In the second line we compare between "abc" and "bcd"
+
+Not equal because the first letter in "abc" = "a" 
+and the first letter in "bcd" = "b"
+
+So we have "a" != "b" and "a" < "b"
+
+So we get output = -1
+
+In the third line we have "bcd" and "abc"
+
+the first letter in "bcd" is "b" and the first letter in "abc" is "a"
+
+So we have "b" != "a" and "b" > "a"
+
+So we get output = 1
+
+.. note:: ASCII("a") = 97 and ASCII("b") = 98 So "a" < "b" because 97 < 98
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to use many source code files in the project?
+
+How to use many source code files in the project?
+=================================================
+
+Example:
+
+I have the next folder
+
+.. code-block:: none
+
+       C:\LRing
+
+Contains the next files
+
+.. code-block:: none
+
+       C:\LRing\t1.ring
+       C:\LRing\mylib.ring
+       C:\LRing\libs\mylib2.ring
+
+The file t1.ring contains the next code
+
+.. code-block:: ring
+
+       load "mylib.ring"
+       load "libs\mylib2.ring"
+       myfunc()
+       test()
+
+The file mylib.ring contains the next code
+
+.. code-block:: ring
+
+       func myfunc
+               see "message from myfunc"+nl
+
+The file libs\mylib2.ring contains the next code
+
+.. code-block:: ring
+
+       func test
+               see "message from test" + nl
+
+from the folder C:\LRing
+
+If Ring is not added to the path you can add it or use the next command
+
+.. code-block:: none
+
+       set path=%path%;c:\ring\bin;
+
+Where c:\ring is the Ring folder
+
+Now run
+
+.. code-block:: none
+
+       Ring t1.ring
+
+Output
+
+.. code-block:: none
+
+       message from myfunc
+       message from test
+
+.. index:: 
+       pair: Frequently Asked Questions; Why this example use the GetChar() twice?
+
+Why this example use the GetChar() twice?
+=========================================
+
+The GetChar() function accept one character from the keyboard buffer
+
+In this example
+
+
+.. code-block:: ring
+
+
+       While True
+               See "
+                       Main Menu
+                       (1) Say Hello
+                       (2) Exit
+               "
+               Option = GetChar()
+               GetChar() GetChar()  # End of line
+               # the previous two lines can be replaced with the next line
+               # Give Option
+
+               if Option = 1
+                       see "Enter your name : " give cName
+                       see "Hello " + cName
+               else
+                       bye
+               ok
+       End
+
+We uses GetChar() Three times
+
+The first time we get the user option
+
+.. code-block:: ring
+
+       Option = GetChar()
+
+But in the second and the third times (We accept the new line characters from the buffer)
+
+.. code-block:: ring
+
+       GetChar() GetChar()  # End of line
+
+Example : when the user select the option number 1 then press ENTER
+
+We have Three Characters
+
+* The first character is : Number 1
+* The second character is : CHAR(13)
+* The third character is : CHAR(10)
+
+Because Windows uses CHAR(13) and CHAR(10) for each new line  ( i.e. CR+LF )
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to use NULL and ISNULL() function?
+
+How to use NULL and ISNULL() function?
+======================================
+
+when we try to use uninitialized variable in the Ring programming language, we get a clear runtime error message
+
+Example
+
+.. code-block:: ring
+
+       See x
+
+Output
+
+.. code-block:: none
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file tests\seeuninit.ring
+
+The same happens when you try to access uninitialized attributes
+
+Example
+
+.. code-block:: ring
+
+       o1 = new point
+       see o1
+       see o1.x
+       class point x y z
+
+Output
+
+.. code-block:: none
+
+       x: NULL
+       y: NULL
+       z: NULL
+
+       Line 3 Error (R24) : Using uninitialized variable : x
+       in file tests\seeuninit2.ring
+
+if you want to check for the error, just use Try/Catch/End
+
+.. code-block:: ring
+
+       Try
+               see x
+       Catch
+               See "Sorry, We can't use x!" + nl
+       Done
+
+Output
+
+.. code-block:: none
+
+       Sorry, We can't use x!
+
+Now we will talk about NULL and ISNULL()
+
+Since we get error message when we deal with uninitialized variables
+
+We can check these errors using Try/Catch/Done, So we uses NULL and ISNULL() for dealing with Strings.
+
+NULL is a variable contains an empty string
+
+ISNULL() is a function that returns true (1) if the input is an empty string or just a string contains "NULL"
+
+This because we need to test these values (empty strings) and strings contains "NULL" that sometimes come from external resource like DBMS.
+
+Example
+
+.. code-block:: ring
+
+       See IsNull(5) + nl +        # print 0
+       IsNull("hello") + nl +      # print 0
+       IsNull([1,3,5]) + nl +      # print 0
+       IsNull("") + nl +           # print 1
+       IsNull("NULL")              # print 1
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to print lists that contains objects?
+
+How to print lists that contains objects?
+=========================================
+
+In this example we will see how we can print a list contains objects.
+
+.. code-block:: ring
+
+       aList = [[1,2,3] , new point(1,2,3), new point(1,2,3)]
+       see "print the list" + nl
+       see alist
+       see "print the item (object)" + nl
+       see alist[2]
+       class point x y z
+               func init p1,p2,p3 x=p1 y=p2 z=p3
+
+Output
+
+.. code-block:: none
+
+       print the list
+       1
+       2
+       3
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+       print the item (object)
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to insert an item to the first position in the list?
+
+How to insert an item to the first position in the list?
+========================================================
+
+To insert an item we can use the insert(aList,nIndex,Value) function.
+
+.. code-block:: ring
+
+       aList = 1:5
+       insert(aList,0,0)
+       See aList # print numbers from 0 to 5
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to print new lines and other characters?
+
+How to print new lines and other characters?
+============================================
+
+To print new line we can use the nl variable.
+
+.. code-block:: ring
+
+       See "Hello" + nl
+
+or we can use multi-line literal as in the next example
+
+.. code-block:: ring
+
+       See "Hello
+       
+       "
+if we want to print other characters we can use the char(nASCII) function
+
+.. code-block:: ring
+
+       See char(109) + nl +    # print m
+           char(77)            # print M
+
+.. index:: 
+       pair: Frequently Asked Questions; Why we don't use () after the qApp class name?
+
+Why we don't use () after the qApp class name?
+==============================================
+
+When we use RingQt to create GUI application, we uses () after the 
+class name when we create new objects for example.
+
+.. code-block:: ring
+
+       new qWidget() { setWindowTitle("Hello World") resize(400,400) show() }
+
+but before doing that we create an object from the qApp class and we don't use () after that
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app = new qApp
+       {
+           win=new qWidget()
+           {
+               setwindowtitle(:test)
+               show()
+           }
+           exec()
+       }
+Using () after the class name means calling the init() method in the class and passing parameters to this method.
+
+If we used () while no init() method in the class we get the expected error message.
+
+The class qApp don't have this method while the other classes have it because they need it to 
+create an object using a function that return a pointer to that object and this pointer will
+be stored in an attribute called pObject, for more information see ring_qt.ring file
+which contains the classes.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why the window title bar is going outside the screen?
+
+Why the window title bar is going outside the screen?
+=====================================================
+
+When we write the next code
+
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app = new qApp
+       {
+               win=new qWidget()
+               {
+                     setwindowtitle(:test)
+                     setGeometry(0,0,200,200)
+                     show()
+               }
+               exec()
+       }
+I would expect that the window will run at the point (0,0) with (200,200) size but the actual 
+result is that the window title bar is going outside the screen.
+
+This is related to the behavior of Qt framework.
+
+The next code will avoid the problem
+
+.. code-block:: ring
+
+       load "guilib.ring"
+       new qApp {
+               new qWidget() {
+                       move(0,0)
+                       resize(200,200)
+                       show()
+               }
+               exec()
+       }
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to create an array of buttons in GUI applications?
+
+How to create an array of buttons in GUI applications?
+======================================================
+
+Check the next example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       App1 = new qApp {
+
+               win1 = new qWidget() {
+                       move(0,0)
+                       resize(500,500)
+                       new qPushButton(win1)
+                       {
+                               settext("OK")
+                               setclickevent("click()")
+                       }
+                       btn1 = new qPushButton(win1)
+                       {
+                               setgeometry(100,100,100,30)
+                               settext("Button1")
+                       }
+
+                       btn2 = new qPushButton(win1)
+                       {
+                               setgeometry(200,100,100,30)
+                               settext("Button2")
+                       }
+
+                       button = [btn1, btn2]
+                       show()
+               }
+
+               exec()
+
+       }
+
+       func click
+
+               button[1] { settext ("Button3") }
+               button[2] { settext ("Button4") }
+
+.. index:: 
+       pair: Frequently Asked Questions; How to Close a window then displaying another one?
+
+How to Close a window then displaying another one?
+==================================================
+
+This example demonstrates how to close a window and show another one
+
+.. code-block:: none
+
+       Load "guilib.ring"
+
+       app=new qApp
+       {
+               frmBefore=new Qwidget()
+               {
+                       setWindowTitle("before!")
+                       resize(300,320)
+                       move(200,200)
+
+                       button=new qPushButton(frmBefore)
+                       {
+                               setText("Close")
+                               setClickEvent("frmBefore.close() frmMain.show()")
+                       }
+
+                       show()
+               }
+
+               frmMain=new Qwidget()
+               {
+                       setWindowTitle("After!")
+                       resize(300,320)
+                       move(200,200)
+               }
+
+               exec()
+
+       }
+
+.. index:: 
+       pair: Frequently Asked Questions; How to create a Modal Window?
+
+How to create a Modal Window?
+=============================
+
+This example demonstrates how to create a modal window
+
+.. code-block:: ring
+
+       load "guilib.ring"
+       app=new qApp
+       {
+               frmStart=new Qwidget()
+               {
+                       setWindowTitle("The First Window")
+                       resize(300,320)
+                       move(200,200)
+               
+                       button=new qPushButton(frmStart)
+                       {
+                               setText("Show Modal Window")
+                               resize(200,30)
+                               setClickEvent("frmModal.show()")
+                       }
+
+                       new qPushButton(frmStart)
+                       {
+                               setText("Close Window")
+                               move(0,50)
+                               resize(200,30)
+                               setClickEvent("frmStart.Close()")
+                       }
+
+                       show()
+               }
+
+               frmModal =new Qwidget()
+               {
+                       setWindowTitle("Modal Window")
+                       resize(300,320)
+                       move(200,200)
+                       setparent(frmStart)
+                       setwindowmodality(true)
+                       setwindowflags(Qt_Dialog)
+               }
+
+               exec()
+
+       }
+
+Related Documents
+
+* http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html
+* http://doc.qt.io/qt-5/qt.html#WindowType-enum
+* http://doc.qt.io/qt-5/qwindow.html#setParent
+* http://doc.qt.io/qt-5/qt.html#WindowModality-enum
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How can I disable maximize button and resize window?
+
+How can I disable maximize button and resize window?
+====================================================
+
+Use the method setWindowFlags()
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app1 = new qapp {
+                       win1 = new qwidget() {
+                                       setwindowtitle("First")
+                                       setgeometry(100,100,500,500)
+
+                                       new qpushbutton(win1) {
+                                                       setgeometry(100,100,100,30)
+                                                       settext("close")
+                                                       setclickevent("app1.quit()")
+                                       }
+
+                                       new qpushbutton(win1) {
+                                                       setgeometry(250,100,100,30)
+                                                       settext("Second")
+                                                       setclickevent("second()")
+                                       }
+
+                                       showmaximized()
+                       }
+                       exec()
+       }
+
+       func second
+                       win2 = new qwidget() {
+                                       setwindowtitle("Second")
+                                       setgeometry(100,100,500,500)
+                                       setwindowflags(Qt_dialog)
+                                       show()
+                       }
+
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to use SQLite using ODBC?
+
+How to use SQLite using ODBC?
+=============================
+
+In Ring 1.1 and later versions we have native support for SQLite, so you don't need to use it through ODBC.
+
+Also we can access SQLite through RingQt.
+
+The answer to your question
+
+.. code-block:: ring
+
+       pODBC = odbc_init()
+       odbc_connect(pODBC,"DRIVER=SQLite3 ODBC Driver;Database=mydb.db;LongNames=0;"+
+                          "Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;")
+       odbc_execute(pODBC,"create table 'tel' ('ID','NAME','PHONE');")
+       odbc_execute(pODBC,"insert into 'tel' values ('1','Mahmoud','123456');")
+       odbc_execute(pODBC,"insert into 'tel' values ('2','Ahmed','123456');")
+       odbc_execute(pODBC,"insert into 'tel' values ('3','Ibrahim','123456');")
+       odbc_execute(pODBC,"select * from tel") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) 
+                       if x != nMax see " - " ok
+               next
+       end
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: none
+
+       Columns Count : 3
+
+       1 - Mahmoud - 123456
+       2 - Ahmed - 123456
+       3 - Ibrahim - 123456
+
+The program will create the file : mydb.db
+
+Note : when I print the odbc drivers I see the long list that includes
+
+.. code-block:: none
+
+       SQLite3 ODBC Driver - UsageCount=1
+       SQLite ODBC Driver - UsageCount=1       
+       SQLite ODBC (UTF-8) Driver - UsageCount=1
+
+And I'm using "SQLite3 ODBC Driver".
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Can I connect to dbase/harbour database?
+
+Can I connect to dbase/harbour database?
+========================================
+
+You can connect to any database using ODBC
+
+To connect to xbase files (*.DBF)
+
+.. code-block:: ring
+
+       See "Using DBF Files using ODBC" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"Driver={Microsoft dBase Driver (*.dbf)};"+
+                          "datasource=dBase Files;DriverID=277")
+       See "Select data" + nl
+       odbc_execute(pODBC,"select * from tel.dbf") 
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+                  See "Row data:" + nl
+                  for x = 1 to nMax
+                                  see odbc_getdata(pODBC,x) + " - "
+                  next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output 
+
+.. code-block:: none
+
+       Using DBF Files using ODBC
+       Connect to database
+       Select data
+       Columns Count : 3
+       Row data:
+       Ahmad - Egypt - 234567 - Row data:
+       Fady - Egypt - 345678 - Row data:
+       Shady - Egypt - 456789 - Row data:
+       Mahmoud - Egypt - 123456 - Close database...
+
+
+Also you can connect to a Visual FoxPro database (requires installing Visual FoxPro driver)
+
+.. code-block:: ring
+
+
+       See "ODBC test 6" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"Driver={Microsoft Visual FoxPro Driver};"+
+               "SourceType=DBC;SourceDB=C:\PWCT19\ssbuild\PWCTDATA\CH1\Data\mydata.dbc;") 
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from t38") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See "Row data:" + nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) + " - "
+               next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+.. index:: 
+       pair: Frequently Asked Questions; Why setClickEvent() doesn't see the object methods directly?
+
+Why setClickEvent() doesn't see the object methods directly?
+============================================================
+
+setClickEvent(cCode) take a string contains code. The code will be executed when the event happens.
+
+Ring support Many Programming Paradigms like Procedural, OOP, Functional and others.
+
+But when you support many paradigms at the language level you can't know which paradigm will be used so you have two options
+
+(1) Provide General Solutions that works with many programming paradigms.
+
+(2) Provide Many Specific solutions where each one match a specific paradigm.
+
+setClickEvent() and others belong to (General Solutions that works with many programming paradigms).
+
+You just pass a string of code that will be executed without any care about classes and objects.
+
+This code could be anything like calling a function, calling a method and setting variable value.
+
+Some other languages force you to use OOP and call methods for events.
+Also some other languages uses anonymous functions that may get parameters like the current object.
+
+Now we have the general solution (not restricted with any paradigm), In the future we may 
+add specific solutions that match specific paradigms (OOP, Functional, Declarative and Natural).
+
+.. index:: 
+       pair: Frequently Asked Questions; Why I get Calling Function without definition Error?
+
+Why I get Calling Function without definition Error?
+====================================================
+
+Each program follow the next order 
+
+1 - Loading Files
+2 - Global Variables and Statements
+3 - Functions
+4 - Packages, Classes and Methods
+
+So what does that mean ?
+
+(1) **** No Functions comes After Classes ****
+(2) **** No command is required to end functions/methods/classes/packages ****
+
+Look at this example
+
+.. code-block:: ring
+
+       See "Hello"
+       test()
+       func test 
+           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
+
+.. code-block:: ring
+
+       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
+
+.. code-block:: ring
+
+       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
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Can Ring work on Windows XP?
+
+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 
+
+.. code-block:: none
+
+       /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
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to extend RingQt and add more classes?
+
+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)
+
+.. code-block:: c
+
+       #include "ring.h"
+
+       RING_FUNC(ring_ringlib_dlfunc)
+       {
+               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.
+
+.. code-block:: ring
+
+       See "Dynamic DLL" + NL
+       LoadLib("ringlib.dll")
+       dlfunc()
+
+Output
+
+.. code-block:: none
+
+       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
+
+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 
+
+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.
+
+.. index:: 
+       pair: Frequently Asked Questions; How to add Combobox and other elements to the cells of a QTableWidget?
+
+How to add Combobox and other elements to the cells of a QTableWidget?
+======================================================================
+
+Check the next code
+
+.. code-block:: ring
+
+       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()
+       }
+       
+.. index:: 
+       pair: Frequently Asked Questions; How to perform some manipulations on selected cells in QTableWidget?
+
+How to perform some manipulations on selected cells in QTableWidget?
+====================================================================
+
+Check the next sample
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       
+       New qApp {
+               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
+
+.. index:: 
+       pair: Frequently Asked Questions; Which of 3 coding styles are commonly used or recommended by the community?
+
+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
+
diff --git a/docs/en/source/fdeventcode.png b/docs/en/source/fdeventcode.png
new file mode 100644 (file)
index 0000000..7f8205c
Binary files /dev/null and b/docs/en/source/fdeventcode.png differ
diff --git a/docs/en/source/fdeventmethod.png b/docs/en/source/fdeventmethod.png
new file mode 100644 (file)
index 0000000..0751a58
Binary files /dev/null and b/docs/en/source/fdeventmethod.png differ
diff --git a/docs/en/source/fdlistitems.png b/docs/en/source/fdlistitems.png
new file mode 100644 (file)
index 0000000..7dad0a7
Binary files /dev/null and b/docs/en/source/fdlistitems.png differ
diff --git a/docs/en/source/fdms.png b/docs/en/source/fdms.png
new file mode 100644 (file)
index 0000000..5dfab69
Binary files /dev/null and b/docs/en/source/fdms.png differ
diff --git a/docs/en/source/fdsayhello1.png b/docs/en/source/fdsayhello1.png
new file mode 100644 (file)
index 0000000..2bf752b
Binary files /dev/null and b/docs/en/source/fdsayhello1.png differ
diff --git a/docs/en/source/fifteen2.png b/docs/en/source/fifteen2.png
new file mode 100644 (file)
index 0000000..3eb922c
Binary files /dev/null and b/docs/en/source/fifteen2.png differ
diff --git a/docs/en/source/files.txt b/docs/en/source/files.txt
new file mode 100644 (file)
index 0000000..de73593
--- /dev/null
@@ -0,0 +1,712 @@
+.. index:: 
+       single: Files; Introduction
+
+=====
+Files
+=====
+
+In this chapter we are going to learn about files functions.
+
+* Read()
+* Write()
+* Dir()
+* Rename()
+* Remove()
+* fopen()
+* fclose()
+* fflush()
+* freopen()
+* tempfile()
+* tempname()
+* fseek()
+* ftell()
+* rewind()
+* fgetpos()
+* fsetpos()
+* clearerr()
+* feof()
+* ferror()
+* perror()
+* fgetc()
+* fgets()
+* fputc()
+* fputs()
+* ungetc()
+* fread()
+* fwrite()
+* fexists()
+* Numbers and Bytes
+
+.. index:: 
+       pair: Files; Read File using Read()
+
+Read() Function
+===============
+
+We can read the file content using the Read() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Read(cFileName) ---> String contains the file content
+
+Example:
+
+.. code-block:: ring
+
+       see read("myfile.txt")
+
+The read function can read binary files too
+
+Example:
+
+.. code-block:: ring
+
+       see read("myapp.exe")
+
+
+.. index:: 
+       pair: Files; Write file using Write()
+
+Write() Function
+================
+
+We can write string to file using the Write() function
+
+The write function can write binary data to binary files.
+
+Syntax:
+
+.. code-block:: ring
+
+       Write(cFileName,cString)        # write string cString to file cFileName
+
+Example:
+
+.. code-block:: ring
+
+       # copy file
+       cFile = read("ring.exe")
+       write("ring2.exe",cFile)
+
+.. index:: 
+       pair: Files; Dir()
+
+Dir() Function
+==============
+
+We can get the folder contents (files & sub folders) using the Dir() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Dir(cFolderPath) ---> List contains files & sub folders.
+
+This function returns a list and each list item is a list of two items
+
+* File/sub folder name
+
+* Type (0 = File , 1 = Folder/Directory)
+
+Example:
+
+.. code-block:: ring
+
+       see "Testing DIR() " + nl
+       mylist = dir("C:\myfolder")
+       for x in mylist
+               if x[2] 
+                       see "Directory : " + x[1] + nl
+               else
+                       see "File : " + x[1] + nl
+               ok
+       next
+       see "Files count : " + len(mylist)
+
+.. index:: 
+       pair: Files; Rename()
+
+Rename() Function
+=================
+
+We can rename files using the Rename() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Rename(cOldFileName,cNewFileName) ---> Number ( Status: Success (0) , Error (-1) )
+
+Example:
+
+.. code-block:: ring
+
+       rename("file.txt","help.txt")
+
+.. index:: 
+       pair: Files; Remove()
+
+Remove() Function
+=================
+
+We can delete a file using the Remove() function
+
+
+Syntax:
+
+.. code-block:: ring
+
+       Remove(cFileName)
+
+Example:
+
+.. code-block:: ring
+
+       remove("test.txt")
+
+.. index:: 
+       pair: Files; Fopen()
+
+Fopen() Function
+================
+
+We can open a file using the Fopen() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fopen(cFileName,cMode) ---> File Handle
+
+=====  ==========================================
+Mode   Description
+=====  ==========================================
+"r"    Reading (The file must exist)
+"w"    Writing (create empty file / overwrite)
+"a"    Appends (create file if it doesn't exist)
+"r+"   update (reading/writing)
+"w+"   Create empty file (reading/writing)
+"a+"   reading & appending
+=====  ==========================================
+
+.. index:: 
+       pair: Files; Fclose()
+
+Fclose() Function
+=================
+
+When we open a file using fopen() function, we can close it
+using the Fclose() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fclose(file handle)
+
+.. index:: 
+       pair: Files; Fflush()
+
+Fflush() Function
+=================
+
+We can flushes the output buffer of a stream using the Fflush() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fflush(file handle)
+
+.. index:: 
+       pair: Files; Freopen()
+
+Freopen() Function
+==================
+
+We can open another file using the same file handle and at the same time close
+the old file 
+
+Syntax:
+
+.. code-block:: ring
+
+       Freopen(cFileName,cMode,file handle) ---> file handle
+
+Example:
+
+.. code-block:: ring
+
+       freopen("myprogoutput.txt","w+",stdout)
+       see "welcome" + nl
+       for x = 1 to 10
+               see x + nl
+       next
+
+       /*
+       ** Read : https://en.wikipedia.org/wiki/Device_file#Device_files
+       ** The next code is not portable, we can use iswindows() before 
+       ** using it and we can write special code for each operating system.
+       */
+
+       freopen("CON","w",stdout)       # For Microsoft Windows
+       see "Done" + nl                 # print to stdout again
+
+Output:
+
+.. code-block:: ring
+
+       # Output to stdout
+       Done
+
+       # Output to file : myprogoutput.txt
+       welcome
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: Files; Tempfile()
+
+Tempfile() Function
+===================
+
+The function Tempfile() creates a temp. file (binary).
+
+The file will be deleted automatically when the stream is closed
+
+Syntax:
+
+.. code-block:: ring
+
+       TempFile() ---> file handle
+
+.. index:: 
+       pair: Files; Tempname()
+
+Tempname() Function
+===================
+
+We can generate temp. file name using the Tempname() function
+
+The generated name will be different from the name of any existing file
+
+Syntax:
+
+.. code-block:: ring
+
+       Tempname() ---> generated file name as string
+
+.. index:: 
+       pair: Files; Fseek()
+
+Fseek() Function
+================
+
+We can set the file position of the stream using the Fseek() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fseek(file handle, nOffset, nWhence) ---> zero if successful
+
+The next table presents the nWhence values
+
+=====  ===============================
+Value  Description
+=====  ===============================
+0      Beginning of file
+1      Current position
+2      End of file
+=====  ===============================
+
+.. index:: 
+       pair: Files; Ftell()
+
+Ftell() Function
+================
+
+We can know the current file position of a stream using the Ftell() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Ftell(file handle) ---> file position as number
+
+.. index:: 
+       pair: Files; Rewind()
+
+Rewind() Function
+=================
+
+We can set the file position to the beginning of the file using the Rewind() function
+
+Syntax:
+
+.. code-block:: ring
+       
+       Rewind(file handle)
+
+.. index:: 
+       pair: Files; Fgetpos()
+
+Fgetpos() Function
+==================
+
+We can get handle to the current file position using the Fgetpos() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fgetpos(file handle) ---> position handle
+
+.. index:: 
+       pair: Files; Fsetpos()
+
+Fsetpos() Function
+==================
+
+We can set the current file position using the Fsetpos() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fsetpos(file handle,position handle)
+
+.. index:: 
+       pair: Files; Clearerr()
+
+Clearerr() Function
+===================
+
+We can clear the EOF error and the error indicators of a stream using the clearerr()
+function
+
+Syntax:
+
+.. code-block:: ring
+
+       Clearerr(file handle)
+
+.. index:: 
+       pair: Files; Feof()
+
+Feof() Function
+===============
+
+We can test the end-of-file indicator using the Feof() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Feof(file handle) ---> returns 1 if EOF and 0 if not
+
+.. index:: 
+       pair: Files; Ferror()
+
+Ferror() Function
+=================
+
+We can test the error indicator of a given stream using the Ferror() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Ferror(file handle) ---> returns 1 if error and 0 if not
+
+.. index:: 
+       pair: Files; Perror()
+
+Perror() Function
+=================
+
+We can print error message to the stderr using the Perror() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Perror(cErrorMessage)
+
+.. index:: 
+       pair: Files; Fgetc()
+
+Fgetc() Function
+================
+
+We can get the next character from the stream using the Fgetc() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fgetc(file handle) ---> returns character or EOF
+
+
+.. index:: 
+       pair: Files; Fgets()
+
+Fgets() Function
+================
+
+We can read new line from the stream using the Fgets() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fgets(file handle,nSize) ---> string
+
+The function stop when nSize characters are read, new line character is read or EOF.
+
+.. index:: 
+       pair: Files; Fputc()
+
+Fputc() Function
+================
+
+We can write a character to the stream using the Fputc() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fputc(file handle,cChar)
+
+.. index:: 
+       pair: Files; Fputs()
+
+Fputs() Function
+================
+
+We can write a string to the stream using the Fputs() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fputs(file handle,cString)
+
+
+.. index:: 
+       pair: Files; Ungetc()
+
+Ungetc() Function
+=================
+
+We can push a character to the stream using the Ungetc() function
+
+The character will be available for the next read
+
+Syntax:
+
+.. code-block:: ring
+
+       Ungetc(file handle,character)
+
+
+.. index:: 
+       pair: Files; Fread()
+
+Fread() Function
+================
+
+We can read data from a stream using the Fread() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fread(file handle,nSize)
+
+.. index:: 
+       pair: Files; Fwrite()
+
+Fwrite() Function
+=================
+
+We can write data to a stream using the Fwrite() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fwrite(file handle,cString)
+
+
+.. index:: 
+       pair: Files; Fexists()
+
+Fexists() Function
+==================
+
+We can check if a file exists using the Fexists() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fexists(cFileName) ---> returns 1 if the file exists
+
+Example:
+
+.. code-block:: ring
+
+       see fexists("b:\mahmoud\apps\ring\ring.exe") + nl +
+           fexists("b:\mahmoud\apps\ring\ring2.exe") + nl 
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+
+.. index:: 
+       pair: Files; Example
+
+Example
+=======
+
+The next program test some of the file functions
+
+.. code-block:: ring
+
+       See "testing file functions" + nl
+
+       See "open file" + nl
+       fp = fopen(exefolder() + "../tests/scripts/s65.ring","r")
+
+       See "reopen" + nl
+       fp = freopen(exefolder() + "../tests/scripts/s78.ring","r",fp)
+       See "close file" + nl
+       fclose(fp)
+
+       see "temp file" + nl
+       fp = tempfile()
+       fclose(fp)
+
+       see "temp name" + nl
+       see tempname() + nl
+
+       remove(exefolder() + "../tests/scripts/mytest2.txt")
+       write(exefolder() + "../tests/scripts/tests1.txt","hello")
+       rename(exefolder() + "../tests/scripts/test1.txt",exefolder() +
+                                               "../tests/scripts/mytests2.txt")
+
+       see "print file" + nl
+       fp = fopen(exefolder() + "../samples/fromdoc/filefuncs.ring","r")
+       r = fgetc(fp)
+       while isstring(r)
+                       see r
+                       r = fgetc(fp)
+       end
+       fclose(fp)
+
+       see nl+"print line from the file" + nl
+       fp = fopen(exefolder() + "../samples/fromdoc/filefuncs.ring","r")
+       r = fgets(fp,33)
+       see r + nl
+       fclose(fp)
+       fp = fopen(exefolder() + "../tests/scripts/test78.txt","w+")
+       fseek(fp,0,2) # goto end of file
+       fputc(fp,"t")
+       fputc(fp,"e")
+       fputc(fp,"s")
+       fputc(fp,"t")
+       fputs(fp,"tests2")
+       fclose(fp)
+
+       see "print file" + nl
+       see read(exefolder() + "../tests/scripts/test78.txt")
+
+       fp = fopen(exefolder() + "../tests/scripts/test78.txt","r")
+       see "testing ungetc() " + nl
+       for x = 1 to 3
+                       r = fgetc(fp)
+                       see r + nl
+                       ungetc(fp,r)
+       next
+       fclose(fp)
+
+       see "testing fread() " + nl
+       fp = fopen(exefilename(),"rb")
+       r = fread(fp,100)
+       see r + nl
+       fclose(fp)
+
+       see "testing fwrite() " + nl
+       fp = fopen(exefolder() + "../tests/scripts/test1.txt","wb")
+       fwrite(fp,r)
+       fclose(fp)
+
+The next example print part of the content of a binary file
+
+.. code-block:: ring
+
+       see "Testing: fread()" +" FileName: "+ exefilename() +nl +nl
+       fp = fopen(exefilename(),"rb")
+       r = fread(fp,800)
+       for n =1 to len(r)
+               if isprint(substr(r, n, 1)) 
+                       see substr(r, n, 1) 
+               else
+                       see "." 
+               ok
+               ### 80 char per line
+               if n % 80 = 0  
+                       see nl
+               ok
+       next
+       fclose(fp)
+
+.. index:: 
+       pair: Files; Numbers and Bytes
+
+Numbers and Bytes
+=================
+
+The next functions to convert between Numbers and Bytes.
+
+* Int2Bytes()
+* Float2Bytes()
+* Double2Bytes()
+* Bytes2Int()
+* Bytes2Float()
+* Bytes2Double()
+
+Example:
+
+.. code-block:: ring
+
+       see "Test Int2Bytes() and Bytes2Int() - Value : 77" + nl
+       r = Int2Bytes(77)
+       see "Int Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Int(r) + nl
+       see "Test Float2Bytes() and Bytes2Float() - Value 77.12" + nl
+       r = Float2Bytes(77.12)
+       see "Float Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Float(r) + nl
+       see "Test Double2Bytes() and Bytes2Double() - Value 9999977.12345" + nl
+       r = Double2Bytes(9999977.12345)
+       see "Double Size : " + len(r) + nl
+       see r + nl
+       decimals(5)
+       see Bytes2Double(r) + nl
diff --git a/docs/en/source/findinfiles.png b/docs/en/source/findinfiles.png
new file mode 100644 (file)
index 0000000..5cb26be
Binary files /dev/null and b/docs/en/source/findinfiles.png differ
diff --git a/docs/en/source/flappybird.png b/docs/en/source/flappybird.png
new file mode 100644 (file)
index 0000000..073a20a
Binary files /dev/null and b/docs/en/source/flappybird.png differ
diff --git a/docs/en/source/formdesigner.png b/docs/en/source/formdesigner.png
new file mode 100644 (file)
index 0000000..edd4a37
Binary files /dev/null and b/docs/en/source/formdesigner.png differ
diff --git a/docs/en/source/formdesigner.txt b/docs/en/source/formdesigner.txt
new file mode 100644 (file)
index 0000000..0063c70
--- /dev/null
@@ -0,0 +1,204 @@
+.. index:: 
+       single: Form Designer; Introduction
+
+=======================
+Using the Form Designer
+=======================
+
+In this chapter we will learn about using the Form Designer.
+
+We can run the From Designer from Ring Notepad
+
+From the Menubar in Ring Notepad - View Menu - We can Show/Hide the Form Designer window.
+
+.. image:: rnotefd.png
+       :alt: Form Designer - Inside Ring Notepad
+
+Also we can run the Form Designer in another window.
+
+From the Ring Notepad - Tools Menu - Select the Form Designer.
+
+.. image:: formdesigner.png
+       :alt: Form Desigenr
+
+.. index:: 
+       pair: Form Designer; The Designer Windows
+
+The Designer Windows
+====================
+
+* Toolbox : To select controls to be added to the window.
+
+* Properties : To set the properties of the active window or controls.
+
+* Design Region : To select, move and resize the window and the controls.
+
+.. index:: 
+       pair: Form Designer; The Designer Windows
+
+The Toolbox
+===========
+
+We have many buttons.
+
+* Lock : We can use it to draw many controls of the same type quickly.
+
+* Select : We can use it to select a control in the Design Region
+
+* Controls Buttons : Select a control to be added to the window.
+
+.. index:: 
+       pair: Form Designer; The Properties
+
+The Properties
+==============
+
+* When we select the window or one control, We will have the selected object properties.
+
+* Also In the properties window we have a combobox to select the active control.
+
+* Some properties provide a button next to the property value. We can click on the button to get more options.
+
+* When we select more than one control, We will have options for multi-selection
+
+.. image:: fdms.png
+       :alt: Form Designer - Multiple-Selection
+
+.. index:: 
+       pair: Form Designer; Running Forms
+
+Running Forms
+=============
+
+When we save the form file (*.rform), The Form Designer will create two Ring files
+
+* The Controller Class
+* The View Class
+
+For example, if the form file is helloworld.rform 
+
+The form designer will generate two files
+
+* helloworldcontroller.ring
+* helloworldview.ring
+
+To run the program, Open the controller class file then click the Run button (CTRL+F5)
+
+.. tip:: When you open a form using Ring Notepad, the controller class will be opened automatically, So we can press (CTRL+F5) or click on the Run button while the form designer window is active.
+
+.. index:: 
+       pair: Form Designer; Events Code
+
+Events Code
+===========
+
+(1) Just type the method name in the event property. 
+
+.. image:: fdeventmethod.png
+       :alt: Form Designer - Event Method
+
+(2) Then write the method code in the
+controller class.
+
+.. image:: fdeventcode.png
+       :alt: Form Designer - Event Code
+
+In this example we write
+
+.. code-block:: ring
+
+       func CloseWindow
+               oView.win.close()
+
+Where inside the controller class, We uses the oView object to access the form.
+
+Another Example : 
+
+.. image:: fdsayhello1.png
+       :alt: Form Designer - Say Hello
+
+The Event Code
+
+.. code-block:: ring
+
+       func SayHello 
+               oView {
+                       LineEdit2.setText("Hello "+ LineEdit1.text() )
+               }
+
+
+.. index:: 
+       pair: Form Designer; Keyboard Shortcuts
+
+Keyboard Shortcuts
+==================
+
+After selecting one or group of controls
+
+* Use the Arrows (Up, Down, Left and Right) to move them around.
+* Shift + the Arrows (Up, Down, Left and Right) to Resize the controls.
+* Del button to delete the controls.
+* CTRL+SHIFT+V to Duplicate the controls.
+
+
+.. index:: 
+       pair: Form Designer; Menubar Designer
+
+Menubar Designer
+================
+
+From the Window properties we can open the Menubar Designer
+
+
+.. image:: menubardesigner.png
+       :alt: Form Designer - Menubar Designer
+
+.. index:: 
+       pair: Form Designer; Window Flags
+
+Window Flags
+============
+
+From the Window properties we can open the Window Flags window.
+
+
+.. image:: windowflags.png
+       :alt: Form Designer - Window Flags
+
+
+.. index:: 
+       pair: Form Designer; Entering Items
+
+Entering Items
+==============
+
+For some controls like the List Widget we can enter items separated by comma ','
+
+.. image:: fdlistitems.png
+       :alt: Form Designer - List Items
+
+
+.. index:: 
+       pair: Form Designer; Using Layouts
+
+Using Layouts
+=============
+
+(1) To use layouts, At first add the layout control to the window.
+
+(2) Use the window "Set Layout" property to determine the main layout.
+
+(3) From the layout properties determine the controls and the layout type.
+
+
+.. index:: 
+       pair: Form Designer; More Samples and Tests
+
+More Samples and Tests
+======================
+
+Check the folder : ring/applications/formdesigner/tests
+
+Online : https://github.com/ring-lang/ring/tree/master/applications/formdesigner/tests
+
+
diff --git a/docs/en/source/formdesignerandroid.png b/docs/en/source/formdesignerandroid.png
new file mode 100644 (file)
index 0000000..eac7ded
Binary files /dev/null and b/docs/en/source/formdesignerandroid.png differ
diff --git a/docs/en/source/formtranslation1.png b/docs/en/source/formtranslation1.png
new file mode 100644 (file)
index 0000000..992f34f
Binary files /dev/null and b/docs/en/source/formtranslation1.png differ
diff --git a/docs/en/source/foxringfuncsdoc.txt b/docs/en/source/foxringfuncsdoc.txt
new file mode 100644 (file)
index 0000000..27f22d4
--- /dev/null
@@ -0,0 +1,983 @@
+.. index:: 
+     single: FoxRing Functions Reference; Introduction
+
+===========================
+FoxRing Functions Reference
+===========================
+
+As a FoxPro developer, I started writing a class with some of the functions I used in FoxPro.
+
+The goal is to create as many functions as possible with the behavior similar to FoxPro functions.
+
+Developer: Jose Rosado
+
+.. index:: 
+     pair: FoxRing Functions Reference; FoxRing functions
+
+FoxRing functions
+=================
+
++-----------------------+-----------------------------------------------------------------------------------------------+
+| Function Name                |                               Description                                                     |
++=======================+===============================================================================================+
+| frAbs()              | Returns the absolute value of the specified numeric expression.                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAddBs()            | Adds a backslash (if needed) to a path expression.                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frALines()           | Creates an Array with the content of the specified string.                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAllTrim()          | Removes all leading and trailing spaces of the specified string.                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAsc()              | Returns the ANSI value for the leftmost character in a character expression.                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAt()               | Searches a character expression for the occurrence                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | of another character expression.                                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAtC()              | Searches a character expression for the ocurrence of another character expression without     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | regard for the case of these two expressions.                                                 |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frBetween()          | Determines whether the value of an expression is inclusively between the values of two        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | expressions of the same type.                                                                 |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frChr()              | Returns the character associated with the specified numeric ANSI code.                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frEmpty()            | Determines whether an expression evaluates to empty.                                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frFile()             | Checks if a file exists on disk.                                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frFileToStr()                | Returns the contents of a file as a character string.                                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frForceExt()         | Returns a string with the old file name extension replaced by a new extension.                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frForcePath()                | Returns a file name with a new path name substituted for the old one.                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frIif()              | Returns one of two values depending on the value of a logical expression.                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frInList()           | Determines whether an expression matches another expression in a list.                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frInt()              | Evaluates a numeric expression and returns the integer portion of the expression.             |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustDrive()                | Returns the drive letter from a complete path.                                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustExt()          | Returns the characters of a file extension from a complete path.                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustFName()                | Returns the file name portion of a complete path and file name.                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustPath()         | Returns the path portion of a complete path and file name.                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustStem()         | Returns the stem name (the file name before the extension)                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | from a complete path and file name.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frLen()              | Determines the number of characters in a character expression,                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | indicating the length of the expression.                                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frListToString()     | Creates a string with the string elements of an Array.                                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frLTrim()            | Removes all leading spaces or parsing characters from the                                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | specified character expression.                                                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frPadL()             | Returns a string from an expression, padded with spaces or characters to a                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | specified length on the left side.                                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frPadR()             | Returns a string from an expression, padded with spaces or characters to a                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | specified length on the right side.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frProper()           | Returns from a character expression a string capitalized as                                   |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | appropriate for proper names.                                                                 |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frReplicate()                | Returns a character string that contains a specified character                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | expression repeated a specified number of times.                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frRTrim()            | Removes all trailing spaces or parsing characters from                                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | the specified character expression.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSetIfEmpty()       | Set a Value into a variable if the variable value is empty, null or zero.                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSetSeparatorTo()   | Specifies the character for the numeric place separator.                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSpace()            | Returns a character string composed of a specified number of spaces.                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStr()              | Returns the character equivalent of a numeric expression.                                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStringToList()     | Creates a List with the content of the specified string.                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStrTran()          | Searches a character expression for a second character expression and                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | replaces each occurrence with a third character expression.                                   |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStuff()            | Returns a new character string replaced by a specified number of                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | characteres in a character expression with another character expression.                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSubStr()           | Returns a character string from the given character expression,                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | starting at a specified position in the character                                             |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | expression and continuing for a specified number of characters.                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frTransform()                | Returns a character string from an expression in a                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | format determined by a format code.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frVal()              | Returns a numeric value from a character expression composed of numbers.                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frVarType()          | Returns the data type of an expression.                                                       |
++-----------------------+-----------------------------------------------------------------------------------------------+
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAbs() function
+
+frAbs() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lnReturnValue = frAbs(tnExpression)
+        * Description  : Returns the absolute value of the specified numeric expression.
+        *              :
+        * Arguments    : <tnExpression>
+        *              : Specifies the numeric expression whose absolute value frAbs()
+        *              : returns.
+        * Returns      : <lnReturnValue>
+        *              : Returns the absolute value of the specified numeric expression.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAsc() function
+
+frAsc() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lnReturnValue = frAsc(tcExpression)
+        * Description  : Returns the ANSI value for the leftmost character in
+        *              : a character expression.
+        * Arguments    : <tcExpression>
+        *              : Specifies the character expression containing the character 
+        *              : whose ANSI value frAsc() 
+        *              : returns. Any characters after the first character in 
+        *              : tcExpression are ignored by frAsc().
+        * Returns      : <lnReturnValue>
+        *              : returns the position of the character in the character 
+        *              : table of the current code page. 
+        *              : Every character has a unique ANSI value in the 
+        *              : range from 0 to 255.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAddBs() function
+
+frAddBs() function
+==================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frAddBs(tcPath)
+        * Description  : Adds a backslash (if needed) to a path expression.
+        *              :
+        * Arguments    : <tcPath>
+        *              : Specifies the path name to which to add the backslash.
+        *              :
+        * Returns      : <lcReturnValue> The path with the backslash.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAt() function
+
+frAt() function
+===============
+
+.. code-block:: none
+
+        * Syntax       : lnPos = frAt(tcToSearch, tcString, tnOccurrence)
+        * Description  : Searches a character expression for the occurrence of 
+        *              : another character expression. 
+        *              : The search performed by frAt() is case-sensitive.
+        *              :
+        * Arguments    : <tcToSearch>
+        *              : Specifies the character expression to search 
+        *              : for in <tcString>.
+        *              : <tcString> 
+        *              : Specifies the character expression to search 
+        *              : for <tcToSearch>. 
+        *              : <tnOccurrence> 
+        *              : Specifies which occurrence, first, second, third, 
+        *              : and so on, of <tcToSearch> to search for 
+        *              : in <tcString>. 
+        *              : By default, frAt() searches for the first occurrence 
+        *              : of <tcToSearch> (tnOccurrence = 1). 
+        * Returns      : Numeric. frAt() returns an integer indicating the 
+        *              : position of the first character for a 
+        *              : character expression or memo field within another 
+        *              : character expression or memo field, 
+        *              : beginning from the leftmost character. If the 
+        *              : expression or field is not found, or if 
+        *              : <tnOccurrence> is greater than the number of 
+        *              : times <tcToSearch> occurs in  <tcString>, frAt() 
+        *              : returns 0.
+
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAtC() function
+
+frAtC() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lnPos = frAtC(tcToSearch, tcString, tnOccurrence)
+        * Description  : Searches a character expression for the occurrence 
+        *              : of another character expression 
+        *              : without regard for the case of these two expressions.
+        *              :
+        * Arguments    : <tcToSearch>
+        *              : Specifies the character expression to search 
+        *              : for in <tcString>.
+        *              : <tcString> 
+        *              : Specifies the character expression to search 
+        *              : for <tcToSearch>. 
+        *              : <tnOccurrence> 
+        *              : Specifies which occurrence, first, second, third, 
+        *              : and so on, of <tcToSearch> to search for
+        *              : in tcString. 
+        *              : By default, frAtC() searches for the first occurrence 
+        *              : of <tcToSearch> (tnOccurrence = 1). 
+        * Returns      : Numeric. frAtC() returns an integer indicating the 
+        *              : position of the first character for a 
+        *              : character expression or memo field within 
+        *              : another character expression or memo field, 
+        *              : beginning from the leftmost character. If the 
+        *              : expression or field is not found, or if 
+        *              : <tnOccurrence> is greater than the number of 
+        *              : times <tcToSearch> occurs in <tcString>, frAtC()
+        *              : returns 0.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frChr() function
+
+frChr() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frChr(tnExpression)
+        * Description  : Returns the character associated with the specified numeric
+        *              :  ANSI code.
+        * Arguments    : <tnExpression>
+        *              : Specifies a number between 0 and 255 whose equivalent ANSI 
+        *              : character frChr() returns.
+        * Returns      : <lcReturnValue>
+        *              : Returns a single character corresponding to the numeric 
+        *              : position of the character in the
+        *              : character table of the current code page.
+        *              :
+        * Remarks      : tnExpression must be between 0 and 255
+
+.. index:: 
+     pair: FoxRing Functions Reference; frEmpty() function
+
+frEmpty() function
+==================
+
+.. code-block:: none
+
+        * Syntax       : llReturnValue = frEmpty(tuExpression)
+        * Description  : Determines whether an expression evaluates to empty.
+        *              :
+        * Arguments    : <tuExpression>
+        *              : Specifies the expression that EMPTY() evaluates. 
+        *              : You can specify an expression with Character, 
+        *              : Numeric, or logical type.
+        *              :
+        * Returns      : <llReturnValue> Logical
+
+.. index:: 
+     pair: FoxRing Functions Reference; frFile() function
+
+frFile() function
+================
+
+.. code-block:: none
+
+        * Syntax       : llReturnValue = frFile(tcFileName, tnFlag)
+        * Description  : Checks if the specified file exists on disk.
+        *              :
+        * Arguments    : <tcFileName>
+        *              : Specifies the name of the file to check. 
+        *              : tcFileName must include 
+        *              : the file extension. You can include a path with 
+        *              : the file name to 
+        *              : search for a file in a directory or on a drive 
+        *              : other than the current directory or drive. 
+        *              : 
+        *              : <tnFlag> 
+        *              : tnFlag was included for future compatibility.
+        *              : In this version, It always returns true whenever 
+        *              : the file exists on disk.
+        * Returns      : <llReturnValue> Logical
+        *              : True if file exists on disk.
+        *              : False if file doesn't exist on disk.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frFileToStr() function
+
+frFileToStr() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frFileToStr(tcFileName)
+        * Description  : Returns the contents of a file as a character string.
+        *              :
+        * Arguments    : <tcFileName>
+        *              : Specifies the name of the file whose contents are 
+        *              : returned as a character 
+        *              : string. If the file is in a directory other than 
+        *              : the current default directory, 
+        *              : include a path with the file name.
+        *              :
+        * Returns      : <lcReturnValue> 
+        *              : A character string with the content of the specified file.
+        *              :
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStr() function
+
+frStr() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frStr(tnValue, tnLen, tnDec)
+        * Description  : Returns the character equivalent of a numeric expression.
+        *              :
+        * Arguments    : <tnValue>
+        *              : Specifies the numeric expression to evaluate.
+        *              : 
+        *              : <tnLen>
+        *              : Specifies the length of the character string returned. 
+        *              : If tnLen is 0, tnLen defaults to 10 characters. 
+        *              : If tnLen < 0 returns one string with same length as the number.
+        *              : Note  
+        *              : If the expression contains a decimal point, 
+        *              : the length includes one character for
+        *              : the decimal point and one character 
+        *              : for each digit in the character string.
+        *              : 
+        *              : <tnDec> 
+        *              : Specifies the number of decimal places in the 
+        *              : character string returned. 
+        *              : To specify the number of decimal places using 
+        *              : tnDec, you must include nLength. If nDecimalPlaces is omitted,
+        *              : the number of decimal places defaults to zero (0). 
+        *              : 
+        * Returns      : Character data type. frStr() returns a character string 
+        *              : equivalent to the specified numeric expression. 
+        *              : Depending on certain conditions, frStr() can return the following: 
+        *              : If you specify fewer decimal places than exist in tnValue, 
+        *              : the return value is rounded up. To round results to the nearest 
+        *              : decimal place instead of upward, include the ROUND( ) function. 
+        *              : For more information, see ROUND( ) Function.
+        *              : If nExpression is an integer, and nLength is less than 
+        *              : the number of digits in nExpression, frStr( ) returns a string of 
+        *              : asterisks, indicating numeric overflow.
+        *              : If nExpression contains a decimal point, and nLength is equal 
+        *              : to or less than the number of digits to the left of the decimal
+        *              : point, frStr( ) returns a string of asterisks, 
+        *              : indicating numeric overflow.
+        *              : If nLength is greater than the length of the value evaluated 
+        *              : by nExpression, frStr( ) returns a character string padded with
+        *              : leading spaces.
+        *              : If nExpression has Numeric or Float type, and nLength 
+        *              : is less than the number of digits in nExpression, and , frStr( ) 
+        *              : returns a value using scientific notation. 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSetIfEmpty() function
+
+frSetIfEmpty() function
+=======================
+
+.. code-block:: none
+
+        * Syntax       : tuReturnValue = frSetIfEmpty(tuValue, tuNewValue)
+        * Description  : Set a Value into a variable if the variable 
+        *              : value is empty, null or zero.
+        * Arguments    : <tuValue>
+        *              : The value to evaluate.
+        *              :
+        *              : <tuNewValue>
+        *              : The value to set if tuValue is empty.
+        *              :
+        * Returns      : tuNewValue if tuValue is empty, otherwise 
+        *              : returns the original value.
+        * Remarks      : This function doesn't exist in VFP.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSpace() function
+
+frSpace() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frSpace(tnSpaces)
+        * Description  : Returns a character string composed of a 
+        *              : specified number of spaces.
+        * Arguments    : <tnSpaces>
+        *              : Specifies the number of spaces that frSpace() returns.
+        *              :
+        * Returns      : <lcReturnValue> 
+        *              : Character
+
+.. index:: 
+     pair: FoxRing Functions Reference; frInList() function
+
+frInList() function
+===================
+
+.. code-block:: none
+
+        * Syntax       : llReturnValue = frInList(tuExpression, taList)
+        * Description  : Determines whether an expression matches another 
+        *              : expression in a set of expressions.
+        * Arguments    : <tuExpression>
+        *              : Specifies the expression frInList() searches for in the List.
+        *              :
+        *              : <taList>
+        *              : Specifies the List of expressions to search. 
+        *              : You must include at least one element in the list.
+        *              : The expressions in the list of expressions needn't to be 
+        *              : of the same data type. 
+        *              :
+        * Returns      : <luReturnValue> Null or logical value.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frForcePath() function
+
+frForcePath() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frForcePath(tcFileName, tcPath)
+        * Description  : Returns a file name with a new path name 
+        *              : substituted for the old one.
+        * Arguments    : <tcFileName>
+        *              : Specifies the file name (with or without a path or extension), 
+        *              : which will get a new path.
+        *              : <tcPath>
+        *              : Specifies the new path for tcFileName.
+        *              :
+        * Returns      : <lcReturnValue> 
+        *              : Returns a file name with a new path name 
+        *              : substituted for the old one.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAllTrim() function
+
+frAllTrim() function
+====================
+
+.. code-block:: none
+
+       Syntax  : lcReturnValue = frAllTrim(tcExpression, tcCharacter)
+
+
+.. index:: 
+     pair: FoxRing Functions Reference; frLTrim() function
+
+frLTrim() function
+==================
+
+.. code-block:: none
+
+       Syntax  : lcRet = frLTrim(tcExpression, tcCharacter)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustDrive() function
+
+frJustDrive() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frJustDrive(tcPath)
+        * Description  : Returns the drive letter from a complete path.
+        *              :
+        * Arguments    : <tcPath>
+        *              : Specifies the complete path name for 
+        *              : which you want only the drive.
+        * Returns      : <lcReturnValue> 
+        *              : Returns the drive letter from a complete path.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustExt() function
+
+frJustExt() function
+====================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frJustExt(tcPath)
+        * Description  : Returns the characters of a file extension 
+        *              : from a complete path.
+        * Arguments    : <tcPath>
+        *              : Specifies the name, which may include the full path, 
+        *              : of the file for which you want only the extension. 
+        * Returns      : <lcReturnValue> 
+        *              : Returns the drive characters of a file extension
+        *              : from a complete path.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustStem() function
+
+frJustStem() function
+=====================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frJustStem(tcPath)
+        * Description  : Returns the stem name (the file name before the extension)
+        *              : from a complete path and file name.
+        * Arguments    : <tcPath>
+        *              : Specifies the name (including path) of the file 
+        *              : for which you want only the stem. 
+        * Returns      : <lcReturnValue> 
+        *              : Returns the stem name of a file from a complete path.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frRTrim() function
+
+frRTrim() function
+==================
+
+.. code-block:: none
+
+        Syntax : lcRet = frRTrim(tcExpression, tcCharacter)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustPath() function
+
+frJustPath() function
+=====================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frJustPath(tcExpression)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frForceExt() function
+
+frForceExt() function
+=====================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frForceExt(tcFileName, tcNewExtension)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frALines() function
+
+frALines() function
+===================
+
+.. code-block:: none
+
+       Syntax  : tnReturnValue = frALines(taList, tcExpression, tcSeparator)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustFName() function
+
+frJustFName() function
+================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frJustFName(tcExpression)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frPadL() function
+
+frPadL() function
+=================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frPadL(tcString, tnLen, tcChar)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frPadR() function
+
+frPadR() function
+=================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frPadR(tcString, tnLen, tcChar)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frProper() function
+
+frProper() function
+===================
+
+.. code-block:: none
+
+        * Syntax       : tcReturnValue = frProper(tcExpression)
+        * Description  : Returns from a character expression a string 
+        *              : capitalized as appropriate for proper names.
+        * Arguments    : <tcExpression>
+        *              : Specifies the character expression from which 
+        *              : frProper() returns a capitalized character string.
+        * Returns      : <tcReturnValue> 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frReplicate() function
+
+frReplicate() function
+======================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frReplicate(tcString, tnTimes)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frLen() function
+
+frLen() function
+================
+
+.. code-block:: none
+
+       Syntax  : tnReturnValue = frLen(tcString)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStuff() function
+
+frStuff() function
+==================
+
+.. code-block:: none
+
+        * Syntax       : tcReturnValue = frStuff(tcExpression, tnStartRep,
+                                                 tnCharRep, tcToReplace)
+        * Description  : Returns a new character string replaced by a 
+        *              : specified number of characters in a character 
+        *              : expression with another character expression.
+        *              :
+        * Arguments    : <tcExpression>
+        *              : Specify the character expression in which the replacement occurs.
+        *              : 
+        *              : <tnStartRep>
+        *              : Specify the position in <tcExpression> where the replacement begins.
+        *              : 
+        *              : <tnCharRep>
+        *              : Specifies the number of characters to be replaced.
+        *              : If <tnCharRep> is 0, the replacement string 
+        *              : <tcToReplace> is inserted into <tcExpression>.
+        *              : 
+        *              : <tcToReplace>
+        *              : Specifies the replacement character expression. 
+        *              : If <tcToReplace> is an empty string, the number of 
+        *              : characters specified by <tnCharRep> are removed from <tcExpression>.
+        *              :
+        * Returns      : Character 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSubStr() function
+
+frSubStr() function
+===================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frSubStr(tcString, tnInitialPosition, tnNumberBytes)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStrTran() function
+
+frStrTran() function
+====================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frStrTran(tcString, tcOldString, tcNewString)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frListToString() function
+
+frListToString() function
+=========================
+
+.. code-block:: none
+
+        * Syntax       : lcRet = frListToString(taList)
+        * Remarks      : This function doesn't exist in VFP.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frInt() function
+
+frInt() function
+================
+
+.. code-block:: none
+
+       Syntax          : lnInt = frInt(tnExpression)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStringToList() function
+
+frStringToList() function
+=========================
+
+.. code-block:: none
+
+        * Syntax       : laList = frStringToList(tcExpression)
+        * Remarks      : This function doesn't exist in VFP.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frIIf() function
+
+frIIf() function
+================
+
+.. code-block:: none
+
+        * Syntax       : luReturnValue = frIIf(tlExpression, tuReturnIfTrue, tuReturnIfFalse)
+        * Description  : Returns one of two values depending on the 
+        *              : value of a logical expression.
+        * Arguments    : <tlExpression>
+        *              : Specifies the logical expression that frIIf() evaluates.
+        *              :
+        *              : <tuReturnTrue>, <tuReturnFalse>
+        *              : If tlExpression evaluates to True, tuReturnIfTrue is 
+        *              : returned and tuReturnIfFalse is not evaluated. 
+        *              : If tlExpression evaluates to False or Null, tuReturnIfFalse is 
+        *              : returned and tuReturnIfTrue is not evaluated.
+        *              : 
+        * Returns      : <luReturnValue> Defined by <tuReturnIfTrue> or <tuReturnIfFalse>
+
+.. index:: 
+     pair: FoxRing Functions Reference; frVal() function
+
+frVal() function
+================
+
+.. code-block:: none
+
+        * Syntax       : luReturnValue = frVal(tcExpression)
+        * Description  : Returns a numeric value from a character expression
+        *              : composed of numbers
+        * Arguments    : <tcExpression>
+        *              : Specifies a character expression composed of up to 16 numbers.
+        *              :
+        * Returns      : <tnValue>
+        *              : Return a numeric value. 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frBetween() function
+
+frBetween() function
+====================
+
+.. code-block:: none
+
+        * Syntax       : luReturnValue = frBetween(tuTestValue, tuLowValue, tuHighValue)
+        * Description  : Determines whether the value of an expression 
+        *              : is inclusively between the 
+        *              : values of two expressions of the same type.
+        *              :
+        * Arguments    : <tuTestValue>
+        *              : Specifies an expression to evaluate.
+        *              :
+        *              : <tuLowValue>
+        *              : Specifies the lower value in the range.
+        *              :
+        *              : <tuHighValue>
+        *              : Specifies the higher value in the range.
+        *              :
+        * Returns      : <luReturnValue>
+        *              : Returns a logical oder null value. 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSetSeparatorTo() function
+
+frSetSeparatorTo() function
+===========================
+
+.. code-block:: none
+
+        * Syntax       : frSetSeparatorTo(tuExpression)
+        * Description  : Specifies the character for the numeric place separator.
+        *              :
+        * Arguments    : <tuExpression>
+        *              : Specifies the character for the numeric place separator. 
+        *              :
+        *              : Use frSetSeparatorTo() to change the numeric place 
+        *              : separator from de default, for example space " " or a comma ",".
+        *              : Issue frSetSeparatorTo(Null) to reset the value to its default.
+        *              :
+        * Returns      : None
+
+.. index:: 
+     pair: FoxRing Functions Reference; frTransform() function
+
+frTransform() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : tcReturnValue = frTransform(tuExpression, tcFormatCodes)
+        * Description  : Returns a character string from an expression in a 
+        *              : format determined by a format code.
+        * Arguments    : <tuExpression>
+        *              : Specifies the expression to format.
+        *              :
+        *              : <tcFormatCodes>               
+        *              : Specifies one or more format codes that determine how to
+        *              : format the expression. 
+        *              : 
+        * Returns      : <tcReturnValue>
+
+The following table lists the available format codes for tcFormatCodes.
+
+.. code-block:: none
+
+        --------------------------------------------------------------------------
+         Format Code   Description
+        --------------------------------------------------------------------------
+         @!            Converts an entire character string to uppercase.
+         @T            Trims leading and trailing spaces from character values.
+         @B            Left-justifies Numeric data within the display region.
+         @L            Pads numeric and string data with leading zeros.
+         @C            Appends CR to positive numeric values to indicate a credit.
+         @X            Appends DB to negative numeric values to indicate a debit.
+        --------------------------------------------------------------------------
+
+.. index:: 
+     pair: FoxRing Functions Reference; frVarType() function
+
+frVarType() function
+====================
+
+.. code-block:: none
+
+        * Syntax       : lcRet = frVarType(tuExpression)
+        * Description  : Returns the data type of an expression.
+        *              :
+        * Arguments    : <tuExpression>
+        *              : Expecifies the expression for which the data type is returned.
+        *              :  frVartype() returns a
+        *              : single character indicating the data type of the expression. 
+        *              : The following table lists the characteres that frVarType() 
+        *              : returns for each data type.
+        *              :
+        *              : -------------------   -------------------------------------
+        *              : Return Value          Data Type
+        *              : -------------------   -------------------------------------
+        *              : C                     Character
+        *              : N                     Numeric
+        *              : A                     List 
+        *              : O                     Object 
+        *              : U                     Undefined type
+        *              : -------------------   -------------------------------------
+        *              :
+        * Returns      : Character 
+
+.. index:: 
+     pair: FoxRing Functions Reference; Example
+
+Example
+=======
+
+.. code-block:: ring
+
+       Load "foxring.ring"
+
+
+       mf = new frFunctions
+
+       /*----------------------------------------------------------*/
+        * frProper() samples
+       /*----------------------------------------------------------*/
+
+       lcStr1 = "ring is a good language"
+       ?mf.frProper(lcStr1)
+       ?mf.frProper(Upper(lcStr1))
+
+
+       /*----------------------------------------------------------*/
+        * frStuff() samples
+       /*----------------------------------------------------------*/
+
+       lcStr1 = "abcdefghijklm"
+       lcStr2 = "12345" 
+
+       // insert
+       ?mf.frStuff(lcStr1, 4, 0, lcStr2)     
+       // replace
+       ?mf.frStuff(lcStr1, 4, 3, lcStr2)     
+       // delete
+       ?mf.frStuff(lcStr1, 4, 6, "")     
+       // replace and insert
+       ?mf.frStuff(lcStr1, 4, 1, lcStr2)     
+       // replace and delete
+       ?mf.frStuff(lcStr1, 4, 4, lcStr2)     
+       // replace, delete rest
+       ?mf.frStuff(lcStr1, 4, Len(lcStr1), lcStr2)   
+
+       /*----------------------------------------------------------*/
+
+
+
+       ?mf.frAbs(-45)      
+       ?mf.frAbs(10-30)    
+       ?mf.frAbs(30-10)    
+
+       lcNumber1 = 40
+       lcNumber2 = 2
+
+       ?mf.frAbs(lcNumber2-lcNumber1)  
+
+
+
+
+       lcCompletFileName = "C:\ring\docs\source\contribute.txt"
+
+       ?mf.frFile(lcCompletFileName, Null)
+       if mf.frFile(lcCompletFileName, Null) {
+         ?mf.frFileToStr(lcCompletFileName)
+       else
+         ?"File does not exist"
+       }
+
+       lcNewPath = "C:\ring_2\docs\source\"
+       ?mf.frJustExt(lcCompletFileName)
+       ?mf.frJustDrive(lcCompletFileName)
+       ?mf.frJustStem(lcCompletFileName)
+       ?mf.frForcePath(lcCompletFileName, lcNewPath)
+       ?mf.frTransform("    Ring is a good language    ", 
+                       "@! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") 
+       ?mf.frAllTrim("    Ring is a good language    ", Null) 
+       ?mf._version
+       lnValue = 3125.54
+       ?mf.frTransform(lnValue, "@B")+ "Euros"
+       ?mf.frTransform(lnValue, "@C 9999,999,999,999.999")
+       mf.frSetSeparatorTo(" ")
+       ?mf.frTransform(lnValue, "9999,999,999,999.999")
+       ?mf.frInt(lnValue)
+       ?mf.frForceExt("teste", "dbf")
+       // Format "@L" Added into frTransform() function
+       ?mf.frTransform("123", "@L 999999")
+       ?mf.frTransform(123, "@L 999999")
+
diff --git a/docs/en/source/fp.txt b/docs/en/source/fp.txt
new file mode 100644 (file)
index 0000000..43658c8
--- /dev/null
@@ -0,0 +1,293 @@
+.. index:: 
+       single: Functional Programming; Introduction
+
+======================
+Functional Programming
+======================
+
+In previous chapters we learned about Functions and Recursion.
+
+In this chapter we are going to learn about more Functional Programming (FP) concepts like
+
+* Pure Functions
+* First-class functions
+* Higher-order functions
+* Anonymous and nested functions.
+* Equality of functions
+
+.. index:: 
+       pair: Functional Programming; Pure Functions
+
+
+Pure Functions
+==============
+
+We can create pure functions (functions that doesn't change the state) by the help of the assignment operator to
+copy variables (Lists & Objects) by value to create new variables instead of working on the original data that are passed
+to the function by reference.
+
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3,4,5]
+               aList2 = square(aList)
+               see "aList" + nl
+               see aList
+               see "aList2" + nl
+               see aList2
+
+       Func Square aPara
+               a1 = aPara              # copy the list
+               for x in a1
+                       x *= x
+               next
+               return a1               # return new list
+               
+Output:
+
+.. code-block:: ring
+
+       aList
+       1
+       2
+       3
+       4
+       5
+       aList2
+       1
+       4
+       9
+       16
+       25
+
+
+.. index:: 
+       pair: Functional Programming; First-Class Functions
+
+First-class Functions
+=====================
+
+Functions inside the Ring programming language are first-class citizens, you can pass functions as parameters, return them as
+value or store them in variables.
+
+We can pass/return the function by typing the function name as literal like "FunctionName" or :FunctionName for example.
+
+We can pass/return functions using the variable that contains the function name.
+
+We can call function from variables contains the function name using the Call command
+
+Syntax:
+
+.. code-block:: ring
+
+       Call Variable([Parameters])
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               see "before test2()" + nl
+               f = Test2(:Test)
+               see "after test2()" + nl
+               call f()
+
+       Func Test
+               see "Message from test!" + nl
+
+       Func Test2 f1
+               call f1()
+               See "Message from test2!" + nl
+               return f1       
+
+Output:
+
+.. code-block:: ring
+
+       before test2()
+       Message from test!
+       Message from test2!
+       after test2()
+       Message from test!
+
+.. index:: 
+       pair: Functional Programming; Higher-order Functions
+
+Higher-order Functions
+======================
+
+Higher-order functions are the functions that takes other functions as parameters.
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               times(5,:test)
+
+       Func Test
+               see "Message from the test function!" + nl
+
+       Func Times nCount,F
+
+               for x = 1 to nCount
+                       Call F()
+               next    
+
+Output:
+
+.. code-block:: ring
+
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+
+.. index:: 
+       pair: Functional Programming; Anonymous and Nested Functions
+
+Anonymous and Nested Functions
+==============================
+
+Anonymous Functions are functions without names that can be passed as parameters to other functions or stored in variables.
+
+Syntax:
+
+.. code-block:: ring
+
+       Func [Parameters] { [statements] }
+
+Example:
+
+.. code-block:: ring
+
+       test( func x,y { 
+                               see "hello" + nl
+                               see "Sum : " + (x+y) + nl
+                      } )
+
+       new great { f1() }
+
+       times(3, func { see "hello world" + nl } )
+
+       func test x
+               call x(3,3)
+               see "wow!" + nl
+
+       func times n,x
+               for t=1 to n
+                       call x()
+               next
+
+       Class great
+               func f1
+                       f2( func { see "Message from f1" + nl } )
+
+               func f2 x
+                       call x()
+
+Output:
+
+.. code-block:: ring
+
+       hello
+       Sum : 6
+       wow!
+       Message from f1
+       hello world
+       hello world
+       hello world
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3,4]
+               Map (aList , func x { 
+                                       return x*x 
+                                   } )
+               see aList
+               aList = [4,9,14,25]
+               Map(aList, :myfilter )
+               see aList
+               aList = [11,12,13,14]
+               Map (aList , func x {
+                       if x%2=0
+                               return "even"
+                       else
+                               return "odd"
+                       ok
+               })
+               see aList
+
+       Func myfilter x
+               if x = 9
+                       return "True"
+               else
+                       return "False"
+               ok
+
+       Func Map aList,cFunc
+               for x in aList
+                       x = call cFunc(x)
+               next
+
+Output:
+
+.. code-block:: ring
+
+       1
+       4
+       9
+       16
+       False
+       True
+       False
+       False
+       odd
+       even
+       odd
+       even
+
+.. index:: 
+       pair: Functional Programming; Equality of functions
+
+Equality of functions
+=====================
+
+We can test if function = function or not using the '=' or '!=' operators
+
+Example:
+
+.. code-block:: ring
+
+       f1 = func { see "hello" + nl }
+
+       f2 = func { see "how are you?" + nl }
+
+       f3 = f1
+
+       call f1()
+       call f2()
+       call f3()
+
+       see (f1 = f2) + nl
+       see (f2 = f3) + nl
+       see (f1 = f3) + nl
+
+Output:
+
+.. code-block:: ring
+
+       hello
+       how are you?
+       hello
+       0
+       0
+       1
+
diff --git a/docs/en/source/freeglutshot1.png b/docs/en/source/freeglutshot1.png
new file mode 100644 (file)
index 0000000..51d4040
Binary files /dev/null and b/docs/en/source/freeglutshot1.png differ
diff --git a/docs/en/source/freeglutshot2.png b/docs/en/source/freeglutshot2.png
new file mode 100644 (file)
index 0000000..e054661
Binary files /dev/null and b/docs/en/source/freeglutshot2.png differ
diff --git a/docs/en/source/freeglutshot3.png b/docs/en/source/freeglutshot3.png
new file mode 100644 (file)
index 0000000..66d9fc3
Binary files /dev/null and b/docs/en/source/freeglutshot3.png differ
diff --git a/docs/en/source/freeglutshot4.png b/docs/en/source/freeglutshot4.png
new file mode 100644 (file)
index 0000000..5bdf74c
Binary files /dev/null and b/docs/en/source/freeglutshot4.png differ
diff --git a/docs/en/source/freeglutshot5.png b/docs/en/source/freeglutshot5.png
new file mode 100644 (file)
index 0000000..79b7697
Binary files /dev/null and b/docs/en/source/freeglutshot5.png differ
diff --git a/docs/en/source/freeglutshot6.png b/docs/en/source/freeglutshot6.png
new file mode 100644 (file)
index 0000000..b1f5134
Binary files /dev/null and b/docs/en/source/freeglutshot6.png differ
diff --git a/docs/en/source/freeglutshot7.png b/docs/en/source/freeglutshot7.png
new file mode 100644 (file)
index 0000000..3314f08
Binary files /dev/null and b/docs/en/source/freeglutshot7.png differ
diff --git a/docs/en/source/freeglutshot8.png b/docs/en/source/freeglutshot8.png
new file mode 100644 (file)
index 0000000..3a62168
Binary files /dev/null and b/docs/en/source/freeglutshot8.png differ
diff --git a/docs/en/source/functions.txt b/docs/en/source/functions.txt
new file mode 100644 (file)
index 0000000..86c513b
--- /dev/null
@@ -0,0 +1,230 @@
+.. index:: 
+       single: Functions - First Style; Introduction
+
+=======================
+Functions - First Style 
+=======================
+
+In this chapter we are going to learn about the next topics :-
+
+* Define functions
+
+* Call functions
+
+* Declare parameters
+
+* Send parameters
+
+* Main Function
+
+* Variables Scope
+
+* Return Value
+
+* Recursion
+
+.. index:: 
+       pair: Functions - First Style; Define Functions
+
+
+Define Functions
+================
+
+To define new function 
+
+Syntax:
+
+.. code-block:: ring
+
+       func <function_name> [parameters]
+               Block of statements
+
+.. note:: No keyword is required to end the function definition.
+
+
+Example:
+
+.. code-block:: ring
+
+       func hello
+               see "Hello from function" + nl
+
+
+.. index:: 
+       pair: Functions - First Style; Call Functions
+
+Call Functions
+==============
+
+To call function without parameters, we type the function name then ()
+
+.. tip:: We can call the function before the function definition and the function code.
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+
+       func hello
+               see "Hello from function" + nl
+
+
+Example:
+
+.. code-block:: ring
+
+       first()  second()
+
+       func first   see "message from the first function" + nl
+
+       func second  see "message from the second function" + nl
+
+.. index:: 
+       pair: Functions - First Style; Declare parameters
+
+Declare parameters
+==================
+
+To declare the function parameters, after the function name type the list of parameters as a group
+of identifiers separated by comma.
+
+Example:
+
+.. code-block:: ring
+
+       func sum x,y
+               see x+y+nl
+
+.. index:: 
+       pair: Functions - First Style; Send Parameters
+
+Send Parameters
+===============
+
+To send parameters to function, type the parameters inside () after the function name
+
+Syntax:
+
+.. code-block:: ring
+
+       funcname(parameters)
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** 8
+       ** 3000
+       */
+
+       sum(3,5) sum(1000,2000)
+
+       func sum x,y see x+y+nl
+
+.. index:: 
+       pair: Functions - First Style; Main Function
+
+Main Function
+=============
+
+Using the Ring programming language, the Main Function is optional, 
+when it's defined, it will be executed after the end of other statements.
+
+if no other statements comes alone, the main function will be the first `entry point <http://en.wikipedia.org/wiki/Entry_point>`_ 
+
+Example:
+
+.. code-block:: ring
+
+       # this program will print the hello world message first then execute the main function
+
+       See "Hello World!" + nl
+
+       func main
+               see "Message from the main function" + nl
+
+.. index:: 
+       pair: Functions - First Style; Variables Scope
+
+Variables Scope
+===============
+
+The Ring programming language uses `lexical scoping <http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scope_vs._dynamic_scope>`_ to
+determine the scope of a variable.
+Variables defined inside functions (including function parameters) are local variables.
+Variables defined outside functions (before any function) are global variables.
+
+Inside any function we can access the variables defined inside this function beside the global variables.
+
+Example:
+
+.. code-block:: ring
+
+       # the program will print numbers from 10 to 1
+
+       x = 10                          # x is a global variable.
+
+       func main
+
+               for t = 1 to 10         # t is a local variable
+                       mycounter()     # call function
+               next
+
+       func mycounter
+
+               see x + nl              # print the global variable value
+               x--                     # decrement
+
+
+.. note:: Using the main function before the for loop declare the t variable as a local variable,
+         It's recommended to use the main functions instead of typing the instructions directly to set the scope
+         of the new variables to local.
+
+.. index:: 
+       pair: Functions - First Style; Return Value
+
+Return Value
+============
+
+The function can return a value using the Return command.
+
+Syntax:
+
+.. code-block:: ring
+
+       Return [Expression]
+
+.. tip:: the Expression after the return command is optional and we can use the return command
+        to end the function execution without returning any value.
+        
+.. note:: if the function doesn't return explicit value, it will return NULL (empty string = "" ).
+
+Example:
+
+.. code-block:: ring
+
+       if novalue() = NULL     
+               See "the function doesn't return a value" + nl
+       ok
+
+       func novalue
+
+.. index:: 
+       pair: Functions - First Style; Recursion
+
+Recursion
+=========
+
+The Ring programming language support `Recursion <http://en.wikipedia.org/wiki/Recursion_%28computer_science%29>`_
+and the function can call itself using different parameters.
+
+Example:
+
+.. code-block:: ring
+
+       see fact(5)     # output = 120
+
+       func fact x if x = 0 return 1 else return x * fact(x-1) ok
diff --git a/docs/en/source/functions2.txt b/docs/en/source/functions2.txt
new file mode 100644 (file)
index 0000000..bda4781
--- /dev/null
@@ -0,0 +1,234 @@
+.. index:: 
+       single: Functions - Second Style; Introduction
+
+=========================
+Functions  - Second Style
+=========================
+
+In this chapter we are going to learn about the next topics :-
+
+* Define functions
+
+* Call functions
+
+* Declare parameters
+
+* Send parameters
+
+* Main Function
+
+* Variables Scope
+
+* Return Value
+
+* Recursion
+
+.. index:: 
+       pair: Functions - Second Style; Define Functions
+
+
+Define Functions
+================
+
+To define new function 
+
+Syntax:
+
+.. code-block:: ring
+
+       def <function_name> [parameters]
+               Block of statements
+       [end]
+
+.. note:: the keyword 'end' is optional.
+
+
+Example:
+
+.. code-block:: ring
+
+       def hello
+               put "Hello from function" + nl
+       end
+
+
+.. index:: 
+       pair: Functions - Second Style; Call Functions
+
+Call Functions
+==============
+
+To call function without parameters, we type the function name then ()
+
+.. tip:: We can call the function before the function definition and the function code.
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+
+       def hello
+               put "Hello from function" + nl
+       end
+
+
+Example:
+
+.. code-block:: ring
+
+       first()  second()
+
+       def first   put "message from the first function" + nl
+
+       def second  put "message from the second function" + nl
+
+.. index:: 
+       pair: Functions - Second Style; Declare parameters
+
+Declare parameters
+==================
+
+To declare the function parameters, after the function name type the list of parameters as a group
+of identifiers separated by comma.
+
+Example:
+
+.. code-block:: ring
+
+       def sum x,y
+               put x+y+nl
+       end
+
+.. index:: 
+       pair: Functions - Second Style; Send Parameters
+
+Send Parameters
+===============
+
+To send parameters to function, type the parameters inside () after the function name
+
+Syntax:
+
+.. code-block:: ring
+
+       funcname(parameters)
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** 8
+       ** 3000
+       */
+
+       sum(3,5) sum(1000,2000)
+
+       def sum x,y put x+y+nl
+
+.. index:: 
+       pair: Functions - Second Style; Main Function
+
+Main Function
+=============
+
+Using the Ring programming language, the Main Function is optional, 
+when it's defined, it will be executed after the end of other statements.
+
+if no other statements comes alone, the main function will be the first `entry point <http://en.wikipedia.org/wiki/Entry_point>`_ 
+
+Example:
+
+.. code-block:: ring
+
+       # this program will print the hello world message first then execute the main function
+
+       put "Hello World!" + nl
+
+       def main
+               put "Message from the main function" + nl
+       end
+
+.. index:: 
+       pair: Functions - Second Style; Variables Scope
+
+Variables Scope
+===============
+
+The Ring programming language uses `lexical scoping <http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scope_vs._dynamic_scope>`_ to
+determine the scope of a variable.
+Variables defined inside functions (including function parameters) are local variables.
+Variables defined outside functions (before any function) are global variables.
+
+Inside any function we can access the variables defined inside this function beside the global variables.
+
+Example:
+
+.. code-block:: ring
+
+       # the program will print numbers from 10 to 1
+
+       x = 10                          # x is a global variable.
+
+       def main
+               for t = 1 to 10         # t is a local variable
+                       mycounter()     # call function
+               end
+       end
+
+       def mycounter
+               put x + nl              # print the global variable value
+               x--                     # decrement
+       end
+
+.. note:: Using the main function before the for loop declare the t variable as a local variable,
+         It's recommended to use the main functions instead of typing the instructions directly to set the scope
+         of the new variables to local.
+
+.. index:: 
+       pair: Functions - Second Style; Return Value
+
+Return Value
+============
+
+The function can return a value using the Return command.
+
+Syntax:
+
+.. code-block:: ring
+
+       Return [Expression]
+
+.. tip:: the Expression after the return command is optional and we can use the return command
+        to end the function execution without returning any value.
+        
+.. note:: if the function doesn't return explicit value, it will return NULL (empty string = "" ).
+
+Example:
+
+.. code-block:: ring
+
+       if novalue() = NULL     
+               put "the function doesn't return a value" + nl
+       end
+
+       def novalue
+
+.. index:: 
+       pair: Functions - Second Style; Recursion
+
+Recursion
+=========
+
+The Ring programming language support `Recursion <http://en.wikipedia.org/wiki/Recursion_%28computer_science%29>`_
+and the function can call itself using different parameters.
+
+Example:
+
+.. code-block:: ring
+
+       put fact(5)     # output = 120
+
+       def fact x if x = 0 return 1 else return x * fact(x-1) end
diff --git a/docs/en/source/functions3.txt b/docs/en/source/functions3.txt
new file mode 100644 (file)
index 0000000..aa768e1
--- /dev/null
@@ -0,0 +1,248 @@
+.. index:: 
+       single: Functions - Third Style; Introduction
+
+========================
+Functions  - Third Style
+========================
+
+In this chapter we are going to learn about the next topics :-
+
+* Define functions
+
+* Call functions
+
+* Declare parameters
+
+* Send parameters
+
+* Main Function
+
+* Variables Scope
+
+* Return Value
+
+* Recursion
+
+.. index:: 
+       pair: Functions - Third Style; Define Functions
+
+
+Define Functions
+================
+
+To define new function 
+
+Syntax:
+
+.. code-block:: ring
+
+       func <function_name> [parameters] ['{']
+               Block of statements
+       ['}']
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       func hello {
+               print("Hello from function \n")
+       }
+
+
+.. index:: 
+       pair: Functions - Third Style; Call Functions
+
+Call Functions
+==============
+
+To call function without parameters, we type the function name then ()
+
+.. tip:: We can call the function before the function definition and the function code.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       hello()
+
+       func hello {
+               print("Hello from function \n")
+       }
+
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       first()  second()
+
+       func first {  print("message from the first function \n")  }
+
+       func second { print("message from the second function \n") }
+
+.. index:: 
+       pair: Functions - Third Style; Declare parameters
+
+Declare parameters
+==================
+
+To declare the function parameters, after the function name type the list of parameters as a group
+of identifiers separated by comma.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       func sum(x,y) {
+               print(x+y)
+       }
+
+.. index:: 
+       pair: Functions - Third Style; Send Parameters
+
+Send Parameters
+===============
+
+To send parameters to function, type the parameters inside () after the function name
+
+Syntax:
+
+.. code-block:: ring
+
+       funcname(parameters)
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** 8
+       ** 3000
+       */
+
+       load "stdlib.ring"
+
+       sum(3,5) sum(1000,2000)
+
+       func sum(x,y) { print(x+y) } 
+
+.. index:: 
+       pair: Functions - Third Style; Main Function
+
+Main Function
+=============
+
+Using the Ring programming language, the Main Function is optional, 
+when it's defined, it will be executed after the end of other statements.
+
+if no other statements comes alone, the main function will be the first `entry point <http://en.wikipedia.org/wiki/Entry_point>`_ 
+
+Example:
+
+.. code-block:: ring
+
+       # this program will print the hello world message first then execute the main function
+
+       load "stdlib.ring"
+
+       print("Hello, World! \n")
+
+       func main {
+               print("Message from the main function \n")
+       }
+
+.. index:: 
+       pair: Functions - Third Style; Variables Scope
+
+Variables Scope
+===============
+
+The Ring programming language uses `lexical scoping <http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scope_vs._dynamic_scope>`_ to
+determine the scope of a variable.
+Variables defined inside functions (including function parameters) are local variables.
+Variables defined outside functions (before any function) are global variables.
+
+Inside any function we can access the variables defined inside this function beside the global variables.
+
+Example:
+
+.. code-block:: ring
+
+       # the program will print numbers from 10 to 1
+       
+       load "stdlib.ring"
+
+       x = 10                          # x is a global variable.
+
+       func main {
+               for t = 1 to 10 {       # t is a local variable
+                       mycounter()     # call function
+               }
+       }
+
+       func mycounter {
+               print("#{x}\n")         # print the global variable value
+               x--                     # decrement
+       }
+
+.. note:: Using the main function before the for loop declare the t variable as a local variable,
+         It's recommended to use the main functions instead of typing the instructions directly to set the scope
+         of the new variables to local.
+
+.. index:: 
+       pair: Functions - Third Style; Return Value
+
+Return Value
+============
+
+The function can return a value using the Return command.
+
+Syntax:
+
+.. code-block:: ring
+
+       Return [Expression]
+
+.. tip:: the Expression after the return command is optional and we can use the return command
+        to end the function execution without returning any value.
+        
+.. note:: if the function doesn't return explicit value, it will return NULL (empty string = "" ).
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       if novalue() = NULL {
+               print("the function doesn't return a value\n")
+       }
+
+       func novalue { }
+
+.. index:: 
+       pair: Functions - Third Style; Recursion
+
+Recursion
+=========
+
+The Ring programming language support `Recursion <http://en.wikipedia.org/wiki/Recursion_%28computer_science%29>`_
+and the function can call itself using different parameters.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       print( fact(5) )        # output = 120
+
+       func fact(x) { if x = 0 { return 1 else return x * fact(x-1) } }
diff --git a/docs/en/source/functionslist.png b/docs/en/source/functionslist.png
new file mode 100644 (file)
index 0000000..2b7d9d5
Binary files /dev/null and b/docs/en/source/functionslist.png differ
diff --git a/docs/en/source/game2048_shot1.png b/docs/en/source/game2048_shot1.png
new file mode 100644 (file)
index 0000000..7a7defd
Binary files /dev/null and b/docs/en/source/game2048_shot1.png differ
diff --git a/docs/en/source/gameengine.txt b/docs/en/source/gameengine.txt
new file mode 100644 (file)
index 0000000..b6db92a
--- /dev/null
@@ -0,0 +1,2450 @@
+.. index:: 
+       single: Game Engine for 2D Games; Introduction
+
+=======================================
+Demo Project - Game Engine for 2D Games
+=======================================
+
+In this chapter we will learn about using the different programming paradigms in the same project.
+
+We will create a simple Game Engine for 2D Games.
+
+You can use the Engine directly to create 2D Games for Desktop or Mobile.
+
+.. index:: 
+       pair: Game Engine for 2D Games; Project Layers
+
+Project Layers
+==============
+
+The project contains the next layers
+
+* Games Layer (Here we will use declarative programming)
+* Game Engine Classes (Here we will use the Object-Oriented Programming paradigm)
+* Interface to graphics library (Here we will use procedural programming)
+* Graphics Library bindings (Here we have RingAllegro and RingLibSDL)
+
+.. index:: 
+       pair: Game Engine for 2D Games; Graphics Library Bindings
+
+Graphics Library bindings
+=========================
+
+We already have RingAllegro to use the Allegro game programming library and we have RingLibSDL
+to use the LibSDL game programming library.
+
+Both of RingAllegro and RingLibSDL are created using the C language with the help of the 
+Ring code generator for extensions.
+
+Each of them is over 10,000 lines of C code which is generated after writing simple configuration
+files (That are processed by the code generator).
+
+Each configuration file determines the functions names, structures information and constants
+then the generator process this configuration file to produce the C code and the library
+that can be loaded from Ring code.
+
+Using RingAllegro and RingLibSDL is very similar to using Allegro and LibSDL from C code where
+you have the same functions but we can build on that using the Ring language features
+
+* RingAllegro Source Code : https://github.com/ring-lang/ring/tree/master/extensions/ringallegro
+* RingLibSDL Source Code : https://github.com/ring-lang/ring/tree/master/extensions/ringsdl
+
+.. index:: 
+       pair: Game Engine for 2D Games; Interface to graphics library
+
+Interface to graphics library
+=============================
+
+In this layer we have gl_allegro.ring and gl_libsdl.ring
+
+Each library provides the same functions to be used with interacting with the Graphics Library.
+
+This layer hides the details and the difference between RingAllegro and RingLibSDL.
+
+You have the same functions, Just use it and you can switch between Allegro and LibSDL at anytime.
+
+Why ?
+
+Allegro is very simple, we can use it to quickly create 2D games for Windows, Linux and MacOS X.
+
+In Ring 1.0 we started by supporting Allegro.
+
+Also LibSDL is very powerful and popular, very easy to use for Mobile Development.
+
+Ring 1.1 comes with support for LibSDL so we can quickly create games for Mobile.
+
+.. note:: We can use just one library for Desktop and Mobile development.
+
+* gl_allegro.ring source code : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gl_allegro.ring
+* gl_libsdl.ring source code : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gl_libsdl.ring
+
+.. index:: 
+       pair: Game Engine for 2D Games; Game Engine Classes
+
+Game Engine Classes
+===================
+
+The Engine comes with the next classes
+
+* GameBase class
+* Resources class
+* Game class
+* GameObject class
+* Sprite class
+* Text class
+* Animate class
+* Sound class
+* Map class
+
+* Source Code : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gameengine.ring
+
+.. index:: 
+       pair: Game Engine for 2D Games; Games Layer
+
+Games Layer
+===========
+
+In this layer we create our games using the Game Engine classes
+
+The classes are designed to be used through Declarative Programming.
+
+In our games we will use the next classes
+
+* Game class
+* Sprite class
+* Text class
+* Animate class
+* Sound class
+* Map class
+
+.. note:: Other classes in the engine are for internal use by the engine.
+
+We will introduce some examples and three simple games :-
+
+* Stars Fighter Game
+* Flappy Bird 3000 Game
+* Super Man 2016 Game
+
+.. index:: 
+       pair: Game Engine for 2D Games; Game Class
+
+Game Class
+==========
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+ FPS           Number determines how many times the draw() method will be called per second.
+ FixedFPS      Number determines how many times the animate() method will be called per second.
+ Title         String determines the window title of the game. 
+ aObjects      List contains all objects in the game
+ shutdown      True/False value to end the game loop
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+refresh()              Delete objects.
+settitle(cTitle)       Set the window title using a string parameter.
+shutdown()             Close the application.
+find(cName)            Find an object using the object name
+remove(nID)            Remove an object using the object ID
+================       =================================================================================
+
+The next table present a group of keywords defined by the class.
+
+================       =================================================================================
+Keyword                        Description
+================       =================================================================================
+sprite                         Create new Sprite object and add it to the game objects.
+text                   Create new Text object and add it to the game objects.
+animate                Create new Animate object and add it to the game objects.
+sound                  Create new Sound object and add it to the game objects.
+map                    Create new Map object and add it ot the game objects.
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; GameObject Class
+
+GameObject Class
+================
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+enabled                True/False determine the state of the object (Active/Not Active)
+x              Number determine the x position of the object.
+y              Number determine the y position of the object.
+width          Number determine the width of the object.
+height         Number determine the height of the object.
+nIndex         Number determine the ID of the object.
+name           String represent the object name.
+animate                True/False to animate the object or not.
+move           True/False to move the object using the keyboard or not.
+Scaled         True/False to scale the object image or not.
+draw           Function to be called when drawing the object.
+state          Function to be called for object animation.
+keypress       Function to be called when a key is pressed.
+mouse          Function to be called when a mouse event happens.
+============   =================================================================================
+
+The next table present the class methods.
+
+============================== ================================================================
+Method                         Description
+============================== ================================================================
+keyboard(oGame,nkey)           Check Keyboard Events 
+mouse(oGame,nType,aMouseList)  Check Mouse Events
+rgb(r,g,b)                     Return new color using the RGB (Red, Green and Blue) Values.
+============================== ================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Class
+
+Sprite Class
+============
+
+Parent Class : GameObject Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+image          String determine the image file name.
+point          Number determine the limit of automatic movement of the object.
+direction      Number determine the direction of movement. 
+nstep          Number determine the increment/decrement during movement.
+type           Number determine the object type in the game (Optional).
+transparent    True/False value determine if the image is transparent.
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+Draw(oGame)            Draw the object
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Text Class
+
+Text Class
+==========
+
+Parent Class : Sprite Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+size           Number determine the font size
+font           String determine the font file name
+text           String determine the text to be displayed
+color          Number determine the color
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+Draw(oGame)            Draw the object
+================       =================================================================================
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animate Class
+
+Animate Class
+=============
+
+Parent Class : Sprite Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+frames         Number determine the number of frames 
+frame          Number determine the active frame
+framewidth     Number determine the frame width.
+animate                True/False determine using animate or not.
+scaled         True/False determine scaling image or not.
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+Draw(oGame)            Draw the object
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sound Class
+
+Sound Class
+===========
+
+Parent Class : GameObject Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+file           String determine the sound file name.
+once           True/False determine to play the file one time or not (loop).
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+playsound()            Play the sound file
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Map Class
+
+Map Class
+=========
+
+Parent Class : Sprite Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+aMap           List determine the map content using numbers.
+aImages                List determine the image used for each number in the map.
+BlockWidth     Number determine the block width (default = 32).
+BlockHeight    Number determine the block height (default = 32).
+Animate                True/False determine the animation status.
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+getvalue(x,y)          Return the item value in the Map according to the visible part
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Creating the Game Window
+
+Using the Game Engine - Creating the Game Window
+================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+               }                       # Start the Events Loop 
+
+.. note:: if you want to define global variables, this must be before load "gameengine.ring"
+         because this instruction will give the control to the game engine.
+
+Screen Shot:
+
+.. image:: gameengineshot1.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Drawing Text
+
+Using the Game Engine - Drawing Text
+====================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      
+                       }
+               }               # Start the Events Loop 
+
+
+Screen Shot:
+
+.. image:: gameengineshot2.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Moving Text
+
+Using the Game Engine - Moving Text
+===================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # Color = black 
+                       }
+                       text {
+                               x = 10  y=150
+                               # Animation Part =====================================
+                               animate = true                  # Use Animation
+                               direction = GE_DIRECTION_INCVERTICAL    # Increase y
+                               point = 400                     # Continue until y=400
+                               nStep = 3                       # Each time y+= 3
+                               #=====================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)            # Color = Blue  
+                       }
+               }                                       # Start the Events Loop 
+
+Screen Shot:
+
+.. image:: gameengineshot3.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Playing Sound
+
+Using the Game Engine - Playing Sound
+=====================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # Color = black 
+                       }
+                       text {
+                               x = 10  y=150
+                               # Animation Part ======================================
+                               animate = true                          # Use Animation
+                               direction = GE_DIRECTION_INCVERTICAL    # Increase y
+                               point = 400             # Continue until y=400
+                               nStep = 3               # Each time y+= 3
+                               #======================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)    # Color = Blue  
+                       }
+                       Sound {                                 # Play Sound
+                               file = "sound/music1.wav"       # Sound File Name
+                       }               
+               }                                       # Start the Events Loop 
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animation
+
+Using the Game Engine - Animation
+=================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+         oGame = New Game      # Create the Game Object
+         {
+               title = "My First Game"
+
+               animate {
+                 file = "images/fire.png"
+                 x = 100
+                 y = 200
+                 framewidth = 40
+                 height = 42
+                 nStep = 3      # Used for delay
+                 transparent = true
+                 state = func oGame,oSelf {  # Called by engine each frame
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13      # we have 13 frames in animation
+                                 frame++   # move to next frame
+                               else
+                                 oGame.remove(oself.nIndex)   # remove object
+                               ok
+                         ok
+                       }
+                 }
+                }    
+               
+
+         }          # Start the Events Loop  
+
+
+.. image:: gameengineshot5.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animation and Functions
+
+Using the Game Engine - Animation and Functions
+===============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+         oGame = New Game      # Create the Game Object
+         {
+               title = "My First Game"
+               for x = 70 to 700 step 50
+                 for y = 70 to 500 step 50
+                       showfire(oGame,x,y)
+                 next
+               next
+
+         }          # Start the Events Loop  
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3      # Used for delay
+                 transparent = true
+                 state = func oGame,oSelf {  # Called by engine each frame
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13      # we have 13 frames in animation
+                                 frame++   # move to next frame
+                               else
+                                 frame=1
+                               ok
+                         ok
+                       }
+                 }
+                }  
+         }
+
+.. image:: gameengineshot6.png
+       :alt: screen shot
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Automatic Movement
+
+Using the Game Engine - Sprite - Automatic Movement using Keyboard
+==================================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=true       # we can move it using keyboard arrows
+                               Scaled=true
+                       }
+               }                                       # Start the Events Loop 
+
+.. image:: gameengineshot7.png
+       :alt: screen shot
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Keypress Event
+
+Using the Game Engine - Sprite - Keypress event
+===============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # Custom Movement
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Mouse Event
+
+Using the Game Engine - Sprite - Mouse event
+============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # Custom Movement
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                               mouse = func oGame,oSelf,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               oSelf {
+                                                       x = aMouseList[GE_MOUSE_X]
+                                                       y = aMouseList[GE_MOUSE_Y]
+                                               }
+                                       ok
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite State Event
+
+Using the Game Engine - Sprite - State event
+============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # Custom Movement
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                               mouse = func oGame,oSelf,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               oSelf {
+                                                       x = aMouseList[GE_MOUSE_X]
+                                                       y = aMouseList[GE_MOUSE_Y]
+                                               }
+                                       ok
+                               }
+                               state = func oGame,oSelf {
+                                       oself {
+                                               if x < 0 x = 0 ok
+                                               if y < 0 y = 0 ok
+                                               if x > ogame.width-width  
+                                                       x= ogame.width - width ok
+                                               if y > ogame.height-height 
+                                                       y=ogame.height - height ok
+                                       }
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animate Events
+
+Using the Game Engine - Animate - Events
+========================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+
+                       animate {
+
+                               file = "images/fbbird.png"
+                               x = 10
+                               y = 10
+                               framewidth = 20
+                               scaled = true
+                               height = 50
+                               width = 50
+                               nStep = 3
+                               transparent = true
+
+                               state = func oGame,oSelf {
+                                       oSelf {
+
+                                               # Animation
+                                                       nStep--
+                                                       if nStep = 0
+                                                               nStep = 3
+                                                               if frame < 3
+                                                                       frame++
+                                                               else
+                                                                       frame=1
+                                                               ok
+                                                       ok
+
+                                               # Move Down
+                                                       y += 3
+                                                       if y > 550 y=550 ok
+
+                                       }
+
+                               }
+
+                               keypress = func ogame,oself,nKey {
+                                       oself {
+                                               if nkey = key_space
+                                                       y -= 55
+                                                       if y<=0 y=0 ok
+                                               ok
+                                       }
+                               }
+
+                               mouse = func ogame,oself,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               cFunc = oself.keypress
+                                               call cFunc(oGame,oSelf,Key_Space)
+                                       ok
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+Screen Shot:
+
+.. image:: gameengineshot11.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Map
+
+
+Using the Game Engine - Map
+===========================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"        # Give control to the game engine
+
+       func main          # Called by the Game Engine
+
+       oGame = New Game      # Create the Game Object
+       {
+         title = "My First Game"
+
+         Map {
+
+               blockwidth = 80
+               blockheight = 80
+
+               aMap = [
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+               ]
+
+               aImages = ["images/fbwall.png",
+                        "images/fbwallup.png",
+                        "images/fbwalldown.png"]
+
+               state = func oGame,oSelf {
+                 oSelf {
+                       x -= 3
+                       if x < - 2100  x = 0  ok
+                 }
+               }
+
+         }
+       }          # Start the Events Loop  
+
+
+Screen Shot:
+
+.. image:: gameengineshot12.png
+       :alt: screen shot
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Map Events
+
+Using the Game Engine - Map Events
+==================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"        # Give control to the game engine
+
+       func main          # Called by the Game Engine
+
+         oGame = New Game      # Create the Game Object
+         {
+               title = "My First Game"
+
+               Map {
+
+                 blockwidth = 80
+                 blockheight = 80
+
+                 aMap = [
+                          [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+                 ]
+
+                 aImages = ["images/fbwall.png",
+                                "images/fbwallup.png",
+                                "images/fbwalldown.png"]
+
+                 state = func oGame,oSelf {
+                       oSelf {
+                         x -= 3
+                         if x < - 2100  x = 0  ok
+                       }
+                 }
+
+                 mouse = func ogame,oself,nType,aMouseList {
+                       if nType = GE_MOUSE_UP
+                         oSelf {
+                               mX = aMouseList[GE_MOUSE_X]
+                               mY = aMouseList[GE_MOUSE_Y]
+                               nValue = GetValue(mX,mY)
+                               nRow = GetRow(mX,mY)
+                               nCol = GetCol(mX,mY)
+                               Switch nValue
+                               On 1  aMap[nRow][nCol] = 0
+                               On 2  aMap[nRow][nCol] = 0
+                               On 3  aMap[nRow][nCol] = 0
+                               On 0  aMap[nRow][nCol] = 1
+                               Off
+                         }
+                       ok
+                 }
+
+               }
+         }          # Start the Events Loop  
+
+Screen Shot:
+
+.. image:: gameengineshot13.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Object and Drawing
+
+Using the Game Engine - Object and Drawing
+==========================================
+
+We can use the Object keyword (defined by the game engine) to create objects from the GameObject class.
+
+Example:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       Object {
+                               x = 0 y=300 width = 200 height=200
+                               draw = func oGame,oSelf {
+                                       oSelf {
+                                               for t = 1 to 210
+                                                       gl_draw_circle(x,y,t,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                               next
+                                       }
+                               }
+                               state = func oGame,oSelf {
+                                       oSelf { 
+                                               if x <= 800 
+                                                       x+= 3 
+                                               else
+                                                       x=0
+                                               ok
+                                       }
+                               }
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+
+               }                                       # Start the Events Loop 
+
+Screen Shot:
+
+.. image:: gameengineshot14.png
+       :alt: screen shot
+
+Example:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       Object {
+                               x = 400 y=300 width = 200 height=200
+                               draw = func oGame,oSelf {
+                                       oSelf {
+                                               for t = 1 to 210
+                                                       gl_draw_rectangle(x+t,y+t,
+                                                       x+t*2,y+t*2,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                                       gl_draw_rectangle(x+t*2,y+t*2,
+                                                       x-t*2,y-t*2,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                               next
+                                       }
+                               }
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+
+               }                                       # Start the Events Loop 
+
+
+Screen Shot:
+
+.. image:: gameengineshot15.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Stars Fighter Game
+
+Stars Fighter Game
+==================
+
+The Stars Fighter source code
+
+.. code-block:: ring
+
+       # The Ring Standard Library
+       # Game Engine for 2D Games
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       load "gameengine.ring"
+
+       func main
+
+         oGame = New Game
+
+         while true
+
+                 oGameState = new GameState
+
+                 oGame {
+                       title = "Stars Fighter!"
+                       sprite
+                       {
+                         file = "images/menu1.jpg"
+                         x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                         keypress = func ogame,oself,nKey {
+                               if nkey = key_esc or nKey = GE_AC_BACK
+                                 ogame.shutdown()
+                               but nKey = key_space
+                                 oGameState.startplay=true
+                                 ogame.shutdown=true
+                               ok
+                         }
+                         mouse = func ogame,oself,nType,aMouseList {
+                               if nType = GE_MOUSE_UP
+                                 oGameState.startplay=true
+                                 ogame.shutdown=true
+                               ok
+                         }
+                       }
+                       text {
+                         animate = false
+                         size = 35
+                         file = "fonts/pirulen.ttf"
+                         text = "Stars Fighter"
+                         x = 10  y=50
+                       }
+                       text {
+                         animate = false
+                         size = 25
+                         file = "fonts/pirulen.ttf"
+                         text = "Version 1.0"
+                         x = 80  y=100
+                       }
+                       text {
+                         animate = false
+                         size = 16
+                         file = "fonts/pirulen.ttf"
+                         text = "(C) 2016, Mahmoud Fayed"
+                         x = 45  y=140
+                       }
+
+                       text {
+                         animate = false
+                         size = 25
+                         file = "fonts/pirulen.ttf"
+                         text = "Press Space to start"
+                         x = 190  y=470
+                       }
+                       text {
+                         animate = false
+                         size = 20
+                         file = "fonts/pirulen.ttf"
+                         text = "Press Esc to Exit"
+                         x = 260  y=510
+                       }
+                       Sound {
+                         file = "sound/music1.wav"
+                       }
+                 }
+
+                 if oGameState.startplay
+                       oGame.refresh()
+                       playstart(oGame)
+                       oGame.refresh()
+                 ok
+
+         end
+
+       func playstart oGame
+
+         oSound = New Sound {
+               file = "sound/music2.wav"
+         }
+
+         while true
+               play(oGame)
+               if ogame.shutdown = true and oGameState.value = 0
+                 exit
+               ok
+               ogame.refresh()
+         end
+
+         oSound.Delete()
+
+       func play oGame
+
+         oGame
+         {
+               FPS = 60
+               FixedFPS = 120
+               title = "Stars Fighter!"
+               sprite
+               {
+                 file = "images/stars.jpg"
+                 x = 0
+                 y = 0
+                 point = -370
+                 direction = ge_direction_dec
+                 type = ge_type_background
+                 state = func ogame,oself {
+                         oself {
+                               if x < -350
+                                 direction = ge_direction_inc
+                                 point = 370
+                               but x = 0 and direction = ge_direction_inc
+                                 direction = ge_direction_dec
+                                 point = -370
+                               ok
+                         }
+                       }
+               }
+               sprite
+               {
+                 file = "images/player.png"
+                 transparent = true
+                 type = ge_type_player
+                 x = 400 y =400 width=100 height=100
+                 animate=false move=true Scaled=true
+                 mouse = func ogame,oself,nType,aMouseList {
+
+                       if not ( aMouseList[GE_MOUSE_X] >= oSelf.x and 
+                                        aMouseList[GE_MOUSE_X] <= oSelf.x+oSelf.width and
+                                        aMouseList[GE_MOUSE_Y] >= oself.y and 
+                                        aMouseList[GE_MOUSE_Y] <= oSelf.y+oSelf.height )
+
+                         if nType = GE_MOUSE_DOWN
+                               if aMouseList[1] < oSelf.X  # left
+                                 oSelf.X -= 100
+                               else
+                                 oSelf.X += 100
+                               ok
+                               if aMouseList[2] < oSelf.Y  # up
+                                 oSelf.Y -= 100
+                               else
+                                 oSelf.Y += 100
+                               ok
+                         ok
+
+                       else
+                         if nType = GE_MOUSE_UP
+                               cFunc = oself.keypress
+                               call cFunc(oGame,oSelf,Key_Space)
+                         ok
+                       ok
+                 }
+                 keypress = func oGame,oself,nkey {
+                       if nkey = key_space
+                         ogame {
+                               sprite {
+                                 type = ge_type_fire
+                                 file  = "images/rocket.png"
+                                 transparent = true
+                                       x = oself.x + 30
+                                 y = oself.y - 30
+                                 width = 30
+                                 height = 30
+                                 point = -30
+                                 nstep = 20
+                                 direction = ge_direction_decvertical
+                                 state = func oGame,oSelf {
+                                       for x in oGame.aObjects
+                                         if x.type = ge_type_enemy
+                                               if oself.x >= x.x and oself.y >= x.y and
+                                                 oself.x <= x.x + x.width and
+                                                 oself.y <= x.y + x.height
+                                                 showfire(oGame,x.x+40,x.y+40)
+                                                 ogame.remove(x.nindex)
+                                                 oGameState.score+=10
+                                                 oGameState.enemies--
+                                                 checkwin(oGame)
+                                                 exit
+                                               ok
+                                         ok
+                                       next
+                                 }
+                               }
+                         }
+                       but nkey = key_esc or nKey = GE_AC_BACK ogame.shutdown()
+                       ok
+                 }
+                 state = func oGame,oSelf {
+                       oself {
+                         if x < 0 x = 0 ok
+                         if y < 0 y = 0 ok
+                         if x > ogame.screen_w-width  x= ogame.screen_w - width ok
+                         if y > ogame.screen_h-height y=ogame.screen_h-height ok
+                       }
+                 }
+               }
+               for g = 1 to oGameState.enemies
+                 sprite
+                 {
+                       type = ge_type_enemy
+                       file = "images/enemy.png"
+                       transparent = true
+                       x = g*random(50) y =g width=100 height=100
+                       animate=true Scaled=true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oself {
+                               if x < 0 x = 0 ok
+                               if y < 0 y = 0 ok
+                               if x > ogame.screen_w-width  x= ogame.screen_w - width ok
+                               if y > ogame.screen_h-height y=ogame.screen_h-height ok
+                         }
+                         if random(100) = 1
+                               ogame {
+                                 sprite {
+                                       type = ge_type_fire
+                                       file  = "images/rocket2.png"
+                                       transparent = true
+                                       x = oself.x + 30
+                                       y = oself.y + oself.height+ 30
+                                       width = 30
+                                       height = 30
+                                       point = ogame.screen_h+30
+                                       nstep = 10
+                                       direction = ge_direction_incvertical
+                                       state = func oGame,oSelf {
+                                         x =  oGame.aObjects[oGameState.playerindex]
+                                         if oself.x >= x.x and oself.y >= x.y and
+                                                oself.x <= x.x + x.width and
+                                                oself.y <= x.y + x.height
+                                                if oGameState.value > 0
+                                                  oGameState.value-=10
+                                                ok
+                                                ogame.remove(oself.nindex)
+                                                checkgameover(oGame)
+                                         ok
+                                       }
+                                 }
+                               }
+                         ok
+                       }
+                 }
+               next
+               text {
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Destroy All Enemies!"
+                 nstep = 3
+                 color = GE_COLOR_GREEN
+                 x = 100  y=50
+                 direction = ge_direction_incvertical
+                 point = 500
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=10
+                 state = func oGame,oSelf { oSelf { text = "Score : " + oGameState.score } }
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Energy : " + oGameState.value
+                 x = 500  y=50
+                 state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } }
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Level : " + oGameState.level
+                 x = 500  y=90
+               }
+         }
+
+
+       func checkwin ogame
+         if oGameState.gameresult  return ok
+         if oGameState.enemies = 0
+               oGameState.gameresult = true
+               oGame {
+                 if oGameState.level < 30
+                 text {
+                       point = 400
+                       size = 30
+                       file = "fonts/pirulen.ttf"
+                       text = "Level Completed!"
+                       nStep = 3
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.level++
+                               oGameState.enemies = oGameState.level
+                               oGameState.gameresult = false
+                         ok
+                       }
+                 }
+                 else
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "You Win !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.value = 0
+                         ok
+                       }
+                 }
+                 ok
+               }
+         ok
+
+       func checkgameover ogame
+         if oGameState.gameresult  return ok
+         if oGameState.value <= 0
+               oGameState.gameresult = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "Game Over !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                         ok
+                       }
+                 }
+               }
+               showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40,
+                                oGame.aObjects[oGameState.PlayerIndex].y+40)
+               oGame.aObjects[oGameState.PlayerIndex].enabled = false
+               oGame.remove(oGameState.PlayerIndex)
+         ok
+
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13
+                                 frame++
+                               else
+                                 frame=1
+                                 oGame.remove(oself.nIndex)
+                               ok
+                         ok
+                       }
+                 }
+               }
+         }
+
+
+       class gamestate
+         score = 0
+         level = 1
+         enemies = 1
+         value = 100
+         playerindex = 2
+         gameresult = false
+         startplay=false
+
+Screen Shot:
+
+.. image:: starsfighter.png
+       :alt: Stars Fighter
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Flappy Bird 3000 Game
+
+Flappy Bird 3000 Game
+=====================
+
+The Flappy Bird 3000 Game source code
+
+.. code-block:: ring
+
+       # The Ring Standard Library
+       # Game Engine for 2D Games
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       Load "gameengine.ring"
+
+       func main
+
+         oGame = New Game  
+
+
+         while true
+
+               oGameState = New GameState
+
+               oGame {
+                 title = "Flappy Bird 3000"
+                 sprite
+                 {
+                       file = "images/fbback.png"
+                       x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                       keypress = func ogame,oself,nKey {
+                         if nkey = key_esc or nKey = GE_AC_BACK
+                               ogame.shutdown()
+                         but nKey = key_space
+                               oGameState.startplay=true
+                               ogame.shutdown=true
+                         ok
+                       }
+                       mouse = func ogame,oself,nType,aMouseList {
+                         if nType = GE_MOUSE_UP
+                               cFunc = oself.keypress
+                               call cFunc(oGame,oSelf,Key_Space)
+                         ok
+                       }
+                 }
+                 text {
+                       animate = false
+                       size = 35
+                       file = "fonts/pirulen.ttf"
+                       text = "Flappy Bird 3000"
+                       x = 150  y=50
+                 }
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Version 1.0"
+                       x = 280  y=100
+                 }
+                 text {
+                       animate = false
+                       size = 16
+                       file = "fonts/pirulen.ttf"
+                       text = "(C) 2016, Mahmoud Fayed"
+                       x = 245  y=140
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "To Win Get Score = 3000"
+                       x = 150  y=270
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Space to start"
+                       x = 190  y=470
+                 }
+                 text {
+                       animate = false
+                       size = 20
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Esc to Exit"
+                       x = 260  y=510
+                 }
+
+                 animate {
+                       file = "images/fbbird.png"
+                       x = 200
+                       y = 200
+                       framewidth = 20
+                       scaled = true
+                       height = 50
+                       width = 50
+                       nStep = 3
+                       transparent = true
+                       animate = true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oSelf {
+                               nStep--
+                               if nStep = 0
+                                 nStep = 3
+                                 if frame < 3
+                                       frame++
+                                 else
+                                       frame=1
+                                 ok
+                               ok
+                               if x <= 0 x=0 ok
+                               if y <= 0 y=0 ok
+                               if x >= 750 x= 750 ok
+                               if y > 550 y=550 ok
+                         }
+                       }
+                 }
+
+                 Sound {
+                       file = "sound/music2.wav"
+                 }
+               }
+               if oGameState.startplay
+                 oGame.refresh()
+                 playstart(oGame)
+                 oGame.refresh()
+               ok
+
+         end
+
+
+       func playstart oGame
+
+         oGame {
+               FPS = 60
+               FixedFPS = 120
+               Title = "Flappy Bird 3000"
+               Sprite {
+                 file = "images/fbback.png"
+                 x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                 keypress = func ogame,oself,nKey {
+                       if nkey = key_esc or nKey = GE_AC_BACK
+                         ogame.shutdown()
+                       ok
+                 }
+               }
+
+               Map {
+                 blockwidth = 80
+                 blockheight = 80
+                 aMap = [
+                          [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+                       ]
+                 newmap(aMap)
+                 aImages = ["images/fbwall.png","images/fbwallup.png",
+                         "images/fbwalldown.png"]
+                 state = func oGame,oSelf {
+                       if oGameState.gameresult = false
+                         px = oGame.aObjects[3].x
+                         py = oGame.aObjects[3].y
+                         oSelf {
+                               x -=  3
+                               if x < - 2100
+                                 x = 0
+                                 newmap(aMap)
+                               ok
+                               nCol =  getcol(px,0)
+                               if nCol=11 or nCol=15 or nCol=19 or nCol=23 or nCol=27
+                                 if nCol != oGameState.lastcol
+                                       oGameState.lastcol = nCol
+                                       oGameState.Score += 100
+                                       oGame { Sound {
+                                         once = true
+                                         file = "sound/sfx_point.wav"
+                                       } }
+                                       checkwin(oGame)
+                                 ok
+                               ok
+                         }
+                         if  oSelf.getvalue(px+40,py) != 0 or
+                                 oSelf.getvalue(px+40,py+40) != 0 or
+                                 oSelf.getvalue(px,py) != 0 or
+                                 oSelf.getvalue(px,py+40) != 0
+                               oGameState.gameresult = true
+                               oGame {
+                                 text {
+                                       point = 550
+                                       size = 30
+                                       nStep = 3
+                                       file = "fonts/pirulen.ttf"
+                                       text = "Game Over !!!"
+                                       x = 500  y=10
+                                       state = func ogame,oself {
+                                         if oself.y >= 550
+                                                 ogame.shutdown = true
+                                         ok
+                                               if oself.y = 90
+                                               ogame {
+                                                 Sound {
+                                                       once = true
+                                                       file = "sound/sfx_die.wav"
+                                                 }
+                                               }
+                                         ok
+                                       }
+                                 }
+                                 Sound {
+                                       once = true
+                                       file = "sound/sfx_hit.wav"
+                                 }
+                               }
+                         ok
+                       ok
+                 }
+               }
+
+               animate {
+                 file = "images/fbbird.png"
+                 x = 10
+                 y = 10
+                 framewidth = 20
+                 scaled = true
+                 height = 50
+                 width = 50
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 3
+                                 frame++
+                               else
+                                 frame=1
+                               ok
+                         ok
+                       }
+
+                       if not oGameState.playerwin
+                         oGameState.down --
+                         if oGameState.down = 0
+                               oGameState.down = 3
+                               oself {
+                                 y += 25
+                                 if y > 550 y=550 ok
+                               }
+                         ok
+                       ok
+
+                 }
+                 keypress = func ogame,oself,nKey {
+                       if oGameState.gameresult = false
+                         oself {
+                               if nkey = key_space
+                                 y -= 55
+                                 oGameState.down = 60
+                                 if y<=0 y=0 ok
+                               ok
+                         }
+                       ok
+                 }
+                 mouse = func ogame,oself,nType,aMouseList {
+                       if nType = GE_MOUSE_UP
+                         cFunc = oself.keypress
+                         call cFunc(oGame,oSelf,Key_Space)
+                       ok
+                 }
+               }
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=10
+                 state = func oGame,oSelf {
+                       oSelf { text = "Score : " + oGameState.score }
+                 }
+               }
+
+         }
+
+       func newmap aMap
+         aV = [
+         [1,1,3,0,0,2,1,1],
+         [1,3,0,0,0,2,1,1],
+         [1,1,1,3,0,2,1,1],
+         [1,1,1,3,0,0,0,0],
+         [0,0,0,0,2,1,1,1],
+         [0,0,2,1,1,1,1,1],
+         [0,0,0,2,1,1,1,1],
+         [1,1,1,3,0,2,1,1],
+         [1,1,1,1,1,3,0,0],
+         [3,0,0,2,1,1,1,1],
+         [3,0,0,2,3,0,0,2]
+         ]
+         for x = 10 to 24 step 4
+               aVar = aV[ (random(10)+1) ]
+               for y = 1 to 8
+                 aMap[y][x] = aVar[y]
+               next
+         next
+
+       func checkwin ogame
+         if oGameState.score = 3000
+               oGameState.gameresult = true
+               oGameState.playerwin = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "You Win !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.value = 0
+                         ok
+                       }
+                 }
+               }
+         ok
+
+       Class GameState
+         down = 3
+         gameresult = false
+         Score = 0
+         startplay=false
+         lastcol = 0
+         playerwin = false
+
+Screen Shot:
+
+.. image:: flappybird.png
+       :alt: Flappy Bird 300
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Super Man 2016 Game
+
+Super Man 2016 Game
+===================
+
+The Super Man 2016 Game source code
+
+.. code-block:: ring
+
+       # The Ring Standard Library
+       # Game Engine for 2D Games
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       Load "gameengine.ring"
+
+       func main
+
+         oGame = New Game
+
+         while true
+
+               oGameState = new GameState
+
+               oGame {
+                 title = "Super Man 2016"
+                 sprite
+                 {
+                       file = "images/superman.jpg"
+                       x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                       keypress = func ogame,oself,nKey {
+                         if nkey = key_esc or nKey = GE_AC_BACK
+                               ogame.shutdown()
+                         but nKey = key_space
+                               oGameState.startplay=true
+                               ogame.shutdown=true
+                         ok
+                       }
+                       mouse = func ogame,oself,nType,aMouseList {    
+                         if nType = GE_MOUSE_UP
+                               oGameState.startplay=true 
+                               ogame.shutdown=true 
+                         ok
+                       }
+                       state = func ogame,oself {
+                         oself {
+                               if x > -500
+                                 x-=1
+                                 y-=1
+                                 width +=1
+                                 height +=4
+                               ok
+                         }
+                       }
+                 }
+                 text {
+                       animate = false
+                       size = 35
+                       file = "fonts/pirulen.ttf"
+                       text = "Super Man 2016"
+                       x = 20  y=30
+                 }
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Version 1.0"
+                       x = 20  y=80
+                 }
+                 text {
+                       animate = false
+                       size = 16
+                       file = "fonts/pirulen.ttf"
+                       text = "(C) 2016, Mahmoud Fayed"
+                       x = 20  y=120
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Space to start"
+                       x = 190  y=470
+                 }
+                 text {
+                       animate = false
+                       size = 20
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Esc to Exit"
+                       x = 260  y=510
+                 }
+
+                 animate {
+                       file = "images/superman.png"
+                       x = 200
+                       y = 200
+                       framewidth = 68
+                       scaled = true
+                       height = 86
+                       width = 60
+                       nStep = 10
+                       transparent = true
+                       animate = true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oSelf {
+                               nStep--
+                               if nStep = 0
+                                 nStep = 10
+                                 if frame < 1
+                                       frame++
+                                 else
+                                       frame=1
+                                 ok
+                               ok
+                               if x <= 0 x=0 ok
+                               if y <= 0 y=0 ok
+                               if x >= 750 x= 750 ok
+                               if y > 550 y=550 ok
+                         }
+                       }
+                 }
+
+                 Sound {
+                       file = "sound/music2.wav"
+                 }
+               }
+               if oGameState.startplay
+                 oGame.refresh()
+                 playstart(oGame)
+                 oGame.refresh()
+               ok
+
+         end
+
+
+       func playstart oGame
+
+         oGame {
+               FPS = 60
+               FixedFPS = 15
+               Title = "Super Man 2016"
+               Sprite {
+                 file = "images/supermancity.jpg"
+                 x = 0 y=0 width=800 height = 600 scaled = true animate = false
+               }
+               Map {
+                 blockwidth = 80
+                 blockheight = 80
+                 aMap = [
+                         [0,0,0,4,4,4,0,0,0,1,0,0,0,1,4,4,0,1,0,0,0,0,4,4,0,1,4,
+       4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,1,0,0,0,1,0,3,3,3,5,3,3,3,3,0],
+                         [0,0,4,0,4,0,4,0,0,1,0,0,0,3,4,4,4,1,0,0,0,0,4,4,0,1,4,
+       4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,1,4,1,0,0,0,1,0,0,0,1,0,4,4,4,4,4,4,4,4,0],
+                         [0,0,0,4,4,4,0,0,0,1,0,0,0,4,4,4,4,1,0,0,0,0,0,0,0,3,4,
+       4,4,0,0,4,0,0,0,0,0,0,4,2,0,0,4,1,4,1,4,2,4,1,0,2,0,1,0,4,4,4,4,4,4,4,4,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
+       0,0,0,0,4,4,4,4,4,4,4,4,1,0,0,4,1,4,1,4,1,4,1,0,1,0,1,0,2,2,2,2,2,2,2,2,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
+       0,0,0,0,2,0,0,0,0,0,2,0,3,0,0,0,1,4,1,4,1,4,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,4,3,4,1,4,3,0,1,0,3,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,2,0,0,2,0,0,2,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,1,0,0,1,0,0,1,3,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0]
+                       ]
+                 aImages = ["images/smwall.png","images/smwallup.png",
+                         "images/smwalldown.png","images/smstar.png",
+                         "images/smkey.png","images/smstar2.png"]
+               }
+
+               sprite {
+                 type = ge_type_enemy
+                 animate = false
+                 file  = "images/smhome.png"
+                 x = 5000
+                 y = 400
+                 width = 290
+                 height = 200
+                 transparent = true
+
+                 state = func oGame,oSelf {
+                       oself {
+                         x = 5000 +  oGame.aObjects[2].x
+                         if x < 0 or x > SCREEN_W return ok
+                       }
+                       if oGameState.gameresult or oGameState.DoorKey = false  return ok
+                       if oGame.aObjects[oGameState.playerindex].x > oself.x + 100 and
+                         oGame.aObjects[oGameState.playerindex].y > oself.y + 50
+                         oGameState.gameresult = true
+                         oGame {
+                               sprite {
+                                 file = "images/smwin.jpg"
+                                 x=0 y=0 width=800 height=600
+                                 scaled = true animate=false
+                                 state = func ogame,oself {
+                                       oself {
+                                         x-=5
+                                         y-=5
+                                         width +=10
+                                         height +=10
+                                         if x = -300
+                                               ogame.shutdown = true
+                                         ok
+                                       }
+                                 }
+                               }
+                         }
+                       ok
+                 }
+
+               }
+
+               animate {
+                 file = "images/superman.png"
+                 x = 0
+                 y = 0
+                 framewidth = 60
+                 scaled = true
+                 height = 86
+                 width = 60
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+
+                       checkstarskeycol(oGame,oSelf)
+
+                       if not oGameState.playerwin
+                               oself {
+                                 file = "images/superman.png"
+                                 height = 86
+                                 width = 60
+                                 for t=1 to 8
+                                       if checkwall2(oGame,oSelf,0,5,[2,1])
+                                         y += 5
+                                       else
+                                         exit
+                                       ok
+                                 next
+                                 if y > 500 y=500 ok
+                               }
+                       ok
+
+                 }
+                 keypress = func ogame,oself,nKey {
+                       if oGameState.gameresult = false
+
+                         oself {
+                               if nkey = key_up  and checkwall(oGame,oSelf,0,-40)
+                                 oGameState.value -= 1
+                                 checkgameover(oGame)
+                                 file = "images/supermanup.png"
+                                 height = 123
+                                 dotransparent()
+                                 y -= 40
+                                 oGameState.down = 10
+                                 if y<=0 y=0 ok
+                               but nkey = key_down and checkwall(oGame,oSelf,0,40)
+                                 file = "images/supermandown.png"
+                                 dotransparent()
+                                 y += 40
+                                 if y>=500 y=500 ok
+                               but nKey = key_right and checkwall(oGame,oSelf,10,0)
+                                 file = "images/supermanright.png"
+                                 dotransparent()
+                                 x += 10
+                                 if x >= 440
+                                       if oGame.aObjects[2].x > -4500
+                                         oGame.aObjects[2].x -= 50
+                                         callenemystate(oGame)
+                                       else
+                                         if x <= 750
+                                               if  checkwall(oGame,oSelf,10,0)
+                                                 x += 10
+                                               ok
+                                         else
+                                               if  checkwall(oGame,oSelf,-10,0)
+                                                 x -= 10
+                                               ok
+                                         ok
+                                         return
+                                       ok
+                                       x=400
+                                 ok
+                               but nKey = key_left and checkwall(oGame,oSelf,-10,0)
+                                 file = "images/supermanleft.png"
+                                 dotransparent()
+                                 x -= 10
+                                 if x <= 0
+                                       x += 10
+                                       if oGame.aObjects[2].x != 0
+                                         oGame.aObjects[2].x += 50
+                                         callenemystate(oGame)
+                                         x += 50
+                                       ok
+                                 ok
+                               but nkey = key_esc or nKey = GE_AC_BACK
+                                 ogame.shutdown()
+                               ok
+                         }
+                       ok
+                 }
+                 mouse = func ogame,oself,nType,aMouseList {  
+                       if nType = GE_MOUSE_DOWN
+                         oGameState.moveplayer = TRUE
+                       But nType = GE_MOUSE_UP
+                         oGameState.moveplayer = FALSE
+                       ok
+                       if oGameState.moveplayer = TRUE
+                         if aMouseList[GE_MOUSE_X] < oSelf.X  # left
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_left)
+                         else
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_right)
+                         ok
+                         if aMouseList[GE_MOUSE_Y] < oSelf.Y  # up
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_up)
+                         else
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_down)
+                         ok
+                       ok        
+                 }
+               }
+
+               addenemy(oGame,600)
+               addenemy(oGame,900)
+               addenemy(oGame,1550)
+               addenemy(oGame,2350)
+               addenemy(oGame,3350)
+               addenemy(oGame,3500)
+               addenemy(oGame,3670)
+               addenemy(oGame,3840)
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=0
+                 state = func oGame,oSelf {
+                       oSelf { text = "Score : " + oGameState.score }
+                 }
+               }
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Energy : " + oGameState.value
+                 x = 10  y=0
+                 state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } }
+               }
+         }
+
+
+       func inlist nValue,aList
+         for x in aList
+               if x = nValue
+                 return true
+               ok
+         next
+         return false
+
+       func checkwall oGame,oself,diffx,diffy
+         alist = [1,2,3]
+         return checkwall2(oGame,oself,diffx,diffy,aList)
+
+       func checkwall2 oGame,oself,diffx,diffy,aList
+         xPos = oSelf.x + diffx
+         yPos = oSelf.y + diffy
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx
+         yPos = oSelf.y + diffy + oSelf.height
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx + oSelf.width
+         yPos = oSelf.y + diffy
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx + oSelf.width
+         yPos = oSelf.y + diffy + oSelf.height
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         return nValue
+
+       func checkopenwall oGame
+         if oGameState.score = 900
+               oGame.aObjects[2].aMap[3][10] = 3
+               oGame.aObjects[2].aMap[4][10] = 0
+               oGame.aObjects[2].aMap[5][10] = 0
+               oGame.aObjects[2].aMap[6][10] = 0
+               oGame.aObjects[2].aMap[7][10] = 0
+               oGame.aObjects[2].aMap[8][10] = 0
+         but oGameState.score = 1800
+               oGame.aObjects[2].aMap[3][18] = 3
+               oGame.aObjects[2].aMap[4][18] = 0
+               oGame.aObjects[2].aMap[5][18] = 0
+               oGame.aObjects[2].aMap[6][18] = 0
+               oGame.aObjects[2].aMap[7][18] = 0
+               oGame.aObjects[2].aMap[8][18] = 0
+         but oGameState.score = 5500
+               oGame.aObjects[2].aMap[1][44] = 0
+               oGame.aObjects[2].aMap[2][44] = 0
+               oGame.aObjects[2].aMap[3][44] = 2
+         ok
+
+
+       func checkgameover ogame
+         if oGameState.gameresult  return ok
+         if oGameState.value <= 0
+               oGameState.value = 0
+               oGameState.gameresult = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 9
+                       file = "fonts/pirulen.ttf"
+                       text = "Game Over !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                         ok
+                       }
+                 }
+               }
+               showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40,
+                        oGame.aObjects[oGameState.PlayerIndex].y+40)
+               oGame.aObjects[oGameState.PlayerIndex].enabled = false
+               oGame.remove(oGameState.PlayerIndex)
+         ok
+
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13
+                                 frame++
+                               else
+                                 frame=1
+                                 oGame.remove(oself.nIndex)
+                               ok
+                         ok
+                       }
+                 }
+               }
+         }
+
+       func addenemy oGame,xPos
+         oGame {
+               lbraceend = false
+               sprite {
+                       type = ge_type_enemy
+                       file = "images/smenemy.png"
+                       transparent = true
+                       x = xPos y =10 width=100 height=100
+                       animate=true Scaled=true
+                       direction = GE_DIRECTION_NOMOVE
+                       temp = xPos
+                       state = func oGame,oSelf {
+                         oself {
+                               x = oSelf.temp +  oGame.aObjects[2].x
+                               if y < 0 y = 0 ok
+                               if y > 100 y=100 ok
+                               if x > SCREEN_W or x < 0 return ok
+                         }
+
+                         if random(10) = 1
+                               if oGameState.gameresult return ok
+                               ogame {
+                                 sprite {
+                                       type = ge_type_fire
+                                       file  = "images/smrocket.png"
+                                       scaled  = true
+                                       transparent = true
+                                       x = oself.x + 30
+                                       y = oself.y + oself.height+ 30
+                                       width = 30
+                                       height = 30
+                                       point = ogame.screen_h+30
+                                       nstep = 30
+                                       direction = ge_direction_incvertical
+                                       xvalue =  oGame.aObjects[2].x
+                                       temp = oself.x + 30 - xvalue
+                                       state = func oGame,oSelf {
+                                         oself { x = oSelf.temp +  oGame.aObjects[2].x  }
+                                         x =  oGame.aObjects[oGameState.playerindex]
+                                         if oself.x >= x.x and oself.y >= x.y and
+                                                oself.x <= x.x + x.width and
+                                                oself.y <= x.y + x.height
+                                                if oGameState.value > 0
+                                                  oGameState.value-=1000
+                                                ok
+                                                ogame.remove(oself.nindex)
+                                                checkgameover(oGame)
+                                         ok
+                                       }
+                                 }
+                               }
+                         ok
+                       }
+                 }
+         }
+         ogame.lbraceend = true
+
+
+       func checkstarskey oGame,oSelf,nValue,nRow,nCol
+         switch nValue
+               on 4
+                 oGame.aObjects[2].aMap[nRow][nCol] = 6
+                 oGameState.Score += 100
+                 checkopenwall(oGame)
+                 oGame { Sound {
+                       once = true
+                       file = "sound/sfx_point.wav"
+                 } }
+               on 5
+                 oGame.aObjects[2].aMap[nRow][nCol] = 0
+                 oGameState.DoorKey = true
+                 oGameState.Score += 500
+                 checkopenwall(oGame)
+                 oGame { Sound {
+                       once = true
+                       file = "sound/sfx_point.wav"
+                 } }
+         off
+
+       func checkstarskeycol oGame,oSelf
+         nValue = oGame.aObjects[2].getvalue(oSelf.x,oSelf.y)
+         nRow = oGame.aObjects[2].getrow(oSelf.x,oSelf.y)
+         nCol = oGame.aObjects[2].getcol(oSelf.x,oSelf.y)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         nRow = oGame.aObjects[2].getrow(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         nCol = oGame.aObjects[2].getcol(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x+oSelf.width,oSelf.y)
+         nRow = oGame.aObjects[2].getrow(oSelf.x+oSelf.width,oSelf.y)
+         nCol = oGame.aObjects[2].getcol(oSelf.x+oSelf.width,oSelf.y)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x,oSelf.y+oSelf.height)
+         nRow = oGame.aObjects[2].getrow(oSelf.x,oSelf.y+oSelf.height)
+         nCol = oGame.aObjects[2].getcol(oSelf.x,oSelf.y+oSelf.height)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+       func callenemystate oGame
+         for t in oGame.aObjects
+               t {
+                 if type = GE_TYPE_ENEMY
+                       call state(oGame,t)
+                 ok
+               }
+         next
+
+       Class GameState
+
+         down = 3
+         gameresult = false
+         Score = 0
+         startplay=false
+         lastcol = 0
+         playerwin = false
+         DoorKey = false
+         playerindex = 4
+         value = 1000
+         moveplayer = false
+
+Screen Shot:
+
+.. image:: superman.png
+       :alt: Super Man 2016
+
+
diff --git a/docs/en/source/gameengineandorid.txt b/docs/en/source/gameengineandorid.txt
new file mode 100644 (file)
index 0000000..2a798ae
--- /dev/null
@@ -0,0 +1,110 @@
+.. index:: 
+       single: Building Games For Android; Introduction
+
+==========================
+Building Games For Android
+==========================
+
+In this chapter we will learn about Building RingLibSDL Games for Mobile.
+
+So we can create packages (*.apk) for the applications that are developed using Ring Game Engine for 2D Games.
+
+
+.. index:: 
+       pair: Building Games For Android; Download Requirements and Update the Android SDK
+
+Download Requirements and Update the Android SDK
+================================================
+
+* The Android SDK Tools
+
+       https://developer.android.com/studio/index.html
+
+* The Android NDK (Tested using android-ndk-r10c)
+
+               https://developer.android.com/ndk/index.html
+
+* Apache Ant v1.8 or later 
+
+               http://ant.apache.org/bindownload.cgi
+
+* Java SE Development Kit (JDK) v6 or later
+
+               http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
+
+* Update the Android SDK to get the API and tools packages required for development
+
+       Tested using Android 4.4.2 (API 19)
+
+* In Windows - Define the next Environment Variables based on your system.
+
+(1) JAVA_HOME
+
+.. code-block:: ring
+       
+       For Example : C:\Program Files (x86)\Java\jdk1.8.0_05 
+
+(2) ANDROID_HOME       
+
+.. code-block:: ring
+
+       For Example : B:\mahmoud\Tools\Java-Android\adt-bundle-windows-x86-20140702\sdk
+
+.. index:: 
+       pair: Building Games For Android; Project Folder
+
+Project Folder
+==============
+
+Open the project folder : ring/android/ringlibsdl/project
+
+.. image:: ringlibsdlandroid_shot1.png
+       :alt: RingLibSDL for Android
+
+You can add the source code (*.ring) and Images/Sound Files to the assets folder.
+
+.. image:: ringlibsdlandroid_shot2.png
+       :alt: RingLibSDL for Android
+
+You will find the Flappy Bird 3000 Game ready for building.
+
+The execution starts from the start.ring file
+
+.. code-block:: ring
+
+       load "game2.ring"
+
+.. index:: 
+       pair: Building Games For Android; Building the project
+
+Building the project
+====================
+
+Move to the ring/android/ringlibsdl/project folder 
+
+We can build using the next command (We need to do this for one time only).
+
+.. code-block:: none
+
+       ndk-build
+
+Then we can create the package (*.apk) using the next command.
+
+.. code-block:: none
+
+       ant debug
+
+We can write a batch file for building the project (file: build.bat)
+
+.. code-block:: none
+
+       rem You will need to modify this batch file based on your environment
+
+       set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.8.0_05
+       set ANDROID_HOME=B:\mahmoud\Tools\JavaAndroid\adt-bundle-windows-x86-20140702\sdk
+       set NDK_ROOT=B:\mahmoud\Tools\JavaAndroid\android-ndk-r10c
+
+       set path=%path%;B:\mahmoud\Tools\JavaAndroid\android-ndk-r10c
+       set path=%path%;B:\mahmoud\Tools\JavaAndroid\apache-ant-1.9.4\bin
+
+       ndk-build
\ No newline at end of file
diff --git a/docs/en/source/gameengineshot1.png b/docs/en/source/gameengineshot1.png
new file mode 100644 (file)
index 0000000..2259b19
Binary files /dev/null and b/docs/en/source/gameengineshot1.png differ
diff --git a/docs/en/source/gameengineshot11.png b/docs/en/source/gameengineshot11.png
new file mode 100644 (file)
index 0000000..a77376e
Binary files /dev/null and b/docs/en/source/gameengineshot11.png differ
diff --git a/docs/en/source/gameengineshot12.png b/docs/en/source/gameengineshot12.png
new file mode 100644 (file)
index 0000000..6511780
Binary files /dev/null and b/docs/en/source/gameengineshot12.png differ
diff --git a/docs/en/source/gameengineshot13.png b/docs/en/source/gameengineshot13.png
new file mode 100644 (file)
index 0000000..611a642
Binary files /dev/null and b/docs/en/source/gameengineshot13.png differ
diff --git a/docs/en/source/gameengineshot14.png b/docs/en/source/gameengineshot14.png
new file mode 100644 (file)
index 0000000..04a8127
Binary files /dev/null and b/docs/en/source/gameengineshot14.png differ
diff --git a/docs/en/source/gameengineshot15.png b/docs/en/source/gameengineshot15.png
new file mode 100644 (file)
index 0000000..e4e3498
Binary files /dev/null and b/docs/en/source/gameengineshot15.png differ
diff --git a/docs/en/source/gameengineshot2.png b/docs/en/source/gameengineshot2.png
new file mode 100644 (file)
index 0000000..15500e7
Binary files /dev/null and b/docs/en/source/gameengineshot2.png differ
diff --git a/docs/en/source/gameengineshot3.png b/docs/en/source/gameengineshot3.png
new file mode 100644 (file)
index 0000000..1de7f0c
Binary files /dev/null and b/docs/en/source/gameengineshot3.png differ
diff --git a/docs/en/source/gameengineshot5.png b/docs/en/source/gameengineshot5.png
new file mode 100644 (file)
index 0000000..b689297
Binary files /dev/null and b/docs/en/source/gameengineshot5.png differ
diff --git a/docs/en/source/gameengineshot6.png b/docs/en/source/gameengineshot6.png
new file mode 100644 (file)
index 0000000..2a1c4c3
Binary files /dev/null and b/docs/en/source/gameengineshot6.png differ
diff --git a/docs/en/source/gameengineshot7.png b/docs/en/source/gameengineshot7.png
new file mode 100644 (file)
index 0000000..41d3551
Binary files /dev/null and b/docs/en/source/gameengineshot7.png differ
diff --git a/docs/en/source/gameoflife.jpg b/docs/en/source/gameoflife.jpg
new file mode 100644 (file)
index 0000000..96050f4
Binary files /dev/null and b/docs/en/source/gameoflife.jpg differ
diff --git a/docs/en/source/generalinfo.txt b/docs/en/source/generalinfo.txt
new file mode 100644 (file)
index 0000000..0144310
--- /dev/null
@@ -0,0 +1,229 @@
+.. index:: 
+       single: General Information; Introduction
+
+===================
+General Information
+===================
+
+This chapter contains general information about the Ring programming language
+
+(1) Ring Architecture
+(2) Memory Management
+(3) Data Representation
+
+.. index:: 
+       pair: General Information; Ring Architecture
+
+Ring Architecture
+=================
+
+We have the next architecture
+
+(1) Ring Applications (Your Code)  - Written in Ring - See folder : ring/applications
+(2) Ring Libraries (StdLib, WebLib, GameEngine, etc) - Written in Ring - See folder : ring/ringlibs
+(3) Ring Extensions (RingAllegro, RingQt, etc) - Written in C/C++ (may include Ring code) - See folder : ring/extensions
+(4) Ring Virtual Machine (Ring VM) - Written in C language
+(5) Operating System (Current Platform) - (Windows, Linux, macOS, Android, etc)
+
+The extensions are just dynamic libraries (DLL, So, Dylib)
+You can update the extensions without the need to update your code.
+
+
+Folder (ring\libdepwin) ====> C libraries used for building Ring Extensions (written in C) on Windows platform.
+
+Folder (ring\ringlibs)  ====> Ring libraries written in Ring itself (StdLib, WebLib, GameEngine, etc)
+
+Folder (ring\rnoteexe)  ====> Just C source file to create executable file that will run rnote.ring
+
+Folder (ring\visualsrc) ====> The Visual Source Code of the Ring Compiler & Ring VM developed using Programming Without Coding Technology (PWCT)
+
+We use the term Ring Library ---> When the library code is written in Ring
+We use the term Ring Extension ---> When the library code is Written in C or C++
+
+.. index:: 
+       pair: General Information; Memory Management
+
+Memory Management
+=================
+
+(1) When we call function, we get a new scope for this function, inside this scope we store variables.
+
+Also we get Temp. memory for this function. Inside this temp. memory we store temp. lists
+
+All of this will be deleted directly after the end of the function call (end of scope)
+
+(2) In Ring to delete memory, you have the next options
+
+2.1 Wait until the end of the function scope
+
+2.2 Use the Assignment operator
+
+2.3 Use callgc() function (delete temp. lists only)
+
+(3) Ring Garbage Collector uses Escape Analysis and Reference Counting
+
+In 90% of cases, the Escape Analysis is used so we don't waste time in running the garbage collector
+We directly know what will be deleted and what will remain in the memory.
+
+https://en.wikipedia.org/wiki/Escape_analysis
+
+In 10% of cases (or less than that) Ring may use Reference Counting.
+
+For example when we pass a list and sub list to a function
+Ring will pass the lists by reference, but what will happens if we deleted the Parent List?
+In this case, the Sub List will use reference counting, and when deleting the Parent List, it will stay in memory until the end of the function.
+
+Remember that Ring encourage us to avoid using references, and the
+Assignment Operator will copy lists by value, so Ring usage of reference counting is
+very limited to special cases and in most cases the Escape Analysis is enough which is very fast.
+
+Starting from Ring 1.9 we extended the Reference Counting support to Ring Extensions and low level C pointers.
+So we don't have to care about using fclose() when we use fopen() for example. and the same for
+other extensions like RingODBC, RingSQLite, RingMySQL, RingQt, etc.
+
+All of the allocated resources will be cleaned by the Garbage Collector when we finish using it (when we lost the last reference).
+
+
+.. index:: 
+       pair: General Information; Data Representation
+
+Data Representation
+===================
+
+(1) In Ring, The String is just (Array of bytes)
+
+Ring is 8-bit clean, Each character in the string is 8 bits (1 byte)
+
+So these functions (Int2Bytes(), Float2Bytes() and Double2Bytes()) just return a string.
+
+Also we can store binary data in strings
+
+.. code-block:: ring
+
+       mystring = read("myfile.exe")
+
+(2) Remember this, when you think about variables
+
+* Value ---> What we have (What we are storing in the computer memory as data) - Low Level Concept
+* Type  ---> What we can do with what we have or how we do things with what we have (Just a Logical Concept)
+
+Computer memory ----> Just store [Bytes] - Each byte is 8-bit - (Here we avoid the memory word concept)
+
+These bytes could be grouped together when moved between the memory and the processor registers.
+Here we have (The register size) and things like 32-bit and 64-bit for example.
+Also we have the bytes order.
+
+Programming Languages ----> Add Types (Just as a concept) to these bytes so we can determine what to do with them and how operations should be done.
+
+And programming language could allow (Type Conversion) ---> Because the Type is a logical concept in most cases, What we really have is just data (Bytes, Bytes Count, Bytes Order, etc)
+
+Ring Stings ----> You have these bytes (each byte is 8-bit) and Ring know the string size (stored as number in the String structure) 
+
+So we don't check the NULL character or add it to the end of the string (Not Required)
+
+All operations inside Ring VM, will check the Ring size and deal with the string as binary data (each character is 8-bit)
+
+In the C language ---> The normal case is adding NULL character (\0) to the end of each string
+
+And the string functions check this character, This is not suitable for binary data.
+
+Signed vs Unsigned ---> Is a logical concept which is important when you do arithmetic operations on the data, but when storing the data, if you will include all of the (8-bits) and will not ignore any of them ---> Then don't care.
+
+In Ring, don't think about these details, we are hiding it from you, so you can focus on your application and what you will do.
+
+Think in C when you write C code which could be (based on need) low level code to have control on everything.
+ ----> Good for performance and memory management
+
+Think in Ring when you write Ring code which let you ignore a lot of details and concentrate only on the result
+-----> Good for productivity and delivering software quickly
+
+The good news (We can mix between Ring and C in our projects)
+
+
+(3) The functions Int2Bytes(), Float2Bytes() and Double2Bytes()
+
+These function take input as (Number) ---> Convert it to group of bytes based on the number type (int|float|double) ---> Then return a Ring string that contains these bytes
+
+Int2Bytes() ---> Ring string (Group of bytes) and the string size = sizeof(int)
+
+Float2Bytes() ---> Ring string (Group of bytes) and the string size = sizeof(float)
+
+Double2Bytes() ---> Ring string (Group of bytes) and the string size = sizeof(double)
+
+Example:
+
+.. code-block:: ring
+
+       ? len( int2bytes(1) )
+       ? len( float2bytes(1) )
+       ? len( double2bytes(1) )
+
+Output:
+
+.. code-block:: none
+
+       4
+       4
+       8
+
+(4) Storing Numbers
+
+When we use a number, Ring always use the (Double) data type for representing these numbers in memory.
+This is important to know when we do arithmetic operations on numbers.
+
+But when we convert the number to a String using "" + number  or using string(number) we get a string where each digit is represented in 1 byte (Not good idea for storage, but useful for string processing)
+
+If you need the number to be represented in specific size (int|float|double) for storage then use bytes2int() , bytes2float() and bytes2double() when writing the data to binary files.
+
+Ring Number (double) ----> int2bytes()  - will cast the number from double to int then return the bytes ----> 4 bytes (Ring String)
+
+Ring Number (double) ----> float2bytes()  - will cast the number from double to float then return the bytes ----> 4 bytes (Ring String)
+
+Ring Number (double) ----> double2bytes()  - will use the number (double) to return the bytes ----> 8 bytes (Ring String)
+The (int) type is used only for internal Ring operations, but Ring applications|code will use only the (double) type for numbers.
+
+(5) The Unsigned() Function
+
+The function unsigned() expect the first and the second parameters as numbers
+
+.. code-block:: ring
+
+       unsigned(nNumber1,nNumber2,cOperator)
+
+We can use the bytes2int() function to convert the bytes to a number
+
+Example:
+
+.. code-block:: ring 
+
+       B = list(4)
+
+       for k=1 to 4
+       {  
+               B[k]= Space(4)
+               for kk=1 to 4 { B[k][kk]= char(60+4*k +kk) }
+               ? " B" +k +": " +B[k]
+       }
+
+       A12= Space(4)     A12= bytes2int(B[1]) ^ bytes2int(B[2])                
+       ? "A12: " +string(A12)  
+       A34= Space(4)     A34= bytes2int(B[3]) ^ bytes2int(B[4])                
+       ? "A34: " +string(A34)
+       A12= space(4)     A12= Unsigned(bytes2int(B[1]),bytes2int(B[2]),"^")    
+       ? "unsigned A12: " +A12
+       A34= space(4)     A34= Unsigned(bytes2int(B[3]),bytes2int(B[4]),"^")    
+       ? "unsigned A34: " +A34
+
+Output:
+
+.. code-block:: none
+
+       B1: ABCD
+       B2: EFGH
+       B3: IJKL
+       B4: MNOP
+       A12: 201589764
+       A34: 470025220
+       unsigned A12: 201589764
+       unsigned A34: 470025220
diff --git a/docs/en/source/getinput.txt b/docs/en/source/getinput.txt
new file mode 100644 (file)
index 0000000..0a0e312
--- /dev/null
@@ -0,0 +1,101 @@
+.. index:: 
+       single: Getting Input; Introduction
+
+=============
+Getting Input
+=============
+
+We can get input from the keyboard using 
+
+* The Give Command
+* The GetChar() Function
+* The Input() Function
+
+.. index:: 
+       pair: Getting Input; Give Command
+
+Give Command
+============
+
+Syntax:
+
+.. code-block:: ring
+
+       Give VariableName
+
+Example:
+
+.. code-block:: ring
+
+       See "Enter the first number : " Give nNum1
+       See "Enter the second number : " Give nNum2
+       See "Sum : " + ( 0 + nNum1 + nNum2 )
+Output:
+
+.. code-block:: ring
+
+       Enter the first number : 3
+       Enter the second number : 4
+       Sum : 7
+
+.. index:: 
+       pair: Getting Input; GetChar()
+
+GetChar() Function
+==================
+
+We can get one character from the standard input using the GetChar() function
+
+Syntax:
+
+.. code-block:: ring
+
+       GetChar() ---> Character
+
+Example:
+
+.. code-block:: ring
+
+       While True
+               See "
+                       Main Menu
+                       (1) Say Hello
+                       (2) Exit
+                   " 
+               Option = GetChar()
+               GetChar() GetChar()  # End of line
+
+               # the previous two lines can be replaced with the next line
+               # Give Option
+
+               if Option = 1
+                       see "Enter your name : " give cName 
+                       see "Hello " + cName
+               else
+                       bye
+               ok
+       End
+
+.. index:: 
+       pair: Getting Input; Input()
+
+Input() Function
+================
+
+We can get input from the keyboard using the Input() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Input(nCount) ---> string
+
+The function will wait until nCount characters (at least) are read
+
+Example:
+
+.. code-block:: ring
+
+       See "Enter message (30 characters) : " cMsg = input(30)
+       See "Message : " + cMsg
diff --git a/docs/en/source/getquotesmac.png b/docs/en/source/getquotesmac.png
new file mode 100644 (file)
index 0000000..b30f3dc
Binary files /dev/null and b/docs/en/source/getquotesmac.png differ
diff --git a/docs/en/source/getting_started.txt b/docs/en/source/getting_started.txt
new file mode 100644 (file)
index 0000000..f90bf3a
--- /dev/null
@@ -0,0 +1,186 @@
+.. index:: 
+       single: Getting Started - First Style; Introduction
+
+=============================
+Getting Started - First Style
+=============================
+
+.. index:: 
+       pair: Getting Started - First Style; Hello World
+
+Hello World
+===========
+
+The next program prints the Hello World message on the screen (std-out).
+
+.. code-block:: ring
+
+       see "Hello World"
+
+.. index:: 
+       pair: Getting Started - First Style; Run the program
+
+Run the program
+===============
+
+to run the program, save the code in a file, for example : hello.ring
+then from the command line or terminal, run it using Ring
+
+.. code-block:: ring
+
+       ring hello.ring
+
+
+.. index:: 
+       pair: Getting Started - First Style; Create Executable File
+
+Create Executable File
+======================
+
+Using Ring2EXE we can create executable file for our application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+.. index:: 
+       pair: Getting Started - First Style; Not Case-Sensitive
+
+Not Case-Sensitive
+==================
+
+Since the Ring language is not case-sensitive, the same program can
+be written in different styles
+
+.. tip:: It's better to select one style and use it in all of the program source code
+
+.. code-block:: ring
+
+       SEE "Hello World"
+
+.. code-block:: ring
+
+       See "Hello World"
+
+
+.. index:: 
+       pair: Getting Started - First Style; Multi-Line literals
+
+Multi-Line literals
+===================
+
+Using Ring we can write multi-line literal, see the next example
+
+.. code-block:: ring
+
+       See "
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           "
+
+Also you can use the nl variable to insert new line
+and you can use the + operator to concatenate strings
+
+As we have NL for new lines, we have Tab and CR (Carriage return) too!
+
+.. note:: nl value means a new line and the actual codes that
+        represent a newline is different between operating systems
+
+.. code-block:: ring
+
+       See "Hello" + nl + "Welcome to the Ring programming language" + 
+           nl + "How are you?"
+
+.. index:: 
+       pair: Getting Started - First Style; Getting Input
+
+Getting Input
+=============
+
+You can get the input from the user using the give command
+
+.. code-block:: ring
+
+       See "What is your name? "
+       Give cName
+       See "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - First Style; No Explicit End For Statements
+
+No Explicit End For Statements
+==============================
+
+You don't need to use ';' or press ENTER to separate statements.
+The previous program can be written in one line.
+
+.. code-block:: ring
+
+       See "What is your name? " give cName see "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - First Style; Using ? to print expression then new line
+
+Using ? to print expression then new line
+=========================================
+
+It's common to print new line after printing an expression, We can use the ? operator to do that!
+
+Example:
+
+.. code-block:: ring
+
+       ? "Hello, World!"
+       for x = 1 to 10
+               ? x
+       next
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: Getting Started - First Style; Writing Comments
+
+Writing Comments
+================
+
+We can write one line comments and multi-line comments
+
+The comment starts with # or //
+
+Multi-lines comments are written between /* and */
+
+.. code-block:: ring
+
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2016.09.09
+               Author       : Mahmoud Fayed
+       */
+
+       See "What is your name? "       # print message on screen
+       give cName                      # get input from the user
+       see "Hello " + cName            # say hello!
+
+       // See "Bye!"
+
+.. note:: Using // to comment a lines of code is just a code style.
+
+
+
diff --git a/docs/en/source/getting_started2.txt b/docs/en/source/getting_started2.txt
new file mode 100644 (file)
index 0000000..d5e5d58
--- /dev/null
@@ -0,0 +1,149 @@
+.. index:: 
+       single: Getting Started - Second Style; Introduction
+
+==============================
+Getting Started - Second Style
+==============================
+
+.. index:: 
+       pair: Getting Started - Second Style; Hello World
+
+Hello World
+===========
+
+The next program prints the Hello World message on the screen (std-out).
+
+.. code-block:: ring
+
+       put "Hello World"
+
+.. index:: 
+       pair: Getting Started - Second Style; Run the program
+
+Run the program
+===============
+
+to run the program, save the code in a file, for example : hello.ring
+then from the command line or terminal, run it using Ring
+
+.. code-block:: ring
+
+       ring hello.ring
+
+.. index:: 
+       pair: Getting Started - Second Style; Create Executable File
+
+Create Executable File
+======================
+
+Using Ring2EXE we can create executable file for our application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+.. index:: 
+       pair: Getting Started - Second Style; Not Case-Sensitive
+
+Not Case-Sensitive
+==================
+
+Since the Ring language is not case-sensitive, the same program can
+be written in different styles
+
+.. tip:: It's better to select one style and use it in all of the program source code
+
+.. code-block:: ring
+
+       PUT "Hello World"
+
+.. code-block:: ring
+
+       Put "Hello World"
+
+
+.. index:: 
+       pair: Getting Started - Second Style; Multi-Line literals
+
+Multi-Line literals
+===================
+
+Using Ring we can write multi-line literal, see the next example
+
+.. code-block:: ring
+
+       Put "
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           "
+
+Also you can use the nl variable to insert new line
+and you can use the + operator to concatenate strings
+
+As we have NL for new lines, we have Tab and CR (Carriage return) too!
+
+.. note:: nl value means a new line and the actual codes that
+        represent a newline is different between operating systems
+
+.. code-block:: ring
+
+       Put "Hello" + nl + "Welcome to the Ring programming language" + 
+           nl + "How are you?"
+
+.. index:: 
+       pair: Getting Started - Second Style; Getting Input
+
+Getting Input
+=============
+
+You can get the input from the user using the get command
+
+.. code-block:: ring
+
+       Put "What is your name? "
+       Get cName
+       Put "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - Second Style; No Explicit End For Statements
+
+No Explicit End For Statements
+==============================
+
+You don't need to use ';' or press ENTER to separate statements.
+The previous program can be written in one line.
+
+.. code-block:: ring
+
+       Put "What is your name? " get cName put "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - Second Style; Writing Comments
+
+Writing Comments
+================
+
+We can write one line comments and multi-line comments
+
+The comment starts with # or //
+
+Multi-lines comments are written between /* and */
+
+.. code-block:: ring
+
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2016.09.09
+               Author       : Mahmoud Fayed
+       */
+
+       Put "What is your name? "       # print message on screen
+       get cName                       # get input from the user
+       put "Hello " + cName            # say hello!
+
+       // Put "Bye!"
+
+.. note:: Using // to comment a lines of code is just a code style.
\ No newline at end of file
diff --git a/docs/en/source/getting_started3.txt b/docs/en/source/getting_started3.txt
new file mode 100644 (file)
index 0000000..891bf4b
--- /dev/null
@@ -0,0 +1,179 @@
+.. index:: 
+       single: Getting Started - Third Style; Introduction
+
+==============================
+Getting Started - Third Style
+==============================
+
+.. index:: 
+       pair: Getting Started - Third Style; Hello World
+
+Hello World
+===========
+
+The next program prints the Hello World message on the screen (std-out).
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       print("Hello World")
+
+.. index:: 
+       pair: Getting Started - Third Style; Run the program
+
+Run the program
+===============
+
+to run the program, save the code in a file, for example : hello.ring
+then from the command line or terminal, run it using Ring
+
+.. code-block:: ring
+
+       ring hello.ring
+
+.. index:: 
+       pair: Getting Started - Third Style; Create Executable File
+
+Create Executable File
+======================
+
+Using Ring2EXE we can create executable file for our application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+The -static option will avoid the need to ring.dll|ring.so|ring.dylib
+
+But since the stdlib.ring load libraries like (LibCurl, OpenSSL, MySQL, etc)
+
+You will need these libraries!
+
+To avoid the need to these libraries (If you don't need stdlib classes)
+
+Use stdlibcore.ring instead of stdlib.ring as in the next example
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       print("Hello World")
+
+Using stdlibcore.ring You can access the stdlib functions but not the stdlib classes.
+
+if you want to use stdlib.ring and distribute your application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -dist -allruntime -noqt -noallegro
+
+.. index:: 
+       pair: Getting Started - Third Style; Not Case-Sensitive
+
+Not Case-Sensitive
+==================
+
+Since the Ring language is not case-sensitive, the same program can
+be written in different styles
+
+.. tip:: It's better to select one style and use it in all of the program source code
+
+.. code-block:: ring
+
+       LOAD "stdlib.ring"
+       PRINT("Hello World")
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("Hello World")
+
+
+.. index:: 
+       pair: Getting Started - Third Style; Multi-Line literals
+
+Multi-Line literals
+===================
+
+Using Ring we can write multi-line literal, see the next example
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           ")
+
+Also you can use the \\n to insert new line
+and you can use #{variable_name} to insert variables values.
+
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print( "Hello\nWelcome to the Ring programming language\nHow are you?")
+
+.. index:: 
+       pair: Getting Started - Third Style; Getting Input
+
+Getting Input
+=============
+
+You can get the input from the user using the getstring() function
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("What is your name? ")
+       cName = GetString()
+       Print("Hello #{cName}")
+
+.. index:: 
+       pair: Getting Started - Third Style; No Explicit End For Statements
+
+No Explicit End For Statements
+==============================
+
+You don't need to use ';' or press ENTER to separate statements.
+The previous program can be written in one line.
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("What is your name? ") cName=getstring() print("Hello #{cName}")
+
+.. index:: 
+       pair: Getting Started - Third Style; Writing Comments
+
+Writing Comments
+================
+
+We can write one line comments and multi-line comments
+
+The comment starts with # or //
+
+Multi-lines comments are written between /* and */
+
+.. code-block:: ring
+
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2016.09.09
+               Author       : Mahmoud Fayed
+       */
+
+       Load "stdlib.ring"
+
+       Print("What is your name? ")    # print message on screen
+       cName=GetString()               # get input from the user
+       print("Hello #{cName}")         # say hello!
+
+       // print("Bye!")
+
+.. note:: Using // to comment a lines of code is just a code style.
+
diff --git a/docs/en/source/gm800lefd.png b/docs/en/source/gm800lefd.png
new file mode 100644 (file)
index 0000000..4252a81
Binary files /dev/null and b/docs/en/source/gm800lefd.png differ
diff --git a/docs/en/source/gmleveleditor.png b/docs/en/source/gmleveleditor.png
new file mode 100644 (file)
index 0000000..f0e76ef
Binary files /dev/null and b/docs/en/source/gmleveleditor.png differ
diff --git a/docs/en/source/gmshot1.png b/docs/en/source/gmshot1.png
new file mode 100644 (file)
index 0000000..88caabf
Binary files /dev/null and b/docs/en/source/gmshot1.png differ
diff --git a/docs/en/source/gmshot2.png b/docs/en/source/gmshot2.png
new file mode 100644 (file)
index 0000000..3c5e51a
Binary files /dev/null and b/docs/en/source/gmshot2.png differ
diff --git a/docs/en/source/gmshot3.png b/docs/en/source/gmshot3.png
new file mode 100644 (file)
index 0000000..527382b
Binary files /dev/null and b/docs/en/source/gmshot3.png differ
diff --git a/docs/en/source/go.png b/docs/en/source/go.png
new file mode 100644 (file)
index 0000000..dbbadb9
Binary files /dev/null and b/docs/en/source/go.png differ
diff --git a/docs/en/source/goldmagic800.txt b/docs/en/source/goldmagic800.txt
new file mode 100644 (file)
index 0000000..f9ab836
--- /dev/null
@@ -0,0 +1,107 @@
+.. index:: 
+       single: The Gold Magic 800 Game; Introduction
+
+=======================
+The Gold Magic 800 Game
+=======================
+
+In this chapter we will learn about the Gold Magic 800 Game
+
+The game is developed using Ring, RingAllegro and RingOpenGL
+
+You will find the game in ring/applications/goldmagic800 folder
+
+.. index:: 
+       pair: The Gold Magic 800 Game; The Game Story
+
+The Game Story
+==============
+
+Your friend discovered a unique and special box, created by the best wizard in the world 7000 years ago,
+when you close this box and move it; you will find a new gold under the box, it's an infinite source
+of gold. 
+The Box exists in a special environment full of puzzles, no one can enter this environment 
+because it's protected by the magic. 
+Your friend created a new robot using nanotechnology that can move the box using a remote control device.
+Your mission is to solve all of these puzzles and get this box forever to be the richest people in the world.
+
+.. index:: 
+       pair: The Gold Magic 800 Game; How to play?
+
+How to play?
+============
+
+The Gold Magic 800 is a puzzle game that will teach your unconscious mind to think like an entrepreneur.
+
+The game is based on moving your box around to get gold score (=800) to open the 
+First Door (Box Number 1) Then directly put your box on the Door (this will open the next door), 
+Then continue to put your box on all of the next doors in the level, You need the score (800) only
+for the first door, The next doors doesn't require this condition, but your way of gold will be
+converted to a wall once you put the Box on any door, so select your path carefully. 
+
+.. index:: 
+       pair: The Gold Magic 800 Game; What will you learn?
+
+What will you learn?
+====================
+
+1- Plan First
+
+2- Move to your target directly then go to get the required resources
+
+3- Look to the future when you evaluate the different solutions
+
+4- Try to avoid mistakes, Also learn from them
+
+5- Respect the Cost (800)
+
+6- Focus and be careful
+
+7- Be patient and Enjoy!
+
+.. index:: 
+       pair: The Gold Magic 800 Game; Screen Shots
+
+Screen Shots
+============
+
+We can select the level
+
+.. image:: gmshot2.png
+       :alt: Gold Magic 800 - Screen Shot 2
+
+The next screen shot for level (1)
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 - Screen Shot 3
+
+The Gold Magic 800 Level Editor 
+
+.. image:: gmleveleditor.png
+       :alt: Gold Magic 800 Level Editor
+
+
+.. index:: 
+       pair: The Gold Magic 800 Game; Source Code
+
+Source Code
+===========
+
+You will find the Level Editor source code in this folder
+
+https://github.com/ring-lang/ring/tree/master/applications/goldmagic800/editor
+
+The user interface of the Level Editor is designed using the Ring Form Designer.
+
+.. image:: gm800lefd.png
+       :alt: Gold Magic 800 Level Editor
+
+The next file contains the Level Editor Controller Class
+
+https://github.com/ring-lang/ring/blob/master/applications/goldmagic800/editor/editorController.ring
+
+You will find the Game Engine source code in this folder
+
+https://github.com/ring-lang/ring/tree/master/applications/goldmagic800
+
+
diff --git a/docs/en/source/index.txt b/docs/en/source/index.txt
new file mode 100644 (file)
index 0000000..b6d0d92
--- /dev/null
@@ -0,0 +1,137 @@
+.. Ring documentation master file, created by
+   sphinx-quickstart on Sun May 03 10:07:42 2015.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to Ring's documentation!
+================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   Applications developed in little hours <ringapps>
+   Introduction <introduction>
+   Language Design <languagedesign>
+   What is new in Ring 1.12? <whatisnew12>
+   What is new in Ring 1.11? <whatisnew11>
+   What is new in Ring 1.10? <whatisnew10>
+   What is new in Ring 1.9? <whatisnew9>
+   What is new in Ring 1.8? <whatisnew8>
+   What is new in Ring 1.7? <whatisnew7>
+   What is new in Ring 1.6? <whatisnew6>
+   What is new in Ring 1.5? <whatisnew5>
+   What is new in Ring 1.4? <whatisnew4>
+   What is new in Ring 1.3? <whatisnew3>
+   What is new in Ring 1.2? <whatisnew2>
+   What is new in Ring 1.1? <whatisnew>
+   Building From Source Code <sourcecode>
+   How to contribute? <contribute>
+   Getting Started - First Style <getting_started>
+   Getting Started - Second Style <getting_started2>
+   Getting Started - Third Style <getting_started3>
+   Using Ring Notepad <ringnotepad>
+   Using Other Code Editors <codeeditors>
+   Variables <variables>
+   Operators <operators>
+   Control Structures - First Style <controlstructures>
+   Control Structures - Second Style <controlstructures2>
+   Control Structures - Third Style <controlstructures3>
+   Getting Input <getinput>
+   Functions - First Style <functions>
+   Functions - Second Style <functions2>
+   Functions - Third Style <functions3>
+   Program Structure <programstructure>
+   Lists <lists>
+   Strings <strings>
+   Date and Time <dateandtime>
+   Check Data Type and Conversion <checkandconvert>
+   Mathematical Functions <mathfunc>
+   Files <files>
+   System Functions <systemfunc>
+   Eval() and Debugging <evaldebug>
+   Demo Programs <demo>
+   ODBC Functions <odbc>
+   MySQL Functions <mysql>
+   SQLite Functions <sqlite>   
+   PostgreSQL Functions <postgresql>
+   Security and Internet Functions <secfunc>
+   Object Oriented Programming (OOP) <oop>
+   Functional Programming (FP) <fp>
+   Reflection and Meta-programming <metaprog>
+   Stdlib Functions <stdlib>
+   Stdlib Classes <stdlibclasses>
+   Declarative Programming using Nested Structures <declarative>
+   Natural language programming        <natural>
+   Using the Natural Library <naturallibrary>
+   Web Development (CGI Library) <web>
+   Deploying Web Applications in the Cloud <deployincloud>
+   Using RingLibCurl <libcurl>
+   Using RingZip <ringzip>
+   Using ZeroLib <zerolib>
+   Graphics and 2D Games programming using RingAllegro <allegro>       
+   Using RingLibSDL <libsdl>
+   Using Ringlibuv <libuv>
+   Demo Project - Game Engine for 2D Games <gameengine>        
+   Building Games For Android <gameengineandorid>
+   Using RingOpenGL and RingFreeGLUT for 3D Graphics <usingopengl>
+   Using RingOpenGL and RingAllegro for 3D Graphics <usingopengl2>
+   Demo Project - The Gold Magic 800 Game <goldmagic800>
+   Using RingRayLib <ringraylib>
+   Desktop and Mobile development using RingQt <qt>
+   Building RingQt Applications for Mobile <qtmobile>
+   Objects Library for RingQt Application <ringqtobjects>
+   Using the Form Designer <formdesigner>
+   Multi-language Applications <multilanguage>
+   Using Qt3D <qt3d>
+   Scope Rules for Variables and Attributes <scope>
+   Scope Rules for Functions and Methods <scope2>
+   Syntax Flexibility <syntaxflexibility>
+   The Type Hints Library <typehints>
+   Command Line Options        <compiler>
+   Performance Tips <performancetips>
+   Distributing Ring Applications <distribute>
+   Distributing Ring Applications using Ring2EXE <distribute_ring2exe>
+   The Ring Package Manager (RingPM) <ringpm>
+   Low Level Functions <lowlevel>
+   The Trace Library and the Interactive Debugger <debug>
+   Embedding Ring Language in Ring Programs <ringemb>
+   Tutorial: Ring Extensions in C/C++  <extension_tutorial>
+   Extension using the C/C++ languages <extension>
+   Embedding Ring Language in C/C++ Programs <embedding>
+   Code Generator for wrapping C/C++ Libraries <codegenerator>
+   Create your first extension <ringbeep>
+   Frequently Asked Questions (FAQ) <faq>
+   General Information <generalinfo>
+   Language Reference <reference>
+   RingQt Classes and Methods Reference <qtclassesdoc>
+   RingMurmurHash Functions Reference <ringmurmurhashfuncsdoc>
+   FoxRing Functions Reference <foxringfuncsdoc>
+   BigNumber Functions Reference <bignumber>
+   RingLibCurl Functions Reference <ringlibcurlfuncsdoc>
+   RingLibZip Functions Reference <ringlibzipfuncsdoc>
+   RingConsoleColors Functions Reference <ringconsolecolorsfuncsdoc>
+   RingAllegro Functions Reference <ringallegrofuncsdoc>
+   RingLibSDL Functions Reference <ringlibsdlfuncsdoc>
+   RingLibuv Functions Reference <ringlibuvfuncsdoc>
+   RingFreeGLUT Functions Reference <ringfreeglutfuncsdoc>
+   RingOpenGL (OpenGL 1.1) Functions Reference <ringopengl11funcsdoc>
+   RingOpenGL (OpenGL 1.2) Functions Reference <ringopengl12funcsdoc>
+   RingOpenGL (OpenGL 1.3) Functions Reference <ringopengl13funcsdoc>
+   RingOpenGL (OpenGL 1.4) Functions Reference <ringopengl14funcsdoc>
+   RingOpenGL (OpenGL 1.5) Functions Reference <ringopengl15funcsdoc>
+   RingOpenGL (OpenGL 2.0) Functions Reference <ringopengl20funcsdoc>
+   RingOpenGL (OpenGL 2.1) Functions Reference <ringopengl21funcsdoc>
+   RingOpenGL (OpenGL 3.0) Functions Reference <ringopengl30funcsdoc>
+   RingOpenGL (OpenGL 3.1) Functions Reference <ringopengl31funcsdoc>
+   RingOpenGL (OpenGL 3.2) Functions Reference <ringopengl32funcsdoc>
+   RingOpenGL (OpenGL 3.3) Functions Reference <ringopengl33funcsdoc>
+   RingOpenGL (OpenGL 4.0) Functions Reference <ringopengl40funcsdoc>
+   RingOpenGL (OpenGL 4.1) Functions Reference <ringopengl41funcsdoc>
+   RingOpenGL (OpenGL 4.2) Functions Reference <ringopengl42funcsdoc>
+   RingOpenGL (OpenGL 4.3) Functions Reference <ringopengl43funcsdoc>
+   RingOpenGL (OpenGL 4.4) Functions Reference <ringopengl44funcsdoc>
+   RingOpenGL (OpenGL 4.5) Functions Reference <ringopengl45funcsdoc>
+   RingOpenGL (OpenGL 4.6) Functions Reference <ringopengl46funcsdoc>
+   Resources <resources>
\ No newline at end of file
diff --git a/docs/en/source/introduction.txt b/docs/en/source/introduction.txt
new file mode 100644 (file)
index 0000000..ce41c53
--- /dev/null
@@ -0,0 +1,300 @@
+.. index:: 
+       single: Introduction; Introduction
+
+============
+Introduction
+============
+
+.. image:: thering.jpg
+       :alt: The Ring Programming Language
+
+Welcome to the Ring programming language!
+
+Ring is an Innovative and practical general-purpose multi-paradigm language
+that can be embedded in C/C++ projects, extended using C/C++ code and/or used as standalone language.
+The supported programming paradigms are Imperative, Procedural, Object-Oriented, Functional,
+Meta programming, Declarative programming using nested structures, and Natural programming.
+The language is portable (Windows, Linux, macOS, Android, etc.) and can be used to create
+Console, GUI, Web, Games and Mobile applications. The language is designed to be Simple, Small,
+Flexible and Fast. Its Dynamic Language (Dynamic Typing and Weakly Typed) that compile the source
+code to byte code then execute it by the Ring Virtual Machine, which is integrated with the Ring
+Compiler in one program.
+
+In this chapter we are going to discuss the goals behind the language design and implementation.
+
+.. index:: 
+       pair: Introduction; Motivation
+
+Motivation
+==========
+
+In Nov. 2011, I started to think about creating a new version of the 
+`Programming Without Coding Technology (PWCT) <http://doublesvsoop.sf.net/>`_ software from scratch.
+
+I was interested in creating multi-platform edition of the software beside adding support for
+Web & Mobile development.
+Most of the PWCT source code was written in VFP and the software comes with a simple scripting language for creating the components called (RPWI). 
+The software contains components that support code generation in programming languages 
+like Harbour, C, Supernova & Python.
+
+What I was looking for is a programming language that can be used to build the development 
+environment, provides multi-platform support, more productivity, better performance, can be used for components 
+scripting & can be used for developing different kinds of applications.
+
+Instead of using a mix of programming languages, I decided to use one programming language 
+for creating the development environment, for components scripting & for creating the applications.
+
+I looked at many programming languages like C, C++, Java, C#, Lua, PHP, Python & Ruby. 
+I avoided using C or C++ directly because I want high-level of productivity more than the level
+provided by these languages, also a language behind visual programming environment for novice programmers
+or professionals must be easy to use & productive.
+
+Java & C# are avoided for some reason too!
+I wanted to use a dynamic programming language and these languages are static typing, Java is multi-platform, 
+also C# through Mono, but the use of huge number of classes and forcing the use of Object-Orientation, using
+a verbose language is not right for me. I need a small language, but fast and productive, also I need
+better control on the Garbage Collector (GC), I need a better one that is designed for fast applications.
+
+Lua is small and fast, but it's avoided because I need more powerful language for large applications.
+
+PHP is a Web programming language and it's syntax is very similar to C, this leads to a language not
+general as I want and not simple as I need to have.
+
+Python & Ruby are more like what I need, but I need something more simple, smaller, faster & productive.
+
+Python and Ruby are Case-Sensitive, the list index start counting from 0, you have to define the function
+before calling it, Ruby usage of Object-Orientation and message passing is more than what I need and 
+decrease performance, Python syntax (indentation, using self, :, pass & _) is not good for my goals.
+
+All of these languages are successful languages, and very good for their domains, but what I need 
+is a different language that comes with new ideas and intelligent implementation (Innovative, Ready, Simple, Small, Flexible and Fast).
+
+
+.. index:: 
+       pair: Introduction; Ring and other languages
+
+Ring and other languages
+========================
+
+Ring is an innovative programming language that comes with better support for Natural Language 
+Programming and Declarative Programming.
+The innovation comes in supporting these paradigms with new practical techniques on the top of 
+Object-Oriented Programming and Functional Programming.
+
+Also Ring is influenced by the next programming languages
+
+* Lua
+* Python
+* Ruby
+* C
+* C#
+* BASIC
+* QML
+* xBase
+* Supernova
+
+.. index:: 
+       pair: Introduction; Special Thanks
+
+Special Thanks to Matz
+======================
+
+Special Thanks to Matz (Yukihiro Matsumoto - The Creator of Ruby Programming Language) for spreading
+the word. 
+
+.. image:: matzring.png
+       :alt: Yukihiro Matsumoto tweet about the Ring language
+
+
+.. index:: 
+       pair: Introduction ; History
+
+History
+=======
+
+In Sept. 2013 I started the design and the implementation of the Ring programming language.
+After 21 months of development, In May 2015 the language Compiler & Virtual Machine were ready for use!
+
+After that I spent three months testing the language again, trying to discover any bug to fix, writing better tests,
+by the end of August 2015, all know bugs were fixed, Writing many tests and testing automation helped a lot in 
+getting a stable product.
+
+In September 12, 2015, most of the documentation was written. Before releasing the language I started the marketing by
+writing a post in Arabic language about it to my facebook profile page asking for contributors interested in the language 
+idea after reading a short description, In the same day I got a lot of emails from developers and friends interested to contribute!
+
+Ring 1.0 is released on January 25, 2016
+
+Ring 1.1 is released on October 6, 2016
+
+Ring 1.2 is released on January 25, 2017
+
+Ring 1.3 is released on May 15, 2017
+
+Ring 1.4 is released on June 29, 2017
+
+Ring 1.5 is released on August 21, 2017
+
+Ring 1.6 is released on November 30, 2017
+
+Ring 1.7 is released on January 25, 2018
+
+Ring 1.8 is released on June 25, 2018
+
+Ring 1.9 is released on October 6, 2018
+
+Ring 1.10 is released on January 25, 2019
+
+Ring 1.11 is released on September 15, 2019
+
+Ring 1.12 is released on January 25, 2020
+
+.. index:: 
+       pair: Introduction; Features
+
+Features
+========
+
+The Ring language comes with the next features
+
+.. tip:: The language is ready for production!
+
+* Free Open Source (MIT License)
+* Hybrid Implementation (Compiler + Virtual Machine) 
+* Declarative programming on the top of Object-Oriented programming
+* Natural Language Programming on the top of Object-Oriented programming
+* Natural Language Programming Library
+* Three different styles for writing the code and you can create your style 
+* Syntax Flexibility (You can change the language keywords and operators)
+* The language keywords can be translated from English to other languages (Arabic, French, etc)
+* Compact Syntax, No explicit end for statements (No ; or ENTER is required)
+* Using braces { } we can access objects and use attributes/methods as variables/functions
+* Transparent Implementation (See the Tokens, Grammar, and Byte Code for each program) 
+* Visual Implementation - Developed using Visual Programming (PWCT) 
+* Writen in ANSI C (The code is generated + Looks identical to Handwritten Code)
+* A small language
+       * The compiler + The Virtual Machine (20,000 lines of C code)
+       * The other 500,000 lines of code are related to libraries!
+* Portable (Windows, Linux, macOS, Android, etc)
+* Comments (One line & Multi-lines)
+* Not Case-Sensitive
+* Dynamic Typing
+* Weakly typed (Automatic conversion between numbers and strings only)
+* Lexical Scoping (Global, Local & Object State)
+* Default scope for variables inside functions (Local)
+* Default scope for variables outside functions (global)
+* We can have separate global scope for each library or sub project
+* Garbage Collector - Automatic Memory Management (Escape Analysis and Reference Counting)
+* In most cases (90%) using Escape Analysis we don't need to run the Garbage Collector (Faster)
+* Structure Programming
+* Rich control structures & Operators
+* For in get item by reference not value, you can read/edit the item
+* Use exit to go outside from more than one loop (Use it for programming in the small only)
+* Procedures/Functions
+* Main Function (Optional - To avoid using the Global Scope)
+* Call Function before the definition (Top-Down Programming)
+* Recursion
+* Multi-line literals
+* Access (read/write) string letter by index
+* The list index start by 1
+* No keyword to end Functions/Classes/Packages
+* Range operator ex: 1:10 and "a":"z"
+* First Class Variables, Lists, Objects and Functions
+* Store/Copy Lists/Objects by value (Deep Copy)
+* Pass Lists/Objects by reference
+* Native Object-Oriented Support
+
+       * Encapsulation
+       * Setter/Getter (optional)
+       * private state (optional)
+       * Instantiation
+       * Polymorphism 
+       * Composition 
+       * Inheritance (Single Inheritance)
+       * Operator Overloading
+       * Packages
+
+* Reflection and Meta-programming
+* Clear program structure (Statements then functions then packages & classes)
+* Exception Handling
+* Eval() to execute code during run-time
+* 8-bit clean, work on binary data directly
+* I/O commands
+* Math functions
+* String functions
+* List functions
+* File processing functions
+* Database support (ODBC, SQLite, MySQL & PostgreSQL)
+* Security Functions (OpenSSL)
+* Internet Functions (LibCurl)
+* Zip Functions
+* CGI Library (Written in Ring)
+
+       * HTTP Get
+       * HTTP Post
+       * File upload
+       * Cookies
+       * URL Encode
+       * HTML Templates
+       * HTML Special Characters
+       * HTML Generation using Functions
+       * HTML Generation using Classes
+       * CRUD Example (using MVC)
+       * Users Example (Register, Login and Check)
+
+* Deploying web applications in the Cloud
+* Extension using C/C++ (Simple API)
+* Embedding the language in C/C++ programs
+* Embedding Ring in Ring
+* Comes with code generator (Written in Ring) to quickly wrap C/C++ Libraries
+       * Used to Support Allegro by creating RingAllegro
+       * Used to Support LibSDL by creating RingLibSDL
+       * Used to Support Qt by creating RingQt
+* Create 2D Games for Desktop and Mobile (Using the Allegro Library)
+* RingLibSDL Extension
+* Comes with simple Game Engine for 2D Games
+* RingOpenGL Extension
+* RingFreeGLUT Extension
+* RingRayLib Extension
+* Create GUI Applications for Desktop and Mobile (Using the Qt Framework)
+* Comes with IDE contains the Code Editor (Ring Notepad) and the Form Designer
+* RingREPL (Read-Eval-Print-Loop)
+* Tracing and Debugging
+* Type Hints Library
+* Comes with Ring2EXE to distribute applications
+* RingLibuv Extension
+* No Global Interpreter (VM) lock (No GIL) - Better for threads and concurrency (Faster)
+* Comes with RingPM (Package Manager)
+* Many Samples and Applications
+* Complete Documentation.
+
+License
+=======
+
+The Ring Programming Language
+
+http://ring-lang.net/
+
+Version 1.12
+
+The MIT License (MIT)
+
+Copyright (c) Mahmoud Fayed
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/docs/en/source/juliancalendar.png b/docs/en/source/juliancalendar.png
new file mode 100644 (file)
index 0000000..39d9f40
Binary files /dev/null and b/docs/en/source/juliancalendar.png differ
diff --git a/docs/en/source/knighttour.png b/docs/en/source/knighttour.png
new file mode 100644 (file)
index 0000000..ca88832
Binary files /dev/null and b/docs/en/source/knighttour.png differ
diff --git a/docs/en/source/languagedesign.txt b/docs/en/source/languagedesign.txt
new file mode 100644 (file)
index 0000000..818d5bc
--- /dev/null
@@ -0,0 +1,588 @@
+.. index:: 
+       single: Language Design; Introduction
+
+===============
+Language Design
+===============
+
+In this chapter we will learn about the basic concepts behind the language design.
+
+.. index:: 
+       pair: Language Design; Why Ring?
+
+Why Ring?
+=========
+
+The language is simple, trying to be natural, encourage organization and comes 
+with transparent and visual implementation. It comes with compact syntax and a
+group of features that enable the programmer to create natural interfaces and
+declarative domain-specific languages in a fraction of time. It is very small,
+fast and comes with smart garbage collector that puts the memory under the 
+programmer control. It supports many programming paradigms, comes with useful 
+and practical libraries. The language is designed for productivity and developing
+high quality solutions that can scale.
+
+.. index:: 
+       pair: Language Design; Designed for a clear goal
+
+Designed for a Clear Goal
+=========================
+
+* Applications programming language.
+* Productivity and developing high quality solutions that can scale.
+* Small and fast language that can be embedded in C/C++ projects.
+* Simple language that can be used in education and introducing Compiler/VM concepts.
+* General-Purpose language that can be used for creating domain-specific libraries, frameworks and tools.
+* Practical language designed for creating the next version of the Programming Without Coding Technology software.
+
+.. index:: 
+       pair: Language Design; Simple
+
+Simple
+======
+
+Ring is a very simple language, and has a very straightforward syntax. It encourages programmers to program without boilerplate code
+
+.. code-block:: ring
+
+       See "Hello, World!" 
+
+The Main function is optional and will be executed after the statements, and is useful for using the local scope.
+
+.. code-block:: ring
+
+       Func Main
+               See "Hello, World!" 
+               
+Uses Dynamic Typing and Lexical scoping. No $ is required before the variable name! 
+You can use the '+' operator for string concatenation and the language is weakly typed and will convert automatically between numbers and strings based on the context.
+
+.. code-block:: ring
+
+       nCount = 10     # Global variable
+       Func Main
+               nID = 1 # Local variable
+               See "Count = " + nCount + nl + " ID = " + nID
+
+.. index:: 
+       pair: Language Design; Trying to be natural
+
+Trying to be natural
+====================
+
+Ring is not case-sensitive
+
+.. code-block:: ring
+
+
+       See "Enter your name ? " 
+       Give name
+       See "Hello " + Name     # Name is the same as name 
+                       
+The list index starts from 1
+
+.. code-block:: ring
+
+       aList = ["one","two","three"]
+       See aList[1]    # print one
+                       
+Call functions before definition
+
+.. code-block:: ring
+
+
+       one() 
+       two() 
+       three()
+       Func one 
+               See "One" + nl
+       Func two 
+               See "two" + nl
+       Func three 
+               See "three" + nl
+                       
+The assignment operator uses Deep copy (no references in this operation)
+
+.. code-block:: ring
+
+       aList = ["one","two","three"]
+       aList2 = aList
+       aList[1] = 1
+       see alist[1]    # print 1
+       see aList2[1]   # print one
+                               
+Pass numbers and strings by value, but pass lists and objects by reference. 
+The for in loop can update the list items.
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3]
+               update(aList)
+               see aList       # print one two three
+
+       Func update aList
+               for x in aList
+                       switch x
+                       on 1 x = "one"
+                       on 2 x = "two"
+                       on 3 x = "three"
+                       off
+               next
+                       
+Using Lists during definition
+
+.. code-block:: ring
+
+       aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
+       see aList       # print 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
+                       
+Exit from more than one loop
+
+.. code-block:: ring
+
+       for x = 1 to 10
+                       for y = 1 to 10
+                                       see "x=" + x + " y=" + y + nl
+                                       if x = 3 and y = 5
+                                                       exit 2     # exit from 2 loops
+                                       ok
+                       next
+       next
+       
+.. index:: 
+       pair: Language Design; Encourage Organization
+
+Encourage Organization
+======================
+
+The language encourage organization, Forget bad days using languages where the programmer start with function then class then function and a strange mix between things! 
+
+Each source file follow the next structure 
+
+* Load Files
+* Statements and Global Variables
+* Functions
+* Packages and Classes
+
+This enable us to use Packages, Classes and Functions without the need to use a keyword to end these components. 
+
+We can write one line comments and multi-line comments 
+The comment starts with # or // 
+Multi-line comments are written between /* and */
+
+.. code-block:: ring
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2015.05.08
+       */
+
+       See "What is your name? "       # print message on screen
+       give cName                      # get input from the user
+       see "Hello " + cName            # say hello!
+
+       // See "Bye!"
+                               
+
+.. index:: 
+       pair: Language Design; Compact Syntax
+
+Compact Syntax
+==============
+
+The language is not line sensitive, you don't need to write ; after statements, also you don't need to press ENTER or TAB, so we can write the next code
+
+.. code-block:: ring
+
+
+       See "The First Message" See " Another message in the same line! " + nl
+       See "Enter your name?" Give Name See "Hello " + Name
+                       
+The next code create a class called Point contains three attributes X,Y and Z. No keywords is used to end the package/class/function definition. Also, we can write the attributes names directly below the class name.
+
+.. code-block:: ring
+
+       Class Point X Y Z
+                       
+We can use classes and functions before their definition, In this example we will create new object, set the object attributes then print the object values.
+
+.. code-block:: ring
+
+       o1 = New point  o1.x=10    o1.y=20   o1.z=30    See O1  Class Point X Y Z
+                       
+Instead of using the dot '.' operator to access the object attributes and methods we can use braces { } to access the object, then we can use the object attributes and methods.
+
+.. code-block:: ring
+
+       o1 = New point { x=10 y=20 z=30 } See O1  Class Point X Y Z
+                        
+Now we will call a method after accessing the object using { }
+
+.. code-block:: ring
+
+        
+       oPerson = new Person
+       {
+               Name = "Somebody"
+               Address = "Somewhere"
+               Phone = "0000000"
+               Print()                 # here we call the Print() method
+       }
+       Class Person Name Address Phone
+               Func Print
+                       See "Name :" + name + nl +
+                               "Address :" + Address + nl +
+                               "Phone : " + phone + nl
+
+When we use { } to access the object then write any attribute name, the language will check the class for any setter/getter methods that will be called automatically.
+
+.. code-block:: ring
+
+
+       New Number {
+                       See one         # Execute GetOne()
+                       See two         # Execute GetTwo()
+                       See three       # Execute GetThree()
+       }
+       Class Number one two three
+               Func GetOne
+                       See "Number : One" + nl
+                       return 1
+               Func GetTwo
+                       See "Number : Two" + nl
+                       return 2
+               Func GetThree
+                       See "Number : Three" + nl
+                       return 3        
+                       
+.. index:: 
+       pair: Language Design; Define Natural Statements
+
+Define Natural Statements
+=========================
+
+After the object access using { } if the class contains a method called BraceEnd() it will be executed!
+
+.. code-block:: ring
+
+
+       TimeForFun = new journey
+       # The first surprise!
+       TimeForFun {
+               Hello it is me          # What a beatiful programming world!
+       }
+       # Our Class
+       Class journey
+               hello=0 it=0 is=0 me=0
+               func GetHello
+                       See "Hello" + nl
+               func braceEnd
+                       See "Goodbye!" + nl
+
+We can execute code written in strings using the Eval() function
+
+.. code-block:: ring
+
+
+       cCode = "See 'Code that will be executed later!' "
+       Eval(cCode)     # execute the code to print the message
+
+We can create a list then execute code generated from that list
+
+.. code-block:: ring
+
+       aWords = ["hello","it","is","me"]
+       for word in aWords cCode=word+"=0" eval(cCode) next
+
+We can read text files using the Read(cFileName) function and we can write files using the Write(cFileName,cString) function.
+
+.. code-block:: ring
+
+       See "Enter File Name:" Give cFileName See Read(cFileName) # Print the file content
+
+The next example presents how to create a class that defines two instructions
+The first instruction is : I want window
+The second instruction is : Window title = Expression 
+Also keywords that can be ignored like the ‘the’ keyword 
+
+.. code-block:: ring
+
+
+       New App
+       {
+               I want window
+               The window title = "hello world"
+       }
+
+       Class App
+
+               # Attributes for the instruction I want window
+                       i want window
+                       nIwantwindow = 0
+               # Attributes for the instruction Window title
+               # Here we don't define the window attribute again
+                       title
+                       nWindowTitle = 0
+               # Keywords to ignore, just give them any value
+                       the=0
+
+               func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+               func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+               func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+               func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+               
+To complete the previous example, use read() to get the content of a file that contains
+
+.. code-block:: ring
+
+       I want window
+       The window title = "hello world"
+
+Then use eval() to execute the content of that file!.
+Also, you can update the methods GetWindow() and SetTitle() to create Real windows using the GUI Library
+
+
+.. index:: 
+       pair: Language Design; Define Declarative Languages
+
+Define Declarative Languages
+============================
+
+
+We learned how to use Natural statements to execute our code and using the same features we can use nested structures to execute our code.
+
+The next example from the Web library, generate HTML document using the Bootstrap library. No HTML code is written directly in this example, we created a similar language (just as example) Then using this declarative language that uses nested structures, we generated the HTML Document.. 
+The idea in this example is that the GetDiv() and GetH1() methods return an object that we can access using {} and after each object access the method BraceEnd() will be executed to send the generated HTML to the parent object until we reach to the root where BraceEnd() will print the output.
+
+.. code-block:: ring
+
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+
+         BootStrapWebPage()
+         {
+               div
+               {
+                 classname = :container
+                 div
+                 {
+                       classname = :jumbotron
+                       H1 {   text("Bootstrap Page")   }
+                 }
+                 div
+                 {
+                       classname = :row
+                       for x = 1 to 3
+                         div
+                         {
+                           classname = "col-sm-4"
+                           H3 { html("Welcome to the Ring programming language") }
+                           P  { html("Using a scripting language is very fun!") }
+                         }
+                       next
+                 }
+               }
+         }
+
+The classes that power the declarative interface looks like this
+
+.. code-block:: ring
+
+       Class Link from ObjsBase
+               title  link
+               Func braceend                   
+                       cOutput = nl+GetTabs() + "<a href='" + 
+                                 Link + "'> "+ Title + " </a> " + nl                   
+
+       Class Div from ObjsBase 
+               Func braceend
+                       cOutput += nl+'<div'
+                       addattributes()
+                       AddStyle()
+                       getobjsdata()
+                       cOutput += nl+"</div>" + nl
+                       cOutput = TabMLString(cOutput)
+
+.. index:: 
+       pair: Language Design; Syntax Flexibility
+
+Syntax Flexibility
+==================
+
+Ring comes with many styles for writing your source code!
+
+Also you can change the language keywords and operators and create your custom style!
+
+        
+.. index:: 
+       pair: Language Design; Transparent Implementation
+
+Transparent Implementation
+==========================
+
+Ring comes with transparent implementation. We can know what is happening in each compiler stage and what is going on during the run-time by the Virtual Machine Example : ring helloworld.ring -tokens -rules -ic
+
+.. code-block:: ring
+
+       See "Hello, World!" 
+                       
+Output
+
+.. code-block:: ring
+
+
+       ==================================================================
+       Tokens - Generated by the Scanner
+       ==================================================================
+
+          Keyword : SEE
+          Literal : Hello, World!
+          EndLine
+
+       ==================================================================
+
+       ==================================================================
+       Grammar Rules Used by The Parser
+       ==================================================================
+
+       Rule : Program --> {Statement}
+
+       Line 1
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       ==================================================================
+
+
+
+       ==================================================================
+       Byte Code - Before Execution by the VM
+       ==================================================================
+
+                PC      OPCode        Data
+
+                 1     FuncExE
+                 2       PushC   Hello, World!
+                 3       Print
+                 4  ReturnNull
+
+       ==================================================================
+
+       Hello, World!
+                               
+.. index:: 
+       pair: Language Design; Visual Implementation
+
+Visual Implementation
+=====================
+
+The Ring programming language is designed using the PWCT visual programming tool 
+and you will find the visual source of the language in the folder "visualsrc" - *.ssf 
+files and the generated source code (In the C Language) in the src folder and 
+the include folder.
+
+The next screen shot from the ring_vm.ssf file (Generate ring_vm.c and ring_vm.h) 
+
+.. image:: visualsrc1.jpg
+
+The next screen shot from the ring_list.ssf file (Generate ring_list.c and ring_list.h) 
+
+.. image:: visualsrc2.JPG
+
+.. index:: 
+       pair: Language Design; Smart Garbage Collector
+
+Smart Garbage Collector
+=======================
+
+Avoid memory problems :- 
+
+* Invalid Memory Access
+* Memory leaks
+* Uninitialized Memory Access
+* Dangling pointer
+
+Rules :- 
+
+* Global variables always stay in the memory, until you delete these variables using the assignment statement.
+* Local variables always deleted after the end of the function.
+* The programmer have full control on when to delete the variable from the memory using the Assignment statement.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [1,2,3,4,5]
+       aList = "nice"
+                       
+After the second line directly, The list [1,2,3,4,5] will be deleted from the memory and we will have a string "nice" 
+
+* The programmer can call the function callgc() to force running the garbage collector.
+* If we have a reference to a variable (when we pass objects and lists to functions), then deleting variables will be based on reference counting, if no references everything will be deleted, but if we have a reference, the data will stay in memory.
+
+
+.. index:: 
+       pair: Language Design; No Global Interpreter (VM) Lock - No GIL
+
+No Global Interpreter (VM) Lock - No GIL
+========================================
+
+When we use threads in Ring applications, We don't have global interpreter (VM) lock (No GIL)
+
+So threads can work in parallel and execute Ring instructions at the same time
+
+This is better for threads and concurrency (More Faster!)
+
+.. index:: 
+       pair: Language Design; Fast Enough For Many Applications
+
+Fast Enough For Many Applications
+=================================
+
+Ring is designed to be a simple, small and flexible language in the first place, but also it is fast enough for many applications.
+
+Ring can do each of the next tasks in around 1 second using normal computers in the market during the last 5 years
+
+(1) Compiling 100,000 lines of code
+(2) Executing empty loop that count from 1 to 10,000,000
+(3) Executing 1000 search operation using linear search in a list contains 100,000 items, trying to find the last item (The worst case)
+(4) Creating list contains 1,000,000 items then summing all of the list items
+(5) Adding 20,000 items to the ListWidget in GUI applications
+(6) Adding 5,000 nodes to the TreeWidget in GUI applications
+(7) Printing 10,000 messages to the terminal in Console applications
+
+Also when we need more speed we can use C/C++ extensions! 
\ No newline at end of file
diff --git a/docs/en/source/libcurl.txt b/docs/en/source/libcurl.txt
new file mode 100644 (file)
index 0000000..4bb3ace
--- /dev/null
@@ -0,0 +1,209 @@
+.. index:: 
+       single: RingLibCurl; Introduction
+
+=================
+Using RingLibCurl
+=================
+
+In this chapter we will learn about using RingLibCurl
+
+.. index:: 
+       pair: RingLibCurl; Get Request
+
+Get Request
+===========
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"     
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_URL, "http://ring-lang.sf.net")
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+
+.. index:: 
+       pair: RingLibCurl; Post Request
+
+Post Request
+============
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       cPostThis = "page=4&Number1=4&Number2=5"
+       curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3")
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+.. index:: 
+       pair: RingLibCurl; Facebook Login
+
+Facebook Login 
+==============
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       see "Enter Email : " give $login_email 
+       See "Enter Password : " give $login_pass
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_URL, 'https://www.facebook.com/login.php')
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS,'charset_test=j u s t a t e s t'+
+       ' &email='+urlencode($login_email)+'&pass='+
+       urlencode($login_pass)+'&login=Login')
+       curl_easy_setopt(curl, CURLOPT_POST, 1)
+       curl_easy_setopt(curl, CURLOPT_HEADER, 0)
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt")
+       curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt")
+       curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U;"+
+       " Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3")
+       curl_easy_setopt(curl, CURLOPT_REFERER, "http://www.facebook.com")
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE)
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2)
+
+       mylist = curl_slist_append(NULL,'Accept-Charset: utf-8')
+       curl_slist_append(mylist,'Accept-Language: en-us,en;q=0.7,bn-bd;q=0.3')
+       curl_slist_append(mylist,'Accept: text/xml,application/xml,'+
+       'application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5')
+       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, mylist)
+
+       curl_easy_setopt(curl, CURLOPT_COOKIESESSION, false)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+       Func URLEncode cStr
+               cOut = ""
+               for x in cStr
+                       if isalnum(x)
+                               cOut += x
+                       but x = " "
+                               cOut += "+"
+                       else
+                               cOut += "%"+str2hex(x)
+                       ok
+               next
+               return cOut     
+
+.. index:: 
+       pair: RingLibCurl; Save output to string
+
+Save Output to String
+=====================
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_URL, "http://ring-lang.sf.net")
+
+       cOutput = curl_easy_perform_silent(curl)
+
+       See "Output:" + nl
+       see cOutput
+
+       curl_easy_cleanup(curl)
+
+.. index:: 
+       pair: RingLibCurl; Get Stock Data From Yahoo
+
+Get Stock Data From Yahoo
+=========================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libcurl.ring"
+
+       ### Part 1 --- Get Crumb and Cookie -----------------------------------------
+
+       See "Start curl_easy_init(): "+ nl
+       curl = curl_easy_init()                     ### >>> HANDLE >>> 01006BD0  CURL  0
+
+               curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+               curl_easy_setopt(curl, CURLOPT_COOKIEJAR,  "cookies.txt")
+               curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt")
+               curl_easy_setopt(curl, CURLOPT_URL, "https://finance.yahoo.com/quote/AMZN/history")
+
+               ###  HTML Data >>> STDOUT Window,  Use curl_easy_perform_silent >>> String
+
+       cOutput = curl_easy_perform_silent(curl)    ### GO Get Data >>> String
+
+
+       ###   Extract Crumb from data
+       ###  "CrumbStore":{"crumb":"abcdefghijk"},
+
+       if cOutput != NULL
+
+               newStr1     = substr(cOutput, substr(cOutput, '"CrumbStore":{"crumb":"' ), 48 )
+                       nPosS   = substr(newStr1, ':"' ) ;  ### Start of crumb -2
+                       nPosE   = substr(newStr1, '"}' ) ;  ### End   of crumb
+                       nCount  = nPosE - nPosS -2          ### size  of crumb
+               myCrumb     = substr(newStr1, nPosS +2, nCount)
+
+               See "myCrumb.: |"+ myCrumb +"|" +nl
+               
+               ### UniCode "\u002F" replace it with "/"
+                       if substr( myCrumb, "\u002F")
+                          myCrumb = substr( myCrumb, "\u002F", "/")
+                          See "myCrumb2: |"+ myCrumb +"|"+ nl
+                       ok
+
+       else
+               See "No Connectivity to Yahoo. Looking for Cookie and Crumb." +nl +nl
+       ok
+
+                                       
+       ### Part 2 --- Send URL with Crumb, and Cookie -----------------------------------------
+
+               ### Send URL+Crumb to Yahoo to fetch 1st stock history data,
+
+               $url = "https://query1.finance.yahoo.com/v7/finance/download/AMZN"+
+                       "?period1=1277856000&period2=1498777545&interval=1wk" + 
+                       "&events=history&crumb=" + myCrumb
+
+               curl_easy_setopt(curl, CURLOPT_URL, $url);
+               cStr = curl_easy_perform_silent(curl)
+               See cStr 
+
+       curl_easy_cleanup(curl)  ### REMEMBER to CLOSE  CURL   
+
+
+Output:
+
+.. code-block:: ring
+
+       myCrumb.: |sEEeW97mxvN|
+       Date,Open,High,Low,Close,Adj Close,Volume
+       2010-07-05,110.650002,117.480003,109.000000,117.260002,117.260002,21000400
+       2010-07-12,117.809998,124.879997,117.320000,118.489998,118.489998,29407300
+       2010-07-19,118.379997,121.250000,105.800003,118.870003,118.870003,74252100
diff --git a/docs/en/source/libsdl.txt b/docs/en/source/libsdl.txt
new file mode 100644 (file)
index 0000000..5d269be
--- /dev/null
@@ -0,0 +1,387 @@
+.. index:: 
+       single: RingLibSDL; Introduction
+
+=================
+Using RingLibSDL
+=================
+
+In this chapter we will learn about using RingLibSDL to create games based on the
+LibSDL, SDLImage, SDLTTF and SDLMixer libraries.
+
+.. tip:: RingLibSDL is not distributed with the binary releases for desktop which uses RingAllegro
+
+.. note:: To use RingLibSDL, Check ring/android/ringlibsdl folder.
+
+.. index:: 
+       pair: RingLibSDL; Create Window
+
+Create Window
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       SDL_Delay(2000)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Display Image
+
+Display Image
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = SDL_LoadBMP("hello.bmp")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy2(ren,tex)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyTexture(tex)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Switch Between Two Images
+
+Switch between two images
+=========================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = SDL_LoadBMP("hello.bmp")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       bmp = SDL_LoadBMP("hello2.bmp")
+       tex2 = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+
+       for x = 1 to 10 showtex(tex) showtex(tex2) next
+
+       SDL_DestroyTexture(tex)
+       SDL_DestroyTexture(tex2)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+       func showtex oTex
+               SDL_RenderClear(ren)
+               SDL_RenderCopy2(ren,oTex)
+               SDL_RenderPresent(ren)
+               SDL_Delay(200)
+
+.. index:: 
+       pair: RingLibSDL; Draw Rectangle
+
+Draw Rectangle
+==============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       SDL_RenderClear(ren)
+       rect = sdl_new_sdl_rect()
+       sdl_set_sdl_rect_x(rect,10)
+       sdl_set_sdl_rect_y(rect,10)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_SetRenderDrawColor(ren,255,255,255,255)
+       SDL_RenderDrawRect(ren,rect)
+       sdl_destroy_sdl_rect(rect)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Display PNG Images
+
+Display PNG Images
+==================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = IMG_Load("hello3.png")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy2(ren,tex)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyTexture(tex)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Use TTF Fonts
+
+Use TTF Fonts
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       SDL_RenderClear(ren)
+
+       TTF_Init()
+       font = TTF_OpenFont("pirulen.ttf", 16)
+       color = sdl_new_sdl_color()
+       sdl_set_sdl_color_r(color,0)
+       sdl_set_sdl_color_g(color,255)
+       sdl_set_sdl_color_b(color,0)
+       text = TTF_RenderText_Solid(font,"Welcome to the Ring language",color)
+       surface = SDL_GetWindowSurface(win)
+       SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+       SDL_UpdateWindowSurface(win)
+       SDL_Delay(2000)
+
+       SDL_Destroy_SDL_Color(color)
+       SDL_FreeSurface(text)
+       TTF_CloseFont(font)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Display Transparent Images
+
+Display Transparent Images
+==========================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+
+       flags = IMG_INIT_JPG | IMG_INIT_PNG
+       IMG_Init(flags)
+
+       win = SDL_CreateWindow("Hello World!", 100, 100, 800, 600, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+
+       bmp = IMG_Load("stars.jpg")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy(ren,tex,nullpointer(),nullpointer())
+       SDL_DestroyTexture(tex)
+
+       bmp = IMG_Load("player.png")
+       # Image - Set Transparent color (white)
+       myformat = sdl_get_sdl_surface_format(bmp)
+       white = SDL_MapRGB(myformat, 255, 255, 255)
+       SDL_SetColorKey(bmp, SDL_True, white)
+
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       rect = sdl_new_sdl_rect()
+       sdl_set_sdl_rect_x(rect,0)
+       sdl_set_sdl_rect_y(rect,0)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_RenderCopy(ren,tex,nullpointer(),rect)
+
+       SDL_SetTextureBlendMode(tex,2)
+       SDL_SetTextureAlphaMod(tex,255)
+       sdl_set_sdl_rect_x(rect,200)
+       sdl_set_sdl_rect_y(rect,200)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_RenderCopy(ren,tex,nullpointer(),rect)
+
+       SDL_DestroyTexture(tex)
+       SDL_Destroy_SDL_Rect(rect)
+
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Close Window Event
+
+Close Window Event
+==================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               thevent = sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on sdl_get_sdl_quit()
+                               exit
+                       on sdl_get_sdl_keydown()
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok
+                               
+               off
+       end
+
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Mouse Events
+
+Mouse Events
+============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+
+       win = SDL_CreateWindow("Mouse Events ", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+
+       TTF_Init()
+       font = TTF_OpenFont("pirulen.ttf", 16)
+       color = sdl_new_sdl_color()
+       sdl_set_sdl_color_r(color,0)
+       sdl_set_sdl_color_g(color,255)
+       sdl_set_sdl_color_b(color,0)
+
+       surface = SDL_GetWindowSurface(win)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               cMsg = ""
+               sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on SDL_QUIT
+                               exit
+                       on SDL_KEYDOWN
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok
+                       on SDL_MOUSEBUTTONDOWN
+                               if sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_LEFT
+                                       SDL_SETWINDOWTITLE(win, " Button_Left_Down " )
+                               but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_MIDDLE
+                                       SDL_SETWINDOWTITLE(win,  " Button_Middle_Down " )
+                               but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_RIGHT
+                                       SDL_SETWINDOWTITLE(win,  " Button_Right_Down " )
+                               ok
+                       on SDL_MOUSEMOTION
+                               sdl_fillrect(surface,nullpointer(),0)
+                               if sdl_get_sdl_event_motion_xrel(myevent) < 0
+                                       cMsg += " Left "
+                               else
+                                       cMsg += " Right "
+                               ok                      
+                               if sdl_get_sdl_event_motion_yrel(myevent) < 0
+                                       cMsg += " Up "
+                               else
+                                       cMsg += " Down "
+                               ok      
+                               cMsg += " x = " + sdl_get_sdl_event_motion_x(myevent)
+                               cMsg += " y = " + sdl_get_sdl_event_motion_y(myevent)
+                               showmsg(cMsg)   
+               off
+       end
+
+       SDL_Destroy_SDL_Color(Color)
+       TTF_CloseFont(font)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+       func showmsg mymsg
+               text = TTF_RenderText_Solid(font,mymsg,color)
+               SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+               SDL_UpdateWindowSurface(win)
+               SDL_FreeSurface(text)
+
+.. index:: 
+       pair: RingLibSDL; Play Sound
+
+Play Sound
+==========
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT , 2, 10000)
+       Mix_AllocateChannels(4)
+       sound = Mix_LoadWav( "sound.wav" )
+       Mix_VolumeChunk(sound,1)
+       Mix_PlayChannel(1,sound,0)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               thevent = sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on sdl_get_sdl_quit()
+                               exit
+                       on sdl_get_sdl_keydown()
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok                     
+               off
+       end
+
+       Mix_FreeChunk( sound )
+       Mix_CloseAudio()
+       Mix_Quit()
+       SDL_DestroyWindow(win)
+       SDL_Quit()
\ No newline at end of file
diff --git a/docs/en/source/libuv.txt b/docs/en/source/libuv.txt
new file mode 100644 (file)
index 0000000..e02844a
--- /dev/null
@@ -0,0 +1,507 @@
+.. index:: 
+       single: RingLibuv; Introduction
+
+===============
+Using RingLibuv
+===============
+
+In this chapter we will learn about using RingLibuv
+
+.. note:: To use RingLibuv, Check ring/extensions/ringlibuv folder.
+
+Information from the library website: http://libuv.org/
+
+Libuv is a multi-platform support library with a focus on asynchronous I/O. 
+
+Feature highlights
+
+* Full-featured event loop backed by epoll, kqueue, IOCP, event ports.
+* Asynchronous TCP and UDP sockets
+* Asynchronous DNS resolution
+* Asynchronous file and file system operations
+* File system events
+* ANSI escape code controlled TTY
+* IPC with socket sharing, using Unix domain sockets or named pipes (Windows)
+* Child processes
+* Thread pool
+* Signal handling
+* High resolution clock
+* Threading and synchronization primitives
+
+.. index:: 
+       pair: RingLibuv; First Application using RingLibuv
+
+First Application using RingLibuv
+=================================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       func main
+
+               myloop = new_uv_loop_t()
+               uv_loop_init(myloop)
+               ? "Now quitting"
+               uv_run(myloop, UV_RUN_DEFAULT)
+               uv_loop_close(myloop)
+               destroy_uv_loop_t(myloop)
+
+Output:
+
+.. code-block:: none
+
+       Now quitting
+
+
+.. index:: 
+       pair: RingLibuv; The Events Loop
+
+The Events Loop
+===============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       counter = 0
+       idler = NULL 
+
+       func main
+               idler = new_uv_idle_t()
+               uv_idle_init(uv_default_loop(), idler)
+               uv_idle_start(idler, "wait()")
+               ? "Idling..."
+               uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+               uv_loop_close(uv_default_loop());
+               destroy_uv_idle_t(idler)
+
+       func wait
+               counter++
+               if counter >= 100000
+                       uv_idle_stop(idler)
+               ok
+
+Output:
+
+.. code-block:: none
+
+       Idling...
+
+.. index:: 
+       pair: RingLibuv; Server Example
+
+Server Example
+==============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Server Side"
+
+       DEFAULT_PORT    = 13370
+       DEFAULT_BACKLOG = 1024
+
+       addr    = new_sockaddr_in()
+       server  = NULL
+       client  = NULL
+       myloop  = NULL
+
+       func main
+               myloop = uv_default_loop()
+               server = new_uv_tcp_t()
+               uv_tcp_init(myloop, server)
+               uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+               uv_tcp_bind(server, addr, 0)
+               r = uv_listen(server, DEFAULT_BACKLOG, "newconnection()")
+               if r 
+                       ? "Listen error " + uv_strerror(r)
+                       return 1
+               ok
+               uv_run(myloop, UV_RUN_DEFAULT)
+               destroy_uv_tcp_t(server)
+               destroy_uv_sockaddr_in(addr)
+
+       func newconnection
+               ? "New Connection"
+               aPara   = uv_Eventpara(server,:connect)
+               nStatus = aPara[2]
+               if nStatus < 0
+                       ? "New connection error : " + nStatus 
+                       return 
+               ok
+               client = new_uv_tcp_t()
+               uv_tcp_init(myloop, client)
+               if uv_accept(server, client) = 0 
+                               uv_read_start(client, uv_myalloccallback(), "echo_read()")
+               ok
+
+       func echo_read 
+               aPara = uv_Eventpara(client,:read)
+               nRead = aPara[2]
+               buf   = aPara[3]
+               if nRead > 0
+                       req = new_uv_write_t()
+                               wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                       uv_write(req, client, wrbuf, 1, "echo_write()")
+                       ? uv_buf2str(wrbuf)
+                       message = "message from the server to the client"
+                       buf = new_uv_buf_t()
+                       set_uv_buf_t_len(buf,len(message))
+                       set_uv_buf_t_base(buf,varptr("message","char *"))
+                       uv_write(req, client, buf, 1, "echo_write()")
+               ok
+
+       func echo_write
+               aPara = uv_Eventpara(client,:read)
+               req   = aPara[1]
+
+Output:
+
+When we run the client, We will see the message "New Connection"
+
+Then the message "hello from the client"
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side
+       New Connection
+       hello from the client
+
+.. index:: 
+       pair: RingLibuv; Client Example
+
+Client Example
+==============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Client Side"
+
+       DEFAULT_PORT    = 13370
+       DEFAULT_BACKLOG = 1024
+
+       addr    = new_sockaddr_in()
+       connect = NULL
+       buffer  = null
+       socket  = null
+
+       func main
+               myloop  = uv_default_loop()
+               Socket  = new_uv_tcp_t()
+               connect = new_uv_connect_t()
+               uv_tcp_init(myloop, Socket)
+               uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+               uv_tcp_connect(connect,Socket, addr, "connect()")
+               uv_run(myloop, UV_RUN_DEFAULT)
+               destroy_uv_tcp_t(socket)
+               destroy_uv_connect_t(connect)
+
+       func connect 
+               ? "Client: Start Connection"
+               aPara   = uv_Eventpara(connect,:connect)
+               req     = aPara[1]
+               nStatus = aPara[2]
+               if nStatus = -1
+                       ? "Error : on_write_end "
+                       return 
+               ok
+               buf = new_uv_buf_t()
+               message = "hello from the client"
+               set_uv_buf_t_len(buf,len(message))
+               set_uv_buf_t_base(buf,varptr("message","char *"))
+               tcp       = get_uv_connect_t_handle(req)
+               write_req = new_uv_write_t()
+               buf_count = 1
+               uv_write(write_req, tcp, buf, buf_count, "on_write_end()")
+
+       func on_write_end
+                       uv_read_start(socket, uv_myalloccallback(), "echo_read()")
+
+       func echo_read 
+               aPara = uv_Eventpara(socket,:read)
+               nRead = aPara[2]
+               buf   = aPara[3]
+               if nRead > 0
+                               wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread);
+                       ? uv_buf2str(wrbuf)
+               ok
+
+Output:
+
+We will run the client after the server
+
+.. code-block:: none
+
+       Testing RingLibuv - Client Side
+       Client: Start Connection
+       hello from the client
+       message from the server to the client
+
+.. index:: 
+       pair: RingLibuv; Server Example using Classes
+
+Server Example Using Classes
+============================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Server Side - Using Classes"
+
+       open_object(:MyServer)
+
+       class MyServer from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               server  = NULL
+               client  = NULL
+               myloop  = NULL
+               
+               func start
+                       myloop = uv_default_loop()
+                       server = new_uv_tcp_t()
+                       uv_tcp_init(myloop, server)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_bind(server, addr, 0)
+                       r = uv_listen(server, DEFAULT_BACKLOG, Method(:newconnection) )
+                       if r 
+                               ? "Listen error " + uv_strerror(r)
+                               return 1
+                       ok
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(server)
+                       destroy_uv_sockaddr_in(addr)
+               
+               func newconnection
+                       ? "New Connection"
+                       aPara   = uv_Eventpara(server,:connect)
+                       nStatus = aPara[2]
+                       if nStatus < 0
+                               ? "New connection error : " + nStatus 
+                               return 
+                       ok
+                       client = new_uv_tcp_t()
+                       uv_tcp_init(myloop, client)
+                       if uv_accept(server, client) = 0 
+                                       uv_read_start(client, uv_myalloccallback(), 
+                                                               Method(:echo_read))
+                       ok
+               
+               func echo_read 
+                       aPara = uv_Eventpara(client,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                               req = new_uv_write_t()
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                               uv_write(req, client, wrbuf, 1, Method(:echo_write))
+                               ? uv_buf2str(wrbuf)
+                               message = "message from the server to the client"
+                               buf = new_uv_buf_t()
+                               set_uv_buf_t_len(buf,len(message))
+                               set_uv_buf_t_base(buf,varptr("message","char *"))
+                               uv_write(req, client, buf, 1, Method(:echo_write))
+                       ok
+               
+               func echo_write
+                       aPara = uv_Eventpara(client,:read)
+                       req   = aPara[1]
+       
+
+Output:
+
+When we run the client, We will see the message "New Connection"
+
+Then the message "hello from the client"
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side - Using Classes
+       New Connection
+       hello from the client
+
+
+.. index:: 
+       pair: RingLibuv; Client Example - Using Classes
+
+Client Example Using Classes
+============================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Client Side - Using Classes"
+
+       open_object(:MyClient)
+
+       Class MyClient from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               connect = NULL
+               buffer  = null
+               socket  = null
+               
+               func start
+                       myloop  = uv_default_loop()
+                       Socket  = new_uv_tcp_t()
+                       connect = new_uv_connect_t()
+                       uv_tcp_init(myloop, Socket)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_connect(connect,Socket, addr, Method(:connect))
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(socket)
+                       destroy_uv_connect_t(connect)
+               
+               func connect 
+                       ? "Client: Start Connection"
+                       aPara   = uv_Eventpara(connect,:connect)
+                       req     = aPara[1]
+                       nStatus = aPara[2]
+                       if nStatus = -1
+                               ? "Error : on_write_end "
+                               return 
+                       ok
+                       buf = new_uv_buf_t()
+                       message = "hello from the client"
+                       set_uv_buf_t_len(buf,len(message))
+                       set_uv_buf_t_base(buf,varptr("message","char *"))
+                       tcp       = get_uv_connect_t_handle(req)
+                       write_req = new_uv_write_t()
+                       buf_count = 1
+                       uv_write(write_req, tcp, buf, buf_count, Method(:on_write_end))
+               
+               func on_write_end
+                               uv_read_start(socket, uv_myalloccallback(), Method(:echo_read))
+               
+               func echo_read 
+                       aPara = uv_Eventpara(socket,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread);
+                               ? uv_buf2str(wrbuf)
+                       ok
+
+Output:
+
+We will run the client after the server
+
+.. code-block:: none
+
+       Testing RingLibuv - Client Side - Using Classes
+       Client: Start Connection
+       hello from the client
+       message from the server to the client
+
+
+       
+
+.. index:: 
+       pair: RingLibuv; Threads Example
+
+Threads Example
+===============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Threads"
+
+       func main
+               one_id = new_uv_thread_t()
+               two_id = new_uv_thread_t()
+               uv_thread_create(one_id, "one()")
+               uv_thread_create(two_id, "two()")
+               uv_thread_join(one_id)
+               uv_thread_join(two_id)
+               destroy_uv_thread_t(one_id)
+               destroy_uv_thread_t(two_id)
+
+       func one
+               ? "Message from the First Thread!"
+
+       func two
+               ? "Message from the Second Thread!"
+
+Output:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads
+       Message from the First Thread!
+       Message from the Second Thread!
+    
+
+.. index:: 
+       pair: RingLibuv; Threads Example - Using Classes
+
+Threads Example - Using Classes
+===============================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Threads - Using Classes"
+
+       open_object(:MyThreads)
+
+       class MyThreads from ObjectControllerParent
+
+               func Start
+                       one_id = new_uv_thread_t()
+                       two_id = new_uv_thread_t()
+                       uv_thread_create(one_id, Method(:One))
+                       uv_thread_create(two_id, Method(:Two))
+                       uv_thread_join(one_id)
+                       uv_thread_join(two_id)
+                       destroy_uv_thread_t(one_id)
+                       destroy_uv_thread_t(two_id)
+               
+               func one
+                       ? "Message from the First Thread!"
+               
+               func Two
+                       ? "Message from the Second Thread!"
+               
+
+Output:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads - Using Classes
+       Message from the First Thread!
+       Message from the Second Thread!
+
diff --git a/docs/en/source/linuxmint.png b/docs/en/source/linuxmint.png
new file mode 100644 (file)
index 0000000..d18b9a5
Binary files /dev/null and b/docs/en/source/linuxmint.png differ
diff --git a/docs/en/source/lists.txt b/docs/en/source/lists.txt
new file mode 100644 (file)
index 0000000..6ce4e06
--- /dev/null
@@ -0,0 +1,745 @@
+.. index:: 
+       single: Lists; Introduction
+
+=====
+Lists
+=====
+
+In this chapter we are going to learn how to deal with lists.
+
+.. index:: 
+       pair: Lists; Create Lists
+
+Create Lists
+============
+
+We can create new lists by defining the list items inside square bracts.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [1,2,3,4,5]
+
+Also we can create new lists using the : operator
+
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:5
+       aList2 = "a":"z"
+
+Example:
+
+.. code-block:: ring
+
+       aList = 5:1
+       aList2 = "z":"a"
+
+Also we can create lists using the list() function
+
+Syntax:
+
+.. code-block:: ring
+
+       list = list(size)
+
+Example
+
+.. code-block:: ring
+
+       aList = list(10)        # aList contains 10 items
+
+.. note:: the list index start from 1 
+
+.. index:: 
+       pair: Lists; Add Items
+
+Add Items
+=========
+
+To add new items to the list, we can use the Add() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Add(List,Item)
+
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two"]
+       add(aList,"three")
+       see aList
+
+Also we can do that using the + operator.
+
+Syntax:
+
+.. code-block:: ring
+
+       List + item
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       aList + 11      # add number 11 to the list
+       see aList       # print the list
+
+.. index:: 
+       pair: Lists; Get List Size
+
+Get List Size
+=============
+
+We can get the list size using the len() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Len(List)
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:20  see len(aList)  # print 20
+
+.. index:: 
+       pair: Lists; Delete Item From List
+
+Delete Item From List
+=====================
+
+To delete an item from the list, we can use the del() function
+
+Syntax:
+
+.. code-block:: ring
+
+       del(list,index)
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two","other","three"]
+       Del(aList,3)    # delete item number three
+       see aList       # print one two three
+
+
+.. index:: 
+       pair: Lists; Get List Item
+       
+Get List Item
+=============
+
+To get an item from the list, we uses the next syntax
+
+.. code-block:: ring
+
+       List[Index]
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["Cairo","Riyadh"]
+       see "Egypt : " + aList[1] + nl +
+           "KSA   : " + aList[2] + nl
+
+.. index:: 
+       pair: Lists; Set List Item
+
+Set List Item
+=============
+
+To set the value of an item inside the list, we can use the next syntax
+
+.. code-block:: ring
+
+       List[Index] = Expression
+
+Example:
+
+.. code-block:: ring
+
+       aList = list(3) # create list contains three items
+       aList[1] = "one" aList[2] = "two" aList[3] = "three"
+       see aList
+
+.. index:: 
+       pair: Lists; Search
+
+Search
+======
+
+To find an item inside the list we can use the find() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Find(List,ItemValue) ---> Item Index
+       Find(List,ItemValue,nColumn) ---> Search in nColumn, returns the Item Index 
+       Find(List,ItemValue,nColumn,cAttribute) ---> Item Index
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two","three","four","five"]
+       see find(aList,"three")         # print 3
+
+Example:
+
+.. code-block:: ring
+
+       mylist = [["one",1],
+                 ["two",2],
+                 ["three",3]]
+
+       see find(mylist,"two",1) + nl           # print 2
+       see find(mylist,2,2) + nl               # print 2
+
+Also we can use the binarysearch() function to search in sorted list.
+
+Syntax:
+
+.. code-block:: ring
+
+       BinarySearch(List,ItemValue) ---> Item Index
+       BinarySearch(List,ItemValue,nColumn) ---> Search in nColumn, returns the Item Index 
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two","three","four","five"]
+       aList = sort(aList)
+       see binarysearch(aList,"three")
+
+Output:
+
+.. code-block:: ring
+
+       five
+       four
+       one
+       three
+       two
+       4
+
+.. index:: 
+       pair: Lists; Sort()
+
+Sort
+====
+
+We can sort the list using the sort() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Sort(List) ---> Sorted List
+       Sort(List,nColumn) ---> Sorted List based on nColumn 
+       Sort(List,nColumn,cAttribute) ---> Sorted List based on Object Attribute
+
+Example:
+
+.. code-block:: ring
+
+       aList = [10,12,3,5,31,15]
+       aList = sort(aList) see aList # print 3 5 10 12 15 31
+
+We can sort list of strings
+
+Example:
+
+.. code-block:: ring
+
+       mylist = ["mahmoud","samir","ahmed","ibrahim","mohammed"]
+       see mylist                # print list before sorting
+       mylist = sort(mylist)     # sort list
+       see "list after sort"+nl
+       see mylist                # print ahmed ibrahim mahmoud mohammed samir
+
+We can sort a list based on a specific column.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ ["mahmoud",15000] ,
+                 ["ahmed", 14000 ] ,
+                 ["samir", 16000 ] ,
+                 ["mohammed", 12000 ] ,
+                 ["ibrahim",11000 ] ]
+
+       aList2 = sort(aList,1)
+       see aList2
+
+Output:
+
+.. code-block:: ring
+
+       ahmed
+       14000
+       ibrahim
+       11000
+       mahmoud
+       15000
+       mohammed
+       12000
+       samir
+       16000
+
+
+.. index:: 
+       pair: Lists; Reverse()
+
+Reverse
+=======
+
+We can reverse a list using the reverse() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Reverse(List) ---> Reversed List
+
+Example:
+
+.. code-block:: ring
+
+       aList = [10,20,30,40,50]
+       aList = reverse(aList)
+       see aList       # print 50 40 30 20 10
+
+.. index:: 
+       pair: Lists; Insert()
+
+Insert Items
+============
+
+To insert an item in the list we can use the insert() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Insert(List,Index,Item)
+
+The inserted item will be AFTER the Index
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["A","B","D","E"]
+       insert(aList,2,"C")    # Inserts AFTER Index 2, "C" into Position 3
+       see aList              # print A B C D E
+
+
+.. index:: 
+       pair: Lists; Nested Lists
+
+Nested Lists
+============
+
+The list may contain other lists
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ 1 , [10,20,30] , 5 , [100,1000,5000] ]
+       aList2 = [
+       "one","two", 
+       [3,4],
+       [20,30], ["three",
+                 "four",
+                 "five",[100,200,300]
+                 ]
+       ]
+       
+       see aList[2]            # print 10 20 30
+       see aList[4][3] + nl    # print 5000
+       see aList2[5][2] + nl   # print four
+       see aList2[5][4][3]     # print 300
+
+.. index:: 
+       pair: Lists; Copy Lists
+
+Copy Lists
+==========
+
+We can copy lists (including nested lists) using the Assignment operator.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [
+       "one","two", 
+       [3,4],
+       [20,30], ["three",
+                 "four",
+                 "five",[100,200,300]
+                 ]
+       ]
+
+       aList2 = aList          # Copy aList to aList2
+       aList2[5] = "other"     # modify item number five
+       see aList2[5] + nl      # print other
+       see aList[5]            # print three four five 100 200 300
+
+
+.. index:: 
+       pair: Lists; First-Class Lists
+
+First-class lists
+=================
+
+Lists are `first-class citizens <http://en.wikipedia.org/wiki/First-class_citizen>`_ where we can store
+lists in variables, pass lists to functions, and return lists from functions.
+
+Example:
+
+.. code-block:: ring
+
+       aList = duplicate( [1,2,3,4,5] )
+       see aList[10] + nl                # print 5
+
+       see mylist()                      # print 10 20 30 40 50
+       
+       func duplicate list
+               nMax = len(list)
+               for x = 1 to nMax
+                       list + list[x]
+               next
+               return list
+
+       func mylist return [10,20,30,40,50]
+
+.. index:: 
+       pair: Lists; Using Lists during definition
+               
+Using Lists during definition
+=============================
+
+We can use the list items while we are defining the list for the first time.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
+       see aList       # print 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
+       
+       
+.. index:: 
+       pair: Lists; Passing Lists to Functions
+
+Passing Lists to Functions
+==========================
+
+Lists are passed to functions by reference, This means that the called
+function will work on the same list and can modify it.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+               aList = [1,2,3,4,5]     # create list, local in function main
+               myfunc(aList)           # call function, pass list by reference
+               see aList               # print 1 2 3 4 5 6 7 8 9 10
+
+       func myfunc list
+               list + [6,7,8,9,10]
+
+
+.. index:: 
+       pair: Lists; Access List Items by String Index
+
+Access List Items by String Index
+=================================
+
+Instead of using numbers to determine the item index when we get item value or set item value,
+We can access items using string index if the item is a list contains two items and 
+the first item is a string.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ ["one",1] , ["two",2] , ["three",3] ]
+       see aList["one"] + nl +
+           aList["two"] + nl +
+           aList["three"]      # print 1 2 3
+
+This type of lists can be defined in a better syntax using the : and = operators.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ :one = 1 , :two = 2 , :three = 3 ]
+       see aList["one"] + nl +
+           aList["two"] + nl +
+           aList["three"] + nl # print 1 2 3
+       see aList[1]            # print one 1
+
+.. tip:: using : before identifier (one word) means literal
+
+.. note:: using = inside list definition create a list of two items where
+         the first item is the left side and the second item is the right side.
+
+We can add new items to the list using the string index
+
+Example:
+
+.. code-block:: ring
+       
+       aList = []
+       aList["Egypt"] = "Cairo"
+       aList["KSA"] = "Riyadh"
+       see aList["Egypt"] + nl +       # print Cairo
+           aList["KSA"] + nl           # print Riyadh
+
+.. index:: 
+       pair: Lists; Passing Parameters or Arguments Using List
+
+Passing Parameters or Argumnents Using List
+===========================================
+       
+This type of lists is very good for passing parameters to functions
+Where the order of parameters will not be important (we can change the order).
+
+Also some parameters maybe optional.
+
+Example:
+
+.. code-block:: ring
+
+       myconnect (  [ :server = "myserver.com" , :port = 80 , 
+                       :username = "mahmoud" , :password = "password" ] ) 
+
+       func myconnect mypara
+       
+               # print connection details
+               see "User Name : " + mypara[:username] + nl +
+                   "Password  : " + mypara[:password] + nl +
+                    "Server    : " + mypara[:server] + nl +
+                    "Port      : " + mypara[:port]
+.. index:: 
+       pair: Lists; Passing Parameters Arguments Using List Array
+
+Passing Parameters or Argumnents Using List Array
+=================================================
+       
+Passing Arguments or Parmameters to a Function in an array format
+
+Example:
+
+.. code-block:: ring
+
+     myList = [5,7,3,9]    ### list with args or parms in  an array
+     result = sum(myList)
+     See "Sum result: "+ result +n
+
+     func sum(aList)
+       acc = 0
+       sizeList = len(aList)
+   
+       for i = 1 to sizeList
+          See aList[i] +nl
+          acc = acc + aList[i]
+       next
+     return acc
+
+.. index:: 
+       pair: Lists; Return as List or Hash Table
+
+Return Parameters as List or Hash Table
+=======================================
+       
+Return Parameters from a Function in an Array or Hash Format
+
+Example:
+
+.. code-block:: ring
+
+       sudoku = [  [2,9,0],
+                   [0,0,1],
+                   [0,0,0] ]
+
+       aOutput = myFunctionArray(sudoku)
+               See "Return Array: T/F: "+ aOutput[1] +" Row: "+ aOutput[2] +" Col: "+ aOutput[3] +nl
+
+       aOutput = myFunctionHash(sudoku)
+               See "Return Hash.: T/F: "+ aOutput[:lValue] +" Row: "+ aOutput[:nRow] +" Col: "+ aOutput[:nCol] +nl
+
+       ###----------------------------------
+       ### isSolvedSoduku - Return ARRAY
+
+       Func myFunctionArray(sudoku)
+           for Row = 1 to 9
+               for Col = 1 to 9
+                   if sudoku[Row][Col] = 0
+
+                       //----------------------------
+                       // Return Array with 3 fields       
+                       return [False, Row, Col]                    
+                   ok
+               next
+           next
+       return [True, Row, Col]
+
+       ###----------------------------------
+       ### isSolvedSoduku - Return HASH
+
+       Func myFunctionHash(sudoku)
+           for Row = 1 to 3
+               for Col = 1 to 3
+                   if sudoku[Row][Col] = 0
+
+                       //---------------------------------
+                       // Return Hash Table with 3 fields      
+                       return  [   :lValue = False, 
+                                   :nRow   = Row, 
+                                   :nCol   = Col   
+                               ]
+                   ok
+               next
+           next
+
+       return  [ :lValue = False, :nRow = Row, :nCol = Col ]           
+
+       ###-----------------------------
+
+     
+.. index:: 
+       pair: Lists; Create Multi Dimension Array  Using List and Recursion
+
+Creating a Multi-Dimensional Array using  List
+==============================================
+       
+A Multi-Dimensional Array of any size can be built using recursion in a  Function
+
+Example:
+
+.. code-block:: ring
+
+        ###---------------------------------------------------------
+        ### Create Array -- Dimensions Any Size:  3D, 4D, 5D etc
+
+        dimList = [4,3,4]
+        bList   = createDimList(dimList)
+       
+        ###---------------------------------------------------------
+        ### Populate the arrays using a counter 1 ,  4x4x4 = 256 , 2x3x4x5x6 = 720
+
+        Counter = 1
+
+        for Col=1 to dimList[1]
+          for Row=1 to dimList[2]
+            for Dep=1 to dimList[3]
+                    blist[Col][Row][Dep] = Counter
+                    Counter++
+            next
+          next
+        next
+
+        ###-----------------------------------------------
+        ### Print the array elements in block format
+
+        for Col=1 to dimList[1]
+          for Row=1 to dimList[2]
+            for Dep=1 to dimList[3]
+                    See bList[Col][Row][Dep] See " "
+            next
+           See nl
+          next
+            See nl
+        next
+
+        ###===========================
+        ### FUNCTIONS
+
+        ###-----------------------------------------------------------------------
+        ### Recursive Create a Dimension Array
+        ### Call by passing an array of dimesions: dimList = [2,3,4,5]
+        ### Drop the first entry every iteration call, making newParms
+        ###
+        ### Example:
+        ###    dimList = [4,2,3,2]                <<< Number and size of dimensions in array format
+        ###    bList   = createDimList(dimList)   <<< Call using the array as input
+
+        func createDimList(dimArray)
+
+             sizeList = len(dimArray)
+
+             newParms = []
+             for i = 2 to sizeList
+                Add(newParms, dimArray[i])
+             next
+
+             alist = list(dimArray[1])
+
+             if sizeList = 1
+                return aList
+             ok
+
+             for t in alist
+                 t = createDimList(newParms)
+             next
+
+        return alist
+       
+     
+.. index:: 
+       pair: Lists; Swap Items
+
+Swap Items
+==========
+
+We can swap the list items using the Swap() function.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [:one,:two,:four,:three]
+       see aList
+       see copy("*",50) + nl
+       swap(aList,3,4)
+       see aList
+
+Output
+
+.. code-block:: ring
+
+       one
+       two
+       four
+       three
+       **************************************************
+       one
+       two
+       three
+       four
+
+
diff --git a/docs/en/source/lowlevel.txt b/docs/en/source/lowlevel.txt
new file mode 100644 (file)
index 0000000..7fb89cd
--- /dev/null
@@ -0,0 +1,1384 @@
+.. index:: 
+       single: Low Level Functions; Introduction
+
+===================
+Low Level Functions
+===================
+
+In this chapter we will learn about the low level functions provided by Ring
+
+* callgc()
+* varptr()
+* space()
+* nullpointer()
+* object2pointer()
+* pointer2object()
+* ispointer()
+* ptrcmp()
+* ringvm_cfunctionslist() 
+* ringvm_functionslist() 
+* ringvm_classeslist() 
+* ringvm_packageslist() 
+* ringvm_memorylist() 
+* ringvm_calllist() 
+* ringvm_fileslist()
+* ringvm_settrace()
+* ringvm_tracedata()
+* ringvm_traceevent()
+* ringvm_tracefunc()
+* ringvm_scopescount()
+* ringvm_evalinscope() 
+* ringvm_passerror()
+* ringvm_hideerrorMsg()
+* ringvm_callfunc()
+* ringvm_see()
+* ringvm_give()
+* ringvm_info()
+
+.. index:: 
+       pair: Low Level Functions; callgc()
+
+callgc() function
+=================
+
+Use this function to force calling the garbage collector during function execution when you
+use a loop that create temp. variables that you don't free using the assignment operation.
+
+It's very rare to need this function but it's useful when you create something like event-loop
+for your game engine and start creating lists on the fly when you call functions.
+
+Example 
+
+.. code-block:: ring
+
+       While True
+
+               # process events
+               # call functions using temp. lists like myfunc(["temp list"])
+
+               # call the garbage collector
+               callgc()
+       End
+
+.. tip:: In Ring the garbage collector works automatically in the end of function execution or
+        when you use the assignment statement.
+
+.. index:: 
+       pair: Low Level Functions; varptr()
+
+varptr() function
+=================
+
+Use the varptr() function when you need to pass a pointer to a C/C++ function.
+
+Syntax:
+
+       varptr(cVariableName,cPointerType) ---> Low Level Object (C Pointer)
+
+example:
+
+.. code-block:: ring
+
+       r = 10
+       z = 20
+       see r + nl
+       see varptr("r","int") 
+       see varptr("z","int")
+
+Output:
+
+.. code-block:: ring
+
+       10
+       00E3C740
+       int
+       2
+       00E3BEC0
+       int
+       2
+
+.. note:: the low level object is a list contains three items (The Pointer, The Type, The Status)
+
+
+.. index:: 
+       pair: Low Level Functions; space()
+
+space() function
+================
+
+Use the space function to allocate a specific number of bytes in Memory.
+
+Syntax:
+
+.. code-block:: ring
+
+       Space(nBytesCount) ---> String 
+
+Example:
+
+.. code-block:: ring
+
+       mystring = space(200)
+       See "String Size : " + len(mystring) + nl
+       See "String : " + mystring + nl
+       See "String Pointer : " 
+       See varptr("mystring","char *")
+
+Output:
+
+.. code-block:: ring
+
+       String Size : 200
+       String :                                                                                                                                                        
+       String Pointer : 00FF8FE8
+       char *
+       2
+
+.. note:: You may need the space() and VarPtr() functions to pass buffers to C functions.
+
+.. index:: 
+       pair: Low Level Functions; nullpointer()
+
+nullpointer() function
+======================
+
+You may need to pass the NULL pointer to a C function that may expect a pointer as parameter
+and accept NULL pointers for optional parameters.
+
+Example:
+
+The next example uses the SDL_BlitSurface() function from the LibSDL Library through RingSDL
+The function accept SDL_Rect pointers in the second and the last parameter.
+Also the function accept NULL pointers, so we can pass them using the NULLPointer() Function.
+
+.. code-block:: ring
+
+       SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+
+.. note:: The previous code doesn't work alone, you need to learn how to use RingSDL first.
+
+.. tip:: We can pass NULL as parameter instead of using NULLPointer()
+
+.. index:: 
+       pair: Low Level Functions; object2pointer()
+
+object2pointer() function
+=========================
+
+Use this function to get a C pointer for Ring lists and objects
+
+Syntax:
+
+.. code-block:: ring
+
+       object2pointer(List|Object) --> Low Level Object ( C Pointer )
+
+.. index:: 
+       pair: Low Level Functions; pointer2object()
+
+pointer2object() function
+=========================
+
+Use this function to get the Ring list and/or object from the low level object (C Pointer)
+
+Syntax:
+
+.. code-block:: ring
+
+       pointer2object(Low Level Object) ---> List|Object
+
+
+Example:
+
+.. code-block:: ring
+
+       # Create the list 
+       mylist = 1:5
+
+       # Create pointer to the list
+       x = object2pointer(mylist)
+       see x
+
+       see nl
+
+       # Add items to the list
+       mylist + "welcome"
+
+       # print the list items
+       y = pointer2object(x)
+       see y 
+
+Output:
+
+.. code-block:: ring
+
+       0069A5D8
+       OBJECTPOINTER
+       0
+
+       1
+       2
+       3
+       4
+       5
+       welcome
+
+.. note:: In Ring the assignment operator copy lists and objects by value, to copy by reference
+       Just use the object2pointer() and pointer2object() functions.
+
+.. tip:: The object2pointer() and pointer2object() are used in the stdlib - Tree Class implementation
+         to create a reference for the parent node (object) in the child node (another object).
+
+
+.. index:: 
+       pair: Low Level Functions; ispointer()
+
+ispointer() function
+====================
+
+Check if the parameter is a pointer (C Object) or not.
+
+Syntax:
+
+.. code-block:: none
+
+       IsPointer(vPara) ---> True|False
+
+Example :
+
+.. code-block:: ring
+
+       fp = fopen(filename(),"r")
+
+       ? type(fp)
+
+       ? ispointer(fp)
+
+Output :
+
+.. code-block:: none
+
+       file
+       1
+
+.. index:: 
+       pair: Low Level Functions; ptrcmp()
+
+ptrcmp() function
+=================
+
+We can compare between two pointers (C Objects) using the ptrcmp() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       ptrcmp(oObject1,oObject2) ---> value = 1 if oObject1 = oObject2
+                                      value = 0 if oObject1 != oObject2
+
+Example:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp.ring","r")
+       fp2 = fp
+       fp3 = fopen("ptrcmp.ring","r")
+
+       see ptrcmp(fp,fp2) + nl
+       see ptrcmp(fp,fp3) + nl
+
+       fclose(fp)
+       fclose(fp3)
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+
+.. index:: 
+       pair: Low Level Functions; RingVM_CFunctionsList()
+
+ringvm_cfunctionslist() function
+================================
+
+The Function return a list of functions written in C.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_CFunctionsList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       See RingVM_CFunctionsList()
+
+.. index:: 
+       pair: Low Level Functions; RingVM_FunctionsList()
+
+ringvm_functionslist() function
+===============================
+
+The Function return a list of functions written in Ring.
+
+Each List Member is a list contains the next items
+
+* Function Name
+* Program Counter (PC) - Function Position in Byte Code.
+* Source Code File Name
+* Private Flag (For Private Methods in Classes)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_FunctionsList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       test()
+
+       func test
+               see ringvm_functionslist()
+
+Output:
+
+.. code-block:: ring
+
+       test
+       8
+       B:/ring/tests/scripts/functionslist.ring
+       0
+
+.. index:: 
+       pair: Low Level Functions; RingVM_ClassesList()
+
+ringvm_classeslist() function
+=============================
+
+The Function return a list of Classes.
+
+Each List Member is a list contains the next items
+
+* Class Name
+* Program Counter (PC) - Class Position in Byte Code.
+* Parent Class Name
+* Methods List
+* Flag (Is parent class information collected)
+* Pointer to the package (or NULL if no package is used)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_ClassesList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       see ringvm_classeslist()
+
+       class class1
+               func f1
+       class class2 from class1
+       class class3 from class1
+
+Output:
+
+.. code-block:: ring
+
+       class1
+       9
+
+       f1
+       13
+       B:/ring/tests/scripts/classeslist.ring
+       0
+       0
+       00000000
+       class2
+       16
+       class1
+       0
+       00000000
+       class3
+       20
+       class1
+       0
+       00000000
+
+.. index:: 
+       pair: Low Level Functions; RingVM_PackagesList()
+
+ringvm_packageslist() function
+==============================
+
+The Function return a list of Packages.
+
+Each List Member is a list contains the next items
+
+* Package Name
+* Classes List
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_PackagesList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       see ringvm_packageslist()
+
+       package package1
+               class class1
+
+       package package2
+               class class1
+
+       package package3
+               class class1
+
+Output:
+
+.. code-block:: ring
+
+       package1
+       class1
+       11
+
+       0
+       00FEF838
+       package2
+       class1
+       17
+
+       0
+       00FEF978
+       package3
+       class1
+       23
+
+       0
+       00FEFF68
+
+.. index:: 
+       pair: Low Level Functions; RingVM_MemoryList()
+
+ringvm_memorylist() function
+============================
+
+The Function return a list of Memory Scopes and Variables.
+
+Each List Member is a list contains variables in a different scope.
+
+Each Item in the scope list is a list contains the next items
+
+* Variable Name
+* Variable Type
+* Variable Value
+* Pointer Type (List/Item) if the value is a list
+* Private Flag (if the variable is an attribute in a Class)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_MemoryList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       test()
+       func test
+               y = 20
+               see ringvm_memorylist()
+
+Output:
+
+.. code-block:: ring
+
+       true
+       2
+       1
+       0
+       0
+       false
+       2
+       0
+       0
+       0
+       nl
+       1
+
+
+       0
+       0
+       null
+       1
+
+       0
+       0
+       ring_gettemp_var
+       4
+       00000000
+       0
+       0
+       ccatcherror
+       1
+       NULL
+       0
+       0
+       ring_settemp_var
+       4
+       00000000
+       0
+       0
+       ring_tempflag_var
+       2
+       0
+       0
+       0
+       stdin
+       3
+       50512DB8
+       file
+       0
+       0
+       0
+       stdout
+       3
+       50512DD8
+       file
+       0
+       0
+       0
+       stderr
+       3
+       50512DF8
+       file
+       0
+       0
+       0
+       this
+       4
+       00000000
+       0
+       0
+       sysargv
+       3
+       B:\ring\bin/ring
+       B:/ring/tests/scripts/memorylist.ring
+       0
+       0
+       x
+       2
+       10
+       0
+       0
+       y
+       2
+       20
+       0
+       0
+
+.. index:: 
+       pair: Low Level Functions; RingVM_CallList()
+
+ringvm_calllist() function
+==========================
+
+The Function return a list of the functions call list.
+
+Each List Member is a list contains the next items
+
+* Function Type
+* Function Name
+* Program Counter (PC)
+* Stack Pointer (SP)
+* Temp. Memory List
+* Method or Function Flag
+* Caller PC
+* FuncExec Flag
+* ListStart Flag
+* Nested Lists Pointer
+* State List
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_CallList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+       func hello
+               test()
+
+       func test
+               mylist = ringvm_calllist()
+               for t in mylist see t[2] + nl next
+
+Output:
+
+.. code-block:: ring
+
+       function hello() in file B:/ring/tests/scripts/calllist.ring
+       called from line 1
+       function test() in file B:/ring/tests/scripts/calllist.ring
+       called from line 3
+       ringvm_calllist
+
+
+.. index:: 
+       pair: Low Level Functions; RingVM_FilesList()
+
+ringvm_fileslist() function
+===========================
+
+Function return a list of the Ring Files.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_FilesList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see ringvm_fileslist()
+
+Output:
+
+.. code-block:: ring
+
+       B:/ring/tests/scripts/fileslist.ring
+       B:\ring\bin\stdlib.ring
+       eval
+       stdlib.ring
+       stdlib.rh
+       stdclasses.ring
+       stdfunctions.ring
+       stdbase.ring
+       stdstring.ring
+       stdlist.ring
+       stdstack.ring
+       stdqueue.ring
+       stdmath.ring
+       stddatetime.ring
+       stdfile.ring
+       stdsystem.ring
+       stddebug.ring
+       stddatatype.ring
+       stdconversion.ring
+       stdodbc.ring
+       stdmysql.ring
+       stdsecurity.ring
+       stdinternet.ring
+       stdhashtable.ring
+       stdtree.ring
+
+.. index:: 
+       pair: Low Level Functions; ringvm_settrace()
+
+ringvm_settrace()
+=================
+
+The function ringvm_settrace() determine the Trace function name
+
+The trace function is a Ring 
+function that will be called for each event
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_SetTrace(cCode)
+
+.. index:: 
+       pair: Low Level Functions; ringvm_tracedata()
+
+ringvm_tracedata()
+==================
+
+Inside the function that we will use for tracing events
+
+We can use the ringvm_tracedata() function to get the event
+data.
+
+The event data is a list contains the next items
+
+* The Source Code Line Number
+* The Source File Name 
+* The Function/Method Name 
+* Method or Function (Bool : True=Method, False=Function/File)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_TraceData() ---> aDataList
+
+.. index:: 
+       pair: Low Level Functions; ringvm_traceevent()
+
+ringvm_traceevent()
+===================
+
+Inside the function that we will use for tracing events
+
+We can use ringvm_traceevent() to know the event type
+
+* New Line
+* Before Function
+* After Function
+* Runtime Error
+* Before C Function
+* After C Function 
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_TraceEvent() ---> nTraceEvent
+
+.. index:: 
+       pair: Low Level Functions; ringvm_tracefunc()
+
+ringvm_tracefunc()
+==================
+
+The function return the name of the function that we
+are using for tracing events.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_TraceEvent() ---> cCode
+
+.. index:: 
+       pair: Low Level Functions; ringvm_scopescount()
+
+ringvm_scopescount()
+====================
+
+We can use the RingVM_ScopesCount() function to know
+the number of scopes used in the application.
+
+In the start of the program, We have the (global scope only)
+
+When we call a function, A new scope is created.
+
+When the function execution is done, the function scope is deleted.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_ScopesCount() ---> nScopes
+
+.. index:: 
+       pair: Low Level Functions; ringvm_evalinscope()
+
+ringvm_evalinscope() 
+====================
+
+The function ringvm_evalinscope() is similar to the eval() function
+
+Unlike eval() which execute the code in the current scope
+
+Using RingVM_EvalInScope() we can execute the scope in a specific scope.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_EvalInScope(nScope,cCode)
+
+.. index:: 
+       pair: Low Level Functions; ringvm_passerror()
+
+ringvm_passerror()
+==================
+
+When we have runtime error, After printing the Error message, Ring 
+will end the execution of the program.
+
+Using ringvm_passerror() we can avoid that, and continue the 
+execution of our program.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_PassError()
+
+.. index:: 
+       pair: Low Level Functions; ringvm_hideerrorMsg()
+
+ringvm_hideerrormsg()
+=====================
+
+We can disable/enable displaying the runtime error messages using the
+RingVM_HideErrorMsg() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_HideErrorMsg(lStatus)
+
+.. index:: 
+       pair: Low Level Functions; ringvm_callfunc()
+
+ringvm_callfunc()
+=================
+
+We can call a function from a string without using eval() using
+the ringvm_callfunc() 
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_CallFunc(cFuncName)
+
+
+.. index:: 
+       pair: Low Level Functions; Example - Using the Trace Functions
+       
+Example - Using the Trace Functions
+===================================
+
+The next example use the Trace Functions to trace the program Events!
+
+In practical, We will use the Trace Library instead of 
+these low level functions!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       ringvm_settrace("mytrace()")
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+       mytest()
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       func mytrace
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+Output:
+
+.. code-block:: none
+
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 3
+       File Name   : test1.ring
+       Function Name : ringvm_settrace
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 5
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Hello, world!
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 6
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Welcome
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 7
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       How are you?
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 12
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       Message from mytest
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 14
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 43
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 44
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       Message from mymethod
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 11
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+
+
+.. index:: 
+       pair: Low Level Functions; Example - The Trace Library
+       
+Example - The Trace Library
+===========================
+
+The next example uses the Trace functions provided by the Ring language 
+to create the Trace library.
+
+Using the Trace library we have nice Tracing 
+tools and Interaction debugger too.
+
+.. code-block:: ring
+
+       # Trace Events
+       TRACEEVENT_NEWLINE      = 1
+       TRACEEVENT_NEWFUNC      = 2
+       TRACEEVENT_RETURN       = 3
+       TRACEEVENT_ERROR        = 4
+       TRACEEVENT_BEFORECFUNC  = 5
+       TRACEEVENT_AFTERCFUNC   = 6
+
+       # Trace Data
+       TRACEDATA_LINENUMBER    = 1
+       TRACEDATA_FILENAME      = 2
+       TRACEDATA_FUNCNAME      = 3
+       TRACEDATA_METHODORFUNC  = 4
+
+       # Method of Function
+       TRACEDATA_METHODORFUNC_METHOD           = TRUE
+       TRACEDATA_METHODORFUNC_NOTMETHOD        = FALSE
+
+       TRACE_BREAKPOINTS = TRUE
+
+       TRACE_TEMPLIST = []
+
+       func Trace cType
+               switch trim(lower(cType))
+               on :AllEvents
+                       ringvm_settrace("TraceLib_AllEvents()")
+               on :Functions 
+                       ringvm_settrace("TraceLib_Functions()")
+               on :PassError
+                       ringvm_settrace("TraceLib_PassError()")
+               on :Debugger 
+                       ringvm_settrace("TraceLib_Debugger()")
+               on :LineByLine
+                       ringvm_settrace("TraceLib_LineByLine()")
+               off
+
+       func TraceLib_AllEvents
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       func TraceLib_Functions
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on TRACEEVENT_NEWFUNC
+                               see "Open Func : " + 
+                               ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+                       on TRACEEVENT_RETURN
+                               see "Return to Func : " + 
+                               ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+               off
+
+       func TraceLib_PassError
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on  TRACEEVENT_ERROR
+                               see nl
+                               see "TraceLib : After Error !" + nl
+                               ringvm_passerror()
+               off
+
+       func TraceLib_Debugger
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on  TRACEEVENT_ERROR
+                               _BreakPoint()
+               off
+
+       func TraceLib_LineByLine
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring" or
+                       ringvm_TraceEvent() != TRACEEVENT_NEWLINE
+                       return 
+               ok
+               aList = ringvm_tracedata()
+               see "Before Line : " + aList[TRACEDATA_LINENUMBER] + nl 
+               _BreakPoint()
+
+       func BreakPoint
+               if not TRACE_BREAKPOINTS
+                       return 
+               ok
+               _BreakPoint()
+
+       func _BreakPoint 
+               see nl+nl+Copy("=",60) + nl +
+               Copy(" ",20)+"Interactive Debugger" + nl +
+               Copy("=",60) + nl +
+               "Command (Exit)        : End Program" + nl +
+               "Command (Cont)        : Continue Execution" + nl +
+               "Command (Locals)      : Print local variables names" + nl +
+               "Command (LocalsData)  : Print local variables data" + nl +
+               "Command (Globals)     : Print global variables names" + nl +
+               "We can execute Ring code" + nl +
+               Copy("=",60) + nl 
+               while true
+                               see nl + "code:> "
+                               give cCode
+                       cmd = trim(lower(cCode))
+                       if cmd = "exit" or cmd = "bye"
+                               shutdown()
+                       ok 
+                       nScope = ringvm_scopescount()-2
+                       switch cmd
+                               on "locals"                     
+                                       ringvm_EvalInScope(nScope,"see locals() callgc()")
+                                       loop
+                               on "localsdata"
+                                       PrintLocalsData(nScope)
+                                       loop
+                               on "globals"                    
+                                       ringvm_EvalInScope(nScope,"see globals() callgc()")
+                                       loop
+                               on "cont"
+                                       ringvm_passerror()
+                                       exit
+                       off
+                       Try
+                               ringvm_EvalInScope(nScope,cCode)
+                               catch
+                                               see cCatchError
+                               done
+               end
+
+       func NoBreakPoints
+               TRACE_BREAKPOINTS = FALSE
+
+
+       func PrintLocalsData nScope
+               if nScope = 1   # Global
+                       ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = globals()')
+               else
+                       ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = locals() callgc()')
+               ok
+               see nl 
+               aTempList = TRACE_TEMPLIST
+               TRACE_TEMPLIST = []
+               nSpaces = 5
+               for TRACE_ITEM in aTempList
+                       if len(TRACE_ITEM) + 5 > nSpaces
+                               nSpaces = len(TRACE_ITEM) + 5
+                       ok
+               next
+               for TRACE_ITEM in aTempList
+                       see "Variable : " +  TRACE_ITEM
+                       cVarName = TRACE_ITEM
+                       see copy(" ",nSpaces-len(cVarName)) + " Type : " 
+                       ringvm_Evalinscope(nScope,"see type(" +  TRACE_ITEM +")")
+                       ringvm_Evalinscope(nScope,"see Copy(' ',fabs(15-len(type(" +
+                                                 TRACE_ITEM +"))))")
+                       see " Value : " 
+                       ringvm_Evalinscope(nScope,"see " +  TRACE_ITEM)
+                       see nl
+               next
+
+
+.. index:: 
+       pair: Low Level Functions; ringvm_see() function
+
+ringvm_see() function
+=====================
+
+Using the ringvm_see() function we can redefine the behavior of the See command
+
+Also we can use ring_see() to have the original behavior
+
+Example:
+
+.. code-block:: ring
+
+       see "Hello world" + nl
+       see 123 + nl
+       see ["one","two","three"]
+       see new point {x=10 y=20 z=30} 
+
+       func ringvm_see t
+               ring_see("We want to print: ")
+               ring_See(t)
+
+       class point x y z
+
+Output:
+
+.. code-block:: none
+
+       We want to print: Hello world
+       We want to print: 123
+       We want to print: one
+       two
+       three
+       We want to print: x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+.. index:: 
+       pair: Low Level Functions; ringvm_give() function
+
+ringvm_give() function
+======================
+
+Using the ringvm_give() function we can redefine the behavior of the Give command
+
+Example:
+
+.. code-block:: ring
+
+       see "Name: " give name
+       see "Hello " + name
+
+       func ringvm_give
+               see "Mahmoud" + nl
+               return "Mahmoud"
+
+Output:
+
+.. code-block:: ring
+
+       Name: Mahmoud
+       Hello Mahmoud
+
+.. index:: 
+       pair: Low Level Functions; ringvm_info()
+
+ringvm_info() function
+======================
+
+The ringvm_info() is an internal function that return a list of information about the Ring VM structure.
+
+It's used only by the Ring Team in advanced tests to check the VM status.
+
+Syntax:
+
+.. code-block:: ring
+
+       ringvm_info() ---> List of information about the VM structure
+
diff --git a/docs/en/source/manycubes.png b/docs/en/source/manycubes.png
new file mode 100644 (file)
index 0000000..1af41df
Binary files /dev/null and b/docs/en/source/manycubes.png differ
diff --git a/docs/en/source/manytreeitems.png b/docs/en/source/manytreeitems.png
new file mode 100644 (file)
index 0000000..c3cc5a5
Binary files /dev/null and b/docs/en/source/manytreeitems.png differ
diff --git a/docs/en/source/mathfunc.txt b/docs/en/source/mathfunc.txt
new file mode 100644 (file)
index 0000000..7b5aad0
--- /dev/null
@@ -0,0 +1,351 @@
+.. index:: 
+       single: Mathematical Functions; Introduction
+
+======================
+Mathematical Functions
+======================
+
+In this chapter we are going to learn about the mathematical functions
+
+.. index:: 
+       pair: Mathematical Functions; list of functions
+
+List of functions
+=================
+
+The Ring programming language comes with the next mathematical functions
+
+===============                =============================================================================
+Function               Description
+===============                =============================================================================
+sin(x)                 Returns the sine of an angle of x radians
+cos(x)                 Returns the cosine of an angle of x radians
+tan(x)                 Returns the tangent of an angle of x radians
+asin(x)                        Returns the principal value of the arc sine of x, expressed in radians
+acos(x)                        Returns the principal value of the arc cosine of x, expressed in radians
+atan(x)                        Returns the principal value of the arc tangent of x, expressed in radians
+atan2(y,x)             Returns the principal arc tangent of y/x, in the interval [-pi,+pi] radians
+sinh(x)                        Returns the hyperbolic sine of x radians
+cosh(x)                        Returns the hyperbolic cosine of x radians
+tanh(x)                        Returns the hyperbolic tangent of x radians
+exp(x)                 Returns the value of e raised to the xth power
+log(x)                 Returns the natural logarithm of x
+log10(x)               Returns the common logarithm (base-10 logarithm) of x
+ceil(x)                        Returns the smallest integer value greater than or equal to x   
+floor(x)               Returns the largest integer value less than or equal to x
+fabs(x)                        Returns the absolute value of x.
+pow(x,y)               Returns x raised to the power of y 
+sqrt(x)                        Returns the square root of x
+random(x)              Returns a random number in the range [0,x]
+srandom(x)             Initialize random number generator
+unsigned(n,n,c)                Perform operation using unsigned numbers 
+decimals(n)            Determine the decimals digits after the point in float/double numbers
+===============        =============================================================================
+
+.. index:: 
+       pair: Mathematical Functions; Example
+
+Example
+========
+
+.. code-block:: ring
+
+       See "Mathematical Functions" + nl
+       See "Sin(0) = " + sin(0) + nl
+       See "Sin(90) radians = " + sin(90) + nl
+       See "Sin(90) degree = " + sin(90*3.14/180) + nl
+
+       See "Cos(0) = " + cos(0) + nl
+       See "Cos(90) radians = " + cos(90) + nl
+       See "Cos(90) degree = " + cos(90*3.14/180) + nl
+
+       See "Tan(0) = " + tan(0) + nl
+       See "Tan(90) radians = " + tan(90) + nl
+       See "Tan(90) degree = " + tan(90*3.14/180) + nl
+
+       See "asin(0) = " + asin(0) + nl
+       See "acos(0) = " + acos(0) + nl
+       See "atan(0) = " + atan(0) + nl
+       See "atan2(1,1) = " + atan2(1,1) + nl
+
+       See "sinh(0) = " + sinh(0) + nl
+       See "sinh(1) = " + sinh(1) + nl
+       See "cosh(0) = " + cosh(0) + nl
+       See "cosh(1) = " + cosh(1) + nl
+       See "tanh(0) = " + tanh(0) + nl
+       See "tanh(1) = " + tanh(1) + nl
+
+       See "exp(0) = " + exp(0) + nl
+       See "exp(1) = " + exp(1) + nl
+       See "log(1) = " + log(1) + nl
+       See "log(2) = " + log(2) + nl
+       See "log10(1) = " + log10(1) + nl
+       See "log10(2) = " + log10(2) + nl
+       See "log10(10) = " + log10(10) + nl
+
+       See "Ceil(1.12) = " + Ceil(1.12) + nl
+       See "Ceil(1.72) = " + Ceil(1.72) + nl
+
+       See "Floor(1.12) = " + floor(1.12) + nl
+       See "Floor(1.72) = " + floor(1.72) + nl
+
+       See "fabs(1.12) = " + fabs(1.12) + nl
+       See "fabs(1.72) = " + fabs(1.72) + nl
+
+       See "pow(2,3) = " + pow(2,3) + nl
+
+       see "sqrt(16) = " + sqrt(16) + nl
+
+
+Program Output:
+
+.. code-block:: ring
+
+       Mathematical Functions
+       Sin(0) = 0
+       Sin(90) radians = 0.89
+       Sin(90) degree = 1.00
+       Cos(0) = 1
+       Cos(90) radians = -0.45
+       Cos(90) degree = 0.00
+       Tan(0) = 0
+       Tan(90) radians = -2.00
+       Tan(90) degree = 1255.77
+       asin(0) = 0
+       acos(0) = 1.57
+       atan(0) = 0
+       atan2(1,1) = 0.79
+       sinh(0) = 0
+       sinh(1) = 1.18
+       cosh(0) = 1
+       cosh(1) = 1.54
+       tanh(0) = 0
+       tanh(1) = 0.76
+       exp(0) = 1
+       exp(1) = 2.72
+       log(1) = 0
+       log(2) = 0.69
+       log10(1) = 0
+       log10(2) = 0.30
+       log10(10) = 1
+       Ceil(1.12) = 2
+       Ceil(1.72) = 2
+       Floor(1.12) = 1
+       Floor(1.72) = 1
+       fabs(1.12) = 1.12
+       fabs(1.72) = 1.72
+       pow(2,3) = 8
+       sqrt(16) = 4
+
+.. index:: 
+       pair: Mathematical Functions; Random()
+
+Random() Function
+=================
+
+The Random() function generate a random number and we can set the maximum value (optional).
+
+Syntax:
+
+.. code-block:: ring
+
+       Random(x) ---> Random number in the range [0,x]
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 20
+               see  "Random number : " + random() + nl +
+                    "Random number Max (100) : " + random(100) + nl
+       next
+
+Program Output:
+
+.. code-block:: ring
+
+       Random number : 31881
+       Random number Max (100) : 80
+       Random number : 5573
+       Random number Max (100) : 63
+       Random number : 2231
+       Random number Max (100) : 43
+       Random number : 12946
+       Random number Max (100) : 39
+       Random number : 22934
+       Random number Max (100) : 48
+       Random number : 4690
+       Random number Max (100) : 52
+       Random number : 13196
+       Random number Max (100) : 65
+       Random number : 30390
+       Random number Max (100) : 87
+       Random number : 4327
+       Random number Max (100) : 77
+       Random number : 12456
+       Random number Max (100) : 17
+       Random number : 28438
+       Random number Max (100) : 13
+       Random number : 30503
+       Random number Max (100) : 6
+       Random number : 31769
+       Random number Max (100) : 94
+       Random number : 8274
+       Random number Max (100) : 65
+       Random number : 14390
+       Random number Max (100) : 90
+       Random number : 28866
+       Random number Max (100) : 12
+       Random number : 24558
+       Random number Max (100) : 70
+       Random number : 29981
+       Random number Max (100) : 77
+       Random number : 12847
+       Random number Max (100) : 63
+       Random number : 6632
+       Random number Max (100) : 60
+
+.. index:: 
+       pair: Mathematical Functions; SRandom()
+
+SRandom() Function
+==================
+
+The SRandom() function initialize random number generator.
+
+Syntax:
+
+.. code-block:: ring
+
+       SRandom(x) 
+
+.. index:: 
+       pair: Mathematical Functions; Unsigned()
+
+Unsigned() Function
+===================
+
+We can use unsigned numbers using the Unsigned() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Unsigned(nNum1,nNum2,cOperator) --> result of cOperator operation on nNum1,nNum2
+
+Example:
+
+.. code-block:: ring
+
+       see oat_hash("hello") + nl
+
+       # Jenkins hash function - https://en.wikipedia.org/wiki/Jenkins_hash_function
+       func oat_hash cKey      
+               h = 0
+               for x in cKey
+                       h = unsigned(h,ascii(x),"+")
+                       h = unsigned(h,unsigned(h,10,"<<"),"+")
+                       r = unsigned(h,6,">>")
+                       h = unsigned(h, r,"^")
+               next
+               h = unsigned(h,unsigned(h,3,"<<"),"+")
+               h = unsigned(h,unsigned(h,11,">>"),"^")
+               h = unsigned(h,unsigned(h,15,"<<"),"+")
+               return h  
+
+Output:
+
+.. code-block:: ring
+
+       3372029979.00
+
+.. index:: 
+       pair: Mathematical Functions; Decimals()
+
+Decimals() Functions
+====================
+
+We can determine the decimals numbers count after the point in float/double numbers using the decimals() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Decimals(nDecimalsCount)
+
+Example:
+
+.. code-block:: ring
+
+       x = 1.1234567890123
+       for d = 0 to 14
+               decimals(d)
+               see x + nl
+       next
+
+
+Output:
+
+.. code-block:: ring
+
+
+       1
+       1.1
+       1.12
+       1.123
+       1.1235
+       1.12346
+       1.123457
+       1.1234568
+       1.12345679
+       1.123456789
+       1.1234567890
+       1.12345678901
+       1.123456789012
+       1.1234567890123
+       1.12345678901230
+
+
+.. index:: 
+       pair: Mathematical Functions; Using _ in numbers
+
+Using _ in numbers
+==================
+
+We can use _ between numbers digits.
+
+Example:
+
+.. code-block:: ring
+
+       x = 1_000_000
+       see type(x)+nl
+       see x+1+nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
+       100000001
+
+.. index:: 
+       pair: Mathematical Functions; Using f after numbers
+
+Using f after numbers
+=====================
+
+We can use the 'f' letter after numbers.
+
+Example:
+
+.. code-block:: ring
+
+       x = 19.99f
+       see type(x) + nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
diff --git a/docs/en/source/matzring.png b/docs/en/source/matzring.png
new file mode 100644 (file)
index 0000000..0691352
Binary files /dev/null and b/docs/en/source/matzring.png differ
diff --git a/docs/en/source/maze.png b/docs/en/source/maze.png
new file mode 100644 (file)
index 0000000..9853d18
Binary files /dev/null and b/docs/en/source/maze.png differ
diff --git a/docs/en/source/menubardesigner.png b/docs/en/source/menubardesigner.png
new file mode 100644 (file)
index 0000000..3a5740f
Binary files /dev/null and b/docs/en/source/menubardesigner.png differ
diff --git a/docs/en/source/metaprog.txt b/docs/en/source/metaprog.txt
new file mode 100644 (file)
index 0000000..f7b18c0
--- /dev/null
@@ -0,0 +1,1263 @@
+.. index:: 
+       single: Reflection and Meta-programming; Introduction
+
+===============================
+Reflection and Meta-programming
+===============================
+
+Since the Ring programming language is a dynamic language, we can get answers about
+the program code and we can modify our code during the runtime.
+
+In this chapter we will learn about this and the available functions to use.
+
+* locals()
+* globals()
+* functions()
+* cfunctions()
+* islocal()
+* isglobal()
+* isfunction()
+* iscfunction()
+* packages()
+* ispackage()
+* classes()
+* isclass()
+* packageclasses()
+* ispackageclass()
+* classname()
+* objectid()
+* isobject() 
+* attributes()
+* methods()
+* isattribute()
+* isprivateattribute()
+* ismethod()
+* isprivatemethod()
+* addattribute()
+* addmethod()
+* getattribute()
+* setattribute()
+* mergemethods()
+* packagename()
+
+.. index:: 
+       pair: Reflection and Meta-programming; locals()
+
+locals() Function
+=================
+
+We can get a list of variables names in the current scope using the locals() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       locals() --> a list contains the variables names in the current scope
+
+Example:
+
+.. code-block:: ring
+
+       test("hello")
+
+       func test cMsg
+
+               see cMsg + nl
+
+               x = 10
+               y = 20
+               z = 30
+
+               see locals()
+
+Output:
+
+.. code-block:: ring
+
+       hello
+       cmsg
+       x
+       y
+       z
+
+.. index:: 
+       pair: Reflection and Meta-programming; globals()
+
+globals() Function
+==================
+
+We can get a list of variables names in the global scope using the globals() function.
+
+Syntax:
+
+.. code-block:: ring
+       
+       globals() --> a list contains variables names in the global scope
+
+Example:
+
+.. code-block:: ring
+
+       x=10 y=20 z=30
+       test()
+
+       func test
+               see "message from test()" + nl +
+                   "Global Variables:" + nl
+               see globals()
+
+Output:
+
+.. code-block:: ring
+
+
+       message from test()
+       Global Variables:
+       x
+       y
+       z
+
+.. index:: 
+       pair: Reflection and Meta-programming; functions()
+
+functions() Function
+====================
+
+We can get a list of functions names written in the Ring language using the functions() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       functions() --> a list contains functions names
+
+Example:
+
+.. code-block:: ring
+
+       see functions()
+
+       func f1
+               see "f1" + nl
+
+       func f2
+               see "f2" + nl
+
+       func f3 
+               see "f3" + nl
+
+Output:
+
+.. code-block:: ring
+
+       f1
+       f2
+       f3
+
+.. index:: 
+       pair: Reflection and Meta-programming; cfunctions()
+
+cfunctions() Function
+=====================
+
+We can get a list of functions names written in the C language using the cfunctions() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       cfunctions() --> a list contains functions names
+
+Example:
+
+.. code-block:: ring
+
+       aList =  cfunctions()
+       See "Count : " + len(aList) + nl
+       for x in aList
+               see x + "()" + nl
+       next
+
+Output:
+
+.. code-block:: ring
+
+       Count : 210
+       len() 
+       add() 
+       del() 
+       get() 
+       clock()
+       ...
+
+.. note:: The complete list is removed from the previous output.
+
+.. index:: 
+       pair: Reflection and Meta-programming; islocal()
+
+islocal() Function
+==================
+
+We can check if a variable is defined in the local scope or not using the islocal() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       islocal(cVariableName) --> returns 1 if the variable is defined in the local scope
+                                  returns 0 if the variable is not defined in the local scope
+
+Example:
+
+.. code-block:: ring
+
+       test()
+
+       func test
+               x=10 y=20
+               see islocal("x") + nl + 
+                   islocal("y") + nl + 
+                   islocal("z") + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+
+.. index:: 
+       pair: Reflection and Meta-programming; isglobal()
+
+isglobal() Function
+===================
+
+We can check if a variable is defined in the global scope or not using the isglobal() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       isglobal(cVariableName) --> returns 1 if the variable is defined in the global scope
+                                   returns 0 if the variable is not defined in the global scope
+
+Example:
+
+.. code-block:: ring
+
+       x=10 y=20
+
+       test()
+
+       func test
+               see isglobal("x") + nl + 
+                   isglobal("y") + nl + 
+                   isglobal("z") + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: Reflection and Meta-programming; isfunction()
+
+isfunction() Function
+=====================
+
+We can check if a Ring function is defined or not using the isfunction() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       isfunction(cFunctionName) --> returns 1 if the Ring function is defined
+                                     returns 0 if the Ring function is not defined
+
+Example:
+
+.. code-block:: ring
+
+       see isfunction("f1") + nl + 
+           isfunction("f2") + nl + 
+           isfunction("f3") + nl
+
+       func f1
+               see "message from f1()" + nl
+
+       func f2
+               see "message from f2()" + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: Reflection and Meta-programming; iscfunction()
+
+iscfunction() Function
+======================
+
+We can check if a C function is defined or not using the iscfunction() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       iscfunction(cFunctionName) --> returns 1 if the C function is defined
+                                      returns 0 if the C function is not defined
+
+Example:
+
+.. code-block:: ring
+
+       see iscfunction("len") + nl + 
+           iscfunction("add") + nl + 
+           iscfunction("test") + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: Reflection and Meta-programming; packages()
+
+packages() Function
+===================
+
+We can get a list of packages names using the packages() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       packages() --> a list contains packages names
+
+Example:
+
+.. code-block:: ring
+
+       See packages()
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+
+       Package Package3
+               Class class1
+                       Func f1
+
+       Package Package4
+               Class class1
+                       Func f1
+
+Output:
+
+.. code-block:: ring
+
+       package1
+       package2
+       package3
+       package4
+
+.. index:: 
+       pair: Reflection and Meta-programming; ispackage()
+
+ispackage() Function
+====================
+
+We can check if a package is defined or not using the ispackage() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       ispackage(cPackageName) --> returns 1 if the Package is defined
+                                   returns 0 if the Package is not defined
+
+Example:
+
+.. code-block:: ring
+
+       See ispackage("package1") + nl + 
+           ispackage("package4") + nl + 
+           ispackage("package5") + nl +
+           ispackage("package3") + nl
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+
+       Package Package3
+               Class class1
+                       Func f1
+
+       Package Package4
+               Class class1
+                       Func f1
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; classes()
+
+classes() Function
+==================
+
+We can get a list of classes names using the classes() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       classes() --> a list contains classes names
+
+Example:
+
+.. code-block:: ring
+
+       See classes()
+
+       Class class1
+               Func f1
+
+       Class class2
+               Func f1
+
+       Class class3
+               Func f1
+
+Output:
+
+.. code-block:: ring
+
+       class1
+       class2
+       class3
+
+.. index:: 
+       pair: Reflection and Meta-programming; isclass()
+
+isclass() Function
+==================
+
+We can check if a class is defined or not using the isclass() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       isclass(cClassName) -->  returns 1 if the Class is defined
+                                returns 0 if the Class is not defined
+
+Example:
+
+.. code-block:: ring
+
+       see isclass("class4") + nl + 
+           isclass("class3") + nl +
+           isclass("class2") + nl
+
+       Class class1
+               func f1
+
+       class class2
+               func f1
+
+       class class3
+               func f1
+
+Output:
+
+.. code-block:: ring
+
+       0
+       1
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; packagesclasses()
+
+packageclasses() Function
+=========================
+
+We can get a list of classes names inside a package using the packageclasses() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       packageclasses(cPackageName) --> a list contains classes names inside the package
+
+Example:
+
+.. code-block:: ring
+
+       see "classes in Package1" + nl
+       see packageclasses("Package1")
+       see "classes in Package2" + nl
+       see packageclasses("Package2")
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+               Class class2
+                       Func f1
+               Class class3
+                       func f1
+
+
+Output:
+
+.. code-block:: ring
+
+       classes in Package1
+       class1
+       classes in Package2
+       class1
+       class2
+       class3
+
+.. index:: 
+       pair: Reflection and Meta-programming; ispackagesclass()
+
+ispackageclass() Function
+=========================
+
+We can check if a class is defined inside package or not using the ispackageclass() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       ispackageclass(cPackageName,cClassName) -->  returns 1 if the Class is defined  
+                                                    returns 0 if the Class is not defined 
+
+Example:
+
+.. code-block:: ring
+
+       see ispackageclass("package1","class1") + nl +
+           ispackageclass("package1","class2") + nl +
+           ispackageclass("package2","class1") + nl +
+           ispackageclass("package2","class2") + nl
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+               Class class2
+                       Func f1
+               Class class3
+                       func f1
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+       1
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; classname()
+
+classname() Function
+====================
+               
+We can know the class name of an object using the classname() function
+
+Syntax:
+
+.. code-block:: ring
+
+       classname(object) --> Returns the object class name
+
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+       o2 = new rect
+
+       see classname(o1) + nl          # print point
+       see classname(o2) + nl          # print rect
+
+       class point
+       class rect
+
+.. index:: 
+       pair: Reflection and Meta-programming; objectid()
+
+objectid() Function
+===================
+
+We can know the object id using the objectid() function
+
+Syntax:
+
+.. code-block:: ring
+
+       objectid(object) --> Returns the object id
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+       see objectid(o1) + nl
+       test(o1)
+
+       func test v
+               see objectid(v) + nl
+
+       Class point x y z
+
+Output:
+
+.. code-block:: ring
+
+       021B5808
+       021B5808
+               
+.. index:: 
+       pair: Reflection and Meta-programming; isobject()
+
+isobject() Function
+===================
+
+We can check the variable to know if it's an object or not using the isobject() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isobject(variable) --> Returns True if it's an object, False if it's not
+
+               
+.. index:: 
+       pair: Reflection and Meta-programming; attributes()
+
+attributes() Function
+=====================
+
+We can get the object attributes using the attributes() function
+
+Syntax:
+
+.. code-block:: ring
+
+       attributes(object) --> Returns a list contains the object attributes
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+       aList = attributes(o1)          # we can use see attributes(o1)
+       for t in aList see t next       # print xyz 
+       Class Point x y z
+               
+.. index:: 
+       pair: Reflection and Meta-programming; methods()
+
+methods() Function
+==================
+
+We can get the object methods using the methods() function
+
+Syntax:
+
+.. code-block:: ring
+
+       methods(object) --> Returns a list contains the object methods
+
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new test
+       aList = methods(o1)
+
+       for x in aList
+               cCode = "o1."+x+"()"
+               eval(cCode)
+       next
+
+       Class Test
+               func f1
+                       see "hello from f1" + nl
+               func f2
+                       see "hello from f2" + nl
+               func f3
+                       see "hello from f3" + nl
+               func f4
+                       see "hello from f4" + nl
+
+Output:
+
+.. code-block:: ring
+
+       hello from f1
+       hello from f2
+       hello from f3
+       hello from f4
+
+
+.. index:: 
+       pair: Reflection and Meta-programming; isattribute()
+
+isattribute() Function
+======================
+
+We can test if the object contains an attribute or not using the isattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isattribute(object,cAttributeName) --> Returns True if the object contains the attribute
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see isattribute(o1,"x") + nl    # print 1
+       see isattribute(o1,"t") + nl    # print 0
+       see isattribute(o1,"y") + nl    # print 1
+       see isattribute(o1,"z") + nl    # print 1
+
+       class point x y z
+
+.. index:: 
+       pair: Reflection and Meta-programming; isprivateattribute()
+
+isprivateattribute() Function
+=============================
+
+We can test if the object contains a private attribute or not using the isprivateattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isprivateattribute(object,cAttributeName) --> Returns True if the object 
+                                                     contains the private attribute
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person
+
+       see isprivateattribute(o1,"name") + nl + 
+           isprivateattribute(o1,"address") + nl + 
+           isprivateattribute(o1,"phone") + nl + 
+           isprivateattribute(o1,"job") + nl + 
+           isprivateattribute(o1,"salary")
+
+       Class Person
+               name address phone
+               private
+                       job salary
+
+Output:
+
+.. code-block:: ring
+
+       0
+       0
+       0
+       1
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; ismethod()
+       
+ismethod() Function
+===================
+
+We can test if the object class contains a method or not using the ismethod() function
+
+Syntax:
+
+.. code-block:: ring
+
+       ismethod(object,cMethodName) --> Returns True if the object class contains the method
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see ismethod(o1,"print") + nl           # print 1
+
+       mylist = []
+       mylist + new point
+
+       see ismethod(mylist[1],"print") + nl    # print 1
+
+       class point x y z
+               func print
+                       see x + nl + y + nl + z + nl
+
+.. index:: 
+       pair: Reflection and Meta-programming; isprivatemethod()
+
+isprivatemethod() Function
+==========================
+
+We can test if the object class contains a private method or not using the isprivatemethod() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isprivatemethod(object,cMethodName) --> Returns True if the object class contains 
+                                               the private method
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Test
+
+       see isprivatemethod(o1,"f1") + nl +
+           isprivatemethod(o1,"f2") 
+
+       Class Test
+               func  f1
+                       see "message from f1()" + nl
+               private
+                       func f2
+                               see "message from f2()" + nl
+
+Output:
+
+.. code-block:: ring
+
+       0
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; addattribute()
+
+addattribute() Function
+=======================
+
+We can add an attribute (or a group of attributes) to the object state (not the class) using
+the addattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       AddAttribute(object,cAttributeName|aAttributesList)
+
+Example(1):
+
+.. code-block:: ring
+
+       see new point {x=10 y=20 z=30}
+       Class Point 
+               AddAttribute(self,["x","y","z"])
+
+Example(2):
+
+.. code-block:: ring
+
+       o1 = new point
+       addattribute(o1,"x")
+       addattribute(o1,"y")
+       addattribute(o1,"z")
+       see o1 {x=10 y=20 z=30}
+       class point
+
+
+Output:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+
+.. index:: 
+       pair: Reflection and Meta-programming; addmethod()
+
+
+addmethod() Function
+====================
+
+We can add a method to the object class using the addmethod() function
+This method can be used with any object from the same class.
+
+Syntax:
+
+.. code-block:: ring
+
+       AddMethod(Object,cNewMethodName,cMethodName|AnonymousFunction)
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+
+       Class point
+               x y z
+       
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+
+Instead of using anonymous function to add new method to the class, we can use the function name
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+
+       myfunc = func { see x + nl + y + nl + z + nl }
+
+       addmethod(o1,"print", myfunc )
+       addmethod(o1,"display", myfunc )
+       addmethod(o1,"show", myfunc )
+
+       o1.print()
+       o1.display()
+       o1.show()
+
+       Class point
+               x y z
+
+
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+       10
+       20
+       30
+       10
+       20
+       30
+
+Since we add the method to the class, any object from that class can use this method
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+       o2 = new point { x=100 y=200 z=300 }
+       o3 = new point { x=50 y=150 z=250 }
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+       o2.print()
+       o3.print()
+
+       Class point
+               x y z
+
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+       100
+       200
+       300
+       50
+       150
+       250
+
+.. index:: 
+       pair: Reflection and Meta-programming; getattribute()
+
+getattribute() function
+=======================
+
+We can get the object attribute value using the getattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       GetAttribute(oObject,cAttributeName) ---> Attribute Value
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see getattribute(o1,"name") + nl +
+           getattribute(o1,"x") + nl +
+           getattribute(o1,"y") + nl + 
+           getattribute(o1,"z") + nl
+
+       Class Point
+               x=10 y=20 z=30
+               name = "3D-Point"
+       
+Output:
+
+.. code-block:: ring
+
+       3D-Point
+       10
+       20
+       30
+       
+
+Example:
+
+We can Find a Class List Member using GetAttribute() using a function findclass()
+The Find uses the member name, rather than the column number
+
+.. code-block:: ring
+
+       myList =
+                 [new Company {position=3 name="Mahmoud" symbol="MHD"},
+                  new Company {position=2 name="Bert" symbol="BRT"},
+                  new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+       
+       see myList
+       see nl +"=====================" + nl + nl
+       
+       for i = 1 to len(myList)
+            see  "Pos: "+ i +" | "+ myList[i].position +" | "+ myList[i].name +
+                 " | "+  myList[i].symbol    +" | "+ nl
+       next
+       
+       
+       See findclass(myList, "MHD", "symbol") +nl   ### Specify Member class name
+       
+       ###---------------------------------------
+       
+       func findclass classList, cValue, classMember
+       
+              See nl + "FindClass: "  +" "+ cValue + nl + nl
+       
+              for i = 1 to len(classList)
+                   result = getattribute( classList[i], classMember )
+                  
+                  See "Result-Attr: " + i +" "+  result +nl
+                  if result = cValue
+                      j = i
+                   ok      
+              next
+       return j
+       
+       ###--------------------------------------
+       
+       class company position name symbol
+
+Output:
+
+.. code-block:: ring
+
+       Pos: 1 | 3 | Mahmoud | MHD |
+       Pos: 2 | 2 | Bert | BRT |
+       Pos: 3 | 1 | Ring | RNG |
+       
+       FindClass:  MHD
+       
+       Result-Attr: 1 MHD
+       Result-Attr: 2 BRT
+       Result-Attr: 3 RNG
+       
+       1
+
+       
+.. index:: 
+       pair: Reflection and Meta-programming; setattribute()
+
+setattribute() function
+=======================
+
+We can set the object attribute value using the setattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       SetAttribute(oObject,cAttributeName,Value)
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person
+       setattribute(o1,"cName","Mahmoud")
+       setattribute(o1,"nSalary",1000000)
+       setattribute(o1,"aColors",["white","blue","yellow"])
+
+       see o1
+       see o1.aColors
+
+       Class Person
+               cName
+               nSalary
+               aColors
+
+Output:
+
+.. code-block:: ring
+
+       cname: Mahmoud
+       nsalary: 1000000.000000
+       acolors: List...
+       white
+       blue
+       yellow
+
+.. index:: 
+       pair: Reflection and Meta-programming; mergemethods()
+
+mergemethods() Function
+=======================
+
+We can share methods between classes without inheritance using the MergeMethods() function
+
+This function merge class methods to another class.
+
+Syntax:
+
+.. code-block:: ring
+
+       MergeMethods(cClassNameDestination,cClassNameSource)
+
+Example:
+
+.. code-block:: ring
+
+       mergemethods("count","share")
+       mergemethods("count2","share")
+
+       o1 = new count  { test() }
+       o1 = new count2 { test() }
+
+       Class Share
+               func one
+                       see "one" + nl
+               func two
+                       see "two" + nl
+               func three
+                       see "three" + nl
+
+       Class Display
+               Func printline
+                       see copy("*",20) + nl
+
+       Class Count from Display
+               Func test
+                       printline()
+                       one()
+                       two()
+                       three()
+                       printline()
+
+       Class Count2 from Display
+               Func test
+                       three()
+                       two()
+                       one()
+                       printline()     
+
+Output:
+
+.. code-block:: ring
+
+       ********************
+       one
+       two
+       three
+       ********************
+       three
+       two
+       one
+       ********************
+
+.. index:: 
+       pair: Reflection and Meta-programming; packagename()
+
+packagename() Function
+====================
+               
+We can know the package name of the latest sucessful import command using the packagename() function
+
+Syntax:
+
+.. code-block:: ring
+
+       packagename() --> Returns the package name of the latest sucessful import
+
+
+Example:
+
+.. code-block:: ring
+
+       load "weblib.ring"
+       import System.web
+       see packagename()       # system.web
\ No newline at end of file
diff --git a/docs/en/source/minesweeper.png b/docs/en/source/minesweeper.png
new file mode 100644 (file)
index 0000000..57fc298
Binary files /dev/null and b/docs/en/source/minesweeper.png differ
diff --git a/docs/en/source/more3dsamples.jpg b/docs/en/source/more3dsamples.jpg
new file mode 100644 (file)
index 0000000..1f264be
Binary files /dev/null and b/docs/en/source/more3dsamples.jpg differ
diff --git a/docs/en/source/more3dsamples2.jpg b/docs/en/source/more3dsamples2.jpg
new file mode 100644 (file)
index 0000000..115494a
Binary files /dev/null and b/docs/en/source/more3dsamples2.jpg differ
diff --git a/docs/en/source/multilanguage.txt b/docs/en/source/multilanguage.txt
new file mode 100644 (file)
index 0000000..d669f6c
--- /dev/null
@@ -0,0 +1,121 @@
+.. index:: 
+     single: Multi-language applications; Introduction
+
+===========================
+Multi-language Applications
+===========================
+
+There are many ways to create multi-language Ring application!
+
+In this chapter we will learn about using the String2Constant tool
+
+.. index:: 
+     pair: Multi-language applications; Using String2Constant
+
+Using String2Constant
+=====================
+
+Starting from Ring 1.8 we have the String2Constant application
+
+You will find this tool in the ring/samples/tools/string2constant folder
+
+Using this tool we can convert the source code to be based on constants instead of string literals
+
+Then we can store constants in separate source code files that we can translate to different languages
+
+Where we can have special file for each language, like (English.ring, Arabic.ring and so on)
+
+Using this simple tool, the Form Designer is translated to Arabic language too just as an example.
+
+.. image:: string2constant.png
+       :alt: String2Constant 
+
+.. index:: 
+     pair: Multi-language applications; Form Designer Translation
+
+Form Designer Translation
+=========================
+
+You will find the form designer application in the ring/applications/formdesigner folder
+
+The files used for translation are stored in the ring/applications/formdesinger/translation folder
+
+You will find two files
+
+* Arabic.ring
+* English.ring
+
+You can check these files to get an idea about constants definition.
+
+The next section from the English.ring file
+
+.. code-block:: ring
+
+       T_LANGUAGE = "english"
+       T_LAYOUTDIRECTION = 0                   # Left to Right
+
+       T_FORMDESIGNER_FORMDESIGNER             = "Form Designer"
+       T_FORMDESIGNER_FORMTITLE                = "Form1"
+
+       T_FORMDESIGNER_FILE                     = "File"
+       T_FORMDESIGNER_NEW                      = "New"
+       T_FORMDESIGNER_OPEN                     = "Open"
+       T_FORMDESIGNER_SAVE                     = "Save"
+       T_FORMDESIGNER_SAVEAS                   = "Save As"
+       T_FORMDESIGNER_CLOSE                    = "Close"
+
+The form designer source code files will use these constants instead of typing the string literals 
+
+the next section from the formdesigner/mainwindow/formdesignerview.ring
+
+.. code-block:: ring
+
+               # Create the Main Window and use the Mdi Area
+                       win = new qMainwindow() {
+                               setWindowTitle(T_FORMDESIGNER_FORMDESIGNER) # "Form Designer"
+                               setcentralWidget(this.oArea)
+                               setLayoutDirection(T_LAYOUTDIRECTION)
+                       }
+
+* Using comments we can write the string literal to get more readable code.
+
+* Using setLayoutDirection() method we can set the window direction to be Right To Left.
+
+* Using the Load command, We can determine which translation file to use. 
+
+.. index:: 
+     pair: Multi-language applications; Forms Translation
+
+Forms Translation
+=================
+
+After creating the form using the Form Designer, the View class will be generated.
+
+We don't modify the view class, We just add the translation through the Controller class.
+
+For example, we have the form file : ring/formdesigner/selobjects/selobjects.rform
+
+.. image:: formtranslation1.png
+       :alt: Form Translation 
+
+
+And we add the translation through the Controller class using the next code
+
+And we define the constants in English.ring and Arabic.ring
+
+.. code-block:: ring 
+
+       class selobjectsController from windowsControllerParent
+
+               oView = new selobjectsView  {
+                       ListObjects.setselectionmode(QAbstractItemView_MultiSelection)
+                       win.setwindowmodality(2)
+                       # Translation
+                               win.setWindowTitle(T_FORMDESIGNER_SELOBJECTS_TITLE)
+                               win.setLayoutDirection(T_LAYOUTDIRECTION)
+                               labelobjects.setText(T_FORMDESIGNER_SELOBJECTS_OBJECTS)
+                               btnSelect.setText(T_FORMDESIGNER_SELOBJECTS_SELECT)
+                               btnClose.setText(T_FORMDESIGNER_SELOBJECTS_CLOSE)
+               }
+
+
diff --git a/docs/en/source/mysql.txt b/docs/en/source/mysql.txt
new file mode 100644 (file)
index 0000000..eb3ef70
--- /dev/null
@@ -0,0 +1,623 @@
+.. index:: 
+       single: MySQL Functions; Introduction
+
+===============
+MySQL Functions
+===============
+
+In this chapter we are going to learn about the MySQL functions provided by the Ring programming language.
+
+* MySQL_Info()
+* MySQL_Init()
+* MySQL_Error()
+* MySQL_Connect()
+* MySQL_Close()
+* MySQL_Query()
+* MySQL_Insert_ID()
+* MySQL_Result()
+* MySQL_Next_Result()
+* MySQL_Columns()
+* MySQL_Result2()
+* MySQL_Escape_String()
+* MySQL_AutoCommit()
+* MySQL_Commit()
+* MySQL_Rollback()
+
+Before using the next function load the mysqllib.ring library
+
+.. code-block:: ring
+
+       load "mysqllib.ring"
+       # Use MySQL functions
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Info()
+
+MySQL_Info() Function 
+=====================
+
+We can get the MySQL Client version using the MySQL_Info() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Info() ---> string contains the MySQL Client version
+
+Example:
+
+.. code-block:: ring
+
+       see "MySQL Client Version : " + mysql_info()
+
+Output:
+
+.. code-block:: ring
+
+       MySQL Client Version : 6.1.5
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Init()
+
+MySQL_Init() Function
+=====================
+
+We can start using MySQL Client through the MySQL_Init() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Init() ---> MySQL Handle
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Error()
+
+MySQL_Error() Function
+======================
+
+We can get the error message from the MySQL Client using the MySQL_Error() function.
+
+Syntax: 
+
+.. code-block:: ring
+
+       MySQL_Error(MySQL Handle) ---> Error message as string
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Connect()
+
+MySQL_Connect() Function
+========================
+
+We can connect to the MySQL database server using the MySQL_Connect() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Connect(MySQL Handle, cServer, cUserName, cPassword) ---> lStatus
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Close()
+
+MySQL_Close() Function
+======================
+
+We can close the connection to the MySQL database using the MySQL_Close() function
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Close(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Query()
+
+MySQL_Query() Function
+======================
+
+We can execute SQL queries using the MySQL_Query() function
+
+Syntax:
+
+.. code-block:: ring
+       
+       MySQL_Query(MySQL Handle, cSQLQuery)
+
+.. index:: 
+       pair: MySQL Functions; Create Database
+
+Create Database
+===============
+
+The next example connect to MySQL Server then create new database.
+
+.. code-block:: ring
+
+       See "MySQL Test - Create Database" + nl
+       con = mysql_init()
+
+       See "Connect" + nl
+       if mysql_connect(con,"localhost","root","root") = 0
+               see "Cann't connect" + nl
+               see "Error : " + mysql_error(con) + nl
+               mysql_close(con)
+               bye
+       ok
+
+       See "Create Database..." + nl
+       mysql_query(con,"CREATE DATABASE mahdb")
+
+       See "Close Connection" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       MySQL Test - Create Database
+       Connect
+       Create Database...
+       Close Connection
+
+.. index:: 
+       pair: MySQL Functions; Create Table and Insert Data
+
+Create Table and Insert Data
+============================
+
+The next example create new table and insert records 
+
+.. code-block:: ring
+
+       func main
+               see "Create Table and Insert Records" + nl
+               con = mysql_init()
+
+               see "Connect" + nl
+               if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
+                       system_error(con) 
+               ok
+
+               see "Drop table" + nl
+               if mysql_query(con, "DROP TABLE IF EXISTS Employee")  system_error(con) ok
+  
+               see "Create table" + nl
+               if mysql_query(con, "CREATE TABLE Employee(Id INT, Name TEXT, Salary INT)") 
+                  system_error(con) ok
+               see "Insert data" + nl 
+               if mysql_query(con, "INSERT INTO Employee VALUES(1,'Mahmoud',15000)") 
+                  system_error(con) ok
+  
+               if mysql_query(con, "INSERT INTO Employee VALUES(2,'Samir',16000)") 
+                  system_error(con) ok
+
+               if mysql_query(con, "INSERT INTO Employee VALUES(3,'Fayed',17000)")  
+                  system_error(con) ok
+
+               see "Close connection" + nl
+               mysql_close(con) 
+
+       func system_error con
+               see mysql_error(con)  mysql_close(con)  bye
+
+
+Output:
+
+.. code-block:: ring
+
+       Create Table and Insert Records
+       Connect
+       Drop table
+       Create table
+       Insert data
+       Close connection
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Inser_ID()
+
+MySQL_Insert_ID() Function
+==========================
+
+We can get the inserted row id using the MySQL_Insert_ID() function
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Insert_ID() ---> Inserted row id as number
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "connect to database" + nl
+       mysql_connect(con,"localhost","root","root","mahdb")
+       see "drop table" + nl
+       mysql_query(con, "DROP TABLE IF EXISTS Customers")
+       see "create table" + nl
+       mysql_query(con, "CREATE TABLE Customers(Id INT PRIMARY KEY AUTO_INCREMENT, Name TEXT)")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Mahmoud')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Samir')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Fayed')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Test 2015')")
+
+       see "inserted row id : " + mysql_insert_id(con) + nl
+       see "close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       connect to database
+       drop table
+       create table
+       insert record
+       insert record
+       insert record
+       insert record
+       inserted row id : 4
+       close database
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Result()
+
+MySQL_Result() Function
+=======================
+
+We can get the query result (data without column names) using the MySQL_Result() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Result(MySQL Handle) ---> List contains the query result  
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Next_Result()
+
+MySQL_Next_Result() Function
+============================
+
+We can move to the next query result using the MySQL_Next_Result() function.
+We use this function when we have multiple SQL statements in the same query.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Next_Result(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; Print Query Result
+
+Print Query Result
+==================
+
+The next example execute a query on the database then print the result.
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT Name FROM Employee WHERE Id=1;"+
+                        "SELECT Name FROM Employee WHERE Id=3")
+       see "Print Result" + nl 
+       see mysql_result(con)
+       mysql_next_result(con)
+       see mysql_result(con)
+       see "close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Print Result
+       Mahmoud
+       Fayed
+       close database
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Columns()
+
+MySQL_Columns() Function
+========================
+
+We can get a list of columns names using the MySQL_Columns() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Columns(MySQL Handle) ---> List contains columns information
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT * FROM Employee")
+       see "Result" + nl 
+       see mysql_columns(con)
+       see "Close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Result
+       Id
+       11
+       3
+       32768
+       Name
+       65535
+       252
+       16
+       Salary
+       11
+       3
+       32768
+       Close database
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Result2()
+
+MySQL_Result2() Function
+========================
+
+Instead of using MySQL_Result() to get the result data without columns names, we can use the MySQL_Result2() to get all of the
+column names then the query result in one list.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Result2(MySQL Handle) ---> List (query result starts with columns names)
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT * FROM Employee")
+       see "Print Result" + nl 
+       see mysql_result2(con)
+       see "Close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Print Result
+       Id
+       Name
+       Salary
+       1
+       Mahmoud
+       15000
+       2
+       Samir
+       16000
+       3
+       Fayed
+       17000
+       Close database
+
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Escape_String()
+
+MySQL_Escape_String() Function
+==============================
+
+We can store binary data and special characters in the database after
+processing using MySQL_Escape_String() function
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Escape_String(MySQL Handle, cString) ---> String after processing
+
+.. index:: 
+       pair: MySQL Functions; Save Image Inside the Database
+
+Save Image inside the database
+==============================
+
+Example:
+
+.. code-block:: ring
+
+       See "Read file" + nl
+       cFile = read("tests\mahmoud.jpg")
+       con = mysql_init()
+       See "Connect to database..." + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       See "Escape string..." + nl
+       cFile = mysql_escape_string(con,cFile)
+       stmt = "INSERT INTO photo(id, data) VALUES(1, '" + cFile + "')"
+       See "Insert data..." + nl
+       mysql_query(con,stmt)
+       See "Close database..." + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Read file
+       Connect to database...
+       Escape string...
+       Insert data...
+       Close database...
+
+.. index:: 
+       pair: MySQL Functions; Restore Image From The Database
+
+Restore Image From The Database
+===============================
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       See "Connect to database..." + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       See "Read data from database..." + nl
+       mysql_query(con,"SELECT data FROM photo WHERE id=1")
+       See "Write new file" + nl
+       result = mysql_result(con)
+       write("tests\mahmoud2.jpg",result[1][1])
+       See "Close database..." + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database...
+       Read data from database...
+       Write new file
+       Close database...
+
+
+.. index:: 
+       pair: MySQL Functions; MySQL_AutoCommit()
+
+MySQL_AutoCommit() Function
+===========================
+
+We can enable or disable the auto commit feature using the MySQL_AutoCommit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_AutoCommit(MySQL Handle, lStatus)  # lstatus can be True/False
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Commit()
+
+MySQL_Commit() Function
+=======================
+
+We can commit updates to the database using the MySQL_Commit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Commit(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Rollback()
+
+MySQL_Rollback() Function
+=========================
+
+We can rollback updates to the database using the MySQL_Rollback() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Rollback(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; Transaction Example
+
+Transaction Example
+===================
+
+The next example presents the usage of MySQL_Autocommit(), MySQL_Commit() 
+& MySQL_RollBack() functions.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+       
+               con = mysql_init()
+
+               see "Connect" + nl
+               if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
+                       system_error(con) ok
+
+               see "Drop table" + nl
+               if mysql_query(con, "DROP TABLE IF EXISTS Employee2") 
+                       system_error(con) ok
+  
+               see "Create table" + nl
+               if mysql_query(con, "CREATE TABLE Employee2(Id INT, Name TEXT, Salary INT)")
+                       system_error(con) ok
+               see "Insert data" + nl 
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(1,'Mahmoud',15000)") 
+                       system_error(con) ok
+  
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(2,'Samir',16000)")
+                       system_error(con) ok
+
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(3,'Fayed',17000)") 
+                       system_error(con) ok
+
+               mysql_autocommit(con,False)
+               mysql_query(con, "INSERT INTO Employee2 VALUES(4,'Ahmed',5000)")
+               mysql_query(con, "INSERT INTO Employee2 VALUES(5,'Ibrahim',50000)")
+               mysql_query(con, "INSERT INTO Employee2 VALUES(6,'Mohammed',50000)")
+               See "Save transaction (y/n) " give nChoice
+               if upper(nChoice) = "Y"
+                       mysql_commit(con)
+               else
+                       mysql_rollback(con)
+               ok
+
+               see "Close connection" + nl
+               mysql_close(con) 
+
+       func system_error con
+
+               see mysql_error(con)
+               mysql_close(con)
+               bye
+
+Output:
+
+.. code-block:: ring
+
+       Connect
+       Drop table
+       Create table
+       Insert data
+       Save transaction (y/n) y
+       Close connection
\ No newline at end of file
diff --git a/docs/en/source/natural.txt b/docs/en/source/natural.txt
new file mode 100644 (file)
index 0000000..c4916a7
--- /dev/null
@@ -0,0 +1,629 @@
+.. index:: 
+       single: Natural Language Programming; Introduction
+
+============================
+Natural Language Programming
+============================
+
+Using the Ring programming language, we can create Natural programming languages based
+on classes and objects.
+
+.. index:: 
+       pair: Natural Language Programming; History
+
+History
+=======
+
+In 2010, I developed a new programming language called Supernova (developed using PWCT).
+This language uses a code that looks similar to Natural Language statements to create simple GUI applications.
+Now after five years, In the Ring programming language, we can get similar results, but now we have the ability 
+to create/use code similar to Natural language statements in any domain that we like or need.
+
+The Ring programming language comes with the Supernova spirit, but with more generalization and with mix of other languages
+spirits.
+
+.. index:: 
+       pair: Natural Language Programming; Example
+
+Example
+=======
+
+The next example presents how to create a class that define two instructions 
+
+The first instruction is : I want window
+
+The second instruction is : Window title = <expr>
+
+Also keywords that can be ignored like the 'the' keyword
+
+.. code-block:: ring
+
+       New App 
+       {
+               I want window   
+               The window title = "hello world"
+       }
+
+       Class App
+
+               # Attributes for the instruction I want window
+                       i want window 
+                       nIwantwindow = 0
+               # Attributes for the instruction Window title
+               # Here we don't define the window attribute again
+                       title 
+                       nWindowTitle = 0
+               # Keywords to ignore, just give them any value
+                       the=0   
+
+               func geti
+                       if nIwantwindow = 0
+                               nIwantwindow++
+                       ok
+
+               func getwant
+                       if nIwantwindow = 1
+                               nIwantwindow++
+                       ok
+
+               func getwindow
+                       if nIwantwindow = 2
+                               nIwantwindow= 0
+                               see "Instruction : I want window" + nl
+                       ok
+                       if nWindowTitle = 0
+                               nWindowTitle++
+                       ok
+       
+               func settitle cValue
+                       if nWindowTitle = 1
+                               nWindowTitle=0
+                               see "Instruction : Window Title = " + cValue + nl
+                       ok
+               
+
+Output:
+
+.. code-block:: ring
+
+       Instruction : I want window
+       Instruction : Window Title = hello world
+
+
+.. index:: 
+       pair: Natural Language Programming; Change the Ring Keyword 'And'
+
+Change the Ring Keyword 'And'
+=============================
+
+What if we want to connect between the two instructions using 'and'
+
+We have a problem because in Ring 'and' is a keyword
+
+We can change that using the ChangeRingKeyword command.
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingKeyword  <oldkeyword>  <newkeyword>
+
+.. note:: remember to restore the keyword again 
+
+.. tip:: The ChangeRingKeyword command is executed in the scanner stage by the compiler (before parsing).
+       
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+
+       New App
+       {
+                       I want window and the window title = "hello world"
+       }
+
+       Class App
+
+                       # Attributes for the instruction I want window
+                                       i want window
+                                       nIwantwindow = 0
+                       # Attributes for the instruction Window title
+                       # Here we don't define the window attribute again
+                                       title
+                                       nWindowTitle = 0
+                       # Keywords to ignore, just give them any value
+                                       the=0  and=0
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+                       func getand
+                               see "Using : and" + nl
+
+
+
+Output:
+
+.. code-block:: ring
+
+       Instruction : I want window
+       Using : and
+       Instruction : Window Title = hello world
+                       
+
+.. index:: 
+       pair: Natural Language Programming; Change the Ring Operator '+'
+
+Change the Ring Operator '+'
+============================
+
+What if we want to define a new behavior for any operator like the "+" operator.
+
+We can do this change using the ChangeRingOperator command to hide operator (change it's name)
+
+Then we can use the operator as identifier that we can handle it's behaviour
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingOperator  <oldoperator>  <newoperator>
+
+.. note:: remember to restore the operator again 
+
+.. tip:: The ChangeRingOperator command is executed in the scanner stage by the compiler (before parsing).
+       
+Example:
+
+.. code-block:: ring
+
+       ChangeRingOperator + _+
+
+       New App {
+               +
+       }
+
+       Class App
+               + 
+               func get+
+                       see "Plus operator" 
+
+       ChangeRingOperator _+ +
+
+Output:
+
+.. code-block:: ring
+
+       Plus operator
+
+.. index:: 
+       pair: Natural Language Programming; Change the '=' operator to 'is'
+
+Change the '=' operator to 'is'
+===============================
+       
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+       ChangeRingOperator      =    is
+
+       New App
+       {
+                       I want window and the window title is "hello world"
+       }
+
+       ChangeRingOperator      is    =
+
+       Class App
+
+                       # Attributes for the instruction I want window
+                                       i want window
+                                       nIwantwindow = 0
+                       # Attributes for the instruction Window title
+                       # Here we don't define the window attribute again
+                                       title
+                                       nWindowTitle = 0
+                       # Keywords to ignore, just give them any value
+                                       the=0  and=0
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+
+.. index:: 
+       pair: Natural Language Programming; Using Eval() with our Natural Code
+
+Using Eval() with our Natural Code
+==================================
+
+Example:
+
+.. code-block:: ring
+
+       func Main
+
+         cProgram = ' I want window and the window title is "hello world" '
+
+         MyLanguage(cProgram)
+
+       Func MyLanguage cCode
+
+         # We add to the code the instructions that change keywords and operators 
+         # Because Eval() uses a new Compiler Object (the original keywords and operatos).
+         
+         cCode = '
+               ChangeRingKeyword  and  _and
+               ChangeRingOperator  =    is
+         ' + cCode
+
+         New App
+         {
+                 eval(cCode)
+         }
+
+
+         Class App
+
+                 # Attributes for the instruction I want window
+                         i want window
+                         nIwantwindow = 0
+                 # Attributes for the instruction Window title
+                 # Here we don't define the window attribute again
+                         title
+                         nWindowTitle = 0
+                 # Keywords to ignore, just give them any value
+                         the=0  
+
+                 ChangeRingKeyword  and  _and
+                         and=0
+                 ChangeRingKeyword  _and  and
+
+                 func geti
+                       if nIwantwindow = 0
+                         nIwantwindow++
+                       ok
+
+                 func getwant
+                       if nIwantwindow = 1
+                         nIwantwindow++
+                       ok
+
+                 func getwindow
+                       if nIwantwindow = 2
+                         nIwantwindow= 0
+                         see "Instruction : I want window" + nl
+                       ok
+                       if nWindowTitle = 0
+                         nWindowTitle++
+                       ok
+
+                 func settitle cValue
+                       if nWindowTitle = 1
+                         nWindowTitle=0
+                         see "Instruction : Window Title = " + cValue + nl
+                       ok
+
+               
+.. index:: 
+       pair: Natural Language Programming; BraceStart and BraceEnd Methods
+
+BraceStart and BraceEnd Methods
+===============================
+
+We can write code that will be executed before/after using { }
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new test {
+               see "Hello" + nl
+       }
+
+       o1 {}
+
+       class test
+
+               func bracestart
+                       see "start" + nl
+
+               func braceend
+                       see "end" + nl
+
+Output:
+
+.. code-block:: ring
+
+       start
+       Hello
+       end
+       start
+       end
+
+
+.. index:: 
+       pair: Natural Language Programming; BraceExprEval Method
+
+BraceExprEval Method
+====================
+
+The next example demonstrates how to use the "BraceExprEval" method to get expressions in
+Natural code.
+
+Example:
+
+.. code-block:: ring
+
+       new natural {
+               create 5
+       }
+
+       class natural
+               create=0
+               lkeyword = false
+               func braceexpreval r            
+                       if lkeyword lkeyword=false return ok
+                       see "expr eval" + nl
+                       see "type: " + type(r) see nl
+                       see "value : " see r see nl
+               func getcreate
+                       lkeyword = true
+                       see "create" + nl
+
+Output:
+
+.. code-block:: ring
+
+       create
+       expr eval
+       type: NUMBER
+       value : 5
+
+.. index:: 
+       pair: Natural Language Programming; Real Natual Code
+
+Real Natural Code
+=================
+
+The next example is a more advanced example 
+
+.. code-block:: ring
+
+       # Natural Code
+       new program {
+               Accept 2 numbers then print the sum
+       }
+
+       # Natural Code Implementation
+       class program
+               # Keywords
+                       Accept=0 numbers=0 then=0 print=0 the=0 sum=0
+
+               # Execution
+               func braceexpreval x
+                       value = x
+               func getnumbers
+                       for x=1 to value
+                               see "Enter Number ("+x+") :" give nNumber
+                               aNumbers + nNumber
+                       next
+               func getsum
+                       nSUm = 0
+                       for x in aNumbers nSum+= x next
+                       see "The Sum : " + nSum
+               private
+                       value=0 aNumbers=[]
+               
+Output: 
+
+.. code-block:: ring
+
+       Enter Number (1) :3
+       Enter Number (2) :4
+       The Sum : 7
+
+.. index:: 
+       pair: Natural Language Programming; BraceError() Method
+
+BraceError() Method
+===================
+
+The next examples demonstrates how to use the "BraceError" method to handle errors when accessing
+the object using braces {}.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+               o1 = new point {
+                       x=10 y=20 z=30
+                       TEST
+                       SEE test
+               }
+
+       class point x y z
+               func braceerror
+                       see "Handle Error!" + nl
+                       SEE "Message :" + cCatchError + nl
+                       if ( left(cCatchError,11) = "Error (R24)" ) and not isattribute(self,"test")
+                               see "add attribute" + nl
+                               addattribute(self,"test")
+                               test = 10
+                       ok
+                       see "done" + nl
+                       return 
+                       
+Output:
+
+.. code-block:: ring
+
+       Handle Error!
+       Message :Error (R24) : Using uninitialized variable : test
+       add attribute
+       done
+       10
+       
+Example:
+
+.. code-block:: ring
+
+       new point {
+               x=10 y=20 z=30
+               test()
+               see "mmm..." + NL
+       }
+
+       class point x y z
+               func braceerror
+                       see "Handle Error!" + nl
+                       see "Message :" + cCatchError + nl
+                       see self
+                       see "Done" + NL
+                       
+Output:
+
+.. code-block:: ring
+
+       Handle Error!
+       Message :Error (R3) : Calling Function without definition !: test
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       Done
+       mmm...
+       
+.. index:: 
+       pair: Natural Language Programming; Clean Natural Code
+
+Clean Natural Code
+==================
+
+Instead of typing the literal as "literal" we can accept the words directly.
+
+Example:
+
+The next example accept hello world instead of "hello world"
+
+But this example uses braceend() to check the end of the instruction
+
+This means that this class process only one natural statement that end with literal.
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+
+       New App
+       {
+                       I want window and the window title is hello world
+       }
+
+       Class App
+
+                       # Attributes for the instruction I want window
+                                       i want window
+                                       nIwantwindow = 0
+                       # Attributes for the instruction Window title
+                       # Here we don't define the window attribute again
+                                       title is 
+                                       nWindowTitle = 0
+                       # Keywords to ignore, just give them any value
+                                       the=0  and=0
+                       # Data
+                                       literal = ""
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func gettitle
+                               if nWindowTitle = 1
+                                       nWindowTitle=2
+                               ok
+                       
+                       func getis
+                               if nWindowTitle = 2
+                                       nWindowTitle=3
+                               ok                      
+
+                       func braceend
+                               if nWindowTitle = 3
+                                       see "Instruction : Window Title = " + literal + nl
+                                       nWindowTitle = 0
+                               ok
+
+                       func braceerror
+                               c= substr(cCatchError,":")
+                               while c > 0 
+                                       c= substr(cCatchError,":") 
+                                       cCatchError=substr(cCatchError,c+1)  
+                               end
+                               literal += substr(cCatchError,1)
diff --git a/docs/en/source/naturallibrary.txt b/docs/en/source/naturallibrary.txt
new file mode 100644 (file)
index 0000000..84b9f59
--- /dev/null
@@ -0,0 +1,448 @@
+.. index:: 
+       single: Using the Natural Library; Introduction
+
+=========================
+Using the Natural Library
+=========================
+
+In this chapter we will learn how to use the Natural Library to quickly define a language
+that contains a group of commands.
+
+To start using the library, We need to call naturallib.ring
+
+.. code-block:: ring
+
+       load "naturallib.ring"
+
+After loading the library, We can use the NaturalLanguage class that contains the 
+next methods :-
+
+* SetLanguageName(cLanguageName)
+* setCommandsPath(cFolder)
+* SetPackageName(cPackageName)
+* UseCommand(cCommandName)
+* SetOperators(cOperators)
+* RunFile(cFileName)
+* RunString(cString)
+
+.. index:: 
+       pair: Using the Natural Library; Natural Library - Demo Program
+
+Natural Library - Demo Program
+==============================
+
+We will write the natural code in a Text file, for example program.txt
+
+File: program.txt
+
+.. code-block:: none
+
+       Welcome to the Ring programming language!
+       What you are reading now is not comments, I swear!
+
+       After many years of programming I decided to think different about
+       programming and solve the problems in a better way. 
+
+       We are writing commands or code and the Ring language is reading
+       it to understand us! Sure, What you are seeing now is
+       just ***part of the code - Not the Complete Program***
+       You have to write little things before and after this 
+       part to be able to run it!
+
+       It is the natural part of our code where we can write in English, 
+       Arabic or any Natural Language Then we will tell the computer 
+       through the Ring language what must happens! in a way that we can scale 
+       for large frameworks and programs.
+
+       Just imagine what will happens to the world of programming once
+       we create many powerful frameworks using the Ring language that
+       uses this way (Natural Programming).
+
+       For example When we say Hello to the Machine, It can reply! and when we
+       say count from 1 to 5 it will understand us, Also if 
+       we said count from 5 to 1 it will
+       understand us too! You can see the Output window!
+
+       This Goal is not new, but the Ring language comes
+       with an innovative solution to this problem.    
+
+Output:
+
+.. code-block:: none
+
+       Hello, Sir!
+
+
+       The Numbers!
+
+       1
+
+       2
+
+       3
+
+       4
+
+       5
+
+       I will count Again!
+
+       5
+
+       4
+
+       3
+
+       2
+
+       1
+
+
+To execute the natural code, We have start.ring
+
+In start.ring we define the language and the commands.
+
+File: start.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               SetCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               RunFile("program.txt")
+       }
+
+
+We defined a language called MyLanguage, We have folder for the language commands.
+
+Each command will define a class that belong to the MyLanguage.Natural package.
+
+We will define two commands, Hello and Count.
+
+So we must have two files for defining the commands in the CurrentDir()+"/../command" folder
+
+File: hello.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeyword([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :hello, 
+               :Function = func {
+                       See  "Hello, Sir!" + nl + nl
+               }
+       ])
+
+File: count.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordNumberNumber([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :count, 
+               :Function = func {
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
+               }
+       ])
+
+
+.. index:: 
+       pair: Using the Natural Library; Defining Commands
+
+Defining Commands
+=================
+
+To define new command we can use the DefineNaturalCommand object
+
+This object provides the next methods :-
+
+* SyntaxIsKeyword(aPara)
+* SyntaxIsKeywordNumber(aPara)
+* SyntaxIsKeywordNumberNumber(aPara)
+* SyntaxIsKeywordNumbers(aPara,nCount)
+* SyntaxIsKeywordString(aPara)
+* SyntaxIsKeywordStringString(aPara)
+* SyntaxIsKeywordStrings(aPara,nCount)
+* SyntaxIsKeywordExpression(aPara)
+* SyntaxIsKeywordExpressionExpression(aPara)
+* SyntaxIsKeywordExpressions(aPara,nCount)
+* SyntaxIsCommand(aPara)
+* SyntaxIsCommandNumber(aPara)
+* SyntaxIsCommandNumberNumber(aPara)
+* SyntaxIsCommandNumbers(aPara,nCount)
+* SyntaxIsCommandString(aPara)
+* SyntaxIsCommandStringString(aPara)
+* SyntaxIsCommandStrings(aPara,nCount)
+* SyntaxIsCommandExpression(aPara)
+* SyntaxIsCommandExpressionExpression(aPara)
+* SyntaxIsCommandExpressions(aPara,nCount)
+
+File: mylanguage.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       MyLanguage = New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               setCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               UseCommand(:Print)
+               UseCommand(:IWantWindow)
+               UseCommand(:WindowTitleIs)
+               UseCommand(:IWantButton)
+       }
+
+
+Example (1)
+
+In the next example we will define the Print command.
+
+We will use the SyntaxIsKeywordExpression() Method.
+
+We pass list (as Hash) to the method. We determine the package name, the keyword and
+the function that will be executed.
+
+Inside this function we uses the Expr(nExprNumber) function to get the expression value that the
+user will write after the keyword.
+
+File: print.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordExpression([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :print, 
+               :Function = func {
+                       See  Expr(1)  
+               }
+       ])
+
+Usage:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               print "Hello, World!"
+       ')
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+
+Example (2)
+
+File: iwantwindow.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsCommand([
+               :Package = "MyLanguage.Natural",
+               :Command = "i want window", 
+               :Function = func {
+                       See  "Command: I want window" + nl
+               }
+       ])
+
+Usage:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               i want window
+       ')
+
+Output:
+
+.. code-block:: none
+
+       Command: I want window
+
+Example (3)
+
+File: windowtitleis.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsCommandString([
+               :Package = "MyLanguage.Natural",
+               :Command = "window title is", 
+               :Function = func {
+                       See  "Command: Window title is " + Expr(1) + nl
+               }       
+       ])
+
+Usage:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               I want window and the window title is "Hello World"
+       ')
+
+Output:
+
+.. code-block:: none
+
+       Command: I want window
+       Command: Window title is Hello World
+
+
+.. index:: 
+       pair: Using the Natural Library; Operators
+
+Natural Library - Operators
+===========================
+
+In the next example we uses the Count command without using operators
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString("
+               Hello   
+               Count 1 5
+               Count 5 1
+       ")
+
+We can add more description
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString("
+               Hello, Please   Count from 1 to 5 then count from 5 to 1
+       ")
+
+Also we can use operators like "(" and ")" around the instruction
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage {
+               SetOperators("()")
+               RunString("
+                       Here we will play and will try something
+                       that looks like Lisp Syntax
+                       (count  (count 1 5)  (count 20 15))
+                       Just for fun!
+               ")
+       }
+
+
+.. index:: 
+       pair: Using the Natural Library; Defining commands using classes
+
+Defining commands using classes
+===============================
+
+This section is related to the implementation details.
+
+When we define new command, Each command is defined by the Natural Library as a class.
+
+We have the choice to define commands using the simple interface provided by the
+DefineNaturalCommand object or by defining new class as in the next examples.
+
+If we used DefineNaturalCommand (More Simple), The class will be defined during the runtime.
+
+File: hello.ring
+
+.. code-block:: ring
+
+       Package MyLanguage.Natural
+
+       class Hello
+
+               func AddAttributes_Hello        
+                       AddAttribute(self,:hello)
+
+               func GetHello   
+                       See  "Hello, Sir!" + nl + nl
+
+
+File: count.ring
+
+.. code-block:: ring
+
+       Package MyLanguage.Natural
+
+       class Count
+           
+               func Getcount
+                       StartCommand()
+                       CommandData()[:name] = :Count
+                       CommandData()[:nExpr] = 0
+                       CommandData()[:aExpr] = []
+
+               func BraceExprEval_Count nValue
+                       if isCommand() and CommandData()[:name] = :Count {
+                               if isNumber(nValue) {
+                                       CommandData()[:nExpr]++     
+                                       CommandData()[:aExpr] + nValue
+                                       if CommandData()[:nExpr] = 2 {
+                                               Count_Execute()
+                                       }
+                               }
+                       }
+
+               func AddAttributes_Count        
+                       AddAttribute(self,:count)
+       
+               func Count_Execute
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
diff --git a/docs/en/source/newcalc.png b/docs/en/source/newcalc.png
new file mode 100644 (file)
index 0000000..f355727
Binary files /dev/null and b/docs/en/source/newcalc.png differ
diff --git a/docs/en/source/newcalc2.png b/docs/en/source/newcalc2.png
new file mode 100644 (file)
index 0000000..ee536ed
Binary files /dev/null and b/docs/en/source/newcalc2.png differ
diff --git a/docs/en/source/number2words.png b/docs/en/source/number2words.png
new file mode 100644 (file)
index 0000000..9ec07c6
Binary files /dev/null and b/docs/en/source/number2words.png differ
diff --git a/docs/en/source/objectslib1.png b/docs/en/source/objectslib1.png
new file mode 100644 (file)
index 0000000..9325d2b
Binary files /dev/null and b/docs/en/source/objectslib1.png differ
diff --git a/docs/en/source/objectslib2.png b/docs/en/source/objectslib2.png
new file mode 100644 (file)
index 0000000..7c697a5
Binary files /dev/null and b/docs/en/source/objectslib2.png differ
diff --git a/docs/en/source/odbc.txt b/docs/en/source/odbc.txt
new file mode 100644 (file)
index 0000000..2e145b1
--- /dev/null
@@ -0,0 +1,564 @@
+.. index:: 
+       single: ODBC Functions; Introduction
+
+==============
+ODBC Functions
+==============
+
+This chapter contains the ODBC functions provided by the Ring programming language.
+
+* odbc_init()
+* odbc_drivers()
+* odbc_datasources()
+* odbc_close()
+* odbc_connect()
+* odbc_disconnect()
+* odbc_execute()
+* odbc_colcount()
+* odbc_fetch()
+* odbc_getdata()
+* odbc_tables()
+* odbc_columns()
+* odbc_autocommit()
+* odbc_commit()
+* odbc_rollback()
+
+Before using the next function load the odbclib.ring library
+
+.. code-block:: ring
+
+       load "odbclib.ring"
+       # Use ODBC functions
+
+.. index:: 
+       pair: ODBC Functions; odbc_init()
+
+odbc_init() Function
+====================
+
+We can create ODBC Handle using the odbc_init() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_init() ---> ODBC Handle
+
+.. index:: 
+       pair: ODBC Functions; odbc_drivers()
+
+odbc_drivers() Function
+=======================
+
+We can get a list of ODBC drivers using the odbc_drivers() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_drivers(ODBC Handle) ---> List of Drivers
+
+.. index:: 
+       pair: ODBC Functions; odbc_datasources()
+
+odbc_datasources() Function
+===========================
+
+We can get a list of ODBC data sources using the odbc_datasources() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_datasources(ODBC Handle) ---> List of Data sources
+
+.. index:: 
+       pair: ODBC Functions; odbc_close()
+
+odbc_close() Function
+=====================
+
+After the end of using ODBC functions we can free resources using ODBC_Close() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_close(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; Print List of ODBC Drivers
+
+Print List of ODBC Drivers
+==========================
+
+The next example print a list of ODBC drivers.
+
+.. code-block:: ring
+
+       See "ODBC test 1" + nl
+       oODBC = odbc_init()
+       See "Drivers " + nl
+       see odbc_drivers(oODBC)
+       odbc_close(oODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test 1
+       Drivers
+       Microsoft Access-Treiber (*.mdb) - SQLLevel=0
+       Driver do Microsoft Paradox (*.db ) - SQLLevel=0
+       Driver do Microsoft Excel(*.xls) - SQLLevel=0
+       Microsoft Text Driver (*.txt; *.csv) - SQLLevel=0
+       Driver da Microsoft para arquivos texto (*.txt; *.csv) - SQLLevel=0
+       Microsoft dBase-Treiber (*.dbf) - SQLLevel=0
+       SQL Server - CPTimeout=60
+       Microsoft Excel Driver (*.xls) - SQLLevel=0
+       Driver do Microsoft dBase (*.dbf) - SQLLevel=0
+       Microsoft Paradox-Treiber (*.db ) - SQLLevel=0
+       Microsoft ODBC for Oracle - CPTimeout=120
+       Microsoft Text-Treiber (*.txt; *.csv) - SQLLevel=0
+       Microsoft Excel-Treiber (*.xls) - SQLLevel=0
+       Microsoft Access Driver (*.mdb) - SQLLevel=0
+       Driver do Microsoft Access (*.mdb) - SQLLevel=0
+       Microsoft Paradox Driver (*.db ) - SQLLevel=0
+       Microsoft dBase Driver (*.dbf) - SQLLevel=0
+       Microsoft Access Driver (*.mdb, *.accdb) - UsageCount=3
+       Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) - UsageCount=3
+       Microsoft Access Text Driver (*.txt, *.csv) - UsageCount=3
+       SQL Server Native Client 10.0 - UsageCount=1
+       SQL Server Native Client 11.0 - UsageCount=1
+       Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) - UsageCount=3
+       Microsoft Access Paradox Driver (*.db) - UsageCount=3
+       MySQL ODBC 5.3 ANSI Driver - UsageCount=1
+       MySQL ODBC 5.3 Unicode Driver - UsageCount=1
+       ODBC Driver 11 for SQL Server - UsageCount=1
+       Lianja ODBC Driver - CPTimeout=60
+       Microsoft Visual FoxPro Driver - UsageCount=1
+       Microsoft Visual FoxPro-Treiber - UsageCount=1
+       Driver para o Microsoft Visual FoxPro - UsageCount=1
+       Microsoft FoxPro VFP Driver (*.dbf) - UsageCount=1
+
+.. index:: 
+       pair: ODBC Functions; Print List of ODBC Data Sources
+
+Print List of ODBC Data Sources
+===============================
+
+The next example print a list of ODBC data sources.
+
+.. code-block:: ring
+
+       See "ODBC test 2" + nl
+       pODBC = odbc_init()
+       See "Data Sources " + nl
+       see odbc_datasources(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test 2
+       Data Sources
+       Excel Files - Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
+       MS Access Database - Microsoft Access Driver (*.mdb, *.accdb)
+       Customer - Microsoft Access Driver (*.mdb)
+       IdCardData - Microsoft Access Driver (*.mdb)
+       MyProjectData2 - Microsoft Access Driver (*.mdb)
+       MyData - Microsoft Access Driver (*.mdb)
+       MonprojetData - Microsoft Access Driver (*.mdb)
+       dBASE Files - Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)
+       myvfpdata - Microsoft Visual FoxPro Driver
+       FACTORYDATA - Microsoft Access Driver (*.mdb)
+       TRAININGSYSDATA - Microsoft Access Driver (*.mdb)
+       RVCSYSDATASQLDB - SQL Server Native Client 11.0
+       PWCTRVCDATA - Microsoft Access Driver (*.mdb)
+       MyCompany - Microsoft Access Driver (*.mdb)
+       HCS - Microsoft Access Driver (*.mdb)
+       HCS2 - Microsoft Access Driver (*.mdb, *.accdb)
+       MyProjectData - Microsoft Access Driver (*.mdb)
+       Xtreme Sample Database 2008 - Microsoft Access Driver (*.mdb)
+       Lianja_Southwind - Lianja ODBC Driver
+       Visual FoxPro Database - Microsoft Visual FoxPro Driver
+       Visual FoxPro Tables - Microsoft Visual FoxPro Driver
+
+.. index:: 
+       pair: ODBC Functions; odbc_connect()
+
+odbc_connect() Function
+=======================
+
+We can connect to the database using the odbc_connect() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_connect(ODBC Handle, cConnectionString)
+
+.. index:: 
+       pair: ODBC Functions; odbc_disconnect()
+
+odbc_disconnect() Function
+==========================
+
+We can close the connection to the database using the odbc_disconnect() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_disconnect(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; Open and Close Connection
+
+Open and Close Connection 
+=========================
+
+The next example connect to the database then close the connection
+
+.. code-block:: ring
+
+       See "ODBC test 3" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "disconnect" + nl
+       odbc_disconnect(pODBC)
+       See "Close database..." + nl
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test 3
+       Connect to database
+       1
+       disconnect
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; odbc_execute()
+
+odbc_execute() Function
+=======================
+
+We can execute SQL Statements on the database using the odbc_execute() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_execute(ODBC Handle, cSQLStatement)
+
+.. index:: 
+       pair: ODBC Functions; odbc_colcount()
+
+odbc_colcount() Function
+========================
+
+We can get columns count in the query result using the odbc_colcount() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_colcount(ODBC Handle) ---> Columns Count as Number
+
+.. index:: 
+       pair: ODBC Functions; odbc_fetch()
+
+odbc_fetch() Function
+=====================
+
+We can fetch a row from the query result using the odbc_fetch() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_fetch(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; odbc_getdata()
+
+odbc_getdata() Function
+=======================
+
+We can get column value from the fetched row using the odbc_getdata() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_getdata(ODBC Handle, nColumnNumber) ---> Column Value
+
+.. index:: 
+       pair: ODBC Functions; Execute Query and Print Result
+
+Execute Query and Print Result
+==============================
+
+The next example execute query then print the query result.
+
+.. code-block:: ring
+
+       See "ODBC test 4" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from person") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See "Row data:" + nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) + " - "
+               next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+.. index:: 
+       pair: ODBC Functions; odbc_tables()
+
+odbc_tables() Function
+======================
+
+We can get a list of tables inside the database using the odbc_tables() function.
+
+We can access the result of this function as we get any query result.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_tables(ODBC Handle)
+
+Example:
+
+.. code-block:: ring
+
+       See "ODBC test - Get Database Tables" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       odbc_tables(pODBC) + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) 
+                       if x != nMax see " - " ok
+               next
+               See nl
+       end
+       See "Close database..." 
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test - Get Database Tables
+       Connect to database
+       Select data
+       Columns Count : 5
+       .\test - NULL - Customer - TABLE - NULL
+       .\test - NULL - employee - TABLE - NULL
+       .\test - NULL - person - TABLE - NULL
+       .\test - NULL - tel - TABLE - NULL
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; odbc_columns()
+
+odbc_columns() Function
+=======================
+
+We can get a list of columns inside the table using the odbc_columns() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_columns(ODBC Handle, cTableName)
+
+Example:
+
+.. code-block:: ring
+
+       See "ODBC test - Get Table Columns" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Get Columns inside the Person Table" + nl
+       odbc_columns(pODBC,"person") + nl
+       while odbc_fetch(pODBC)
+               see odbc_getdata(pODBC,4) + nl
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test - Get Table Columns
+       Connect to database
+       Get Columns inside the Person Table
+       FIRST
+       LAST
+       STREET
+       CITY
+       STATE
+       ZIP
+       HIREDATE
+       MARRIED
+       AGE
+       SALARY
+       NOTES
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; odbc_autocommit()
+
+odbc_autocommit() Function
+==========================
+
+We can enable or disable the auto commit feature using the odbc_autocommit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_autocommit(ODBC Handle, lStatus)   # lStatus can be True or False
+
+
+.. index:: 
+       pair: ODBC Functions; odbc_commit()
+
+odbc_commit() Function
+======================
+
+We can commit updates to the database using the odbc_commit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_commit(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; odbc_rollback()
+
+odbc_rollback() Function
+========================
+
+We can rollback updates to the database using the odbc_rollback() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_rollback(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; Transactions and Using Commit and Rollback
+
+Transactions and Using Commit and Rollback
+==========================================
+
+Example:
+
+.. code-block:: ring
+
+       See "ODBC Test - Transactions and using Commit and Rollback" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       see "insert data..." + nl
+       odbc_autocommit(pODBC,0)
+       for x = 1 to 10000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'mahmoud')")
+       next
+       for x = 10001 to 15000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'samir')")
+       next
+       odbc_commit(pODBC)
+
+       for x = 15001 to 20000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
+       next
+
+       ODBC_ROLLBACK(pODBC)
+       odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
+       odbc_commit(pODBC)
+
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC Test - Transactions and using Commit and Rollback
+       Connect to database
+       1
+       insert data...
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; Save and Restore Images
+
+Save and Restore images
+=======================
+
+The next example save an image inside the database
+
+.. code-block:: ring
+
+       See "ODBC test - Save image in the database" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       see "Read Image File..." + nl
+       cFile = str2hex(read("tests\mahmoud.jpg"))
+       see "size " + len(CFile)+nl
+       see "Save image in the database..." + nl
+       stmt = "insert into tel values (20000,'mahmoud','" + cFile + "');"
+       odbc_execute(pODBC,stmt)
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+The next example restore the image from the database
+
+.. code-block:: ring
+
+       See "ODBC Test - Restore image from the database" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from tel where id = 20000") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       if odbc_fetch(pODBC)
+               See "Write image file" + nl
+               write("tests\great.jpg",hex2str( odbc_getdata(pODBC,3) ) )
+       ok
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
\ No newline at end of file
diff --git a/docs/en/source/oop.txt b/docs/en/source/oop.txt
new file mode 100644 (file)
index 0000000..aa340c4
--- /dev/null
@@ -0,0 +1,1054 @@
+.. index:: 
+       single: Object Oriented Programming; Introduction
+
+=================================
+Object Oriented Programming (OOP)
+=================================
+
+In this chapter we are going to learn how to use the Object-Oriented programming paradigm
+inside the Ring programming language.
+
+We will learn about
+
+* Classes and Objects
+* Access Objects Using Braces
+* Composition
+* Setter and Getter
+* Private Attributes and Methods
+* Operator Overloading
+* Inheritance
+* Dynamic Attributes
+* Packages
+* Printing Objects
+* Find() and List of Objects
+* Sort() and List of Objects
+* Using Self.Attribute and Self.Method()
+* Using This.Attribute and This.Method()
+
+
+.. index:: 
+       pair: Object Oriented Programming; Classes and Objects
+
+
+Classes and Objects
+===================
+
+We can define new classes using the next syntax
+
+Syntax:
+
+.. code-block:: ring
+
+       Class <Class Name> [From|<|: <Parent Class Name>]
+               [Attributes]
+               [Methods]
+               [Private
+                 [Attributes]
+                 [Methods]
+                ]
+
+And we can create objects using the next syntax
+
+Syntax:
+
+.. code-block:: ring
+
+       New <Object Name> [ (init method parameters) ] |
+                         [ { access object data and methods } ]   ---> Object
+
+Example:
+
+.. code-block:: ring
+
+       New point { x=10  y=20  z=30  print() }
+       Class Point x y z func print see x + nl + y + nl + z + nl 
+
+.. note:: We can use { } to access object data and methods.
+
+.. tip:: we can declare the class attributes directly after the class name.
+
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+
+We can rewrite the same program in another style
+
+.. code-block:: ring
+
+       New point                       # create new object using the point class
+       {                               # access the new object attributes and methods
+               x = 10                  # set the x attribute to 10
+               y = 20                  # set the y attribute to 20
+               z = 30                  # set the z attribute to 30
+               print()                 # call the print method
+       }                               # end of object access 
+
+
+       Class Point                     # define the Point class
+               x y z                   # the class contains three attributes x, y & z
+               func print              # define the print method
+                       see x + nl +    # print the x attribute
+                           y + nl +    # print the y attribute
+                           z + nl      # print the z attribute
+
+
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       P1 = New Point
+       P1.x = 10
+       P1.y = 20
+       P1.z = 30
+       P1.Print()
+       Class Point x y z func print see x + nl + y + nl + z + nl       
+
+.. note:: we can use the dot operator after the object name to access object members.
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       new point { print() }   
+       Class Point
+               x = 10  y = 20  z = 30
+               func print see x + nl + y + nl + z + nl
+
+.. note:: we can set the default values for the class attributes when we declare them.
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       new point(10,20,30)
+       Class Point
+               x y z 
+               func init p1,p2,p3 x=p1 y=p2 z=p3 print()
+               func print see x + nl + y + nl + z + nl
+
+.. note:: we can call the init method directly using () when we create new objects 
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       new point( [ :x = 10 , :y = 20 , :z = 30 ] )
+       Class Point x y z
+             func init aPara x = aPara[:x] y = aPara[:y] z = aPara[:z] print()
+             func print see x + nl + y + nl + z + nl
+
+.. tip:: using Hash for passing method parameters enable us to create optional 
+         parameters and change the order of parameters when adding them to the Hash.
+
+.. index:: 
+       pair: Object Oriented Programming; Access Objects Using Braces
+
+Access Objects Using Braces
+===========================
+
+We can access the object at any time using braces { } 
+
+Inside the braces we can use the object attributes and methods directly
+
+This can be done when we create the object using the New keyword or at any time using the next syntax
+
+.. code-block:: ring
+
+       ObjectName { access object data and methods }
+
+Example:
+
+.. code-block:: ring
+
+       See "Creating the Object" + nl
+       o1 = new Point
+       See "Using the Object" + nl
+       o1 {
+               x=5     
+               y=15
+               z=25    
+               print()
+       }
+       Class Point x y z func print see x + nl + y + nl + z 
+
+We can use braces to access objects when we call functions or methods
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Point
+
+       print( o1 { x=10 y=20 z=30 } )
+       
+       func print object
+               see object.x + nl + 
+                   object.y + nl + 
+                   object.z 
+
+       Class Point x y z
+
+We can mix between using braces and the dot operator to access the object in the same expression.
+
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Point
+
+       O1 { x=10 y=20 z=30 }.print()
+       
+       Class Point x y z
+               func print see x + nl + y + nl + z
+
+.. index:: 
+       pair: Object Oriented Programming; Composition
+
+Composition
+===========
+
+The object may contains other objects as attributes.
+
+Using braces to access objects can be nested.
+
+Example:
+
+.. code-block:: ring
+
+       R1 = New Rectangle 
+       {
+
+               Name = "Rectangle 1"
+
+               P1 
+               {
+                       X = 10
+                       Y = 20
+               }
+
+               P2 
+               {
+                       X = 200
+                       Y = 300
+               }       
+
+               Color = "Blue"
+
+       }
+       
+       see "Name : " + R1.Name + nl +
+           "Color: " + R1.Color + nl +
+           "P1   : (" + R1.P1.X + "," + R1.P1.Y + ")" + nl + 
+           "P2   : (" + R1.P2.X + "," + R1.P2.Y + ")"  
+
+       Class Rectangle
+               name  color
+               p1 = new Point
+               p2 = new Point
+
+       Class Point x y 
+
+Output:
+
+.. code-block:: ring
+
+       Name : Rectangle 1
+       Color: Blue
+       P1   : (10,20)
+       P2   : (200,300)
+
+.. index:: 
+       pair: Object Oriented Programming; Setter and Getter
+
+Setter and Getter
+=================
+
+We can define methods to be used when we set and get object attributes.
+
+Syntax:
+
+.. code-block:: ring
+
+       Class ClassName
+
+               AttributeName
+               ...
+
+               Func SetAttributeName
+                       ...
+
+               Func GetAttributeName
+                       ...
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person
+
+       o1.name = "Mahmoud"  see o1.name + nl
+
+       o1 { name = "Ahmed"  see name }
+
+       Class Person
+
+               name family = "Fayed"
+
+               func setname value
+                       see "Message from SetName() Function!" + nl
+                       name = value + " " + family
+
+               func getname
+                       see "Message from GetName() Function!" + nl
+                       return "Mr. " + name
+
+Output:
+
+.. code-block:: ring
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+       Mr. Mahmoud Fayed
+       Message from SetName() Function!
+       Message from GetName() Function!
+       Mr. Ahmed Fayed
+
+.. index:: 
+       pair: Object Oriented Programming; Private Attributes and Methods
+
+Private Attributes and Methods
+==============================         
+
+We can define private attributes and methods after the keyword private inside the class body
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person {
+               name = "Test"
+               age = 20
+               print()
+               o1.printsalary()
+       }
+
+       try
+               see o1.salary
+       catch
+               see cCatchError + nl
+       done
+
+       try
+               o1.increasesalary(1000)
+       catch
+               see cCatchError + nl
+       done
+
+       Class Person
+
+               name age 
+
+               func print
+                       see "Name   : " + name + nl + 
+                           "Age    : " + age + nl 
+
+               func printsalary
+                       see "Salary : " + salary + nl 
+
+               private
+
+               salary = 15000
+
+               func increasesalary x
+                       salary += x
+
+Output:
+
+.. code-block:: ring
+
+       Name   : Test
+       Age    : 20
+       Salary : 15000
+       Error (R27) : Using private attribute from outside the class : salary
+       Error (R26) : Calling private method from outside the class : increasesalary
+
+.. index:: 
+       pair: Object Oriented Programming; Operator Overloading
+
+Operator Overloading
+====================
+
+We can add the operator method to our class to enable using operators with the class objects.
+
+Syntax:
+
+.. code-block:: ring
+
+       Class ClassName
+
+               ...
+
+               Func operator cOperator,Para
+
+                       ...
+
+The function operator takes two paramters, the first represent the operator
+and the second represent the second parameter after the operator.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x = 10 y = 10 print("P1    : ") }
+       o2 = new point { x = 20 y = 40 print("P2    : ") }
+
+       o3 = o1 + o2
+       o3.print("P1+P2 : ")
+
+       class point x y
+
+               func operator cOperator,Para
+                       result = new point      
+                       switch cOperator
+                       on "+"
+                               result.x = x + Para.x
+                               result.y = y + Para.y
+                       on "-"
+                               result.x = x - Para.x
+                               result.y = y - Para.y
+                       off
+                       return result
+
+               func print cPoint
+                       see cPoint + "X : " + x + " Y : " + y + nl
+
+Output:
+
+.. code-block:: ring
+
+       P1    : X : 10 Y : 10
+       P2    : X : 20 Y : 40
+       P1+P2 : X : 30 Y : 50
+
+
+The next example from the List class in the stdlib.ring
+
+.. code-block:: ring
+
+       Func operator cOperator,Para
+               result = new list
+               switch cOperator
+                       on "+"
+                               if isobject(para)
+                                       for t in Para.vValue
+                                               vValue + t
+                                       next
+                               but islist(para)
+                                       for t in Para
+                                               vValue + t
+                                       next
+                               ok
+                       on "len"
+                               return len( vValue )
+                       on "[]"
+                               return &vValue[para]
+               off
+               return result
+
+The "len" operator is used with (for in) control structure.
+
+The "[]" operator is used when we try to access the list items, In this case we use the & operator
+to return the item values like strings an numbers by reference, so we can update it when we access the
+items.
+
+Another Example
+
+.. code-block:: ring
+
+       func main 
+
+       See "----1"+nl
+           a1 = new BigNumber( "123" )
+           a2 = new BigNumber( "456" )
+           a3 = new BigNumber( "789" )
+       See nl+"----2"+nl  
+               a1.print()
+               a2.print()
+               a3.print()
+       See nl+"----3"+nl      
+           a2 = a1 + "45"  
+       See nl+"----4"+nl  
+           a2.print()      
+       See nl+"----5"+nl  
+           a3 = a1 + a2    
+       See nl+"----6"+nl  
+           a3.print()      
+       See nl+"----7"+nl
+
+       ###==================================
+       Func FuncAdd( num1, num2)
+          Sum = 0 + num1 + num2    ### Para.aData isNumber
+          Sum = "" +Sum            ### Para.adata isString
+       return Sum                  ### return to Class
+       ###===================================
+
+       class BigNumber 
+
+           ### Variables
+           aData = "468"
+
+           ### Functions INIT default values
+           func init aPara 
+               ? "INIT aPara: " ? aPara
+               if isString(aPara)
+                   aData = aPara 
+               else 
+                   aData = "" + aPara
+               ok
+
+           ### Other Functions
+           func operator cOperator, Para
+                   whatType = Type(Para)
+                   ? nl+"WhatType-PARA: "+ whatType ? Para 
+                   ? nl+"Operator: " ? cOperator  ? nl+"PARA: " ? Para ? "    ______" ? nl
+                                   if whatType = "STRING"
+                                      dataInfo = Para
+                                      ? "dataInfo String: " ? dataInfo
+                                   but whatType = "NUMBER"
+                                      datinfo  = "" + Para
+                                      ? "dataInfo Number: " ? dataInfo
+                                   else whatType = "OBJECT"
+                                      dataInfo = "" + para.aData  
+                                      ? "dataInfo OBJECT: " ? dataInfo
+                                   ok
+                                 ? "dataInfo USING: " ? dataInfo  
+                   ### Para.aData does NOT exist on first pass ( Object with member)
+                   ### Result isObject when assigned "self"
+                   result = self   
+                   switch cOperator
+                       on "+"
+                            answer = FuncAdd( aData, dataInfo )
+                            ? nl+"AnswerString - FunAdd aData, dataInfo: " ? answer  
+                            ### result = self, is Object, populate Object with aData member
+                            result.aData = answer
+                       off
+                   ### Result = Self is Object
+                   return result   
+
+           func print 
+               ? nl+"ClassPrint aData: " ? aData       
+
+.. index:: 
+       pair: Object Oriented Programming; Inheritance
+
+Inheritance
+===========
+
+We can create class from another class in the class definition using the keyword from.
+
+Syntax:
+
+.. code-block:: ring
+
+       Class <Class Name> [From <Parent Class Name>]
+
+We can call a method in the parent class from the child class using the super object.
+
+Syntax:
+
+.. code-block:: ring
+
+       func methodname
+               ...
+               super.methodname()
+               ...
+
+Example:
+
+.. code-block:: ring
+
+       Func main
+               e1 = new Employee {
+                       Name = "test"
+                       age = 20
+                       job = "programmer"
+                       salary = 20000000
+                       print()
+               }
+       
+
+       Class Human 
+               Name Age
+               func print
+                       see "Name : " + name + nl + "Age  : " + age + nl
+
+       Class Employee from Human
+               Job Salary
+               func print
+                       super.print()
+                       see "Job  : " + job + nl + "Salary : " + salary + nl
+
+Output:
+
+.. code-block:: ring
+
+       Name : test
+       Age  : 20
+       Job  : programmer
+       Salary : 20000000
+
+.. index:: 
+       pair: Object Oriented Programming; Dynamic Attributes
+
+Dynamic Attributes
+==================
+
+We can write instructions after the class name to be executed when we create new objects
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new dynamicClass
+       see o1.var5 + nl        # output 5
+
+       Class DynamicClass
+               for x = 1 to 10
+                       cStr = "var" + x + " = " + x
+                       eval(cStr)
+               next
+
+.. tip:: in the previous example var1, var2, ..., var10 will be defined as attributes.
+
+.. tip:: The problem with the previous example is that x and cStr will be defined as attributes too!
+
+.. note:: we can write class definitions inside a string then 
+          using eval() we can execute the string to define the classes
+
+.. index:: 
+       pair: Object Oriented Programming; Packages
+
+Packages
+========
+
+We can create a package (a group of classes under a common name) using the next syntax
+
+.. code-block:: ring
+
+       package PackageName
+               Class Class1
+                       ...
+               Class Class2
+                       ...
+               Class Class3
+                       ...
+               ...
+
+Example
+
+.. code-block:: ring
+
+       o1 = new System.output.console
+       o1.print("Hello World")
+       
+       Package System.Output
+               Class Console
+                       Func Print cText
+                               see cText + nl
+
+.. note:: we can use the dot operator as part of the package name
+
+Instead of typing the long name PackageName.ClassName we can use the import command
+
+When we import a package, we can use any class inside this package directly.
+
+Example
+
+.. code-block:: ring
+
+       import system.output
+       o1 = new console {
+               print("Hello World")
+       }
+       Package System.Output
+               Class Console
+                       Func Print cText
+                               see cText + nl
+
+.. index:: 
+       pair: Object Oriented Programming; Printing Objects
+
+Printing Objects
+================
+
+We can print the object state (attributes and values) using the see command.
+
+Example:
+
+.. code-block:: ring
+
+       see new point { x=10 y=20 z=30 }
+       class point x y z
+
+Output:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+.. index:: 
+       pair: Object Oriented Programming; Find() and List of Objects
+
+Find() and List of Objects
+==========================
+
+We can use the find() function to search inside a list of objects.
+
+Syntax:
+
+.. code-block:: ring
+
+       Find(List,ItemValue,nColumn,cAttribute) ---> Item Index
+
+Example:
+
+.. code-block:: ring
+
+       myList1 = [new Company {position=3 name="Mahmoud" symbol="MHD"},
+                  new Company {position=2 name="Bert" symbol="BRT"},
+                  new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+
+       see find(mylist1,"Bert",1,"name") + nl
+       see find(mylist1,"Ring",1,"name") + nl
+       see find(mylist1,"Mahmoud",1,"name") + nl
+       see find(mylist1,"RNG",1,"symbol") + nl
+       see find(mylist1,"MHD",1,"symbol") + nl
+       see find(mylist1,"BRT",1,"symbol") + nl
+       see find(mylist1,3,1,"position") + nl
+       see find(mylist1,1,1,"position") + nl
+       see "Other" + nl
+       see find(mylist1,"test",1,"name") + nl
+       see find(mylist1,"test",0,"name") + nl
+       see find(mylist1,"test",5,"name") + nl
+
+       class company position name symbol
+
+Output:
+
+.. code-block:: ring
+
+       2
+       3
+       1
+       3
+       1
+       2
+       1
+       3
+       Other
+       0
+       0
+       0
+
+.. index:: 
+       pair: Object Oriented Programming; Sort() and List of Objects
+
+Sort() and List of Objects
+==========================
+
+We can sort a list of objects based on an object attribute using the Sort() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Sort(List,nColumn,cAttribute) ---> Sorted List based on Object Attribute
+
+Example:
+
+.. code-block:: ring
+
+       myList1 = [
+                       new Company {position=3 name="Mahmoud" symbol="MHD"},
+                       new Company {position=2 name="Bert" symbol="BRT"},
+                       new Company {position=8 name="Charlie" symbol="CHR"},
+                       new Company {position=6 name="Easy" symbol="FEAS"},
+                       new Company {position=7 name="Fox" symbol="EFOX"},
+                       new Company {position=5 name="Dog" symbol="GDOG"},
+                       new Company {position=4 name="George" symbol="DGRG"},
+                       new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+
+       see sort(mylist1,1,"name")
+       see copy("*",70) + nl
+       see sort(mylist1,1,"symbol")
+       see copy("*",70) + nl
+       see sort(mylist1,1,"position")
+
+       class company position name symbol
+
+Output:
+
+.. code-block:: ring
+
+
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       **********************************************************************
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       **********************************************************************
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+
+.. index:: 
+       pair: Object Oriented Programming; Using Self.Attribute
+
+Using Self.Attribute and Self.Method()
+======================================
+
+Inside the class region (After the class name and before any method) and the class methods we can
+use self.attribute and self.method()
+
+.. code-block:: ring
+
+       Class Point
+               self.x = 10
+               self.y = 20
+               self.z = 30
+               func print
+                       see self.x + nl + self.y + nl + self.z + nl
+
+.. note:: using self.attribute in the class region to define the class attribute protect the class attributes from conflict with global variables.
+
+.. tip:: if you typed the class attributes with self.attribute and there are a global variable with the same name it will be used and the attribute will not be defined.
+
+Check the "Scope Rules" chapter to know about the conflict between the global variable name and the attribute name
+
+Whay this may happens?
+
+Because 
+
+* Because in the class region we can access global variables.
+* Before defining any variable, Ring try to find the variable and use it if it's found.
+
+.. note:: Try to avoid the global variables, use the main function and start their names with $ 
+
+.. tip:: In large programs protect your classes and define their members using self.attribute
+
+.. index:: 
+       pair: Object Oriented Programming; Using This.Attribute and This.Method()
+
+Using This.Attribute and This.Method()
+======================================
+
+Inside class methods we have access to the object scope directly. we don't need to use Self.attribute
+or Self.method to read/write attribute and call methods.
+
+But we can use braces {} while we are inside methods to access another object, In this case the current
+object scope will be changed while we are inside the brace.
+
+How we can get access to our class attributes and methods while we are inside braces?
+
+This can be done using This.Attribute and This.Method()
+
+Example:
+
+.. code-block:: ring
+
+       new point  
+
+       class point 
+               x=10 y=20 z=30
+               print()
+               func print
+                       new UI {
+                               display(this.x,this.y,this.z)
+                       }
+
+       Class UI
+               func display x,y,z
+                       see x + nl + y + nl + z + nl
+
+.. index:: 
+       pair: Object Oriented Programming; Using This in the class region as Self
+
+Using This in the class region as Self
+======================================
+
+The class region is the region that comes after the class name and before any method.
+
+We can use This in the class region as Self.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+
+               o1 = new program {
+                       test()
+               }
+
+               ? o1
+
+       class program 
+
+               this.name = "My Application"
+               this.version = "1.0"
+               ? name ? version        
+
+               func test
+                       ? "Name    = " + name 
+                       ? "Version = " + version
+
+Output
+
+.. code-block:: none
+
+       My Application
+       1.0
+       Name    = My Application
+       Version = 1.0
+       name: My Application
+       version: 1.0
+
+.. note:: When we use braces to change the current active object, Using This we can still point to the class.
+
+.. tip:: The difference between This and Self is that Self point to the current active object that we can change using braces.
+
+Remember that in most cases we don't need to use This or Self in the class region
+
+We can write
+
+
+.. code-block:: ring
+
+       class program name version
+
+Or 
+
+.. code-block:: ring
+
+       class program name="My Application" version="1.0"
+
+.. note:: We use This or Self in the class region just to avoid conflict with global variables that are defined with the same name.
+
+
+.. index:: 
+       pair: Object Oriented Programming; Default value for object attributes
+
+Default value for object attributes
+===================================
+
+The default value for object attributes is NULL
+
+In Ring, the NULL value is just an empty string or a string that contains "NULL"
+
+We can check for NULL values using the isNULL() function
+
+Example:
+
+.. code-block:: ring
+
+       oProgram = new Program
+       ? oProgram.name
+       ? oProgram.version
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       oProgram { name="My Application" version="1.0" }
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       ? oProgram
+
+       class program
+               name 
+               version
+
+Output:
+
+.. code-block:: none
+
+       NULL
+       NULL
+       1
+       1
+       0
+       0
+       name: My Application
+       version: 1.0
diff --git a/docs/en/source/operators.txt b/docs/en/source/operators.txt
new file mode 100644 (file)
index 0000000..408dcf6
--- /dev/null
@@ -0,0 +1,225 @@
+.. index:: 
+       single: Operators; Introduction
+
+=========
+Operators
+=========
+
+In this chapter we will introduce the operators provided by the Ring programming langauge.
+
+.. index:: 
+       pair: Operators; Arithmetic Operators
+
+
+Arithmetic Operators
+====================
+
+The next table presents all of the arithmetic operators 
+provided by the Ring language. Assume variable X=50 and variable Y=10 then:
+
++------------+---------------+----------+---------+
+| Operator   | Description   | Example  | Result  |
++============+===============+==========+=========+
+| \+        |  Add          |  x+y     |  60     |
++------------+---------------+----------+---------+
+| \-         | Subtract     |  x-y     |  40     |
++------------+---------------+----------+---------+
+| \*        |  Multiplies   |  x*y     |  500    |
++------------+---------------+----------+---------+
+| /          |  Divide      |  x/y     |  5      |
++------------+---------------+----------+---------+
+| %          |  Modulus             |  x%y     |  0      | 
++------------+---------------+----------+---------+
+| ++         |  Increment    | x++     |  51     |
++------------+---------------+----------+---------+
+| \- \-      |  Decrement    | x\- \-  |  49     |
++------------+---------------+----------+---------+
+
+.. index:: 
+       pair: Operators; Relational Operators
+
+Relational Operators
+====================
+
+The next table presents all of the relational operators 
+provided by the Ring language. Assume variable X=50 and variable Y=10 then:
+
++------------+---------------------+-------------+---------+
+| Operator   | Description         | Example     | Result  |
++============+=====================+=============+=========+
+| =         |  Equal              |    x = y    |  False  |
++------------+---------------------+-------------+---------+
+| !=         | Not Equal          |    x != y   |  True   |
++------------+---------------------+-------------+---------+
+| >         |  Greater than       |    x > y    |  True   |
++------------+---------------------+-------------+---------+
+| <          |  Less than         |    x < y    |  False  |
++------------+---------------------+-------------+---------+
+| >=         |  Greater or Equal   |   x >= y   |  True   | 
++------------+---------------------+-------------+---------+
+| <=         |  Less than or Equal |   x <= y   |  False  |
++------------+---------------------+-------------+---------+
+
+
+.. index:: 
+       pair: Operators; Logical Operators
+
+Logical Operators
+=================
+
+The next table presents all of the logical operators 
+provided by the Ring language. Assume variable X=True and variable Y=False then:
+
++------------+---------------------+-------------+---------+
+| Operator   | Description         | Example     | Result  |
++============+=====================+=============+=========+
+| and       |  Logical AND        |    x and y  |  False  |
++------------+---------------------+-------------+---------+
+| or         | Logical OR         |    x or y   |  True   |
++------------+---------------------+-------------+---------+
+| not       |  Logical Not        |    not x    |  False  |
++------------+---------------------+-------------+---------+
+
+Another style
+
++------------+---------------------+-------------+---------+
+| Operator   | Description         | Example     | Result  |
++============+=====================+=============+=========+
+| &&        |  Logical AND        |    x && y   |  False  |
++------------+---------------------+-------------+---------+
+| ||         | Logical OR         |    x || y   |  True   |
++------------+---------------------+-------------+---------+
+| !         |  Logical Not        |    ! x      |  False  |
++------------+---------------------+-------------+---------+
+
+
+.. index:: 
+       pair: Operators; Bitwise Operators
+
+Bitwise Operators
+=================
+
+The next table presents all of the bitwise operators 
+provided by the Ring language. Assume variable X=8 and variable Y=2 then:
+
++------------+-----------------------------+-------------+---------+
+| Operator   | Description                 | Example     | Result  |
++============+=============================+=============+=========+
+| &         |  Binary AND                 |    x & y    |  0      |
++------------+-----------------------------+-------------+---------+
+| \|         | Binary OR                  |    x \| y   |  10     |
++------------+-----------------------------+-------------+---------+
+| ^         |  Binary XOR                 |    x ^ y    |  10     |
++------------+-----------------------------+-------------+---------+
+| ~          |  Binary Ones Complement            |    ~x       |  -9     |
++------------+-----------------------------+-------------+---------+
+| <<         |  Binary Left Shift          |   x << y   |  32     | 
++------------+-----------------------------+-------------+---------+
+| >>         |  Binary Right Shift         |   x >> y   |  2      |
++------------+-----------------------------+-------------+---------+
+
+
+.. index:: 
+       pair: Operators; Assignment Operators
+
+Assignment Operators
+====================
+
+The next table presents all of the assignment operators 
+provided by the Ring language.
+
+Assume variable X=8 then:
+
++------------+-----------------------------+-------------+---------+
+| Operator   | Description                 | Example     | Result  |
++============+=============================+=============+=========+
+| =         |  Assignment                 |    x = 10   |  x=10   |
++------------+-----------------------------+-------------+---------+
+| +=         | Add AND assignment         |    x += 5   |  x=13   |
++------------+-----------------------------+-------------+---------+
+| -=        |  Subtract AND assignment    |    x -= 3   |  x=5    |
++------------+-----------------------------+-------------+---------+
+| \*=        |  Multiply AND assignment    |   x \*= 2  |  x=16   |
++------------+-----------------------------+-------------+---------+
+| /=         |  Divide AND assignment      |   x /= 3   |  x=2.67 |
++------------+-----------------------------+-------------+---------+
+| %=         |  Modulus AND assignment     |   x %= 2   |  x=0    | 
++------------+-----------------------------+-------------+---------+
+| <<=        | Left shift AND assignment  |    x <<= 2  |  x=32   |
++------------+-----------------------------+-------------+---------+
+| >>=       |  Right shift AND assignment |    x >>= 2  |  x=2    |
++------------+-----------------------------+-------------+---------+
+| &=         |  Bitwise AND assignment     |   x &= 4   |  x=0    |
++------------+-----------------------------+-------------+---------+
+| \|=        |  Bitwise OR and assignment  |   x \|= 3  |  x=11   |
++------------+-----------------------------+-------------+---------+
+| ^=         |  Bitwise XOR and assignment |   x ^= 4   |  x=12   |
++------------+-----------------------------+-------------+---------+
+
+.. index:: 
+       pair: Operators; Misc Operators
+
+Misc Operators
+==============
+
+============== ======================================================================
+Operator       Description
+============== ======================================================================
+:literal       using : before identifier mean literal
+Start:End      create list contains items from start to end
+[list items]   define list items
+list[index]    access list item
+obj.name       using the dot operator to access object members (attributes/methods).
+obj {stmts}    execute statements with direct access to object attributes & methods
+func(para,...) call function using parameters separated by comma
+? <expr>       Print expression then new line
+============== ======================================================================
+
+.. index:: 
+       pair: Operators; Operators Precedence
+
+Operators Precedence
+====================
+
+The next table present operators from higher precedence (Evaluated first) to 
+lower precedence.
+
++----------------------------------------------------------------+
+| Operator                                                      |
++================================================================+
+| .  []   ()     {}                                             |
++----------------------------------------------------------------+
+| \-  \~  :Literal  [list items]                                |
++----------------------------------------------------------------+
+| ++   \- \-                                                    |
++----------------------------------------------------------------+
+| Start:End                                                     |
++----------------------------------------------------------------+
+| \* /  %                                                       |
++----------------------------------------------------------------+
+| \+ \-                                                                 |
++----------------------------------------------------------------+
+| <<   >>                                                       |
++----------------------------------------------------------------+
+| &                                                             |
++----------------------------------------------------------------+
+| \|  ^                                                                 |
++----------------------------------------------------------------+
+| <  >  <=  >=                                                          |
++----------------------------------------------------------------+
+| =  !=                                                                 |
++----------------------------------------------------------------+
+| not  !                                                        |
++----------------------------------------------------------------+
+| and   or   &&           ||                                            |
++----------------------------------------------------------------+
+| Assignment = += -= \*= /= %=>>= <<= &= ^= \|=                 |
++----------------------------------------------------------------+
+| ?                                                             |
++----------------------------------------------------------------+
+
+Example:
+
+.. code-block:: ring
+
+       See 3+5*4       # prints 23
\ No newline at end of file
diff --git a/docs/en/source/othellogame.png b/docs/en/source/othellogame.png
new file mode 100644 (file)
index 0000000..765ec00
Binary files /dev/null and b/docs/en/source/othellogame.png differ
diff --git a/docs/en/source/outputwin.png b/docs/en/source/outputwin.png
new file mode 100644 (file)
index 0000000..f75eae9
Binary files /dev/null and b/docs/en/source/outputwin.png differ
diff --git a/docs/en/source/performancetips.txt b/docs/en/source/performancetips.txt
new file mode 100644 (file)
index 0000000..af5c817
--- /dev/null
@@ -0,0 +1,273 @@
+.. index:: 
+     single: Performance Tips; Introduction
+
+================
+Performance Tips
+================
+
+In this chapter we will learn more about the Ring performance.
+
+.. index:: 
+     pair: Performance Tips; Introduction
+
+Introduction
+============
+
+Ring is designed to be a simple, small and flexible language in the first place, but also it is fast enough for many applications.
+
+Ring can do each of the next tasks in around 1 second using normal computers in the market during the last 5 years
+
+(1) Compiling 100,000 lines of code
+(2) Executing empty loop that count from 1 to 10,000,000
+(3) Executing 1000 search operation using linear search in a list contains 100,000 items, trying to find the last item (The worst case)
+(4) Creating list contains 1,000,000 items then summing all of the list items
+(5) Adding 20,000 items to the ListWidget in GUI applications
+(6) Adding 5,000 nodes to the TreeWidget in GUI applications
+(7) Printing 10,000 messages to the terminal in Console applications
+
+Also when we need more speed we can use C/C++ extensions! 
+
+Example:
+
+.. code-block:: ring
+
+       ? "Create list contains 100,000 items"
+       aList = 1:100000
+
+       ? "Do 1000 search operation - Find the last item (Worst Case!)"
+       c = clock() 
+
+       for t = 1 to 1000
+               find(alist,100000)
+       next
+
+       ? "Time: " + ( clock() - c ) / clockspersecond() + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Create list contains 100,000 items
+       Do 1000 search operation - Find the last item (Worst Case!)
+       Time: 0.87 seconds
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       func main
+
+       new qApp {
+               win = new qWidget() { 
+                       move(100,100) resize(500,500)
+                       setWindowTitle("Many Tree Items - Testing Performance")
+                       tree = new qTreeWidget(win) { 
+                               blocksignals(True) setUpdatesEnabled(False)
+                               root = new qTreeWidgetItem()
+                               root.setText(0,"The Root Node")
+                               t1 = clock()
+                               for t = 1 to 5000
+                                       oItem = new qTreeWidgetItem()
+                                       oItem.settext(0,"Item " + t)
+                                       root.addchild(oItem)
+                               next
+                               cTime = (clock()-t1)/clockspersecond()
+                               setHeaderLabel("Creating 5000 nodes in " + cTime + " seconds.")
+                               addTopLevelItem(root)
+                               expanditem(root)
+                               blocksignals(False) setUpdatesEnabled(True)
+                       }
+                       oLayout = new qVBoxLayout() {
+                               addWidget(tree)
+                       }
+                       setLayout(oLayout)
+                       show() 
+               }
+               exec()
+       }
+       
+
+Output:
+
+.. image:: manytreeitems.png
+       :alt: Many Tree Items
+
+
+.. index:: 
+     pair: Performance Tips; Creating Lists
+
+Creating Lists
+==============
+
+Example:
+
+.. code-block:: ring
+
+       ? "Create the list using the Range operator"
+       t1 = clock()
+       aList = 1:1000000
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Create the list using the For loop"
+       t1 = clock()
+       aList = []
+       for x = 1 to 1000000
+               aList + x
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Create the list using the list() function and the For loop"
+       t1 = clock()
+       aList = list(1000000)
+       for x = 1 to 1000000
+               aList[x] = x
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Create the list using the Range operator
+       Time : 0.48 seconds
+       Create the list using the For loop
+       Time : 0.79 seconds
+       Create the list using the list() function and the For loop
+       Time : 1.56 seconds
+
+.. note:: Creating lists using the Range operator is faster than using the For loop or the list() function
+
+
+.. index:: 
+     pair: Performance Tips; Arithmetic Operations
+
+Arithmetic Operations
+=====================
+
+Example:
+
+.. code-block:: ring
+
+       ? "Using * operator"
+       t1 = clock()
+       for x = 1 to 1000000
+               out = x * 2
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Using *= operator"
+       t1 = clock()
+       for x = 1 to 1000000
+               out = x
+               out *= 2
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Using * operator
+       Time : 1.34 seconds
+       Using *= operator
+       Time : 0.47 seconds
+
+.. note:: Using the *= operator is faster that using the * operator
+
+
+.. index:: 
+     pair: Performance Tips; Using len() and For Loops
+
+Using len() and For Loops
+=========================
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:1000000
+
+       ? "Using len() in the For loop"
+       t1 = clock()
+       for x = 1 to len(aList)
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Using len() before the For loop"
+       t1 = clock()
+       nMax = len(aList)
+       for x = 1 to nMax
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Using len() in the For loop
+       Time : 5.50 seconds
+       Using len() before the For loop
+       Time : 0.24 seconds
+
+.. note:: Using len() before the For loop is faster than using len() in the For loop.
+
+
+.. index:: 
+     pair: Performance Tips; Calling Functions and Methods
+
+Calling Functions and Methods
+=============================
+
+Example:
+
+.. code-block:: ring
+
+       ? "calling 100000 functions"
+       t1 = clock()
+       for x = 1 to 100000
+               test()
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       o1 = new test
+
+       ? "calling 100000 methods using the dot operator"
+       t1 = clock()
+       for x = 1 to 100000
+               o1.test()
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "calling 100000 methods using braces "
+       t1 = clock()
+       for x = 1 to 100000
+               o1 { test() }
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+
+       func test
+
+       class test
+               func test
+
+
+Output:
+
+.. code-block:: none
+
+       calling 100000 functions
+       Time : 0.28 seconds
+       calling 100000 methods using the dot operator
+       Time : 0.36 seconds
+       calling 100000 methods using braces
+       Time : 1.19 seconds
+
+.. note:: Calling functions is faster than calling methods but the difference is very small.
+
+.. note:: Using the dot operator to call methods is faster than using braces.
+
+
+
diff --git a/docs/en/source/ponggame.png b/docs/en/source/ponggame.png
new file mode 100644 (file)
index 0000000..450c8a5
Binary files /dev/null and b/docs/en/source/ponggame.png differ
diff --git a/docs/en/source/postgresql.txt b/docs/en/source/postgresql.txt
new file mode 100644 (file)
index 0000000..6b50db4
--- /dev/null
@@ -0,0 +1,422 @@
+.. index:: 
+       single: PostgreSQL; Introduction
+
+====================
+PostgreSQL Functions
+====================
+
+In this chapter we will learn about using the PostgreSQL database in the Ring programming language.
+
+.. index:: 
+       pair: PostgreSQL; Loading the library
+
+Loading the library
+===================
+
+Before using the next function load the postgresqllib.ring library
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+       # Use PostgreSQL functions
+
+.. index:: 
+       pair: PostgreSQL; Examples
+
+Examples
+========
+
+Example (1):
+
+.. code-block:: ring
+
+               load "postgresqllib.ring"
+
+               conninfo = "user=postgres password=sa dbname = postgres"
+
+               exit_nicely = func conn {
+                       PQfinish(conn)
+                       shutdown(1)
+               }
+
+               conn = PQconnectdb(conninfo)
+
+               if (PQstatus(conn) != CONNECTION_OK)
+                       fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                               call exit_nicely(conn)
+               ok
+
+               res = PQexec(conn, "select * from pg_database")
+               if PQresultStatus(res) != PGRES_TUPLES_OK
+                       fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+                       PQclear(res)
+                       exit_nicely(conn)
+               ok
+
+               nFields = PQnfields(res)
+               for i = 1 to nFields
+                               ? PQfname(res, i-1) 
+               next
+
+               ? copy("*",60)
+
+               for i = 1 to PQntuples(res)
+                       for j=1 to nFields
+                               see PQgetvalue(res, i-1, j-1) + " "
+                       next
+                       see nl
+               next
+
+               PQclear(res)
+
+               PQfinish(conn)
+
+Output:
+
+.. code-block:: none 
+
+       datname
+       datdba
+       encoding
+       datcollate
+       datctype
+       datistemplate
+       datallowconn
+       datconnlimit
+       datlastsysoid
+       datfrozenxid
+       datminmxid
+       dattablespace
+       datacl
+       ************************************************************
+       postgres 10 6 English_United States.1252 
+               English_United States.1252 f t -1 12937 549 1 1663
+       template1 10 6 English_United States.1252 English_United States.1252 
+               t t -1 12937 549 1 1663 {=c/postgres,postgres=CTc/postgres}
+       template0 10 6 English_United States.1252 English_United States.1252 
+               t f -1 12937 549 1 1663 {=c/postgres,postgres=CTc/postgres}
+       mahdb 10 6 English_United States.1252 English_United States.1252 
+               f t -1 12937 549 1 1663
+               
+Example(2):
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+
+       conninfo = "user=postgres password=sa dbname = mahdb"
+
+       exit_nicely = func conn {
+               PQfinish(conn)
+               shutdown(1)
+       }
+
+       conn = PQconnectdb(conninfo)
+
+       if (PQstatus(conn) != CONNECTION_OK)
+               fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                       call exit_nicely(conn)
+       ok
+
+       res = PQexec(conn, "
+               DROP DATABASE mahdb;
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+
+       res = PQexec(conn, "CREATE DATABASE mahdb;")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+
+
+       res = PQexec(conn, "
+       CREATE TABLE COMPANY (
+                        ID INT PRIMARY KEY     NOT NULL,
+                        NAME           TEXT    NOT NULL,
+                        AGE            INT     NOT NULL,
+                        ADDRESS        CHAR(50),
+                        SALARY         REAL );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                       INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
+                       VALUES  (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
+                                       (2, 'Ahmed'   , 27, 'Jeddah', 20.00 ),
+                                       (3, 'Mohammed', 33, 'Egypt' , 30.00 ),
+                                       (4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                  select * from COMPANY
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+               PQclear(res)
+               call exit_nicely(conn)
+       ok
+
+
+       nFields = PQnfields(res)
+       for i = 1 to nFields
+                       ? PQfname(res, i-1) 
+       next
+
+       ? copy("*",60)
+
+       for i = 1 to PQntuples(res)
+               for j=1 to nFields
+                       see PQgetvalue(res, i-1, j-1) + " "
+               next
+               see nl
+       next
+
+       PQclear(res)
+
+       PQfinish(conn)
+
+Output:
+
+.. code-block:: none
+
+       id
+       name
+       age
+       address
+       salary
+       ************************************************************
+       1 Mahmoud  31 Jeddah  10
+       2 Ahmed    27 Jeddah  20
+       3 Mohammed 31 Egypt   30
+       4 Ibrahim  24 Egypt   40        
+       
+
+.. index:: 
+       pair: PostgreSQL; RingPostgreSQL Constants
+
+RingPostgreSQL Constants
+========================
+
+The next constants are define by the RingPostgreSQL Library
+
+.. code-block:: none
+
+       CONNECTION_STARTED
+       CONNECTION_MADE
+       CONNECTION_AWAITING_RESPONSE
+       CONNECTION_AUTH_OK
+       CONNECTION_SSL_STARTUP
+       CONNECTION_SETENV
+       CONNECTION_OK
+
+       PQPING_OK
+       PQPING_REJECT
+       PQPING_NO_RESPONSE
+       PQPING_NO_ATTEMPT
+
+       PGRES_EMPTY_QUERY
+       PGRES_COMMAND_OK
+       PGRES_TUPLES_OK
+       PGRES_COPY_OUT
+       PGRES_COPY_IN
+       PGRES_BAD_RESPONSE
+       PGRES_NONFATAL_ERROR
+       PGRES_FATAL_ERROR
+       PGRES_COPY_BOTH
+       PGRES_SINGLE_TUPLE
+
+       PG_DIAG_SEVERITY
+       PG_DIAG_SQLSTATE
+       PG_DIAG_MESSAGE_PRIMARY
+       PG_DIAG_MESSAGE_DETAIL
+       PG_DIAG_MESSAGE_HINT
+       PG_DIAG_STATEMENT_POSITION
+       PG_DIAG_INTERNAL_POSITION
+       PG_DIAG_INTERNAL_QUERY
+       PG_DIAG_CONTEXT
+       PG_DIAG_SCHEMA_NAME
+       PG_DIAG_TABLE_NAME
+       PG_DIAG_COLUMN_NAME
+       PG_DIAG_DATATYPE_NAME
+       PG_DIAG_CONSTRAINT_NAME
+       PG_DIAG_SOURCE_FILE
+       PG_DIAG_SOURCE_LINE
+       PG_DIAG_SOURCE_FUNCTION
+
+
+.. index:: 
+       pair: PostgreSQL; RingPostgreSQL Functions
+
+RingPostgreSQL Functions
+========================
+
+The next functions are define by the RingPostgreSQL Library
+
+Reference : https://www.postgresql.org/docs/9.1/static/libpq.html
+
+.. code-block:: none
+
+       PGconn *PQconnectdbParams(const char **keywords,
+               const char **values,int expand_dbname);
+       PGconn *PQconnectdb(const char *conninfo)
+       PGconn *PQsetdbLogin(const char *pghost,const char *pgport,
+               const char *pgoptions,const char *pgtty,
+               const char *dbName,const char *login,const char *pwd)
+       PGconn *PQsetdb(char *pghost,char *pgport,char *pgoptions,
+               char *pgtty,char *dbName)
+       PGconn *PQconnectStartParams(const char **keywords,
+               const char **values,int expand_dbname)
+       PGconn *PQconnectStart(const char *conninfo)
+       PostgresPollingStatusType PQconnectPoll(PGconn *conn)
+       PQconninfoOption *PQconndefaults(void)
+       PQconninfoOption *PQconninfo(PGconn *conn)
+       PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg)
+       void PQfinish(PGconn *conn)
+       void PQreset(PGconn *conn)
+       int PQresetStart(PGconn *conn)
+       PostgresPollingStatusType PQresetPoll(PGconn *conn)
+       PGPing PQpingParams(const char **keywords,const char **values,
+               int expand_dbname)
+       PGPing PQping(const char *conninfo)
+       char *PQdb(const PGconn *conn)
+       char *PQuser(const PGconn *conn)
+       char *PQpass(const PGconn *conn)
+       char *PQhost(const PGconn *conn)
+       char *PQport(const PGconn *conn)
+       char *PQtty(const PGconn *conn)
+       char *PQoptions(const PGconn *conn)
+       ConnStatusType PQstatus(const PGconn *conn)
+       PGTransactionStatusType PQtransactionStatus(const PGconn *conn)
+       const char *PQparameterStatus(const PGconn *conn, const char *paramName)
+       int PQprotocolVersion(const PGconn *conn)
+       int PQserverVersion(const PGconn *conn)
+       char *PQerrorMessage(const PGconn *conn)
+       int PQsocket(const PGconn *conn)
+       int PQbackendPID(const PGconn *conn)
+       int PQconnectionNeedsPassword(const PGconn *conn)
+       int PQconnectionUsedPassword(const PGconn *conn)
+       int PQsslInUse(const PGconn *conn)
+       const char *PQsslAttribute(const PGconn *conn, const char *attribute_name)
+       const char **PQsslAttributeNames(const PGconn *conn)
+       void *PQsslStruct(const PGconn *conn, const char *struct_name)
+       void *PQgetssl(const PGconn *conn)
+       PGresult *PQexec(PGconn *conn, const char *command);
+       PGresult *PQexecParams(PGconn *conn,const char *command,int nParams,
+               const Oid *paramTypes,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       PGresult *PQprepare(PGconn *conn,const char *stmtName,
+               const char *query,int nParams,const Oid *paramTypes)
+       PGresult *PQexecPrepared(PGconn *conn,const char *stmtName,
+               int nParams,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       PGresult *PQdescribePrepared(PGconn *conn, const char *stmtName)
+       PGresult *PQdescribePortal(PGconn *conn, const char *portalName)
+       ExecStatusType PQresultStatus(const PGresult *res)
+       char *PQresStatus(ExecStatusType status)
+       char *PQresultErrorMessage(const PGresult *res)
+       char *PQresultErrorField(const PGresult *res, int fieldcode)
+       void PQclear(PGresult *res)
+       int PQntuples(const PGresult *res)
+       int PQnfields(const PGresult *res)
+       char *PQfname(const PGresult *res,int column_number)
+       int PQfnumber(const PGresult *res,const char *column_name)
+       Oid PQftable(const PGresult *res,int column_number)
+       int PQftablecol(const PGresult *res,int column_number)
+       int PQfformat(const PGresult *res,int column_number)
+       Oid PQftype(const PGresult *res,int column_number)
+       int PQfmod(const PGresult *res,int column_number)
+       int PQfsize(const PGresult *res,int column_number)
+       int PQbinaryTuples(const PGresult *res)
+       char *PQgetvalue(const PGresult *res,int row_number,int column_number)
+       int PQgetisnull(const PGresult *res,int row_number,int column_number)
+       int PQgetlength(const PGresult *res,int row_number,int column_number)
+       int PQnparams(const PGresult *res)
+       Oid PQparamtype(const PGresult *res, int param_number)
+       void PQprint(FILE *fout,const PGresult *res,const PQprintOpt *po)
+       char *PQcmdStatus(PGresult *res)
+       char *PQcmdTuples(PGresult *res)
+       Oid PQoidValue(const PGresult *res)
+       char *PQoidStatus(const PGresult *res)
+       char *PQescapeLiteral(PGconn *conn, const char *str, size_t length)
+       char *PQescapeIdentifier(PGconn *conn, const char *str, size_t length)
+       size_t PQescapeStringConn(PGconn *conn,char *to, 
+               const char *from, size_t length,int *error)
+       size_t PQescapeString(char *to, const char *from, size_t length)
+       unsigned char *PQescapeByteaConn(PGconn *conn,
+               const unsigned char *from,size_t from_length,size_t *to_length)
+       unsigned char *PQescapeBytea(const unsigned char *from,
+               size_t from_length,size_t *to_length)
+       unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length)
+       int PQsendQuery(PGconn *conn, const char *command)
+       int PQsendQueryParams(PGconn *conn,const char *command,
+               int nParams,const Oid *paramTypes,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       int PQsendPrepare(PGconn *conn,const char *stmtName,
+               const char *query,int nParams,const Oid *paramTypes)
+       int PQsendQueryPrepared(PGconn *conn,const char *stmtName,
+               int nParams,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       int PQsendDescribePrepared(PGconn *conn, const char *stmtName)
+       int PQsendDescribePortal(PGconn *conn, const char *portalName)
+       PGresult *PQgetResult(PGconn *conn)
+       int PQconsumeInput(PGconn *conn)
+       int PQisBusy(PGconn *conn)
+       int PQsetnonblocking(PGconn *conn, int arg)
+       int PQisnonblocking(const PGconn *conn)
+       int PQflush(PGconn *conn)
+       int PQsetSingleRowMode(PGconn *conn)
+       PGcancel *PQgetCancel(PGconn *conn)
+       void PQfreeCancel(PGcancel *cancel)
+       int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize)
+       int PQrequestCancel(PGconn *conn)
+       PGresult *PQfn(PGconn *conn,int fnid,int *result_buf,
+               int *result_len,int result_is_int,const PQArgBlock *args,int nargs)
+       PGnotify *PQnotifies(PGconn *conn)
+       int PQputCopyData(PGconn *conn,const char *buffer,int nbytes)
+       int PQputCopyEnd(PGconn *conn,const char *errormsg)
+       int PQgetCopyData(PGconn *conn,char **buffer,int async)
+       int PQgetline(PGconn *conn,char *buffer,int length)
+       int PQgetlineAsync(PGconn *conn,char *buffer,int bufsize)
+       int PQputline(PGconn *conn,const char *string)
+       int PQputnbytes(PGconn *conn,const char *buffer,int nbytes)
+       int PQendcopy(PGconn *conn)
+       int PQclientEncoding(const PGconn *conn)
+       char *pg_encoding_to_char(int encoding_id)
+       int PQsetClientEncoding(PGconn *conn, const char *encoding)
+       void PQtrace(PGconn *conn, FILE *stream)
+       void PQuntrace(PGconn *conn)
+       void PQfreemem(void *ptr)
+       void PQconninfoFree(PQconninfoOption *connOptions)
+       char *PQencryptPasswordConn(PGconn *conn, const char *passwd,
+                const char *user, const char *algorithm)
+       char *PQencryptPassword(const char *passwd, const char *user)
+       PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status)
+       int PQfireResultCreateEvents(PGconn *conn, PGresult *res)
+       PGresult *PQcopyResult(const PGresult *src, int flags)
+       int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs)
+       int PQsetvalue(PGresult *res, int tup_num, int field_num, 
+                       char *value, int len)
+       void *PQresultAlloc(PGresult *res, size_t nBytes)
+       int PQlibVersion(void)
+       PQnoticeReceiver PQsetNoticeReceiver(PGconn *conn,
+                       PQnoticeReceiver proc,void *arg)
+       PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn,
+                       PQnoticeProcessor proc,void *arg)
+       void PQinitOpenSSL(int do_ssl, int do_crypto)
+       void PQinitSSL(int do_ssl)
+       int PQisthreadsafe(void)
diff --git a/docs/en/source/printpreviewdialog.png b/docs/en/source/printpreviewdialog.png
new file mode 100644 (file)
index 0000000..acf1b49
Binary files /dev/null and b/docs/en/source/printpreviewdialog.png differ
diff --git a/docs/en/source/programstructure.txt b/docs/en/source/programstructure.txt
new file mode 100644 (file)
index 0000000..66940ef
--- /dev/null
@@ -0,0 +1,162 @@
+.. index:: 
+       single: Program Structure;  Introduction
+
+=================
+Program Structure
+=================
+In this chapter we will learn about using many source code files in the same project.
+
+
+.. index:: 
+       pair: Program Structure;  Source Code File Sections
+
+Source Code File Sections
+=========================
+
+Each source code file may contains the next sections (in the same order).
+
++--------------------------------+
+| Source Code File Sections     |
++================================+
+| Load Files                    |
++--------------------------------+
+| Statements and Global Variables|
++--------------------------------+
+| Functions                     |
++--------------------------------+
+| Packages and Classes          |
++--------------------------------+
+
+The application maybe one or more of files.
+
+.. index:: 
+       pair: Program Structure;  Using Many Source Code Files
+
+Using Many Source Code Files
+============================
+
+To include another source file in the project, just use the load command.
+
+
+Syntax:
+
+.. code-block:: ring
+
+       Load  "filename.ring"
+
+.. note:: The Load command is executed directly by the compiler in the parsing stage
+
+.. tip:: if you don't know the file name until the runtime, or you need to use functions to get the file path, just use eval().
+
+Example:
+
+.. code-block:: ring
+
+       # File : Start.ring
+
+       Load "sub.ring"
+
+       sayhello("Mahmoud")
+
+.. code-block:: ring
+
+       # File : sub.ring
+
+       func sayhello cName
+               see "Hello " + cName + nl
+
+
+.. index:: 
+       pair: Program Structure;  Load Package
+
+Load Package
+============
+
+Using the 'load' command we can use many ring source files in the same project
+
+But all of these files will share the same global scope 
+
+We have also the "Load Package" command
+
+Using "Load Package" we can load a library (*.ring file) in new global scope
+
+This is very useful to create libraries that avoid conflicts in global variables
+
+Example:
+
+File: loadpackage.ring
+
+.. code-block:: ring
+
+       x = 100
+       ? "Hello, World!"
+       load package "testloadpackage.ring"
+
+       ? x
+       test()
+
+File: testloadpackage.ring
+
+.. code-block:: ring
+
+       ? "Hello from testloadpackage.ring"
+
+       x = 1000
+
+       test()
+
+       func test
+               ? x
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       Hello from testloadpackage.ring
+       1000
+       100
+       1000
+
+.. index:: 
+       pair: Program Structure;  Load Again
+
+Load Again
+==========
+
+Ring 1.12 comes with the Load Again command
+
+Using this command we can load the Ring source file which contains constants more than one time.
+
+This is useful when using Ring source files for translations through global constants.
+
+Example:
+
+The next function is part from a project which support Arabic and English languages
+
+The files english.ring and arabic.ring contains constants for translation
+
+One of these files is loaded in the start of the program
+
+Loading the same file again using the (Load) command is not possible
+
+Because the (Load) command load the same source file only for the first time and ignore next times.
+
+So we have to use the (Load Again) command.
+
+Where we can use these files again during the runtime as in the next code
+
+.. code-block:: ring
+
+       func setLang nLanguage
+               if C_ENV_DEFAULT_LANG = nLanguage
+                       return
+               ok
+               C_ENV_DEFAULT_LANG = nLanguage
+               # Change the language
+                       switch nLanguage 
+                               on C_TRANSLATION_ENGLISH
+                                       load again "translation/english.ring"
+                               on C_TRANSLATION_ARABIC 
+                                       load again "translation/arabic.ring"
+                       off
\ No newline at end of file
diff --git a/docs/en/source/qt.txt b/docs/en/source/qt.txt
new file mode 100644 (file)
index 0000000..28f7b25
--- /dev/null
@@ -0,0 +1,4669 @@
+.. index:: 
+       Single: Desktop and Mobile Development;  Introduction
+
+===========================================
+Desktop and Mobile development using RingQt
+===========================================
+
+In this chapter we will learn how to use the Qt framework classes  
+in our Ring applications to create Desktop and Mobile Applications.
+
+.. index:: 
+       pair: Desktop and Mobile Development; The First GUI Application
+
+
+The First GUI Application
+=========================
+
+In this example we will create an application to ask the user about his/her name.
+When the user type the name in the textbox then click on "Say Hello" button, the textbox
+value will be updated by adding "Hello " to the name.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       oApp = new qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Hello World")
+                       setGeometry(100,100,370,250)
+
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?")
+                               setGeometry(10,20,350,30)
+                               setalignment(Qt_AlignHCenter)
+                       }
+
+                       btn1 = new qPushButton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("Say Hello")
+                               setclickevent("pHello()")
+                       }
+
+                       btn1 = new qPushButton(win1) {
+                               setGeometry(150,200,100,30)
+                               settext("Close")
+                               setclickevent("pClose()")
+                       }
+
+                       lineedit1 = new qLineEdit(win1) {
+                               setGeometry(10,100,350,30)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               oApp.quit()
+
+Program Output:
+
+At first we type the name in the textbox
+
+.. image:: ringqt_shot1.jpg
+       :alt: Enter the name in the textbox
+
+Then we click on the say hello button
+
+.. image:: ringqt_shot2.jpg
+       :alt: Click on the button
+
+.. index:: 
+       pair: Desktop and Mobile Development; The Events Loop
+
+The Events Loop
+===============
+
+Qt uses Event-Driven and the events loop get the control when we call the exec() method from the qApp class.
+
+Once we call exec(), The events loop starts, and the Widgets starts responding to the different events (Mouse, Keyboard, Timers, etc). 
+
+You get the control back again when an event is fired and your callback function is called.
+
+Once the execution of your callback function is done, the control go back again to the events loop.
+
+Useful things to remember
+
+(1) We can do most of the work using normal events (Events provided directly by each widget).
+
+(2) We can add more events to any widget using the Events Filter.
+
+(3) Using Timers we can easily get the control back and check for more things to do.
+
+Also when our callback function is busy with doing time consuming operations, we can call the ProcessEvents() method from the qApp class
+to avoid stoping the GUI.
+
+.. code-block:: ring
+
+       oApp.processevents()
+
+We can avoid calling the exec() method, and create our main loop
+
+It's not recommended to do that, It's just an option.
+
+.. code-block:: ring
+
+       # Instead of calling the exec() method 
+               while true
+                       oApp.processevents()    # Respond to GUI Events 
+                       # More Thing to do, We have the control!
+                       # .....
+               end 
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using Layout
+
+Using Layout
+============
+
+The next example is just an upgrade to the previous application to use the vertical layout.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Hello World") 
+                       setGeometry(100,100,400,130) 
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?") 
+                               setGeometry(10,20,350,30) 
+                               setalignment(Qt_AlignHCenter)
+                       }
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30) 
+                               settext("Say Hello") 
+                               setclickevent("pHello()")
+                       }
+                       btn2 = new qpushbutton(win1) {
+                               setGeometry(150,200,100,30) 
+                               settext("Close") 
+                               setclickevent("pClose()")
+                       }
+                       lineedit1 = new qlineedit(win1) {
+                               setGeometry(10,100,350,30) 
+                       }
+                       layout1 = new qVBoxLayout() {
+                               addwidget(label1)  
+                               addwidget(lineedit1)  
+                               addwidget(btn1)  
+                               addwidget(btn2)         
+                       }
+                       win1.setlayout(layout1) 
+                       show()
+               }
+
+               exec()
+
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               MyApp.quit()
+
+The application during the runtime!            
+               
+.. image:: ringqt_shot3.jpg
+       :alt: Vertical Layout
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QTextEdit Class
+
+Using the QTextEdit Class
+=========================
+
+In this example we will use the QTextEdit Class 
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("QTextEdit Class")
+                       setGeometry(100,100,500,500)
+
+                       new qtextedit(win1) {
+                               setGeometry(10,10,480,480)
+
+                       }
+
+                       show()
+               }
+
+               exec()
+       }       
+               
+During the runtime we can paste rich text in the qtextedit widget
+
+.. image:: ringqt_shot4.jpg
+       :alt: QTextEdit Class
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QListWidget Class
+
+Using the QListWidget Class
+===========================
+
+In this example we will use the QListWidget Class 
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setGeometry(100,100,400,400)
+
+                       list1 = new qlistwidget(win1) {
+                               setGeometry(150,100,200,200)
+                               alist = ["one","two","three","four","five"]
+                               for x in alist additem(x) next
+                               setcurrentrow(3,2)
+                               win1.setwindowtitle("Items Count : " + count() )
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("selected item")
+                               setclickevent("pWork()")
+                       }
+
+                       btn2 = new qpushbutton(win1) {
+                               setGeometry(10,240,100,30)
+                               settext("Delete item")
+                               setclickevent("pWork2()")
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       func pWork
+               btn1.settext(string(list1.currentrow()))
+
+       func pWork2
+               list1 {
+                      takeitem(currentrow())
+               }
+
+The application during the runtime
+
+.. image:: ringqt_shot5.jpg
+       :alt: QListWidget Class
+
+
+Another Example:
+
+.. code-block:: ring
+
+        Load "guilib.ring"
+
+        New qApp {
+
+                win1 = new qWidget() {
+
+                        setGeometry(100,100,500,400)
+
+                        list1 = new qlistwidget(win1) {
+                                setGeometry(150,100,200,200)
+                                alist = ["one","two","three","four","five"]
+                                for x in alist additem(x) next
+                                
+                                setcurrentrow(3,2)
+                                win1.setwindowtitle("Items Count : " + count() )
+                        }
+
+                        btn1 = new qpushbutton(win1) {
+                                setGeometry(10,200,100,30)
+                                settext("selected item")
+                                setclickevent("pWork()")
+                        }
+
+                        btn2 = new qpushbutton(win1) {
+                                setGeometry(10,240,100,30)
+                                settext("Delete item")
+                                setclickevent("pWork2()")
+                        }
+
+                        show()
+                }
+
+                exec()
+        }
+
+        func pWork
+                        
+                nbrOfItems = list1.count()
+                curItemNbr = list1.currentrow()
+                curValue   = list1.item(list1.currentrow()).text()
+                
+                win1.setwindowtitle( "After Select - NbrOfItems: " + nbrOfItems +
+                       " CurItemNbr: " + curItemNbr + " CurValue: " + curValue )
+                
+                btn1.settext( string(list1.currentrow() ) + " --- " +
+                             list1.item(list1.currentrow()).text() )
+
+                
+
+        func pWork2
+                list1 {
+                        takeitem(currentrow())
+                        
+                        nbrOfItems = count()
+                        curItemNbr = currentrow()
+                        curValue   = item(currentrow()).text()
+                    
+                        win1.setwindowtitle("After Delete - NbrOfItems: " + nbrOfItems +
+                               " CurItemNbr: " + curItemNbr +" CurValue: " + curValue )
+                }
+
+       
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTreeView and QFileSystemModel
+
+Using QTreeView and QFileSystemModel
+====================================
+
+In this example we will learn how to use the QTreeView widget to represent the File System
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = New qWidget() {
+
+                       setwindowtitle("Using QTreeView and QFileSystemModel")
+                       setGeometry(100,100,500,400)
+
+                       New qtreeview(win1) {
+                               setGeometry(00,00,500,400)
+                               oDir = new QDir()                       
+                               ofile = new QFileSystemModel()
+                               ofile.setrootpath(oDir.currentpath())
+                               setmodel(ofile)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot6.jpg
+       :alt: QTreeView and QFileSystemModel
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTreeWidget and QTreeWidgetItem
+
+Using QTreeWidget and QTreeWidgetItem
+=====================================
+
+In this example we will learn about using the QTreeWidget and QTreeWidgetItem classes
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("TreeWidget")
+                       setGeometry(100,100,400,400)
+
+                       layout1 = new qvboxlayout()
+
+                       tree1 = new qtreewidget(win1) {
+                               setGeometry(00,00,400,400)
+                               setcolumncount(1)
+                               myitem = new qtreewidgetitem()
+                               myitem.settext(0,"The First Step")
+                               addtoplevelitem(myitem)
+                               for  x = 1 to 10
+                                       myitem2 = new qtreewidgetitem()
+                                       myitem2.settext(0,"hello"+x)
+                                       myitem.addchild(myitem2)
+                                       for  y = 1 to 10
+                                               myitem3 = new qtreewidgetitem()
+                                               myitem3.settext(0,"hello"+x)
+                                               myitem2.addchild(myitem3)
+                                       next
+                               next
+                               setheaderlabel("Steps Tree")
+                       }
+
+                       layout1.addwidget(tree1)
+                       setlayout(layout1)
+
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot7.jpg
+       :alt: QTreeWidget and QTreeWidgetItem
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QComboBox Class
+
+Using QComboBox Class
+=====================
+
+In this example we will learn about using the QComboBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Using QComboBox")
+                       setGeometry(100,100,400,400)
+
+                       New QComboBox(win1) {
+                               setGeometry(150,100,200,30)
+                               alist = ["one","two","three","four","five"]
+                               for x in aList additem(x,0) next
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+            
+The application during the runtime
+
+.. image:: ringqt_shot8.jpg
+       :alt: QComboBox
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Creating Menubar
+
+Creating Menubar
+================
+
+In this example we will learn about using the QMenuBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Using QMenubar")
+                       setGeometry(100,100,400,400)
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub2 = addmenu("Edit")
+                               sub3 = addmenu("Help")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               settext("New")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Open")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save As")
+                                       }
+                                       addaction(oAction)                      
+                                       addseparator()
+                                       oAction = new qaction(win1) {
+                                               settext("Exit")
+                                               setclickevent("myapp.quit()")
+                                       }
+                                       addaction(oAction)
+                               }
+                               sub2 { 
+                                       oAction = new qAction(win1) {
+                                               settext("Cut")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Copy")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Paste")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               settext("Select All")
+                                       }
+                                       addaction(oAction)
+                               }                               
+                               sub3 { 
+                                       oAction = new qAction(win1) {
+                                               settext("Reference")
+                                       }
+                                       addaction(oAction)                      
+                                       sub4 = addmenu("Sub Menu")
+                                       sub4 { 
+                                               oAction = new qAction(win1) {
+                                                       settext("Website")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("Forum")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("Blog")
+                                               }
+                                               addaction(oAction)
+                                       }
+                                       addseparator()
+                                               oAction = new qAction(win1) {
+                                                       settext("About")
+                                               }
+                                               addaction(oAction)                      
+                               }
+                       }
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot9.jpg
+       :alt: QMenuBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Context Menu
+
+Context Menu
+============
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qwidget() {
+                       setwindowtitle("Context Menu")
+                       resize(400,400)
+                       myfilter = new qAllEvents(win) {
+                               setContextmenuEvent("mymenu()")
+                       }
+                       installeventfilter(myfilter)
+                       show()
+               }
+               exec()
+       }
+
+
+       func mymenu 
+
+               new qMenu(win) {
+                       oAction = new qAction(win) {
+                               settext("new")
+                               SetCLickevent("See :New")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("open")
+                               SetCLickevent("See :Open")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("save")
+                               SetCLickevent("See :Save")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("close")
+                               SetCLickevent("See :Close")
+                       }
+                       addaction(oAction)
+                       oCursor  = new qCursor()
+                       exec(oCursor.pos())
+               }
+       
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating Toolbar
+       
+Creating Toolbar
+================
+
+In this example we will learn about using the QToolBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QToolbar")
+                       setGeometry(100,100,600,400)
+
+                       abtns = [
+                                       new qpushbutton(win1) { settext("Add") } ,
+                                       new qpushbutton(win1) { settext("Edit") } ,
+                                       new qpushbutton(win1) { settext("Find") } ,
+                                       new qpushbutton(win1) { settext("Delete") } ,
+                                       new qpushbutton(win1) { settext("Exit") 
+                                                               setclickevent("win1.close()") } 
+                               ]
+
+                       tool1 = new qtoolbar(win1) {
+                               for x in abtns addwidget(x) addseparator() next
+                               setmovable(true)
+                               setGeometry(0,0,500,30)                 
+                               setFloatable(true)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot10.jpg
+       :alt: QToolBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating StatusBar
+       
+Creating StatusBar
+==================
+
+In this example we will learn about using the QStatusBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QStatusbar")
+                       setGeometry(100,100,400,400)
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot11.jpg
+       :alt: QStatusBar
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDockWidget
+
+Using QDockWidget
+=================
+
+In this example we will learn about using the QDockWidget class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+       
+               win1 = new qMainWindow() {
+               
+                       setwindowtitle("QDockWidget")
+                       setGeometry(100,100,400,400)
+
+                       label1 = new qlabel(win1) {
+                               settext("Hello")
+                               setGeometry(300,300,100,100)
+                       }
+                       
+                       label2 = new qlabel(win1) {
+                               settext("How are you ?")
+                               setGeometry(100,100,100,100)
+                       }
+                       
+                       dock1 = new qdockwidget(win1,0) {
+                               setwidget(label1)
+                               SetAllowedAreas(1)
+                       }
+                       
+                       dock2 = new qdockwidget(win1,0) {
+                               setwidget(label2)
+                               SetAllowedAreas(2)
+                       }
+
+                       adddockwidget(Qt_LeftDockWidgetArea,dock1,Qt_Horizontal)
+                       adddockwidget(Qt_LeftDockWidgetArea,dock2,Qt_Vertical)
+
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot12.jpg
+       :alt: QDockWidget
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTabWidget
+
+Using QTabWidget
+=================
+
+In this example we will learn about using the QTabWidget class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QTabWidget")
+                       setGeometry(100,100,400,400)
+
+                       page1 = new qwidget() {
+                               new qpushbutton(page1) {
+                                       settext("The First Page")
+                               }
+                       }
+
+                       page2 = new qwidget() {
+                               new qpushbutton(page2) {
+                                       settext("The Second Page")
+                               }
+                       }
+
+                       page3 = new qwidget() {
+                               new qpushbutton(page3) {
+                                       settext("The Third Page")
+                               }
+                       }
+
+                       tab1 = new qtabwidget(win1) {
+                               inserttab(0,page1,"Page 1")
+                               inserttab(1,page2,"Page 2")
+                               inserttab(2,page3,"Page 3")
+                               setGeometry(100,100,400,400)
+                       }               
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+                       showMaximized()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot13.jpg
+       :alt: QTabWidget
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTableWidget
+
+Using QTableWidget
+==================
+
+In this example we will learn about using the QTableWidget class
+
+.. code-block:: ring
+
+       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             
+
+                       }
+
+                       setcentralwidget(table1)
+                       show()
+
+               }
+
+               exec()
+       }
+
+
+The application during the runtime
+
+.. image:: ringqt_shot14.jpg
+       :alt: QTableWidget
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QProgressBar
+       
+Using QProgressBar
+==================
+
+In this example we will learn about using the QProgressBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+
+                       setGeometry(100,100,600,150)
+                       setwindowtitle("Using QProgressBar")
+
+                       for x = 10 to 100 step 10
+                               new qprogressbar(win1) {        
+                                       setGeometry(100,x,350,30)
+                                       setvalue(x)
+                               }
+                       next
+
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot15.jpg
+       :alt: QProgressBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QSpinBox
+
+Using QSpinBox
+==============
+
+In this example we will learn about using the QSpinBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setGeometry(100,100,450,260)
+                       setwindowtitle("Using QSpinBox")
+                               new qspinbox(win1) {    
+                                       setGeometry(50,100,350,30)
+                                       setvalue(50)
+                               }
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot16.jpg
+       :alt: QSpinBox
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QSlider
+
+Using QSlider
+=============
+
+In this example we will learn about using the QSlider class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setGeometry(100,100,500,400)
+                       setwindowtitle("Using QSlider")
+
+                       new qslider(win1) {     
+                               setGeometry(100,100,50,130)
+                               settickinterval(50)                             
+                       }
+
+                       new qslider(win1) {     
+                               setGeometry(100,250,250,30)
+                               settickinterval(50)     
+                               setorientation(Qt_Horizontal)                   
+                       }
+
+                       show()
+
+               }
+
+               exec()
+       }
+       
+The application during the runtime
+
+.. image:: ringqt_shot17.jpg
+       :alt: QSlider
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDateEdit
+
+Using QDateEdit
+==================
+
+In this example we will learn about using the QDateEdit class
+
+.. code-block:: ring
+       
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QDateEdit")
+                       setGeometry(100,100,250,100)
+                       new qdateedit(win1) {   
+                               setGeometry(20,40,220,30)
+                       }
+                       show()
+               }
+               exec()
+       }
+       
+The application during the runtime
+
+.. image:: ringqt_shot18.jpg
+       :alt: QDateEdit
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDial
+       
+
+Using QDial
+==================
+
+In this example we will learn about using the QDial class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setGeometry(100,100,450,500)
+                       setwindowtitle("Using QDial")
+                       new qdial(win1) {       
+                               setGeometry(100,100,250,300)
+                       }
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot19.jpg
+       :alt: QDial
+
+Another Example
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+                        win1 = new qMainWindow() 
+                       {
+                               setGeometry(100,100,450,500)
+                               setwindowtitle("Using QDial")
+                               button1 = new QPushButton(win1){
+                                       setGeometry(100,350,100,30)
+                                       settext("Increment")
+                                       setClickEvent("pIncrement()")
+                               }
+
+                               button2 = new QPushButton(win1){
+                                       setGeometry(250,350,100,30)
+                                       settext("Decrement")
+                                       setClickEvent("pDecrement()")                                                                              
+                               } 
+                               pdial = new qdial(win1) {
+                                       setGeometry(100,50,250,300)
+                                       setNotchesVisible(true)
+                                       setValue(50)
+                                       SetValueChangedEvent("pDialMove()")
+                               }
+                               lineedit1 = new qlineedit(win1) {
+                                       setGeometry(200,400,50,30)
+                                       setalignment(Qt_AlignHCenter)
+                                       settext(string(pdial.value()))
+                                       setreturnPressedEvent("pPress()") 
+                               } 
+                               show()
+                         }
+               exec()
+       }
+
+       func pIncrement
+               pdial{val=value()}
+               pdial.setvalue(val+1)  
+               lineedit1{settext(string(val+1))}   
+
+       func pDecrement
+               pdial{val=value()}
+               pdial.setvalue(val-1)   
+               lineedit1{settext(string(val-1))}  
+
+       func pPress
+               lineedit1{val=text()}
+               pdial.setvalue(number(val)) 
+
+       func pDialMove
+               lineedit1.settext(""+pdial.value())
+
+
+.. image:: usingqdial.png
+       :alt: QDial - Second Example
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QWebView
+
+Using QWebView
+==============
+
+In this example we will learn about using the QWebView class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QWebView")
+                       myweb = new qwebview(win1) {    
+                               setGeometry(10,10,600,600)
+                               loadpage(new qurl("http://google.com"))
+                       }
+                       setcentralwidget(myweb)
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot20.jpg
+       :alt: QWebView
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QCheckBox
+       
+Using QCheckBox
+===============
+
+In this example we will learn about using the QCheckBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QCheckBox")
+                       new qcheckbox(win1) {   
+                               setGeometry(100,100,100,30)
+                               settext("New Customer!")
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot21.jpg
+       :alt: QCheckBox
+
+
+Another Example:
+
+.. code-block:: ring
+
+        Load "guilib.ring"
+
+        New qApp {
+                win1 = new qMainWindow() {
+                        setGeometry(100,100,400,300)
+                        setwindowtitle("Using QCheckBox")
+                        
+                        ### 0-Unchecked  1-Checked
+                        
+                        CheckBox = new qcheckbox(win1) {
+                                setGeometry(100,100,160,30)
+                                settext("New Customer!")
+                                setclickedEvent("HandleClickEvent()")
+                        }                   
+                                    
+                        show()                            
+                }
+                exec()
+        }
+
+        Func HandleClickEvent
+            
+            if CheckBox.isChecked() = 1 
+                CheckBox.settext("New Customer. Check 1-ON")
+            else
+                CheckBox.settext("New Customer. Check 0-OFF")
+            ok
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QRadioButton and QButtonGroup
+       
+Using QRadioButton and QButtonGroup
+====================================
+
+In this example we will learn about using the QRadioButton and QButtonGroup classes
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QRadioButton")
+
+                       new qradiobutton(win1) {        
+                               setGeometry(100,100,100,30)
+                               settext("One")
+                       }
+                       new qradiobutton(win1) {        
+                               setGeometry(100,150,100,30)
+                               settext("Two")
+                       }
+                       new qradiobutton(win1) {        
+                               setGeometry(100,200,100,30)
+                               settext("Three")
+                       }
+
+
+                       group2  = new qbuttongroup(win1) {
+                               btn4 = new qradiobutton(win1) { 
+                                       setGeometry(200,150,100,30)
+                                       settext("Four")
+                               }
+                               btn5 = new qradiobutton(win1) { 
+                                       setGeometry(200,200,100,30)
+                                       settext("Five")
+                               }
+                               addbutton(btn4,0)
+                               addbutton(btn5,0)
+
+                       }
+
+                       showMaximized()
+
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot22.jpg
+       :alt:  QRadioButton and QButtonGroup classes
+
+.. index:: 
+       pair: Desktop and Mobile Development; Adding Hyperlink to QLabel
+
+Adding Hyperlink to QLabel
+==========================
+
+In this example we will learn about creating Hyperlink using the QLabel class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QLabel - Hyperlink")
+                       new qlabel(win1) {      
+                               setGeometry(100,100,100,30)
+                               setopenexternallinks(true)
+                               settext('<a href="http://google.com">Google</a>')
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot23.jpg
+       :alt: Hyperlink
+       
+.. index:: 
+       pair: Desktop and Mobile Development; QVideoWidget and QMediaPlayer
+
+QVideoWidget and QMediaPlayer
+=============================
+
+In this example we will learn about using the QVideoWidget and QMediaPlayer classes to play
+a group of movies from different positions at the same time
+
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("QVideoWidget")
+                       
+                       btn1 = new qpushbutton(win1)    {
+                               setGeometry(0,0,100,30)
+                               settext("play")
+                               setclickevent("player.play() player2.play() 
+                                                          player3.play() player4.play()")
+                       }
+
+                       videowidget = new qvideowidget(win1) {
+                               setGeometry(50,50,600,300)
+                               setstylesheet("background-color: black")                        
+                       }
+
+                       videowidget2 = new qvideowidget(win1) {
+                               setGeometry(700,50,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+
+                       videowidget3 = new qvideowidget(win1) {
+                               setGeometry(50,370,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+                       videowidget4 = new qvideowidget(win1) {
+                               setGeometry(700,370,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+                       player = new qmediaplayer() {
+                               setmedia(new qurl("1.mp4"))
+                               setvideooutput(videowidget)
+                               setposition(35*60*1000)
+                               
+                       }               
+
+                       player2 = new qmediaplayer() {
+                               setmedia(new qurl("2.mp4"))
+                               setvideooutput(videowidget2)
+                               setposition(23*60*1000)
+                       }               
+
+                       player3 = new qmediaplayer() {
+                               setmedia(new qurl("3.mp4"))
+                               setvideooutput(videowidget3)
+                               setposition(14.22*60*1000)
+                       }               
+
+                       player4 = new qmediaplayer() {
+                               setmedia(new qurl("4.avi"))
+                               setvideooutput(videowidget4)
+                               setposition(8*60*1000)
+                       }               
+                       
+                       showfullscreen()                
+
+               }
+
+               exec()
+
+       }
+
+       
+The application during the runtime
+
+.. image:: ringqt_shot24.jpg
+       :alt: QVideoWidget
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QFrame
+
+Using QFrame
+============
+
+In this example we will learn about using the QFrame class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QFrame")
+                       for x = 0 to 10
+                               frame1 = new qframe(win1,0) {   
+                                       setGeometry(100,20+50*x,400,30)
+                                       setframestyle(QFrame_Raised | QFrame_WinPanel)                          
+                               }
+                       next
+                       showMaximized()
+               }
+               exec()
+       }
+
+
+The application during the runtime
+
+.. image:: ringqt_shot25.jpg
+       :alt: QFrame
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Display Image using QLabel
+       
+Display Image using QLabel
+==========================
+
+In this example we will learn about displaying an image using the QLabel widget
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QLabel - Display image")
+                       new qlabel(win1) {      
+                               image = new qpixmap("b:/mahmoud/photo/advice.jpg")
+                               setpixmap(image)
+                               setGeometry(0,0,image.width(),image.height())
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot26.jpg
+       :alt: Display Image
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Menubar and StyleSheet Example
+
+Menubar and StyleSheet Example
+==============================
+
+In this example we will learn about creating menubar and setting the window stylesheet
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Menubar")
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               settext("New")          
+                                               setenabled(false)
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Open")
+                                               setcheckable(true)
+                                               setchecked(true)
+                                               setstatustip("open new file")                                    
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save As")
+                                       }
+                                       addaction(oAction)
+                               
+                                       addseparator()
+                                       oAction = new qaction(win1)
+                                       oAction.settext("Exit")
+                                       oAction.setclickevent("myapp.quit()")
+                                       addaction(oAction)
+                               }                       
+
+                       }
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+                       setmenubar(menu1)
+                       setmousetracking(true)
+                       setstatusbar(status1)
+                       setStyleSheet("color: black; selection-color: black;
+                       selection-background-color:white ;
+                       background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
+                       stop: 0 #eef, stop: 1 #ccf);")
+                       showmaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot27.jpg
+       :alt: Menubar
+
+.. index:: 
+       pair: Desktop and Mobile Development; QLineEdit Events and QMessageBox
+
+QLineEdit Events and QMessageBox
+================================
+
+In this example we will learn about using QLineEdit Events and displaying a Messagebox
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Welcome")
+                       setGeometry(100,100,400,300)
+
+
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?")
+                               setGeometry(10,20,350,30)
+                               setalignment(Qt_AlignHCenter)
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("Say Hello")
+                               setclickevent("pHello()")
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(150,200,100,30)
+                               settext("Close")
+                               setclickevent("pClose()")
+                       }
+
+                       lineedit1 = new qlineedit(win1) {
+                               setGeometry(10,100,350,30)
+                               settextchangedevent("pChange()")
+                               setreturnpressedevent("penter()")
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               MyApp.quit()
+
+       Func pChange
+               win1 { setwindowtitle( lineedit1.text() ) }
+
+       Func pEnter
+               new qmessagebox(win1) {
+                       setwindowtitle("Thanks")
+                       settext("Hi " + lineedit1.text() )
+                       setstylesheet("background-color : white")
+                       show()
+               }
+
+The application during the runtime
+
+.. image:: ringqt_shot28.jpg
+       :alt: qLineEdit events and qMessagebox
+
+.. image:: ringqt_shot29.jpg
+       :alt: qLineEdit events and qMessagebox
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Other Widgets Events
+
+Other Widgets Events
+====================
+
+Each Qt signal can be used in RingQt, just add Set before the signal name and add event after
+the signal name to get the method that can be used to determine the event code.
+
+For example the QProgressBar class contains a signal named valueChanged()
+To use it just use the function setValueChangedEvent()
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("QProgressBar valueChanged Event")
+
+                       progress1 = new qprogressbar(win1) {    
+                               setGeometry(100,100,350,30)
+                               setvalue(10)
+                               setvaluechangedevent("pChange()")
+                       }
+
+                       new qpushbutton(win1) {
+                               setGeometry(10,10,100,30)                       
+                               settext("increase")
+                               setclickevent("pIncrease()")
+                       }
+
+                       showMaximized()
+
+               }
+
+               exec()
+       }
+
+       func pIncrease
+               progress1 { setvalue(value()+1)  }
+
+       func pchange
+               win1.setwindowtitle("value : " + progress1.value() )
+
+The application during the runtime
+
+.. image:: ringqt_shot30.jpg
+       :alt: qProgressBar valueChanged event
+
+Another example for the stateChanged event of the QCheckBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QCheckBox")
+                       new qcheckbox(win1) {   
+                               setGeometry(100,100,100,30)
+                               settext("New Customer!")
+                               setstatechangedevent("pchange()")
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+       Func pChange
+
+               new qMessageBox(Win1) {
+                       setWindowTitle("Checkbox")
+                       settext("State Changed!")
+                       show()
+               }
+
+The application during the runtime
+
+.. image:: ringqt_shot31.jpg
+       :alt: qProgressBar valueChanged event
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QTimer Class
+
+Using the QTimer Class
+======================
+
+In this example we will learn about using the QTimer class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setgeometry(100,100,200,70)
+                       setwindowtitle("Timer")
+                       label1 = new qlabel(win1) {
+                               setgeometry(10,10,200,30)
+                               settext(thetime()) 
+                       }
+                       new qtimer(win1) {
+                               setinterval(1000)
+                               settimeoutevent("pTime()")
+                               start()
+                       }
+                       show()
+               }
+               exec()
+       }
+
+       func ptime
+               label1.settext(thetime())
+
+       Func thetime
+               return "Time : " + Time()
+
+
+The application during the runtime
+
+.. image:: ringqt_shot32.jpg
+       :alt: QTimer Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QProgressBar and Timer
+
+Using QProgressBar and Timer
+============================
+
+In this example we will learn about using the "animated" QProgressBar class and Timer
+
+.. code-block:: ring   
+
+       ###------------------------------------
+       ### ProgressBar and Timer Example
+       
+       Load "guilib.ring"
+       
+       new qApp
+       {
+           win1 = new qwidget()
+           {
+               setgeometry(100,100,400,100)
+               setwindowtitle("Timer and ProgressBar")
+       
+               LabelMan = new qlabel(win1)
+               {
+                   setgeometry(10,10,200,30)
+                   settext(theTime())          ### ==>> func
+               }
+       
+               TimerMan = new qtimer(win1)
+               {
+                   setinterval(1000)
+                   settimeoutevent("pTime()")  ### ==>> func
+                   start()
+               }
+       
+               BarMan = new qprogressbar(win1)
+               {
+                   setGeometry(100,50,300,10)  ###  Position X y, Length, Thickness
+                   setvalue(0)                 ###  Percent filled
+               }
+       
+               show()
+           }
+           exec()
+       }
+       
+       func pTime
+               LabelMan.settext(theTime())     ### ==>> func
+       
+               Increment = 10
+               if BarMan.value() >= 100        ### ProgressBar start over.
+                   BarMan.setvalue(0)
+               ok
+               BarMan{ setvalue(value() + Increment) }
+       
+       Func theTime
+               return "Time : " + Time()
+
+.. image:: ringqt_shot15-B.jpg
+       :alt: QProgressBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Display Scaled Image using QLabel
+
+Display Scaled Image using QLabel
+=================================
+
+In this example we will learn about displaying and scaling an image so that it looks "animated" using the QLabel widget
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       #----------------------------------------------------
+       # REQUIRES: image = "C:\RING\bin\stock.jpg"
+
+       # imageStock: start dimensions for growing image
+
+       imageW = 200 ;  imageH = 200 ; GrowBy = 4
+
+       ###----------------------------------------------------
+       ### Window and Box Size dimensions
+
+       WinWidth = 1280 ; WinHeight = 960
+       BoxWidth = WinWidth -80 ; BoxHeight = WinHeight -80
+
+       ###----------------------------------------------------
+
+       New qapp {
+
+               win1 = new qwidget() {
+
+                       setgeometry(50,50, WinWidth,WinHeight)
+                       setwindowtitle("Animated Image - Display Image Scaled and Resized")
+
+                       imageStock = new qlabel(win1) {
+
+                               image = new qpixmap("C:\RING\bin\stock.jpg")
+                               AspectRatio = image.width() / image.height()
+
+                               imageW = 200
+                               imageH = imageH / AspectRatio
+
+                               ### Size-H, Size-V, Aspect, Transform
+                               setpixmap(image.scaled(imageW , imageH ,0,0))   
+
+                               PosLeft = (BoxWidth  - imageW ) / 2
+                               PosTop  = (BoxHeight - imageH ) / 2
+                               setGeometry(PosLeft,PosTop,imageW,imageH)
+
+                       }
+
+                       TimerMan = new qtimer(win1) {
+                               setinterval(100)            ### interval 100 millisecs.
+                               settimeoutevent("pTime()")  ### ==>> func
+                               start()
+                       }
+
+                       show()
+               }
+       exec()
+       }
+
+
+       ###------------------------------------------------------
+       ### Fuction TimerMan: calling interval 100 milliseconds
+
+       func pTime
+
+               ### Stop Timer when image is size of Window area
+               if imageW > BoxWidth
+                       TimerMan.stop()
+                       imageStock.clear()      ### Will clear the image
+               ok
+
+               ### Grow image
+               imageW += GrowBy
+               imageH  = imageW / AspectRatio
+
+               ### Scaled Image: Size-H, Size-V, Aspect, Transform
+               imageStock.setpixmap(image.scaled(imageW , imageH ,0,0))
+
+               ### Center the image
+               PosLeft = (WinWidth  - imageW ) / 2
+               PosTop  = (WinHeight - imageH ) / 2
+               imageStock.setGeometry(PosLeft,PosTop,imageW,imageH)
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QFileDialog Class
+
+Using the QFileDialog Class
+===========================
+
+Example
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("open file")
+                       setgeometry(100,100,400,400)
+                       new qpushbutton(win1) {
+                               setgeometry(10,10,200,30)
+                               settext("open file")
+                               setclickevent("pOpen()")
+                       }
+                       show()
+               }
+               exec()
+       }
+
+       Func pOpen
+               new qfiledialog(win1) {
+                       cName = getopenfilename(win1,"open file","c:\","source files(*.ring)")
+                       win1.setwindowtitle(cName)
+               }
+               
+The application during the runtime
+
+.. image:: ringqt_shot33.jpg
+       :alt: QFileDialog Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Drawing using QPainter
+
+Drawing using QPainter
+======================
+
+In this example we will learn about drawing using the QPainter class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("Drawing using QPainter")
+                       setgeometry(100,100,500,500)
+                       label1 = new qlabel(win1) {
+                               setgeometry(10,10,400,400)
+                               settext("")
+                       }
+                       new qpushbutton(win1) {
+                               setgeometry(200,400,100,30)
+                               settext("draw")
+                               setclickevent("draw()")
+                       }
+
+                       show()
+               }
+               exec()
+       }
+
+       Func draw
+                       p1 = new qpicture()
+                       color = new qcolor() {
+                               setrgb(0,0,255,255)
+                       }
+                       pen = new qpen() {
+                               setcolor(color)
+                               setwidth(10)
+                       }
+                       new qpainter() {
+                               begin(p1)
+                               setpen(pen)
+                               drawline(500,150,950,450)
+                               drawline(950,550,500,150)
+                               endpaint()
+                       }
+                       label1 { setpicture(p1) show() }
+
+The application during the runtime
+
+.. image:: ringqt_shot34.jpg
+       :alt: QPainter Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Printing using QPrinter
+
+Printing using QPrinter
+=======================
+
+In this example we will learn how to print to PDF file using QPrinter
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer")
+                       setgeometry(100,100,500,500)
+                       myweb = new qwebview(win1) {    
+                               setgeometry(100,100,1000,500)                                           
+                               loadpage(new qurl("http://google.com"))
+                       } 
+                       new qpushbutton(win1) {
+                               setGeometry(20,20,100,30)                       
+                               settext("Print")
+                               setclickevent("print()")
+                       }
+                       showmaximized()
+               }
+               exec()
+       }
+       
+       func print
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      # 1 = pdf
+                       setoutputfilename("test.pdf")
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)                     
+                               setfont(myfont)
+                               drawtext(100,100,"test")
+                               printer1.newpage()
+                               drawtext(100,100,"test2")                       
+                               endpaint()
+                       }
+               }
+
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      
+                       setoutputfilename("test2.pdf")
+                       myweb.print(printer1)
+                       myweb.show()
+               }
+
+               system ("test.pdf")
+               system ("test2.pdf")
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QPrintPreviewDialog
+
+
+Using QPrintPreviewDialog
+=========================
+
+In this example we will learn how to use the QPrintPreviewDialog class.
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer Preview Dialog")
+                       setgeometry(100,100,800,880)
+                       printer1 = new qPrinter(0)
+                       show()
+                       oPreview = new qPrintPreviewDialog(printer1) {
+                               setParent(win1)
+                               move(10,10) 
+                               setPaintrequestedevent("printPreview()")
+                               exec()
+                       }
+               }
+               exec()
+       }
+
+       func printPreview
+               printer1  {
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)
+                               setfont(myfont)
+                               drawtext(100,100,"Test - Page (1)")
+                               printer1.newpage()
+                               drawtext(100,100,"Test - Page (2)")
+                               printer1.newpage()
+                               myfont2 = new qfont("Times",14,-1,0)
+                               setfont(myfont2)
+                               for x = 1 to 30
+                                       drawtext(100,100+(20*x),"Number : " + x)
+                               next 
+                               endpaint()
+                       }
+               }
+
+Screen Shot:
+
+.. image:: printpreviewdialog.png
+       :alt: Print Preview Dialog
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating more than one window
+
+Creating More than one Window
+=============================
+
+The next example demonstrates how to create more than one window
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app1 = new qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("First")
+                       setgeometry(100,100,500,500)
+
+                       new qpushbutton(win1) {
+                               setgeometry(100,100,100,30)
+                               settext("close")
+                               setclickevent("app1.quit()")
+                       }
+
+                       new qpushbutton(win1) {
+                               setgeometry(250,100,100,30)
+                               settext("Second")
+                               setclickevent("second()")
+                       }
+
+                       showmaximized()
+               }
+               exec()
+       }
+        
+       func second
+               win2 = new qwidget() {
+                       setwindowtitle("Second")
+                       setgeometry(100,100,500,500)
+                       setwindowflags(Qt_dialog)
+                       show()
+               }
+The application during the runtime
+
+.. image:: ringqt_shot35.jpg
+       :alt: More than one window
+
+.. index:: 
+       pair: Desktop and Mobile Development; Playing Sound
+
+Playing Sound
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       new qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("play sound!") show()    
+               }
+               new qmediaplayer()      {
+                       setmedia(new qurl("footstep.wav"))
+                       setvolume(50) play()    
+               }
+               exec()
+       }
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QColorDialog Class
+
+Using the QColorDialog Class
+============================
+
+Example: 
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       oApp = new myapp { start() }
+
+       Class MyApp
+
+               oColor  win1
+
+               Func start
+
+                       myapp = new qapp 
+
+                       win1 = new qMainWindow() {
+                               setwindowtitle("Color Dialog")
+                               setgeometry(100,100,400,400)
+                       }
+
+                       new qpushbutton(win1) {
+                               setgeometry(10,10,100,30)
+                               settext("Get Color")
+                               setclickevent("oApp.pColor()")
+                       }
+
+                       win1.show()
+                       myapp.exec()
+
+
+               Func pColor
+                       myobj = new qcolordialog()
+                       aColor = myobj.GetColor()
+                       r=acolor[1] g=acolor[2] b=acolor[3]      
+                       win1.setstylesheet("background-color: rgb("+r+", " + g+ "," + b + ")")
+
+The application during the runtime
+                       
+.. image:: ringqt_shot37.jpg
+       :alt: QColorDialog Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using qLCDNumber
+
+Using qLCDNumber Class
+======================
+
+In this example we will learn about using the qLCDNumber class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp 
+       {
+               win1 = new qWidget() 
+               {
+                       setwindowtitle("LCD Number")
+                       setgeometry(100,100,250,120)
+
+                       new qLCDNumber(win1) 
+                       {
+                               setgeometry(10,10,100,40)
+                               display(100)    
+                               
+                       }
+
+                       new qLCDNumber(win1) 
+                       {
+                               setgeometry(10,60,100,40)
+                               display(80)     
+                               
+                       }
+
+                       show()
+               }
+       
+               exec()
+       }
+
+The application during the runtime
+                       
+.. image:: ringqt_shot38.jpg
+       :alt: QLCDNumber Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Movable Label Example
+
+Movable Label Example
+=====================
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+
+               win1 = new qWidget() 
+               {
+
+                       label1 = new qLabel(win1) 
+                       {
+                               setText("Welcome")
+                               setgeometry(10,10,200,50)
+                               setstylesheet("color: purple ; font-size: 30pt;")
+                       }
+
+                       new qTimer(win1)
+                       {
+                               setInterVal(10)
+                               setTimeOutEvent("pMove()")
+                               start()
+                       }
+
+                       setWindowTitle("Movable Label")
+                       setgeometry(100,100,600,80)
+                       setStyleSheet("background-color: white;")
+                       show()
+
+               }
+
+               exec()
+       }
+
+       Func pMove
+               label1 
+               {
+                       move(x()+1,y())
+                       if x() > 600
+                               move(10,y())
+                       ok
+               }
+       
+       
+The application during the runtime
+                       
+.. image:: ringqt_shot39.jpg
+       :alt: Movable label
+       
+.. index:: 
+       pair: Desktop and Mobile Development; QMessagebox Example
+
+QMessagebox Example
+===================
+
+In this section we will learn how to check the output of the Message box
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               win1 = new qWidget() 
+               {
+                       label1 = new qpushbutton(win1) 
+                       {
+                               setText("Test")
+                               setgeometry(10,10,200,50)
+                               setstylesheet("color: purple ; font-size: 30pt;")
+                               setclickevent("pWork()")
+                       }
+                       setWindowTitle("Messagebox")
+                       setgeometry(100,100,600,80)
+                       setStyleSheet("background-color: white;")
+                       show()
+               }
+               exec()
+       }
+        
+       func pWork
+               new qmessagebox(win1)
+               {
+                       setwindowtitle("messagebox title")
+                       settext("messagebox text")
+                       setInformativeText("Do you want to save your changes?")
+                       setstandardbuttons(QMessageBox_Yes | QMessageBox_No | QMessageBox_Close)
+                       result = exec()
+                       win1 {
+                               if result = QMessageBox_Yes
+                                       setwindowtitle("Yes")
+                               but result = QMessageBox_No
+                                       setwindowtitle("No")
+                               but result = QMessageBox_Close
+                                       setwindowtitle("Close")
+                               ok
+                       }
+               }
+
+The application during the runtime
+                       
+.. image:: ringqt_shot40.jpg
+       :alt: QMessageBox output
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QInputDialog Class
+
+Using QInputDialog Class
+========================
+
+In the next example we will learn about using the QInputDialog class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New QApp {
+
+               Win1 = New QWidget () {
+
+                       SetGeometry(100,100,400,400)
+                       SetWindowTitle("Input Dialog")
+
+                       New QPushButton(win1) 
+                       {
+
+                               SetText ("Input Dialog")
+                               SetGeometry(100,100,100,30)
+                               SetClickEvent("pWork()")
+                       }
+
+                       Show()
+               }
+
+               exec()
+       }
+
+       Func pWork
+               oInput = New QInputDialog(win1)
+               {
+                       setwindowtitle("What is your name?")
+                       setgeometry(100,100,400,50)
+                       setlabeltext("User Name")
+                       settextvalue("Mahmoud")
+                       lcheck = exec()
+                       if lCheck win1.setwindowtitle(oInput.textvalue()) ok
+               }
+               
+
+The application during the runtime
+                       
+.. image:: ringqt_shot41.jpg
+       :alt: QInputDialog
+
+.. index:: 
+       pair: Desktop and Mobile Development; Dialog Functions
+
+Dialog Functions
+================
+
+We have the next functions
+
+.. code-block:: none
+
+       SetDialogIcon(cIconFile)
+       MsgInfo(cTitle,cMessage)
+       ConfirmMsg(cTitle,cMessage) --> lResult
+       InputBox(cTitle,cMessage) --> cValue
+       InputBoxInt(cTitle,cMessage) --> nValue
+       InputBoxNum(cTitle,cMessage) --> nValue
+       InputBoxPass(cTitle,cMessage) --> cValue
+
+Example
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp 
+       {
+               SetDialogIcon("notepad.png")
+               msginfo(:Ring,:Welcome)
+               see confirmMsg(:Ring,"Are you sure?") + nl
+               see InputBoxNum(:Ring,"Enter Number(double) :") + nl
+               see InputBox(:Ring,"Enter Value :") + nl
+               see InputBoxInt(:Ring,"Enter Number(int)") + nl
+               see InputBoxPass(:Ring,"Enter Password") +nl
+       }
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; KeyPress and Mouse Move Events
+
+KeyPress and Mouse Move Events
+==============================
+
+In this example we will learn how to use the Events Filter to know about KeyPress and Mouse Move
+Events
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+
+               win1 = new qWidget()
+               {
+                       setWindowTitle("Test using Event Filter!")
+                       setGeometry(100,100,400,400)
+                       setmousetracking(true)
+                       myfilter = new qallevents(win1)
+                       myfilter.setKeyPressEvent("pWork()")
+                       myfilter.setMouseButtonPressevent("pClick()")
+                       myfilter.setmousemoveevent("pMove()")
+
+                       installeventfilter(myfilter)
+
+                       show()
+               }
+
+               exec()
+       }
+
+       func pWork
+               win1.setwindowtitle('KeyPress! : ' + myfilter.getkeycode())
+
+       func pClick
+               new qmessagebox(win1) {
+                       setgeometry(100,100,400,100)
+                       setwindowtitle("click event!")
+                       settext("x : " + myfilter.getx() + 
+                               " y : " + myfilter.gety() + " button : " +
+                                myfilter.getbutton() )
+                       show()
+               }
+
+       func pMove
+               win1.setwindowtitle("Mouse Move , X : " + myfilter.getx() +
+                                   " Y : " + myfilter.gety() )
+
+The application during the runtime
+                       
+.. image:: ringqt_shot42.jpg
+       :alt: KeyPress and Mouse Move Events
+
+.. index:: 
+       pair: Desktop and Mobile Development; Moving Objects using the Mouse
+
+Moving Objects using the Mouse
+==============================
+
+In the next example we will learn how to program movable objects where the user can move a label
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       lPress = false
+       nX = 0
+       nY = 0
+
+       new qApp {
+
+               win1 = new qWidget()
+               {
+
+                       setWindowTitle("Move this label!")
+                       setGeometry(100,100,400,400)
+                       setstylesheet("background-color:white;")
+
+                       Label1 = new qLabel(Win1){
+                               setGeometry(100,100,200,50)
+                               setText("Welcome")
+                               setstylesheet("font-size: 30pt")
+                               myfilter = new qallevents(label1)
+                               myfilter.setEnterevent("pEnter()")
+                               myfilter.setLeaveevent("pLeave()")
+                               myfilter.setMouseButtonPressEvent("pPress()")
+                               myfilter.setMouseButtonReleaseEvent("pRelease()")
+                               myfilter.setMouseMoveEvent("pMove()")
+                               installeventfilter(myfilter)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pEnter
+               Label1.setStyleSheet("background-color: purple; color:white;font-size: 30pt;")
+
+       Func pLeave
+               Label1.setStyleSheet("background-color: white; color:black;font-size: 30pt;")
+
+       Func pPress
+               lPress = True   
+               nX = myfilter.getglobalx()
+               ny = myfilter.getglobaly()
+
+       Func pRelease
+               lPress = False
+               pEnter()
+
+       Func pMove
+               nX2 = myfilter.getglobalx()
+               ny2 = myfilter.getglobaly()
+               ndiffx = nX2 - nX
+               ndiffy = nY2 - nY
+               if lPress
+                       Label1 {
+                               move(x()+ndiffx,y()+ndiffy)
+                               setStyleSheet("background-color: Green;
+                                        color:white;font-size: 30pt;")
+                               nX = nX2
+                               ny = nY2
+                       }
+
+               ok
+
+
+The application during the runtime
+                       
+.. image:: ringqt_shot43.jpg
+       :alt: Moving object using the mouse
+       
+.. image:: ringqt_shot44.jpg
+       :alt: Moving object using the mouse
+       
+.. image:: ringqt_shot45.jpg
+       :alt: Moving object using the mouse
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Inheritance from GUI Classes
+
+Inheritance from GUI Classes
+============================
+
+Example :
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New MyWindow()
+
+       new qApp { exec() }
+
+       class mywindow from qwidget
+               Func init
+                       super.init()
+                       setwindowtitle("First Window")
+                       setgeometry(100,100,400,400)
+                       setstylesheet("background-color: purple;")
+                       settooltip("my first window!")
+                       show()
+
+The application during the runtime
+                       
+.. image:: ringqt_shot46.jpg
+       :alt: Inheritance from GUI Classes
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDesktopWidget Class
+
+Using QDesktopWidget Class
+==========================
+
+In the next example we will learn about using the QDesktopWidget class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = New qWidget()
+               {
+                       resize(400,400)
+                       btn1 = new qPushbutton(win1)
+                       {
+                               setText("Center")
+                               move(100,100)
+                               resize(100,30)
+                               setClickEvent("pCenter()")
+                       }
+
+                       Show()
+               }
+
+               exec()
+       }
+
+       Func pCenter
+               oDesktop  = new qDesktopWidget()
+               oRect = oDesktop.screenGeometry( oDesktop.primaryScreen()  ) 
+               win1.move((oRect.width()-win1.width()) /2 , (oRect.Height()-win1.Height())/2 )
+               win1.show()
+
+The application during the runtime
+                       
+.. image:: ringqt_shot47.jpg
+       :alt: Using QDesktopWidget Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Rotate Text
+
+Rotate Text
+===========
+
+The next example rotate text using a Timer.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       nAngle  = 0
+
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("Rotate Text")
+                       resize(800,600)
+                       label1 = new qlabel(win1) {
+                               settext("")
+                               myfilter = new qallevents(win1)
+                               myfilter.setMouseButtonPressevent("pClick()")
+                               installeventfilter(myfilter)
+                       }
+                       new qtimer(win1) {
+                               setinterval(50)
+                               settimeoutevent("pTime()")
+                               start()
+                       }
+                       pDraw()
+                       L1 = new qVBoxLayout() { AddWidget(Label1) } SetLayout(L1)
+                       showMaximized()
+               }
+               exec()
+       }
+
+       Func pDraw
+               p1 = new qpicture()
+               color = new qcolor() {
+                       setrgb(0,0,255,255)
+               }
+               pen = new qpen() {
+                       setcolor(color)
+                       setwidth(50)
+               }
+               painter = new qpainter() {
+                       begin(p1)               
+                               setpen(pen)
+                               myfont = font()
+                               myfont.setpointsize(50)
+                               setfont(myfont)
+                               rotate(nAngle)
+                               drawtext(350,0*nAngle,"welcome")                 
+                               drawtext(0,0*nAngle,"welcome")           
+                       endpaint()
+                         }
+               label1 {
+                       setpicture(p1)  
+                       show() 
+               }
+
+       Func pClick
+               win1 { setwindowtitle("Click Event") } 
+
+       Func pTime
+               nAngle++
+               if nAngle = 90
+                       nAngle = 10
+               ok
+               pDraw()
+
+The application during the runtime
+
+.. image:: shotrotatetext.png
+       :alt: Rotate Text Example
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Change Focus
+
+Change Focus
+============
+
+The next example change the focus using the ENTER key.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qWidget() {
+                       resize(600,600)
+                       SetWindowTitle("Change Focus")
+                       text1 = new qLineEdit(win)
+                       text2 = new qLineEdit(win)
+                       text3 = new qLineEdit(win)
+                       text4 = new qLineEdit(win)
+                       layout1 = new qVBoxLayout() {
+                               AddWidget(text1)
+                               AddWidget(text2)
+                               AddWidget(text3)
+                               AddWidget(text4)
+
+                       }
+                       setLayout(Layout1)
+                       aList = [text1,text2,text3,text4]
+                       oFilter = new qallevents(win)
+                       oFilter.setKeyPressEvent("pWork()")
+                       installeventfilter(oFilter)
+                       show()
+               }
+               exec()
+       }
+
+       func pWork
+               nCode =  oFilter.getkeycode()
+               if nCode = 16777220     # ENTER Key
+                       for x=1 to len(aList) 
+                               if aList[x].HasFocus() 
+                                       t = x+1
+                                       if t > len(aList) t=1 ok
+                                       aList[t].SetFocus(0)
+                                       exit
+                               ok
+                       next
+               ok
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Regular Expressions
+
+Regular Expressions
+===================
+
+The next example uses the Regular Expressions classes.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp
+       {
+               see "Using Regular Expressions" + nl
+
+               exp = new qregularexpression() {
+                       setPattern("\d\d \w+")
+                       see pattern() + nl
+                       match = match("33 one",0,0,0)
+                       see match.hasmatch() + nl
+                       match = match("3 one",0,0,0)
+                       see match.hasmatch() + nl
+                       match = match("welcome 11 one",0,0,0)
+                       see match.hasmatch() + nl
+                       matched = match.captured(0)
+                       see matched + nl
+               }
+               exp = new qregularexpression() {
+                       setPattern("^(\d\d)/(\d\d)/(\d\d\d\d)$")
+                       see pattern() + nl
+                       match = match("08/12/1985",0,0,0)
+                       see match.hasmatch() + nl
+                       day = match.captured(1)
+                       month = match.captured(2)
+                       year = match.captured(3)
+                       see day + nl + month + nl + year + nl
+                       see  "(" + match.capturedStart(1) + "," + match.capturedEnd(1)+ ")" + nl
+                       see  "(" + match.capturedStart(2) + "," + match.capturedEnd(2)+ ")" + nl
+                       see  "(" + match.capturedStart(3) + "," + match.capturedEnd(3)+ ")" + nl
+               }
+
+       }
+
+Output
+
+.. code-block:: ring
+
+       Using Regular Expressions
+       \d\d \w+
+       1
+       0
+       1
+       11 one
+       ^(\d\d)/(\d\d)/(\d\d\d\d)$
+       1
+       08
+       12
+       1985
+       (0,2)
+       (3,5)
+       (6,10)
+
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Simple Client and Server Example
+
+Simple Client and Server Example
+================================
+
+In this section we will learn about creating simple Client and Server Application
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               oClient = new Client { client() }
+               oServer = new Server { server() }
+               exec()
+       }
+
+       Class Client
+
+               win1 lineedit1  cOutput=""
+               oTcpSocket
+
+               func client
+
+                       win1 = new qwidget() 
+
+                       new qpushbutton(win1) {
+                               setgeometry(50,50,100,30)
+                               settext("connect")
+                               setclickevent("oClient.Connect()")
+                       }
+
+                       lineedit1 = new qtextedit(win1) {
+                               setGeometry(150,50,200,300)
+                       }
+
+                       win1 {
+                               setwindowtitle("client")
+                               setgeometry(10,100,400,400)
+                               show()
+                       }
+
+               func connect
+                       cOutput = "Connect to host 127.0.0.1 port 9999" + nl
+                       lineedit1.settext(cOutput)
+                       oTcpSocket = new qTcpSocket(win1) {
+                               setconnectedevent("oClient.pConnected()")
+                               setreadyreadevent("oClient.pRead()")
+                               connecttohost("127.0.0.1",9999,3,0)
+                               waitforconnected(5000)
+                       }                       
+                       
+               func pConnected         
+
+                       cOutput += "Connected!" + nl
+                       lineedit1.settext(cOutput)
+
+               func pRead
+
+                       cOutput += "Ready Read!" + nl
+                       lineedit1.settext(cOutput)
+                       cOutput += oTcpSocket.readall().data() + nl
+                       lineedit1.settext(cOutput)
+
+       Class Server
+
+               win1 lineedit1 
+               oTcpServer oTcpClient
+               cOutput = ""
+
+               func server
+
+                       win1 = new qwidget()
+                       
+                       lineedit1 = new qtextedit(win1) {
+                               setGeometry(150,50,200,300)
+                       }
+
+                       win1 {
+                               setwindowtitle("Server")
+                               setgeometry(450,100,400,400)
+                               show()
+                       }
+
+                       oTcpServer = new qTcpServer(win1) {
+                               setNewConnectionEvent("oServer.pNewConnection()")
+                               oHostAddress = new qHostAddress()
+                               oHostAddress.SetAddress("127.0.0.1")
+                               listen(oHostAddress,9999)
+                       }
+                       cOutput = "Server Started" + nl +
+                                  "listen to port 9999" + nl
+
+                       lineedit1.settext(cOutput)
+
+               Func pNewConnection
+               
+                       oTcpClient = oTcpServer.nextPendingConnection()
+                       cOutput += "Accept Connection" + nl
+                       lineedit1.settext(cOutput)
+                       oTcpClient {
+                               cStr ="Hello from server to client!"+char(13)+char(10)
+                               write(cStr,len(cStr))
+                               flush()
+                               waitforbyteswritten(300000)
+                               close()
+                       }
+
+The application during the runtime
+
+.. image:: ringqt_shot36.jpg
+       :alt: Client and Server Example
+
+.. index:: 
+       pair: Desktop and Mobile Development; Dynamic Objects
+
+Dynamic Objects
+===============
+
+We may create objects in the runtime and add them to windows.
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       oFormDesigner = new FormDesigner { start("oFormDesigner") }
+
+       Class FormDesigner
+
+               winToolBox  winForm
+
+               aObjects = []
+
+               func start cObjectName
+
+                       oApp = new qApp
+
+                       winToolBox = new qWidget() 
+                       winToolBox.setWindowTitle("ToolBox")
+                       winToolBox.move(10,10)
+                       winToolBox.resize(300,600)
+                       
+                       btn = new qPushButton(winToolBox) 
+                       btn.resize(300,30)
+                       btn.setText("Create Button")
+                       btn.setClickEvent(cObjectName+".pCreateButton()")
+                       btn.show()              
+
+                       winToolBox.show()
+
+                       winForm = new qWidget() {
+                               move(400,50)
+                               setWindowTitle("Form Designer")
+                               resize(600,600)
+                               show()  
+                       }
+
+                       oApp.exec()
+
+
+               func pCreateButton              
+
+                       nCount = len(aObjects)
+
+                       aObjects + new MyButton(winForm) 
+                       {
+                               nIndex = nCount + 1
+                               setText("Button"+ nIndex) 
+                               Move(30*nIndex,30*nIndex)
+                               resize(100,30)
+                               show()
+                       }
+
+
+       Class MyButton from qPushButton
+               nIndex = 0
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Weight History Application
+
+Weight History Application
+==========================
+
+The next sample help in recording (Date, Time and Weight).
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = new qApp
+       {  
+         $ApplicationObject = "oApp"   # To be used when calling events
+         oApp = new App     
+         exec()
+         oApp.CloseDatabase()
+       }
+
+       class App
+
+         cDir = currentdir() + "/"
+         oCon 
+         aIDs = []
+
+         win1 = new qWidget()
+         {
+               setWindowTitle("Weight History")
+               resize(600,600)
+               layoutButtons = new qhboxlayout()
+               {
+                 label1 = new qLabel(win1) { setText("Weight") }
+                 text1 = new qlineedit(win1)
+                 btnAdd = new qpushbutton(win1) { 
+                         setText("Add") 
+                         setClickEvent($ApplicationObject+".AddWeight()") 
+                 }
+                 btnDelete = new qpushbutton(win1) { 
+                         setText("Delete") 
+                         setClickEvent($ApplicationObject+".Deleteweight()") 
+                 }
+                 addwidget(label1)
+                 addwidget(text1)
+                 addwidget(btnAdd)
+                 addwidget(btnDelete)
+               }
+               layoutData  = new qhboxlayout()
+               {
+                 Table1 = new qTableWidget(win1) {
+                       setrowcount(0)
+                       setcolumncount(3)
+                       setselectionbehavior(QAbstractItemView_SelectRows)
+                       setHorizontalHeaderItem(0, new QTableWidgetItem("Date"))
+                       setHorizontalHeaderItem(1, new QTableWidgetItem("Time"))
+                       setHorizontalHeaderItem(2, new QTableWidgetItem("Weight"))
+                       setitemChangedEvent($ApplicationObject+".ItemChanged()")
+                                          setAlternatingRowColors(true)    
+                                          horizontalHeader().setStyleSheet("color: blue")
+                                          verticalHeader().setStyleSheet("color: red") 
+                 }
+                 addWidget(Table1)
+               }
+               layoutClose = new qhboxlayout()
+               {
+                 btnclose = new qpushbutton(win1) { 
+                   setText("Close") 
+                   setClickEvent("MyApp.Quit()") 
+                 }
+                 addwidget(btnClose)
+               }
+               layoutMain = new qvboxlayout()
+               {
+                 addlayout(layoutButtons)
+                 addLayout(LayoutData)
+                 addLayout(layoutClose)
+               }
+               setlayout(layoutMain)
+               self.OpenDatabase()
+               self.ShowRecords()        
+               show()  
+         }
+               
+         Func OpenDatabase
+               lCreate = False
+               if not fexists(cDir + "weighthistory.db")
+                 lCreate = True
+               ok
+               new QSqlDatabase() {
+                 this.oCon = addDatabase("QSQLITE") {
+                       setDatabaseName("weighthistory.db")
+                       Open()      
+                 }
+               }  
+               if lCreate
+                 new QSqlQuery( ) {
+                       exec("create table weighthistory (id integer primary key,"+
+                             " f_date varchar(10),"+
+                            " f_time varchar(8), f_weight varchar(8) );")
+                       delete()
+                 }
+               ok
+
+
+         Func CloseDatabase
+               oCon.Close()
+
+         Func AddWeight
+               cWeight = text1.text()
+               AddRecord(cWeight)
+
+         Func DeleteWeight
+               Table1 {
+                  nRow = CurrentRow() 
+                 if nRow >= 0
+                       nID = this.aIDs[nROW+1] 
+                       new QSqlQuery( ) {
+                         exec("delete from weighthistory where id = " + nID )
+                       }
+                       Del(this.aIDs,nRow+1)
+                       removerow(nRow)  
+                       selectrow(nRow)
+                 ok
+               }
+               
+
+         Func AddRecord cWeight
+               new QSqlQuery( ) {
+                 cStr = "insert into weighthistory (f_date,f_time,f_weight) values"+
+                 " ('%f1','%f2','%f3')"
+                 cDate = Date()
+                 cTime = Time()
+                 cStr = substr(cStr,"%f1",cDate)
+                 cStr = substr(cStr,"%f2",cTime)
+                 cStr = substr(cStr,"%f3",cWeight)
+                 exec(cStr)
+                 delete()
+               }
+               ShowRecords()
+               Table1.selectrow(table1.rowcount()-1)
+
+
+         Func ShowRecords
+               table1.setitemChangedEvent("")
+               aIDs = []
+               query = new QSqlQuery() {
+                 exec("select * from weighthistory")
+                 nRows = 0
+                 this.Table1.setrowcount(0)
+                 while movenext() 
+                       this.table1 {
+                         insertRow(nRows)
+                         this.aIDs + query.value(0).tostring()
+                         for x = 1 to 3 
+                               cStr = query.value(x).tostring()
+                               item = new qTableWidgetItem(cStr)
+                               setItem(nRows,x-1,item)
+                         next
+                       }
+                       nRows++
+                 end
+                 delete()
+               }
+               table1.setitemChangedEvent($ApplicationObject+".ItemChanged()")
+          
+         Func ItemChanged
+               nRow =  table1.currentrow()
+               if nRow >= 0 
+                 myitem = Table1.item(table1.currentrow(),0)
+                 cDate = myitem.text()
+                 myitem = Table1.item(table1.currentrow(),1)
+                 cTime = myitem.text()
+                 myitem = Table1.item(table1.currentrow(),2)
+                 cWeight = myitem.text()
+                 new QSqlQuery( ) {
+                       cStr = "update weighthistory set f_date ='%f1' , f_time = '%f2' , "+
+                       "f_weight ='%f3' where id = " +  this.aIDs[nROW+1] 
+                       cStr = substr(cStr,"%f1",cDate)
+                       cStr = substr(cStr,"%f2",cTime)
+                       cStr = substr(cStr,"%f3",cWeight)  
+                       exec(cStr)
+                       delete()
+                 }
+               ok
+
+
+The next screen shot for the application during the runtime
+
+.. image:: weighthistory_app.png
+       :alt: Weight History Application
+
+.. index:: 
+       pair: Desktop and Mobile Development; Notepad Application
+
+
+Notepad Application
+===================
+
+In the next example we will see simple Notepad developed using the RingQt
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       cActiveFileName = ""
+       aTextColor = [0,0,0]  
+       aBackColor = [255,255,255]
+       cFont = "MS Shell Dlg 2,14,-1,5,50,0,0,0,0,0"
+       cWebsite = "http://www.google.com"
+
+       oSearch = NULL
+       oSearchValue = NULL 
+       oSearchCase = NULL
+       oSearchFilter = NULL
+       oReplaceValue = NULL
+
+       lAskToSave = false
+
+       MyApp = New qApp {
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Ring Notepad")
+                       setGeometry(100,100,400,400)
+                       aBtns = [
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/new.png") 
+                                               setclickevent("pNew()")
+                                               settooltip("New File")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/open.png") 
+                                               setclickevent("pOpen()")
+                                               settooltip("Open File")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/save.png")
+                                               setclickevent("pSave()")
+                                               settooltip("Save")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/saveas.png")
+                                               setclickevent("pSaveAs()")
+                                               settooltip("Save As")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/cut.png")
+                                               setclickevent("pCut()")
+                                               settooltip("Cut")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/copy.png") 
+                                               setclickevent("pCopy()")
+                                               settooltip("Copy")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/paste.png") 
+                                               setclickevent("pPaste()")
+                                               settooltip("Paste")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/font.png") 
+                                               setclickevent("pFont()")
+                                               settooltip("Font")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/colors.jpg") 
+                                               setclickevent("pColor()")
+                                               settooltip("Text Color")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/search.png") 
+                                               setclickevent("pFind()")
+                                               settooltip("Find and Replace")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/print.png") 
+                                               setclickevent("pPrint()")
+                                               settooltip("Print")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/debug.png") 
+                                               setclickevent("pDebug()")
+                                               settooltip("Debug (Run then wait!)")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/run.png") 
+                                               setclickevent("pRun()")
+                                               settooltip("Run the program")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/close.png") 
+                                               setclickevent("pQuit()")
+                                               settooltip("Quit")
+                                       } 
+                               ]
+
+                       tool1 = addtoolbar("files")  {
+                               for x in aBtns addwidget(x) addseparator() next
+                       }
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub2 = addmenu("Edit")
+                               sub3 = addmenu("View")
+                               sub4 = addmenu("Help")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+n"))
+                                               setbtnimage(self,"image/new.png")
+                                               settext("New")
+                                               setclickevent("pNew()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+o"))
+                                               setbtnimage(self,"image/open.png") 
+                                               settext("Open")
+                                               setclickevent("pOpen()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+s"))
+                                               setbtnimage(self,"image/save.png")
+                                               settext("Save")
+                                               setclickevent("pSave()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+e"))
+                                               setbtnimage(self,"image/saveas.png")
+                                               settext("Save As")
+                                               setclickevent("pSaveAs()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+p"))
+                                               setbtnimage(self,"image/print.png")
+                                               settext("Print to PDF")
+                                               setclickevent("pPrint()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+d"))
+                                               setbtnimage(self,"image/debug.png")
+                                               settext("Debug (Run then wait!)")
+                                               setclickevent("pDebug()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+r"))
+                                               setbtnimage(self,"image/run.png")
+                                               settext("Run")
+                                               setclickevent("pRun()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+F5"))
+                                               setbtnimage(self,"image/run.png")
+                                               settext("Run GUI Application (No Console)")
+                                               setclickevent("pRunNoConsole()")
+                                       }
+                                       addaction(oAction)      
+                                       addseparator()
+                                       oAction = new qaction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+q"))
+                                               setbtnimage(self,"image/close.png") 
+                                               settext("Exit")
+                                               setstatustip("Exit")
+                                               setclickevent("pQuit()")
+                                       }
+                                       addaction(oAction)
+                               }
+                               sub2 { 
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+x"))
+                                               setbtnimage(self,"image/cut.png")
+                                               settext("Cut")
+                                               setclickevent("pCut()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+c"))
+                                               setbtnimage(self,"image/copy.png")
+                                               settext("Copy")
+                                               setclickevent("pCopy()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+v"))
+                                               setbtnimage(self,"image/paste.png")
+                                               settext("Paste")
+                                               setclickevent("pPaste()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+i"))
+                                               setbtnimage(self,"image/font.png")
+                                               settext("Font")
+                                               setclickevent("pFont()")
+                                       }
+                                       addseparator()
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+t"))
+                                               setbtnimage(self,"image/colors.jpg")
+                                               settext("Text Color")
+                                               setclickevent("pColor()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+b"))
+                                               setbtnimage(self,"image/colors.jpg")
+                                               settext("Back Color")
+                                               setclickevent("pColor2()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+g"))
+                                               settext("Go to line")
+                                               setclickevent("pGoto()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+f"))
+                                               setbtnimage(self,"image/search.png")
+                                               settext("Find and Replace")
+                                               setclickevent("pFind()")
+                                       }
+                                       addaction(oAction)
+                               }                               
+                               sub3 {
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+p"))
+                                               setbtnimage(self,"image/project.png")
+                                               settext("Project Files")
+                                               setclickevent("pProject()")
+                                       }
+                                       addaction(oAction)                      
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+u"))
+                                               setbtnimage(self,"image/source.png")
+                                               setclickevent("pSourceCode()")
+                                               settext("Source Code")
+                                       }
+                                       addaction(oAction)      
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+w"))
+                                               setbtnimage(self,"image/richtext.png")
+                                               setclickevent("pWebBrowser()")
+                                               settext("Web Browser")
+                                       }
+                                       addaction(oAction)      
+                               }
+                               sub4 { 
+                                       sub5 = addmenu("Development Tools")
+                                       sub5 { 
+
+                                               oAction = new qAction(win1) {
+                                                       settext("Programming Language")
+                                                       setclickevent("pLang()")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("GUI Library")
+                                                       setclickevent("pGUI()")
+                                               }
+                                               addaction(oAction)
+                                       }
+                                       addseparator()
+                                               oAction = new qAction(win1) {
+                                                       settext("About")
+                                                       setclickevent("pAbout()")
+                                               }
+                                               addaction(oAction)                      
+                               }
+                       }
+
+                       setmenubar(menu1)
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+
+                       tree1 = new qtreeview(win1) {
+                               setclickedevent("pChangeFile()")
+                               setGeometry(00,00,200,400)
+                               oDir = new QDir()                                       
+                               ofile = new QFileSystemModel() {
+                                       setrootpath(oDir.currentpath())
+                                       myfiles = new qstringlist()
+                                       myfiles.append("*.ring")
+                                       myfiles.append("*.rh")
+                                       setnamefilters(myfiles) 
+                                       setNameFilterDisables(false)
+                               }
+                               setmodel(ofile)
+                               myindex = ofile.index(oDir.currentpath(),0)
+                               for x = 1 to ofile.columncount()
+                                       hidecolumn(x)
+                               next
+                               setcurrentindex(myindex)
+                               setexpanded(myindex,true)
+                               header().hide()                 
+                       }
+
+                       oDock1 = new qdockwidget(win1,0) {
+                               setGeometry(00,00,200,200)
+                               setwindowtitle("Project Files")
+                               setwidget(tree1)
+                       }
+
+                       textedit1 = new qtextedit(win1) {
+                               setCursorPositionChangedevent("pCursorPositionChanged()")
+                               setLineWrapMode(QTextEdit_NoWrap)
+                               setAcceptRichText(false)
+                               setTextChangedEvent("lAskToSave = true")
+                       }
+
+
+                       oDock2 = new qdockwidget(win1,0) {
+                               setwidget(textedit1)
+                               setwindowtitle("Source Code")
+                       }
+
+                       oWebBrowser = new qWidget() {   
+                               setWindowFlags(Qt_SubWindow)
+                               oWBLabel = new qLabel(win1) {
+                                       setText("Website: ")
+                               }       
+                               oWBText = new qLineEdit(win1) {
+                                       setText(cWebSite)
+                                       setReturnPressedEvent("pWebGo()")
+                               }
+                               oWBGo = new qPushButton(win1) {
+                                       setText("Go")
+                                       setClickEvent("pWebGo()")
+                               }
+                               oWBBack = new qPushButton(win1) {
+                                       setText("Back")
+                                       setClickEvent("pWebBack()")
+                               }
+                               oWBLayout1 = new qHBoxLayout() {
+                                       addWidget(oWBLabel)
+                                       addWidget(oWBText)
+                                       addWidget(oWBGo)
+                                       addWidget(oWBBack)
+                               }
+                               oWebView = new qWebView(win1) {
+                                       loadpage(new qurl(cWebSite))
+                               }
+                               oWBlayout2 = new qVBoxLayout() {
+                                       addLayout(oWBLayout1)
+                                       addWidget(oWebView)
+                               }
+                               setLayout(oWBLayout2)
+                       }
+
+                       oDock3 = new qdockwidget(win1,0) {
+                               setwidget(oWebBrowser)          
+                               setwindowtitle("Web Browser")
+                               setFeatures(QDockWidget_DocWidgetClosable)
+                       }       
+
+                       adddockwidget(1,oDock1,1)
+                       adddockwidget(2,oDock2,2)
+                       adddockwidget(2,oDock3,1)
+               
+                       setwinicon(self,"image/notepad.png")
+
+                       showmaximized()
+               }
+               RestoreSettings()
+               exec()
+       }
+
+       func pWebGo
+               cWebsite = oWBText.text() 
+               oWebView.LoadPage( new qurl( cWebSite ) )
+
+       func pWebBack
+               oWebView.Back()
+
+       func pProject
+               oDock1.Show()
+               
+       func pSourceCode
+               oDock2.Show()
+
+       func pWebBrowser
+               oDock3.Show()
+
+       func pChangeFile
+               myitem = tree1.currentindex()
+               if ofile.isdir(myitem)
+                       return
+               ok
+               cActiveFileName = ofile.filepath(myitem)
+               textedit1.settext(read(cActiveFileName))
+               textedit1.setfocus(0)
+               pCursorPositionChanged()
+               pSetActiveFileName()
+
+       func pSetActiveFileName
+               oDock2.setWindowTitle("Source Code : " + cActiveFileName)
+
+       func pCursorPositionChanged
+               status1.showmessage(" Line : "+(textedit1.textcursor().blocknumber()+1)+
+                               " Column : " +(textedit1.textcursor().columnnumber()+1) +
+                               " Total Lines : " + textedit1.document().linecount() ,0)
+
+       func pGoto
+               oInput = New QInputDialog(win1)
+               {
+                       setwindowtitle("Enter the line number?")
+                       setgeometry(100,100,400,50)
+                       setlabeltext("Line")
+                       settextvalue("1")
+                       exec()
+                       nLine = 0 + oInput.textvalue()
+                       oBlock = textedit1.document().findBlockByLineNumber(nLine-1)
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(oBlock.position(),0)
+                       textedit1.settextcursor(oCursor)
+               }
+
+       func pFind
+               if isobject(oSearch)
+                       oSearch.activatewindow()
+                       return
+               ok
+               oSearch = new qWidget()
+               {
+                       new qLabel(oSearch)
+                       {
+                               setText("Find What : ")
+                               setgeometry(10,10,50,30)
+                       }
+                       oSearchValue = new qlineedit(oSearch)
+                       {
+                               setgeometry(80,10,460,30)
+                               setReturnPressedEvent("pFindValue()")
+                       }
+                       new qLabel(oSearch)
+                       {
+                               setText("Replace with ")
+                               setgeometry(10,45,80,30)
+                       }
+                       oReplaceValue = new qlineedit(oSearch)
+                       {
+                               setgeometry(80,45,460,30)
+                       }
+                       oSearchCase = new qCheckbox(oSearch)
+                       {
+                               setText("Case Sensitive")
+                               setgeometry(80,85,100,30)
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Find/Find Next")
+                               setgeometry(80,120,100,30)
+                               setclickevent("pFindValue()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Replace")
+                               setgeometry(200,120,100,30)
+                               setclickevent("pReplace()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Replace All")
+                               setgeometry(320,120,100,30)
+                               setclickevent("pReplaceAll()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Close")
+                               setgeometry(440,120,100,30)
+                               setclickevent("pSearchClose()")
+                       }
+
+                       setwinicon(oSearch,"image/notepad.png")
+                       setWindowTitle("Find/Replace")          
+                       setStyleSheet("background-color:white;")
+                       setFixedsize(550,160)
+                       setwindowflags( Qt_CustomizeWindowHint | 
+                                       Qt_WindowTitleHint | Qt_WindowStaysOnTopHint) 
+
+                       oSearchFilter = new qallevents(oSearch)
+                       oSearchFilter.setKeyPressEvent("pSearchKeyPress()")                                                             
+                       installeventfilter(oSearchFilter)
+
+                       show()
+               }
+
+       Func pReplace
+               oCursor = textedit1.textCursor()
+               if oCursor.HasSelection() = false
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Replace") 
+                               SetText("No Selection")
+                               show()  
+                       }
+                       return false
+               ok
+               cValue = oSearchValue.text()
+               cSelected = oCursor.SelectedText()
+               if oSearchCase.checkState() = Qt_Unchecked
+                       cValue = lower(cValue)  
+                       cSelected = lower(cSelected)
+               ok
+               if cSelected != cValue
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Replace") 
+                               SetText("No Match")
+                               show()  
+                       }
+                       return false
+               ok
+               cValue = oReplaceValue.text()
+               nStart = oCursor.SelectionStart()
+               nEnd = oCursor.SelectionEnd()
+               cStr = textedit1.toPlainText()
+               cStr = left(cStr,nStart)+cValue+substr(cStr,nEnd+1)
+               textedit1.setText(cStr) 
+               return pFindValue()
+
+       Func pReplaceAll
+               cStr = textedit1.toPlainText()
+               cOldValue = oSearchValue.text()
+               cNewValue = oReplaceValue.text()
+               if oSearchCase.checkState() = Qt_Unchecked
+                       # Not Case Sensitive
+                       cStr = SubStr(cStr,cOldValue,cNewValue,true)
+               else
+                       # Case Sensitive
+                       cStr = SubStr(cStr,cOldValue,cNewValue)
+               ok
+               textedit1.setText(cStr) 
+               new qMessagebox(oSearch)
+               {
+                       SetWindowTitle("Replace All") 
+                       SetText("Operation Done")
+                       show()  
+               }
+
+       Func pSearchClose
+               oSearch.close() 
+               oSearch = NULL
+
+       func pSearchKeyPress
+               if oSearchFilter.getKeyCode() = Qt_Key_Escape
+                       pSearchClose()          
+               ok
+
+       func pFindValue
+               oCursor = textedit1.textcursor()
+               nPosStart = oCursor.Position() + 1
+               cValue = oSearchValue.text()
+               cStr = textedit1.toplaintext()
+               cStr = substr(cStr,nPosStart)
+               if oSearchCase.checkState() = Qt_Unchecked
+                       cStr = lower(cStr)  cValue = lower(cValue)
+               ok
+               nPos = substr(cStr,cValue)
+               if nPos > 0
+                       nPos += nPosStart - 2
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(nPos,0)
+                       textedit1.settextcursor(oCursor)
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(nPos+len(cValue),1)
+                       textedit1.settextcursor(oCursor)
+                       return true
+               else
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Search") 
+                               SetText("Cannot find :" + cValue)
+                               show()  
+                       }
+                       return false
+               ok              
+
+       func pNofileopened
+               New qMessageBox(win1) {
+                       setWindowTitle("Sorry")
+                       setText("Save the file first!")
+                       show()
+               }
+
+       func pDebug
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start run " + cActiveFileName + nl 
+               system(cCode)
+
+       func pRun
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start ring " + cActiveFileName + nl 
+               system(cCode)
+
+       func pRunNoConsole
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start /b ring " + cActiveFileName + nl 
+               system(cCode)
+
+       func pSave
+               if cActiveFileName = NULL return pSaveAs() ok
+               writefile(cActiveFileName,textedit1.toplaintext())
+               status1.showmessage("File : " + cActiveFileName + " saved!",0)
+               lAskToSave = false
+
+       func pSaveAs
+               new qfiledialog(win1) {
+                       cName = getsavefilename(win1,"Save As","","source files(*.ring)")
+                       if cName != NULL
+                               cActiveFileName = cName
+                               writefile(cActiveFileName,textedit1.toplaintext())
+                               status1.showmessage("File : " + cActiveFileName + " saved!",0)  
+                               pSetActiveFileName()
+                               lAskToSave = false
+                       ok      
+               }
+
+       func pPrint
+               status1.showmessage("Printing to File : RingDoc.pdf",0)
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      # 1 = pdf
+                       setoutputfilename("RingDoc.pdf")
+                       textedit1.print(printer1)
+               }
+               status1.showmessage("Done!",0)
+               system("RingDoc.pdf")
+
+       func pCut
+               textedit1.cut()
+               status1.showmessage("Cut!",0)           
+
+       func pCopy
+               textedit1.copy()
+               status1.showmessage("Copy!",0)          
+
+       func pPaste
+               textedit1.paste()
+               status1.showmessage("Paste!",0)         
+
+       func pFont
+               oFontDialog = new qfontdialog() {
+                       aFont = getfont()
+               }
+               textedit1.selectall()
+               cFont = aFont[1]
+               pSetFont()
+
+       Func pSetFont
+               myfont = new qfont("",0,0,0)
+               myfont.fromstring(cFont)
+               textedit1.setcurrentfont(myfont)
+
+       Func pColor
+               new qcolordialog() { aTextColor = GetColor() }  
+               pSetColors()
+
+       Func pColor2
+               new qcolordialog() { aBackColor = GetColor() }  
+               pSetColors()
+               
+       Func pSetColors
+               textedit1.setstylesheet("color: rgb(" + aTextColor[1] + "," + aTextColor[2] +
+                                       "," + aTextColor[3] + ");" + "background-color: rgb(" +
+                                       aBackColor[1] + "," + aBackColor[2] + "," +
+                                       aBackColor[3] + ")")
+
+       func pOpen
+               new qfiledialog(win1) {
+                       cName = getopenfilename(win1,"open file","c:\","source files(*.ring)")                  
+                       if cName != NULL
+                               cActiveFileName = cName
+                               textedit1.settext(read(cActiveFileName))
+                       ok
+               }
+               
+       func pNew
+               new qfiledialog(win1) {
+                       cName = getsavefilename(win1,"New file","","source files(*.ring)")
+                       if cName != NULL
+                               write(cName,"")
+                               cActiveFileName = cName
+                               textedit1.settext(read(cActiveFileName))
+                               
+                       ok      
+               }
+               
+       Func WriteFile cFileName,cCode
+               aCode = str2list(cCode)
+               fp = fopen(cFileName,"wb")
+               for cLine in aCode
+                       fwrite(fp,cLine+char(13)+char(10))      
+               next
+               fclose(fp)
+
+       Func MsgBox cTitle,cMessage
+               new qMessagebox(win1) {
+                       setwindowtitle(cTitle)
+                       setText(cMessage)
+                       show()
+               }
+               
+
+       Func pLang
+               MsgBox("Programming Language",
+                       "This application developed using the Ring programming language")
+
+       Func pGUI
+               MsgBox("GUI Library",
+                       "This application uses the Qt GUI Library through RingQt")
+
+       Func pAbout
+               MsgBox("About",
+                       "2016, Mahmoud Fayed <msfclipper@yahoo.com>")           
+
+       Func pSaveSettings
+               cSettings = "aTextColor = ["+aTextColor[1]+","+aTextColor[2]+
+                               ","+aTextColor[3]+"]" + nl + 
+                               "aBackColor = ["+aBackColor[1]+","+aBackColor[2]+
+                               ","+aBackColor[3]+"]" + nl +
+                               "cFont = '" + cFont + "'" + nl + 
+                               "cWebSite = '" + cWebsite + "'" + nl
+               cSettings = substr(cSettings,nl,char(13)+char(10))
+               write("ringnotepad.ini",cSettings)
+               if lAsktoSave
+                       new qmessagebox(win1)
+                       {
+                               setwindowtitle("Save Changes?")
+                               settext("Some changes are not saved!")
+                               setInformativeText("Do you want to save your changes?")
+                               setstandardbuttons(QMessageBox_Yes |
+                                                  QMessageBox_No | QMessageBox_Cancel)
+                               result = exec()
+                               win1 {
+                               if result = QMessageBox_Yes
+                                       pSave()
+                               but result = QMessageBox_Cancel
+                                       return false
+                               ok
+                       }
+               }       
+               ok
+               return true
+
+       Func pSetWebsite
+               oWebView { loadpage(new qurl(cWebSite)) }       
+               oWBText  { setText(cWebSite) }          
+
+       Func RestoreSettings
+               eval(read("ringnotepad.ini"))
+               pSetColors()
+               pSetFont()
+               pSetWebsite()
+
+       Func pQuit
+               if pSaveSettings() 
+                       myapp.quit()
+               ok
+
+
+The application during the runtime
+
+The next screen shot demonstrates the "File" menu 
+
+.. image:: ringqt_shot50.jpg
+       :alt: Ring Notepad - File Menu
+
+The next window for "search and replace"
+
+.. image:: ringqt_shot51.jpg
+       :alt: Ring Notepad - Search and replace
+
+The next screen shot demonstrates the application main window                  
+
+.. image:: ringqt_shot49.jpg
+       :alt: Ring Notepad - The Main Window
+
+.. Note:: the functions pDebug(), pRun() and pRunNoConsole() in the previous sample are not portable!
+         They are written in this sample for MS-Windows and we can update them for other operating systems.
+
+
+.. index:: 
+       pair: Demo Programs; The Cards Game
+         
+.. index:: 
+       pair: Desktop and Mobile Development; The Cards Game
+
+The Cards Game
+==============
+
+In the next example we will see a simple Cards game developed using RingQt
+
+Each player get 5 cards, the cards are unknown to any one. each time one player click on one card
+to see it. if the card is identical to another card the play get point for each card.
+if the card value is "5" the player get points for all visible cards.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       nScale = 1
+
+       app1 = new qApp
+
+       mypic = new QPixmap("cards.jpg")
+
+       mypic2 = mypic.copy(0,(124*4)+1,79,124)
+       Player1EatPic = mypic.copy(80,(124*4)+1,79,124)
+       Player2EatPic= mypic.copy(160,(124*4)+1,79,124)
+
+       aMyCards = []
+       aMyValues = []
+       for x1 = 0 to 3
+               for y1 = 0 to 12
+                 temppic = mypic.copy((79*y1)+1,(124*x1)+1,79,124)
+                         aMyCards + temppic
+                         aMyValues + (y1+1)
+               next
+       next
+
+       nPlayer1Score = 0   nPlayer2Score=0
+
+       do
+               Page1 = new Game
+               Page1.Start()
+       again Page1.lnewgame
+
+       mypic.delete()
+       mypic2.delete()
+       Player1EatPic.delete()
+       Player2EatPic.delete()
+
+       for t in aMyCards
+                 t.delete()
+       next
+
+       func gui_setbtnpixmap pBtn,pPixmap
+               pBtn {
+                       setIcon(new qicon(pPixmap.scaled(width(),height(),0,0)))
+                       setIconSize(new QSize(width(),height()))
+               }
+
+       Class Game
+               
+               nCardsCount = 10
+               win1 layout1 label1 label2 layout2 layout3 aBtns aBtns2
+               aCards nRole=1 aStatus = list(nCardsCount) aStatus2 = aStatus
+               aValues        aStatusValues = aStatus  aStatusValues2 = aStatus
+               Player1EatPic   Player2EatPic
+               lnewgame = false
+               nDelayEat = 0.5
+               nDelayNewGame = 1
+
+               func start
+
+                       win1 = new qWidget() { 
+                               setwindowtitle("Five") 
+                               setstylesheet("background-color: White")
+                               showfullscreen()
+                       }
+               
+                       layout1 = new qvboxlayout()
+               
+                       label1 = new qlabel(win1) {
+                               settext("Player (1) - Score : " + nPlayer1Score)
+                               setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
+                               setstylesheet("color: White; background-color: Purple;
+                                                font-size:20pt")
+                               setfixedheight(200)
+                       }
+
+                       closebtn = new qpushbutton(win1)  {
+                               settext("Close Application")
+                               setstylesheet("font-size: 18px ; color : white ;
+                                                background-color: black ;")
+                               setclickevent("Page1.win1.close()")
+                       }
+               
+                       aCards = aMyCards
+                       aValues = aMyValues
+
+                       layout2 = new qhboxlayout()
+
+                       aBtns = []
+
+                       for x = 1 to nCardsCount
+                               aBtns + new qpushbutton(win1) 
+                               aBtns[x].setfixedwidth(79*nScale)
+                               aBtns[x].setfixedheight(124*nScale)
+                               gui_setbtnpixmap(aBtns[x],mypic2)
+                               layout2.addwidget(aBtns[x])
+                               aBtns[x].setclickevent("Page1.Player1click("+x+")")
+                       next
+
+                       layout1.addwidget(label1)       
+                       layout1.addlayout(layout2)
+
+                       label2 = new qlabel(win1) {
+                               settext("Player (2) - Score : " + nPlayer2Score)
+                               setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
+                               setstylesheet("color: white; background-color: red;
+                                                font-size:20pt")
+                               setfixedheight(200)
+                       }
+
+                       layout3 = new qhboxlayout()
+
+                       aBtns2 = []
+                       for x = 1 to nCardsCount
+                               aBtns2 + new qpushbutton(win1)
+                               aBtns2[x].setfixedwidth(79*nScale)
+                               aBtns2[x].setfixedheight(124*nScale)
+                               gui_setbtnpixmap(aBtns2[x],mypic2)
+                               layout3.addwidget(aBtns2[x])
+                               aBtns2[x].setclickevent("Page1.Player2click("+x+")")
+                       next
+
+                       layout1.addwidget(label2)
+                       layout1.addlayout(layout3)
+                       layout1.addwidget(closebtn)
+
+                       win1.setlayout(layout1)
+
+                       app1.exec()
+
+               Func Player1Click x
+                       if nRole = 1 and aStatus[x] = 0
+                               nPos = ((random(100)+clock())%(len(aCards)-1)) + 1
+                               gui_setbtnpixmap(aBtns[x],aCards[nPos])
+                               del(aCards,nPos)
+                               nRole = 2
+                               aStatus[x] = 1
+                               aStatusValues[x] = aValues[nPos]
+                               del(aValues,nPos)
+                               Player1Eat(x,aStatusValues[x])
+                               checknewgame()
+                       ok
+
+               Func Player2Click x
+                       if nRole = 2 and aStatus2[x] = 0
+                               nPos = ((random(100)+clock())%(len(aCards)-1)) + 1
+                               gui_setbtnpixmap(aBtns2[x],aCards[nPos])
+                               del(aCards,nPos)
+                               nRole = 1
+                               aStatus2[x] = 1
+                               aStatusValues2[x] = aValues[nPos]
+                               del(aValues,nPos)
+                               Player2Eat(x,aStatusValues2[x])
+                               checknewgame()
+                       ok
+
+               Func Player1Eat nPos,nValue
+
+                        app1.processEvents()
+
+                        delay(nDelayEat)
+                        lEat = false
+                        for x = 1 to nCardsCount
+                                if aStatus2[x] = 1 and (aStatusValues2[x] = nValue or nValue=5)
+                                       aStatus2[x] = 2
+                                       gui_setbtnpixmap(aBtns2[x],Player1EatPic)
+                                       lEat = True
+                                       nPlayer1Score++
+                                ok
+                                if (x != nPos) and (aStatus[x] = 1) and 
+                                       (aStatusValues[x] = nValue or nValue=5)
+                                       aStatus[x] = 2
+                                       gui_setbtnpixmap(aBtns[x],Player1EatPic)
+                                       lEat = True
+                                       nPlayer1Score++
+                                ok
+                        next
+                        if lEat
+                                       nPlayer1Score++
+                                       gui_setbtnpixmap(aBtns[nPos],Player1EatPic)
+                                       aStatus[nPos] = 2
+                                       label1.settext("Player (1) - Score : " + nPlayer1Score)
+                        ok
+
+               Func Player2Eat nPos,nValue
+
+                        app1.processEvents()
+
+                        delay(nDelayEat)
+                        lEat = false
+                        for x = 1 to  nCardsCount
+                                if aStatus[x] = 1 and (aStatusValues[x] = nValue or nValue = 5)
+                                       aStatus[x] = 2
+                                       gui_setbtnpixmap(aBtns[x],Player2EatPic)
+                                       lEat = True
+                                       nPlayer2Score++
+                                ok
+
+                                if (x != nPos) and (aStatus2[x] = 1) and
+                                       (aStatusValues2[x] = nValue or nValue=5 )
+                                       aStatus2[x] = 2
+                                       gui_setbtnpixmap(aBtns2[x],Player2EatPic)
+                                       lEat = True
+                                       nPlayer2Score++
+                                ok
+                        next
+                        if lEat
+                                       nPlayer2Score++
+                                       gui_setbtnpixmap(aBtns2[nPos],Player2EatPic)
+                                       aStatus2[nPos] = 2
+                                       label2.settext("Player (2) - Score : " + nPlayer2Score)
+                        ok
+
+               Func checknewgame
+                       if isnewgame()
+                                         lnewgame = true
+
+                                         if nPlayer1Score > nPlayer2Score
+                                                label1.settext("Player (1) Wins!!!")
+                                         ok
+                                         if nPlayer2Score > nPlayer1Score
+                                                label2.settext("Player (2) Wins!!!")
+                                         ok
+
+                                         app1.processEvents()
+                                         delay(nDelayNewGame)
+
+                                         win1.delete()
+                                         app1.quit()
+                       ok
+
+               Func isnewgame
+                       for t in aStatus
+                               if t = 0
+                                       return false
+                               ok
+                       next
+                       for t in aStatus2
+                               if t = 0
+                                       return false
+                               ok
+                       next
+                       return true
+
+               Func delay x
+               nTime = x * 1000
+               oTest = new qTest
+               oTest.qsleep(nTime)
+
+The application during the runtime
+                       
+.. image:: ringqt_shot48.jpg
+       :alt: The Cards Game
+
+.. note:: in the previous screen shot the player get the card number '5' but his score
+       is not increased because he opened this card while no other cards are visible!
+
+The next screen shot while running the game using a Mobile (Android)
+
+.. image:: ringqt_shot52.jpg
+       :alt: The Cards Game
+
+.. note:: using Qt we can run the same application on other Mobile systems 
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Classes and their Methods to use the default events
+
+
+Classes and their Methods to use the default events
+===================================================
+
+The next table present the class name and the methods that we have to use the default events.
+
+============================== ===========================================================
+Class Name                     Methods to use the default Events
+============================== ===========================================================
+QPushButton                    SetClickEvent()
+QAction                                SetClickEvent()
+QLineEdit                      SetTextChangedEvent()
+..                             SetCursorPositionChangedEvent()
+..                             SetEditingFinishedEvent()
+..                             SetReturnPressedEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTextEditedEvent()
+QTextEdit                      SetCopyAvailableEvent()
+..                             SetCurrentCharFormatChangedEvent()
+..                             SetCursorPositionChangedEvent()
+..                             SetRedoAvailableEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTextChangedEvent()
+..                             SetUndoAvailableEvent()
+QListWidget                    SetCurrentItemChangedEvent()
+..                             SetCurrentRowChangedEvent()
+..                             SetCurrentTextChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QTreeView                      SetCollapseEvent()
+..                             SetExpandedEvent()
+..                             SetActivatedEvent()
+..                             SetClickedEvent()
+..                             SetDoubleClickedEvent()
+..                             SetEnteredEvent()
+..                             SetPressedEvent()
+..                             SetViewportEnteredEvent()
+QTreeWidget                    SetCollapsedEvent()
+..                             SetExpandedEvent()
+..                             SetActivatedEvent()
+..                             SetClickedEvent()
+..                             SetDoubleClickedEvent()
+..                             SetEnteredEvent()
+..                             SetPressedEvent()
+..                             SetViewportEnteredEvent()
+..                             SetCurrentItemChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemCollapsedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemExpandedEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QComboBox                      SetActivatedEvent()
+..                             SetCurrentIndexChangedEvent()
+..                             SetEditTextChangedEvent()
+..                             SetHighlightedEvent()
+QTabWidget                     SetCurrentChangedEvent()
+..                             SetTabCloseRequestedEvent()
+QTableWidget                   SetCellActivatedEvent()
+..                             SetCellChangedEvent()
+..                             SetCellClickedEvent()
+..                             SetCellDoubleClickedEvent()
+..                             SetCellEnteredEvent()
+..                             SetCellPressedEvent()
+..                             SetCurrentCellChangedEvent()
+..                             SetCurrentItemChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QProgressBar                   SetValueChangedEvent()
+QSpinBox                       SetValueChangedEvent()
+QSlider                        SetActionTriggeredEvent()
+..                             SetRangeChangedEvent()
+..                             SetSliderMovedEvent()
+..                             SetSliderPressedEvent()
+..                             SetSliderReleasedEvent()
+..                             SetValueChangedEvent()
+QDial                          SetActionTriggeredEvent()
+..                             SetRangeChangedEvent()
+..                             SetSliderMovedEvent()
+..                             SetSliderPressedEvent()
+..                             SetSliderReleasedEvent()
+..                             SetValueChangedEvent()
+QWebView                       SetLoadFinishedEvent()
+..                             SetLoadProgressEvent()
+..                             SetLoadStartedEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTitleChangedEvent()
+..                             SetUrlChangedEvent()
+QCheckBox                      SetStateChangedEvent()
+..                             SetClickedEvent()
+..                             SetPressedEvent()
+..                             SetReleasedEvent()
+..                             SetToggledEvent()
+QRadioButton                   SetClickedEvent()
+..                             SetPressedEvent()
+..                             SetReleasedEvent()
+..                             SetToggledEvent()
+QButtonGroup                   SetButtonClickedEvent()
+..                             SetButtonPressedEvent()
+..                             SetButtonReleasedEvent()
+QVideoWidget                   SetBrightnessChangedEvent()
+..                             SetContrastChangedEvent()
+..                             SetFullScreenChangedEvent()
+..                             SetHueChangedEvent()
+..                             SetSaturationChangedEvent()
+QTimer                                 SetTimeoutEvent()
+QTcpServer                     SetAcceptErrorEvent()
+..                             SetNewConnectionEvent()
+QIODevice                      SetAboutToCloseEvent()
+..                             SetBytesWrittenEvent()
+..                             SetReadChannelFinishedEvent()
+..                             SetReadyReadEvent()
+QAbstractSocket                SetConnectedEvent()
+..                             SetDisconnectedEvent()
+..                             SetErrorEvent()
+..                             SetHostFoundEvent()
+..                             SetProxyAuthenticationRequiredEvent()
+..                             SetStateChangedEvent()
+QTcpSocket                     SetConnectedEvent()
+..                             SetDisconnectedEvent()
+..                             SetErrorEvent()
+..                             SetHostFoundEvent()
+..                             SetProxyAuthenticationRequiredEvent()
+..                             SetStateChangedEvent()
+..                             SetAboutToCloseEvent()
+..                             SetBytesWrittenEvent()
+..                             SetReadChannelFinishedEvent()
+..                             SetReadyReadEvent()
+QColorDialog                   SetColorSelectedEvent()
+..                             SetCurrentColorChangedEvent()
+QNetworkAccessManager          SetFinishedEvent()
+QThread                                SetStartedEvent()
+..                             SetFinishedEvent()
+============================== ===========================================================
+
+.. index:: 
+       pair: Desktop and Mobile Development; Methods to use Events with Events Filter 
+
+Methods to use Events with Events Filter 
+========================================
+
+RingQt define a new class called QAllEvents that help you in using Events Filter
+
+The next table presents the methods that we have
+
+================================       ======================
+Methods to get parameters              Class Name
+================================       ======================
+getKeyCode()   --> Number              QAllEvents
+getx()         --> Number
+gety()         --> Number
+getglobalx()   --> Number
+getglobaly()   --> Number
+getbutton()    --> Number
+getbuttons()   --> Number
+================================       ======================
+
+The next table presents the methods that we have to use events.
+
+===================================================    ======================
+Method Name                                            Class Name
+===================================================    ======================
+setKeyPressEvent(cEvent)                               QAllEvents
+setMouseButtonPressEvent(cEvent)
+setMouseButtonReleaseEvent(cEvent)
+setMouseButtonDblClickEvent(cEvent)
+setMouseMoveEvent(cEvent)
+setCloseEvent(cEvent)
+setContextMenuEvent(cEvent)
+setDragEnterEvent(cEvent)
+setDragLeaveEvent(cEvent)
+setDragMoveEvent(cEvent)
+setDropEvent(cEvent)
+setEnterEvent(cEvent)
+setFocusInEvent(cEvent)
+setFocusOutEvent(cEvent)
+setKeyReleaseEvent(cEvent)
+setLeaveEvent(cEvent)
+setNonClientAreaMouseButtonDblClickEvent(cEvent)
+setNonClientAreaMouseButtonPressEvent(cEvent)
+setNonClientAreaMouseButtonReleaseEvent(cEvent)
+setNonClientAreaMouseMoveEvent(cEvent)
+setMoveEvent(cEvent)
+setResizeEvent(cEvent)
+setWindowActivateEvent(cEvent)
+setWindowBlockedEvent(cEvent)
+setWindowDeactivateEvent(cEvent)
+setWindowStateChangeEvent(cEvent)
+setWindowUnblockedEvent(cEvent)
+===================================================    ======================
+
+.. index:: 
+       pair: Desktop and Mobile Development; The Difference between Qt and RingQt
+
+The Difference between Qt and RingQt
+====================================
+
+(1) RingQt use simple methods to set the code that will be executed for events.
+
+Syntax:
+
+.. code-block:: none
+
+       Set<Event_Name>Event(cEventCode)
+       
+(2) RingQt change the name of some methods to avoid conflict with Ring Keywords.
+
+The next table present these little changes
+
+===============================                ======================          ===================
+Class Name                             Qt Method Name                  RingQt Method Name
+===============================                ======================          ===================
+QWebView                               load                            loadpage
+QMediaPlaylist                         load                            loadfile
+QMediaPlaylist                         next                            movenext
+QPainter                               end                             endpaint
+QPicture                               load                            loadfile
+QLineEdit                              end                             endtext
+QDialog                                        done                            donedialog
+QTextDocument                          end                             enddoc
+QTextBlock                             next                            nextblock
+QSqlQuery                              next                            movenext
+QImage                                 load                            loadimage
+QNetworkAccessManager                  get                             getvalue
+QNetworkAccessManager                  put                             putvalue
+QThread                                        exit                            exitfromthread
+QRegularExpressionMatchIterator                next                            nextitem
+QCamera                                        load                            loadcamera
+===============================                ======================          ===================
+
+.. index:: 
+       pair: Desktop and Mobile Development; RingQt Classes and their Qt Documentation
+
+RingQt Classes and their Qt Documentation
+=========================================
+
+Qt Documentation : http://doc.qt.io/qt-5/classes.html
+
+See the "RingQt Classes and Methods Reference" chapter for supported classes and methods.
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; New Classes names - Index Start from 1
+
+New Classes names - Index Start from 1
+======================================
+
+We added new classes to RingQt - another version of classes where the class names doesn't start with the "q" letter
+Also updated methods so the index start from 1 when we deal with the GUI controls like
+
+* ComboBox
+* ListWidget
+* TableWidget
+* TreeWidget
+
+These classes are inside guilib.ring under the package name : System.GUI
+
+To use it
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       import System.GUI
+
+This doesn't have any effect on our previous code, It's just another choice for better code that is consistent with Ring rules.
+
+Also the form designer is updated to provide us the choice between using classes where (index start from 0) or (index start from 1)
+
+Example  (Uses the Form Designer)
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartController.ring 
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating Reports using the WebLib and the GUILib
+
+
+Creating Reports using the WebLib and the GUILib 
+================================================
+
+The WebLib comes with a class called HtmlPage
+
+Using this class we can create reports quickly using WebLib & GUILib together
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+       load "guilib.ring"
+
+       import System.Web
+       import System.GUI
+
+       new qApp {
+               open_window(:CustomersReportController)
+               exec()
+       }
+
+       class CustomersReportController
+
+               oView = new CustomersReportView
+
+               func Start
+                       CreateReport()
+
+               func CreateReport
+                       mypage = new HtmlPage {
+                               h1 { text("Customers Report") }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(4)
+                                       TR
+                                       {
+                                               TD { WIDTH="10%" 
+                                                       text("Customers Count : " )  }
+                                               TD { text (100) }
+                                       }
+                               }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(26)
+                                       TR
+                                       {
+                                               style = stylewidth("100%") +
+                                                       stylegradient(24)
+                                               TD { text("Name " )  }
+                                               TD { text("Age" ) }
+                                               TD { text("Country" ) }
+                                               TD { text("Job" ) }     
+                                               TD { text("Company" ) }
+                                       }
+                                       for x =  1 to 100
+                                               TR
+                                               {
+                                                       TD { text("Test" )  }
+                                                       TD { text("30" ) }
+                                                       TD { text("Egypt" ) }
+                                                       TD { text("Sales" ) }   
+                                                       TD { text("Future" ) }
+                                               }
+                                       next
+                               }
+                       }
+                       write("report.html",mypage.output())
+
+               func PrintEvent
+                       printer1 = new qPrinter(0) {
+                               setoutputformat(1)
+                               setoutputfilename("report.pdf")
+                       }
+                       oView {
+                               web.print(printer1)
+                               web.show()
+                       }
+                       system ("report.pdf")
+
+       class CustomersReportView
+
+                       win = new window() {
+                                       setwindowtitle("Report Window")
+                                       setgeometry(100,100,500,500)
+                                       web = new webview(win) {
+                                               setgeometry(100,100,1000,500)
+                                               loadpage(new qurl("file:///"+
+                                               currentdir()+"/report.html"))
+                                       }
+                                       new pushbutton(win) {
+                                                       setGeometry(100,20,100,30)
+                                                       settext("Print")
+                                                       setclickevent(Method(:PrintEvent))
+                                       }
+                                       showMaximized()
+                               }
+
+Screen Shot:
+
+.. image:: ring15reportshot.png
+       :alt: Customers Report
+
diff --git a/docs/en/source/qt3d.txt b/docs/en/source/qt3d.txt
new file mode 100644 (file)
index 0000000..0130079
--- /dev/null
@@ -0,0 +1,1788 @@
+.. index:: 
+       Single: Using Qt3D; Using Qt3D
+
+==========
+Using Qt3D
+==========
+
+In this chapter we will learn how to use Qt3D through many samples.
+
+
+.. index:: 
+       pair: Using Qt3D; Drawing Cube
+
+Drawing Cube
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oCubeMaterial = new QPhongMaterial(oCube)
+               oCubeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cube") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex1.png
+       :alt: Qt3D Example - Drawing Cube
+
+
+.. index:: 
+       pair: Using Qt3D; Drawing Torus
+
+Drawing Torus
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oTorus = new  QTorusMesh(oRootEntity)
+                       oTorus.setRadius(1.0)
+                       oTorus.setMinorRadius(0.4)
+                       oTorus.setRings(100)
+                       oTorus.setSlices(20)
+
+               oTorusTransform = new  QTransform(oTorus)
+               oTorusTransform.setScale(2)
+               oTorusTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTorusMaterial = new QPhongMaterial(oTorus)
+               oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oTorusEntity = new QEntity(oRootEntity)
+               oTorusEntity.addComponent(oTorus)
+               oTorusEntity.addComponent(oTorusMaterial)
+               oTorusEntity.addComponent(oTorusTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Torus") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex2.png
+       :alt: Qt3D Example - Drawing Torus
+
+.. index:: 
+       pair: Using Qt3D; Drawing Sphere
+
+Drawing Sphere
+==============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oSphere = new  QSphereMesh(oRootEntity)
+                       oSphere.setRadius(1.0)
+                       oSphere.setRings(100)
+                       oSphere.setSlices(20)
+
+               oSphereTransform = new  QTransform(oSphere)
+               oSphereTransform.setScale(2)
+               oSphereTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oSphereMaterial = new QPhongMaterial(oSphere)
+               oSphereMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oSphereEntity = new QEntity(oRootEntity)
+               oSphereEntity.addComponent(oSphere)
+               oSphereEntity.addComponent(oSphereMaterial)
+               oSphereEntity.addComponent(oSphereTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Sphere") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex3.png
+       :alt: Qt3D Example - Drawing Sphere
+
+.. index:: 
+       pair: Using Qt3D; Drawing Cylinder
+
+Drawing Cylinder
+================
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oCylinder = new  QCylinderMesh(oRootEntity)
+                       oCylinder.setRadius(1)
+                       oCylinder.setRings(100)
+                       oCylinder.setSlices(20)
+               oCylinder.setLength(5)
+
+               oCylinderTransform = new  QTransform(oCylinder)
+               oCylinderTransform.setScale(2)
+               oCylinderTransform.setTranslation(new QVector3D(1, 0, 3))
+
+               oCylinderMaterial = new QPhongMaterial(oCylinder)
+               oCylinderMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oCylinderEntity = new QEntity(oRootEntity)
+               oCylinderEntity.addComponent(oCylinder)
+               oCylinderEntity.addComponent(oCylinderMaterial)
+               oCylinderEntity.addComponent(oCylinderTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cylinder") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex4.png
+       :alt: Qt3D Example - Drawing Cylinder
+
+.. index:: 
+       pair: Using Qt3D; Drawing Cone
+
+Drawing Cone
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oCone = new  QConeMesh(oRootEntity)
+                       oCone.setRings(100)
+                       oCone.setSlices(20)
+               oCone.setLength(5)
+
+               oConeTransform = new  QTransform(oCone)
+               oConeTransform.setScale(2)
+               oConeTransform.setTranslation(new QVector3D(1, 0, 3))
+
+               oConeMaterial = new QPhongMaterial(oCone)
+               oConeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oConeEntity = new QEntity(oRootEntity)
+               oConeEntity.addComponent(oCone)
+               oConeEntity.addComponent(oConeMaterial)
+               oConeEntity.addComponent(oConeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cone") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex5.png
+       :alt: Qt3D Example - Drawing Cone
+
+.. index:: 
+       pair: Using Qt3D; Drawing Plane
+
+Drawing Plane
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oPlane = new  QPlaneMesh(oRootEntity)
+               oPlane.setHeight(5)
+               oPlane.setWidth(5)
+               oPlane.setmeshresolution(new qSize(10,10))
+
+               oPlaneTransform = new  QTransform(oPlane)
+               oPlaneTransform.setScale(2)
+               oPlaneTransform.setTranslation(new QVector3D(0, -4, 4))
+
+               oPlaneMaterial = new QPhongMaterial(oPlane)
+               oPlaneMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oPlaneEntity = new QEntity(oRootEntity)
+               oPlaneEntity.addComponent(oPlane)
+               oPlaneEntity.addComponent(oPlaneMaterial)
+               oPlaneEntity.addComponent(oPlaneTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Plane") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex6.png
+       :alt: Qt3D Example - Drawing Plane
+
+       
+.. index:: 
+       pair: Using Qt3D; Texture
+
+Texture
+=======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Adding Texture") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex7.png
+       :alt: Qt3D Example - Texture
+
+.. index:: 
+       pair: Using Qt3D; Key Press
+
+Key Press
+=========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+                       oFilter = new qallevents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Moving Cube using the Keyboard") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               oContainer.setfocus(0)
+
+               exec()
+       }
+
+       func pKeyPress
+               nKey = oFilter.getkeycode()
+               oX = oCubeTransform.translation().x()
+               oY = oCubeTransform.translation().y() 
+               oZ = oCubeTransform.translation().z()
+               switch nKey
+                       on Qt_Key_Right
+                               oX++
+                       on Qt_Key_Left
+                               oX--
+                       on Qt_Key_Up
+                               oY++
+                       on Qt_Key_Down
+                               oY--
+               off
+               oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
+
+.. image:: qt3d_ex8.png
+       :alt: Qt3D Example - Key Press
+
+
+.. index:: 
+       pair: Using Qt3D; Object Picker
+
+Object Picker
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+                       oFilter = new qallevents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oPicker = new qObjectPicker(oCube) {
+                       setclickedevent("pClick()")
+               }
+               oCubeEntity.addComponent(oPicker)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Object Picker - Click on the Cube") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               oContainer.setfocus(0)
+
+               exec()
+       }
+
+       func pKeyPress
+               nKey = oFilter.getkeycode()
+               oX = oCubeTransform.translation().x()
+               oY = oCubeTransform.translation().y() 
+               oZ = oCubeTransform.translation().z()
+               switch nKey
+                       on Qt_Key_Right
+                               oX++
+                       on Qt_Key_Left
+                               oX--
+                       on Qt_Key_Up
+                               oY++
+                       on Qt_Key_Down
+                               oY--
+               off
+               oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
+
+       func pClick
+               msginfo("Event","Click")
+               oContainer.setfocus(0)
+
+
+.. image:: qt3d_ex9.png
+       :alt: Qt3D Example - Object Picker
+
+.. index:: 
+       pair: Using Qt3D; Frame Action
+
+Frame Action
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(1)
+                       setYextent(1)
+                       setZextent(1)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(-5, -5, -5))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               nAngle=0        nSpeed=0.1
+               oFrameAction = new qFrameAction(oRootEntity) {
+                       settriggeredevent("pEvent()")
+               }
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Frame Action") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+       func pEvent
+
+               # Move the Cube
+                       oX = oCubeTransform.translation().x()
+                       oY = oCubeTransform.translation().y() 
+                       oZ = oCubeTransform.translation().z()
+                       if oX >= 4
+                               nSpeed=-0.1
+                       but oX <= -10
+                               nSpeed=0.1
+                       ok
+                       oCubeTransform.setTranslation(
+                               new QVector3D(oX+nSpeed, oY+nSpeed, oZ+nSpeed))
+
+               # Rotate the Cube
+                       nAngle+=5  if nAngle=360  nAngle=0 ok
+                       oQ = new QQuaternion(0,0,0,0)
+                       oCubeTransform.setRotation(
+                               oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), nAngle))
+
+.. image:: qt3d_ex10.png
+       :alt: Qt3D Example - Frame Action
+
+.. index:: 
+       pair: Using Qt3D; Text 2D
+
+Text 2D
+=======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+
+               oText2DEntity = new  QText2DEntity(oRootEntity) {
+                       setText("Ring programming language")
+                       setWidth(400) setHeight(40)
+                       setColor(new QColor() {setRGB(128,128,128,255)})
+               }
+
+               oText2DTransform = new  QTransform(oText2DEntity)
+               oText2DTransform.setScale(0.1)
+               oText2DTransform.setTranslation(new QVector3D(-10.5, -5, 0))
+
+               oText2DEntity.addComponent(oText2DTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Text2D") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+
+.. image:: qt3d_ex11.png
+       :alt: Qt3D Example - Text 2D
+
+       
+.. index:: 
+       pair: Using Qt3D; Extruded Text 
+
+Extruded Text 
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oTextEntity = new QEntity(oRootEntity)
+
+               oTextMesh = new  QExtrudedTextMesh(oTextEntity) {
+                       setText("Ring")
+               }
+
+               oTextTransform = new  QTransform(oTextEntity)
+               oTextTransform.setScale(3)
+               oTextTransform.setTranslation(new QVector3D(-5.5, -4, 3))
+
+               oTextMaterial = new QPhongMaterial(oTextEntity);
+               oTextMaterial.setDiffuse(new QColor() {setRGB(0,0,255,255)})
+               
+               oTextEntity.addComponent(oTextMesh)
+               oTextEntity.addComponent(oTextTransform)
+               oTextEntity.addComponent(oTextMaterial)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Extruded Text") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex12.png
+       :alt: Qt3D Example - Extruded Text 
+
+       
+.. index:: 
+       pair: Using Qt3D; Model
+
+Model
+=====
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/lucky_cat.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.1)
+               oModelTransform.setTranslation(new QVector3D(0, 0, 0))
+               oQ = new QQuaternion(0,0,0,0)
+               oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), 180))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelmaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model (Obj File)") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+
+.. image:: qt3d_ex13.png
+       :alt: Qt3D Example - Model
+
+.. index:: 
+       pair: Using Qt3D; Model Texture 
+
+Model Texture 
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 25, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.5)
+               oModelTransform.setTranslation(new QVector3D(0, 12, 4))
+
+               oLoader = new  QTextureLoader(oModel)
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/Robot.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model Texture") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex14.png
+       :alt: Qt3D Example - Model Texture 
+
+       
+.. index:: 
+       pair: Using Qt3D; Draw Office 
+
+Draw Office
+===========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Reception_Table.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(1)
+               oModelTransform.setTranslation(new QVector3D(0, -2.5, 16))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelmaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model (Obj File) - Office") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex15.png
+       :alt: Qt3D Example - Draw Office 
+
+.. index:: 
+       pair: Using Qt3D; Many Objects
+
+Many Objects
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.2)
+               oModelTransform.setTranslation(new QVector3D(0, 10, 10))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+
+               oLoader = new  QTextureLoader(oModel);
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               for n = 1 to 10
+
+                       oTorus = new  QTorusMesh(oRootEntity)
+                               oTorus.setRadius(1.0*n)
+                               oTorus.setMinorRadius(0.4*n)
+                               oTorus.setRings(100)
+                               oTorus.setSlices(20)
+               
+                       oTorusTransform = new  QTransform(null)
+                       oTorusTransform.setScale(2)
+                       oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
+               
+                       oTorusMaterial = new QPhongMaterial(null);
+                       oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+               
+                       oTorusEntity = new QEntity(oRootEntity)
+                       oTorusEntity.addComponent(oTorus)
+               
+                       oLoader = new  QTextureLoader(oTorus);
+                       oTorusMaterial = new QTextureMaterial(oTorus)
+                       oLoader.setSource(
+                               new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+                       oTorusMaterial.setTexture(oLoader)
+               
+                       oTorusEntity.addComponent(oTorusMaterial)
+                       oTorusEntity.addComponent(oTorusTransform)
+               next
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Many Objects") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex16.png
+       :alt: Qt3D Example - Many Objects 
+
+.. index:: 
+       pair: Using Qt3D; Camera
+
+Camera
+======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.2)
+               oModelTransform.setTranslation(new QVector3D(0, 10, 10))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+
+               oLoader = new  QTextureLoader(oModel);
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               for n = 1 to 10
+
+                       oTorus = new  QTorusMesh(oRootEntity)
+                               oTorus.setRadius(1.0*n)
+                               oTorus.setMinorRadius(0.4*n)
+                               oTorus.setRings(100)
+                               oTorus.setSlices(20)
+               
+                       oTorusTransform = new  QTransform(null)
+                       oTorusTransform.setScale(2)
+                       oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
+               
+                       oTorusMaterial = new QPhongMaterial(null);
+                       oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+               
+                       oTorusEntity = new QEntity(oRootEntity)
+                       oTorusEntity.addComponent(oTorus)
+               
+                       oLoader = new  QTextureLoader(oTorus);
+                       oTorusMaterial = new QTextureMaterial(oTorus)
+                       oLoader.setSource(
+                               new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+                       oTorusMaterial.setTexture(oLoader)
+               
+                       oTorusEntity.addComponent(oTorusMaterial)
+                       oTorusEntity.addComponent(oTorusTransform)
+               next
+
+               oView.setRootEntity(oRootEntity)
+
+
+               btn1 = new qPushButton(oWidget) {
+                       setText("Move the Camera and the Robot") setClickEvent("pMove()") 
+               }
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+               oLayout.AddWidget(btn1)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Camera") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+       func pMove 
+
+               oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(20, 15, 20))
+
+               oModelTransform.setTranslation(new QVector3D(20, 15, 20))
+               oQ = new QQuaternion(0,0,0,0)
+               oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(1, 1, 0), 270))
+
+
+.. image:: qt3d_ex17.png
+       :alt: Qt3D Example - Camera
+
+       
+.. index:: 
+       pair: Using Qt3D; Scene 
+
+Scence 
+======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oWidget = new QWidget()
+
+               oView = new Qt3DWindow() 
+               oView.defaultFrameGraph().setClearColor(new QColor() {setRGB(0,0,0,255)})
+
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000)
+               oCameraEntity.setPosition(new QVector3D(-13.34, -6.43, 16.47))
+                       oCameraEntity.setUpVector(new QVector3D(0.02, 0, 1))
+                       oCameraEntity.setViewCenter(new QVector3D(-13.34, 17.05, 15.42))        
+
+               oCameraController = new  QFirstPersonCameraController(oRootEntity)
+               oCameraController.setCamera(oCameraEntity)
+               oCameraController.setEnabled(False)
+
+               oLongRoomEntity = new QEntity(oRootEntity)
+
+               oLongRoomModel = new QMesh(oLongRoomEntity)
+
+               oLongRoomModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Long_Room.obj") ) 
+
+               oLongRoomTransform = new  QTransform(oLongRoomEntity)
+               oLongRoomTransform.setScale(1)
+               oLongRoomTransform.setTranslation(new QVector3D(5, 0, 15))
+
+               oLongRoomLoader = new  QTextureLoader(oLongRoomModel)
+               oLongRoomMaterial = new QTextureMaterial(oLongRoomModel)
+               oLongRoomLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/croc.jpg") )
+               oLongRoomMaterial.setTexture(oLongRoomLoader)
+
+               oLongRoomEntity.addComponent(oLongRoomModel)
+               oLongRoomEntity.addComponent(oLongRoomMaterial)
+               oLongRoomEntity.addComponent(oLongRoomTransform)
+
+               oTableEntity = new QEntity(oRootEntity)
+
+               oTableModel = new QMesh(oTableEntity)
+               oTableModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Reception_Table.obj") ) 
+
+               oTableTransform = new  QTransform(oTableEntity)
+               oTableTransform.setScale(0.3)
+               oTableTransform.setTranslation(new QVector3D(5, 0, 15))
+               oQ = new QQuaternion(0,0,0,0)
+               oTableTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), -180))
+
+               oTableModelMaterial = new QPhongMaterial(oTableEntity)
+               oTableModelMaterial.setDiffuse(new QColor() {setRGB(255,255,255,255)})
+
+               oTableEntity.addComponent(oTableModel)
+               oTableEntity.addComponent(oTableModelmaterial)
+               oTableEntity.addComponent(oTableTransform)
+
+               oFirstLightEntity = new QEntity(oRootEntity)
+
+                       oFirstLight = new QPointLight(oFirstLightEntity)
+               oFirstLight.setColor(new qColor() { setRGB(128,128,128,128) })
+               oFirstLight.setIntensity(1)
+
+               oFirstLightTransform = new QTransform(oFirstLightEntity)
+               oFirstLightTransform.setTranslation(new QVector3D(5, 0, 20))
+
+               oFirstLightEntity.addComponent(oFirstLight)
+               oFirstLightEntity.addComponent(oFirstLightTransform)
+
+               aCats = list(5)
+               for n = 1 to 5
+               v = n * 0.1
+               aCats[n] = []
+               aCats[n][:oCatModelEntity] = new QEntity(oRootEntity)
+               aCats[n][:oCatModel] = new QMesh(aCats[n][:oCatModelEntity])
+               aCats[n][:oCatModel].setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Lucky_Cat.obj") ) 
+               aCats[n][:oCatModelMaterial] = new QPhongMaterial(aCats[n][:oCatModel])
+               aCats[n][:oCatModelMaterial].setDiffuse(
+                       new QColor() {setRGB(255,255,255,255)})
+               aCats[n][:oCatModelTransform] = new  QTransform(aCats[n][:oCatModelEntity])
+               aCats[n][:oCatModelTransform].setScale(0.01)
+               aCats[n][:oCatModelTransform].setTranslation(
+                       new QVector3D(-5*(v+v), 1, 15.2))
+               oQ = new QQuaternion(0,0,0,0)
+               aCats[n][:oCatModelTransform].setRotation(
+                       oQ.fromAxisAndAngle(
+                               new QVector3D(0, 1, 1), 180))
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModel])
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelmaterial])
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelTransform])
+               next
+
+               oSecondLightEntity = new QEntity(oRootEntity)
+
+               oSecondLight = new QPointLight(oSecondLightEntity)
+               oSecondLight.setColor(new qColor() { setRGB(255,255,255,255) })
+               oSecondLight.setIntensity(1)
+
+               oSecondLightTransform = new QTransform(oSecondLightEntity)
+               oSecondLightTransform.setTranslation(new QVector3D(-5, 1, 15.5))
+
+               oSecondLightEntity.addComponent(oSecondLight)
+               oSecondLightEntity.addComponent(oSecondLightTransform)
+
+               oRobotEntity = new QEntity(oRootEntity)
+
+               oRobotModel = new QMesh(oRobotEntity)
+               oRobotModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Fat_Robot.obj") ) 
+               oRobotTransform = new  QTransform(oRobotEntity)
+               oRobotTransform.setScale(0.006)
+               
+               robotX = -15
+               robotY = -2
+               robotZ = 15
+
+               oRobotTransform.setTranslation(new QVector3D(-15, -2, 15))
+               oQ = new QQuaternion(0,0,0,0)
+               oRobotTransform.setRotation(
+                       oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
+
+               oRobotMaterial = new QPhongMaterial(oRobotEntity)
+               oRobotMaterial.setDiffuse(new QColor() {setRGB(128,128,128,255)})
+
+               oRobotEntity.addComponent(oRobotModel)
+               oRobotEntity.addComponent(oRobotTransform)
+               oRobotEntity.addComponent(oRobotMaterial)
+
+               oView.setRootEntity(oRootEntity)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Scene") 
+                       showfullscreen() 
+               }
+
+               oContainer.resize(oWidget.width(),oWidget.height())
+
+                       oFilter = new QAllEvents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+               oContainer.setfocus(0)
+
+               exec()
+
+       }
+
+       func pKeyPress
+
+               nKey    = oFilter.getKeyCode()
+               nSpeed  = 0.1
+               cX      = oCameraEntity.position().x()
+               CY      = oCameraEntity.position().y()
+               cZ      = oCameraEntity.position().z()
+               cVCx    = oCameraEntity.viewCenter().x()
+               cVCy    = oCameraEntity.viewCenter().y()
+               cVCz    = oCameraEntity.viewCenter().z()
+
+               switch nKey
+                       on Qt_Key_Right
+                               if cX < 4.8
+                                       robotX+= nSpeed
+                                       oCameraEntity.setPosition(
+                                               new QVector3D(cX+0.1, cY, cZ))
+                                       oCameraEntity.setViewCenter(
+                                               new QVector3D(cVCx+nSpeed, cVCy, cVCz)) 
+                                       oRobotTransform.setRotation(
+                                               oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
+                               ok
+                       on Qt_Key_Left
+                               if cX > - 13.8
+                                       robotX-= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX-0.1, cY, cZ))
+                                       oCameraEntity.setViewCenter(
+                                         new QVector3D(cVCx-nSpeed, cVCy, cVCz))       
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 160))
+                               ok
+                       on Qt_Key_Down 
+                               if robotY > -3.5
+                                       robotY-= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX, cY, cZ))
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 190))
+                               ok
+                       on Qt_Key_Up
+                               if robotY < 2
+                                       robotY+= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX, cY, cZ))
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 180))
+                               ok
+                       on Qt_Key_Escape
+                               oWidget.close()
+               off
+
+               oRobotTransform.setTranslation(new QVector3D(robotX, robotY, robotZ))
+
+
+.. image:: qt3d_ex18.png
+       :alt: Qt3D Example - Scene
diff --git a/docs/en/source/qt3d_ex1.png b/docs/en/source/qt3d_ex1.png
new file mode 100644 (file)
index 0000000..224c9fd
Binary files /dev/null and b/docs/en/source/qt3d_ex1.png differ
diff --git a/docs/en/source/qt3d_ex10.png b/docs/en/source/qt3d_ex10.png
new file mode 100644 (file)
index 0000000..48bced9
Binary files /dev/null and b/docs/en/source/qt3d_ex10.png differ
diff --git a/docs/en/source/qt3d_ex11.png b/docs/en/source/qt3d_ex11.png
new file mode 100644 (file)
index 0000000..1aea68a
Binary files /dev/null and b/docs/en/source/qt3d_ex11.png differ
diff --git a/docs/en/source/qt3d_ex12.png b/docs/en/source/qt3d_ex12.png
new file mode 100644 (file)
index 0000000..62c447e
Binary files /dev/null and b/docs/en/source/qt3d_ex12.png differ
diff --git a/docs/en/source/qt3d_ex13.png b/docs/en/source/qt3d_ex13.png
new file mode 100644 (file)
index 0000000..79473f6
Binary files /dev/null and b/docs/en/source/qt3d_ex13.png differ
diff --git a/docs/en/source/qt3d_ex14.png b/docs/en/source/qt3d_ex14.png
new file mode 100644 (file)
index 0000000..3363405
Binary files /dev/null and b/docs/en/source/qt3d_ex14.png differ
diff --git a/docs/en/source/qt3d_ex15.png b/docs/en/source/qt3d_ex15.png
new file mode 100644 (file)
index 0000000..05a72a6
Binary files /dev/null and b/docs/en/source/qt3d_ex15.png differ
diff --git a/docs/en/source/qt3d_ex16.png b/docs/en/source/qt3d_ex16.png
new file mode 100644 (file)
index 0000000..dd249ef
Binary files /dev/null and b/docs/en/source/qt3d_ex16.png differ
diff --git a/docs/en/source/qt3d_ex17.png b/docs/en/source/qt3d_ex17.png
new file mode 100644 (file)
index 0000000..4480a8e
Binary files /dev/null and b/docs/en/source/qt3d_ex17.png differ
diff --git a/docs/en/source/qt3d_ex18.png b/docs/en/source/qt3d_ex18.png
new file mode 100644 (file)
index 0000000..2055743
Binary files /dev/null and b/docs/en/source/qt3d_ex18.png differ
diff --git a/docs/en/source/qt3d_ex2.png b/docs/en/source/qt3d_ex2.png
new file mode 100644 (file)
index 0000000..7f64f56
Binary files /dev/null and b/docs/en/source/qt3d_ex2.png differ
diff --git a/docs/en/source/qt3d_ex3.png b/docs/en/source/qt3d_ex3.png
new file mode 100644 (file)
index 0000000..899dd78
Binary files /dev/null and b/docs/en/source/qt3d_ex3.png differ
diff --git a/docs/en/source/qt3d_ex4.png b/docs/en/source/qt3d_ex4.png
new file mode 100644 (file)
index 0000000..fd28e78
Binary files /dev/null and b/docs/en/source/qt3d_ex4.png differ
diff --git a/docs/en/source/qt3d_ex5.png b/docs/en/source/qt3d_ex5.png
new file mode 100644 (file)
index 0000000..0e31f10
Binary files /dev/null and b/docs/en/source/qt3d_ex5.png differ
diff --git a/docs/en/source/qt3d_ex6.png b/docs/en/source/qt3d_ex6.png
new file mode 100644 (file)
index 0000000..ad789a3
Binary files /dev/null and b/docs/en/source/qt3d_ex6.png differ
diff --git a/docs/en/source/qt3d_ex7.png b/docs/en/source/qt3d_ex7.png
new file mode 100644 (file)
index 0000000..c8ab221
Binary files /dev/null and b/docs/en/source/qt3d_ex7.png differ
diff --git a/docs/en/source/qt3d_ex8.png b/docs/en/source/qt3d_ex8.png
new file mode 100644 (file)
index 0000000..9080d63
Binary files /dev/null and b/docs/en/source/qt3d_ex8.png differ
diff --git a/docs/en/source/qt3d_ex9.png b/docs/en/source/qt3d_ex9.png
new file mode 100644 (file)
index 0000000..84d8848
Binary files /dev/null and b/docs/en/source/qt3d_ex9.png differ
diff --git a/docs/en/source/qt3dex18.png b/docs/en/source/qt3dex18.png
new file mode 100644 (file)
index 0000000..2055743
Binary files /dev/null and b/docs/en/source/qt3dex18.png differ
diff --git a/docs/en/source/qtclassconvertor.png b/docs/en/source/qtclassconvertor.png
new file mode 100644 (file)
index 0000000..c71d150
Binary files /dev/null and b/docs/en/source/qtclassconvertor.png differ
diff --git a/docs/en/source/qtclassesdoc.txt b/docs/en/source/qtclassesdoc.txt
new file mode 100644 (file)
index 0000000..a8102cf
--- /dev/null
@@ -0,0 +1,11381 @@
+.. index:: 
+     single: RingQt Classes Reference; Introduction
+
+========================
+RingQt Classes Reference
+========================
+
+
+.. index::
+       pair: RingQt Classes Reference; CodeEditor Class
+
+CodeEditor Class
+================
+
+
+Parameters : QWidget *
+
+
+Parent Class : QPlainTextEdit
+
+* void setCompleter(QCompleter *c)
+* QCompleter *completer(void)
+* void setLineNumbersAreaColor(QColor oColor)
+* void setLineNumbersAreaBackColor(QColor oColor)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractAspect Class
+
+QAbstractAspect Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qabstractaspect.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* void scheduleSingleShotJob(Qt3DCore::QAspectJobPtr job)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractButton Class
+
+QAbstractButton Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractbutton.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool autoExclusive(void)
+* bool autoRepeat(void)
+* int autoRepeatDelay(void)
+* int autoRepeatInterval(void)
+* QButtonGroup *group(void)
+* QIcon icon(void)
+* QSize iconSize(void)
+* bool isCheckable(void)
+* bool isChecked(void)
+* bool isDown(void)
+* void setAutoExclusive(bool)
+* void setAutoRepeat(bool)
+* void setAutoRepeatDelay(int)
+* void setAutoRepeatInterval(int)
+* void setCheckable(bool)
+* void setDown(bool)
+* void setIcon(QIcon)
+* void setShortcut(QKeySequence)
+* void setText(QString)
+* QKeySequence shortcut(void)
+* QString text(void)
+* void animateClick(int msec)
+* void click(void)
+* void setChecked(bool)
+* void setIconSize(QSize)
+* void toggle(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractCameraController Class
+
+QAbstractCameraController Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qabstractcameracontroller.html
+
+
+Parent Class : QEntity
+
+* float acceleration(void)
+* Qt3DRender::QCamera * camera(void)
+* float deceleration(void)
+* float linearSpeed(void)
+* float lookSpeed(void)
+* void setAcceleration(float acceleration)
+* void setCamera(Qt3DRender::QCamera *camera)
+* void setDeceleration(float deceleration)
+* void setLinearSpeed(float linearSpeed)
+* void setLookSpeed(float lookSpeed)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractItemView Class
+
+QAbstractItemView Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractitemview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractScrollArea
+
+* bool alternatingRowColors(void)
+* int autoScrollMargin(void)
+* void closePersistentEditor(QModelIndex)
+* QModelIndex currentIndex(void)
+* int defaultDropAction(void)
+* int dragDropMode(void)
+* bool dragDropOverwriteMode(void)
+* bool dragEnabled(void)
+* int editTriggers(void)
+* bool hasAutoScroll(void)
+* int horizontalScrollMode(void)
+* QSize iconSize(void)
+* QModelIndex indexAt(QPoint)
+* QWidget *indexWidget(QModelIndex)
+* QAbstractItemDelegate *itemDelegate(QModelIndex)
+* QAbstractItemDelegate *itemDelegateForColumn(int column)
+* QAbstractItemDelegate *itemDelegateForRow(int row)
+* void keyboardSearch(QString)
+* QAbstractItemModel *model(void)
+* void openPersistentEditor(QModelIndex)
+* QModelIndex rootIndex(void)
+* void scrollTo(QModelIndex,QAbstractItemView::ScrollHint)
+* int selectionBehavior(void)
+* int selectionMode(void)
+* QItemSelectionModel *selectionModel(void)
+* void setAlternatingRowColors(bool enable)
+* void setAutoScroll(bool enable)
+* void setAutoScrollMargin(int margin)
+* void setDefaultDropAction(Qt::DropAction dropAction)
+* void setDragDropMode(QAbstractItemView::DragDropMode behavior)
+* void setDragDropOverwriteMode(bool overwrite)
+* void setDragEnabled(bool enable)
+* void setDropIndicatorShown(bool enable)
+* void setEditTriggers(QAbstractItemView::EditTrigger triggers)
+* void setHorizontalScrollMode(QAbstractItemView::ScrollMode mode)
+* void setIconSize(QSize)
+* void setIndexWidget(QModelIndex, QWidget *widget)
+* void setItemDelegate(QAbstractItemDelegate *delegate)
+* void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate)
+* void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)
+* void setModel(QAbstractItemModel *model)
+* void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
+* void setSelectionMode(QAbstractItemView::SelectionMode mode)
+* void setSelectionModel(QItemSelectionModel *selectionModel)
+* void setTabKeyNavigation(bool enable)
+* void setTextElideMode(Qt::TextElideMode mode)
+* void setVerticalScrollMode(QAbstractItemView::ScrollMode mode)
+* bool showDropIndicator(void)
+* int sizeHintForColumn(int column)
+* QSize sizeHintForIndex(QModelIndex)
+* int sizeHintForRow(int row)
+* bool tabKeyNavigation(void)
+* int textElideMode(void)
+* int verticalScrollMode(void)
+* QRect visualRect(QModelIndex)
+* void clearSelection(void)
+* void edit(QModelIndex)
+* void scrollToBottom(void)
+* void scrollToTop(void)
+* void setCurrentIndex(QModelIndex)
+* void update(QModelIndex)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractPrintDialog Class
+
+QAbstractPrintDialog Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractprintdialog.html
+
+
+Parameters : QPrinter *,QWidget *
+
+
+Parent Class : QDialog
+
+* int fromPage(void)
+* int maxPage(void)
+* int minPage(void)
+* QAbstractPrintDialog::PrintRange printRange(void)
+* QPrinter * printer(void)
+* void setFromTo(int from, int to)
+* void setMinMax(int min, int max)
+* void setOptionTabs(QList<QWidget *> tabs)
+* void setPrintRange(QAbstractPrintDialog::PrintRange range)
+* int toPage(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractScrollArea Class
+
+QAbstractScrollArea Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractscrollarea.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QFrame
+
+* void addScrollBarWidget(QWidget *widget, Qt::AlignmentFlag alignment)
+* QWidget *cornerWidget(void)
+* QScrollBar *horizontalScrollBar(void)
+* int horizontalScrollBarPolicy(void)
+* QSize maximumViewportSize(void)
+* QWidgetList scrollBarWidgets(Qt::AlignmentFlag)
+* void setCornerWidget(QWidget *widget)
+* void setHorizontalScrollBar(QScrollBar *scrollBar)
+* void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy)
+* void setVerticalScrollBar(QScrollBar *scrollBar)
+* void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy)
+* void setViewport(QWidget *widget)
+* QScrollBar *verticalScrollBar(void)
+* int verticalScrollBarPolicy(void)
+* QWidget *viewport(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractSlider Class
+
+QAbstractSlider Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractslider.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool hasTracking(void)
+* bool invertedAppearance(void)
+* bool invertedControls(void)
+* bool isSliderDown(void)
+* int maximum(void)
+* int minimum(void)
+* int orientation(void)
+* int pageStep(void)
+* void setInvertedAppearance(bool)
+* void setInvertedControls(bool)
+* void setMaximum(int)
+* void setMinimum(int)
+* void setPageStep(int)
+* void setSingleStep(int)
+* void setSliderDown(bool)
+* void setSliderPosition(int)
+* void setTracking(bool enable)
+* int singleStep(void)
+* int sliderPosition(void)
+* void triggerAction(QAbstractSlider::SliderAction action)
+* int value(void)
+* void setOrientation(Qt::Orientation)
+* void setRange(int min, int max)
+* void setValue(int)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractSocket Class
+
+QAbstractSocket Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractsocket.html
+
+
+Parameters : void
+
+
+Parent Class : QIODevice
+
+* void abort(void)
+* bool bind(QHostAddress address, int port, QAbstractSocket::BindFlag mode)
+* void connectToHost(QString  hostName, int port, QIODevice::OpenModeFlag openMode, QAbstractSocket::NetworkLayerProtocol protocol)
+* void disconnectFromHost(void)
+* int error(void)
+* bool flush(void)
+* bool isValid(void)
+* QHostAddress localAddress(void)
+* int localPort(void)
+* int pauseMode(void)
+* QHostAddress peerAddress(void)
+* QString peerName(void)
+* int peerPort(void)
+* QNetworkProxy proxy(void)
+* int readBufferSize(void)
+* void resume(void)
+* void setPauseMode(QAbstractSocket::PauseMode pauseMode)
+* void setProxy(QNetworkProxy  networkProxy)
+* void setReadBufferSize(int size)
+* bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState, QIODevice::OpenModeFlag openMode)
+* void setSocketOption(QAbstractSocket::SocketOption option,  QVariant  value)
+* int *socketDescriptor(void)
+* QVariant socketOption(QAbstractSocket::SocketOption option)
+* int socketType(void)
+* int state(void)
+* bool waitForConnected(int msecs)
+* bool waitForDisconnected(int msecs)
+* bool atEnd(void)
+* int bytesAvailable(void)
+* int bytesToWrite(void)
+* bool canReadLine(void)
+* void close(void)
+* bool isSequential(void)
+* bool waitForBytesWritten(int msecs)
+* bool waitForReadyRead(int msecs)
+* void setconnectedEvent(const char *)
+* void setdisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void sethostFoundEvent(const char *)
+* void setproxyAuthenticationRequiredEvent(const char *)
+* void setstateChangedEvent(const char *)
+* const char *getconnectedEvent(void)
+* const char *getdisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *gethostFoundEvent(void)
+* const char *getproxyAuthenticationRequiredEvent(void)
+* const char *getstateChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractSpinBox Class
+
+QAbstractSpinBox Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractspinbox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int alignment(void)
+* int buttonSymbols(void)
+* int correctionMode(void)
+* bool hasAcceptableInput(void)
+* bool hasFrame(void)
+* void interpretText(void)
+* bool isAccelerated(void)
+* bool keyboardTracking(void)
+* void setAccelerated(bool on)
+* void setAlignment(Qt::AlignmentFlag flag)
+* void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs)
+* void setCorrectionMode(QAbstractSpinBox::CorrectionMode cm)
+* void setFrame(bool)
+* void setReadOnly(bool r)
+* void setSpecialValueText(QString)
+* void setWrapping(bool w)
+* QString specialValueText(void)
+* void stepBy(int steps)
+* QString text(void)
+* bool wrapping(void)
+* void clear(void)
+* void selectAll(void)
+* void stepDown(void)
+* void stepUp(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAction Class
+
+QAction Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaction.html
+
+
+Parameters : QWidget *parent
+
+* QActionGroup *actionGroup(void)
+* void activate(QAction::ActionEvent event)
+* bool autoRepeat(void)
+* QVariant data(void)
+* QFont font(void)
+* QIcon icon(void)
+* QString iconText(void)
+* bool isCheckable(void)
+* bool isChecked(void)
+* bool isEnabled(void)
+* bool isIconVisibleInMenu(void)
+* bool isSeparator(void)
+* bool isVisible(void)
+* QMenu *menu(void)
+* int menuRole(void)
+* QWidget *parentWidget(void)
+* int priority(void)
+* void setActionGroup(QActionGroup *group)
+* void setAutoRepeat(bool)
+* void setCheckable(bool)
+* void setData(QVariant)
+* void setFont(QFont)
+* void setIcon(QIcon)
+* void setIconText(QString)
+* void setIconVisibleInMenu(bool visible)
+* void setMenu(QMenu *menu)
+* void setMenuRole(QAction::MenuRole menuRole)
+* void setPriority(QAction::Priority priority)
+* void setSeparator(bool b)
+* void setShortcut(QKeySequence)
+* void setShortcutContext(Qt::ShortcutContext context)
+* void setShortcuts(QKeySequence::StandardKey key)
+* void setStatusTip(QString)
+* void setText(QString)
+* void setToolTip(QString)
+* void setWhatsThis(QString)
+* QKeySequence shortcut(void)
+* int shortcutContext(void)
+* bool showStatusText(QWidget *widget)
+* QString statusTip(void)
+* QString text(void)
+* QString toolTip(void)
+* QString whatsThis(void)
+* void hover(void)
+* void setChecked(bool)
+* void setDisabled(bool)
+* void setEnabled(bool)
+* void setVisible(bool)
+* void toggle(void)
+* void trigger(void)
+* void setClickEvent(const char *)
+* const char *getClickEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAllEvents Class
+
+QAllEvents Class
+================
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void accept(void)
+* void ignore(void)
+* int getKeyCode(void)
+* QString getKeyText(void)
+* int getModifiers(void)
+* int getx(void)
+* int gety(void)
+* int getglobalx(void)
+* int getglobaly(void)
+* int getbutton(void)
+* int getbuttons(void)
+* void setKeyPressEvent(const char *cStr)
+* void setMouseButtonPressEvent(const char *cStr)
+* void setMouseButtonReleaseEvent(const char *cStr)
+* void setMouseButtonDblClickEvent(const char *cStr)
+* void setMouseMoveEvent(const char *cStr)
+* void setCloseEvent(const char *cStr)
+* void setContextMenuEvent(const char *cStr)
+* void setDragEnterEvent(const char *cStr)
+* void setDragLeaveEvent(const char *cStr)
+* void setDragMoveEvent(const char *cStr)
+* void setDropEvent(const char *cStr)
+* void setEnterEvent(const char *cStr)
+* void setFocusInEvent(const char *cStr)
+* void setFocusOutEvent(const char *cStr)
+* void setKeyReleaseEvent(const char *cStr)
+* void setLeaveEvent(const char *cStr)
+* void setNonClientAreaMouseButtonDblClickEvent(const char *cStr)
+* void setNonClientAreaMouseButtonPressEvent(const char *cStr)
+* void setNonClientAreaMouseButtonReleaseEvent(const char *cStr)
+* void setNonClientAreaMouseMoveEvent(const char *cStr)
+* void setMoveEvent(const char *cStr)
+* void setResizeEvent(const char *cStr)
+* void setWindowActivateEvent(const char *cStr)
+* void setWindowBlockedEvent(const char *cStr)
+* void setWindowDeactivateEvent(const char *cStr)
+* void setWindowStateChangeEvent(const char *cStr)
+* void setWindowUnblockedEvent(const char *cStr)
+* void setPaintEvent(const char *cStr)
+* void setChildAddedEvent(const char *cStr)
+* void setChildPolishedEvent(const char *cStr)
+* void setChildRemovedEvent(const char *cStr)
+* const char *getKeyPressEvent(void)
+* const char *getMouseButtonPressEvent(void)
+* const char *getMouseButtonReleaseEvent(void)
+* const char *getMouseButtonDblClickEvent(void)
+* const char *getMouseMoveEvent(void)
+* const char *getCloseEvent(void)
+* const char *getContextMenuEvent(void)
+* const char *getDragEnterEvent(void)
+* const char *getDragLeaveEvent(void)
+* const char *getDragMoveEvent(void)
+* const char *getDropEvent(void)
+* const char *getEnterEvent(void)
+* const char *getFocusInEvent(void)
+* const char *getFocusOutEvent(void)
+* const char *getKeyReleaseEvent(void)
+* const char *getLeaveEvent(void)
+* const char *getNonClientAreaMouseButtonDblClickEvent(void)
+* const char *getNonClientAreaMouseButtonPressEvent(void)
+* const char *getNonClientAreaMouseButtonReleaseEvent(void)
+* const char *getNonClientAreaMouseMoveEvent(void)
+* const char *getMoveEvent(void)
+* const char *getResizeEvent(void)
+* const char *getWindowActivateEvent(void)
+* const char *getWindowBlockedEvent(void)
+* const char *getWindowDeactivateEvent(void)
+* const char *getWindowStateChangeEvent(void)
+* const char *getWindowUnblockedEvent(void)
+* const char *getPaintEvent(void)
+* const char *getChildAddedEvent(void)
+* const char *getChildPolishedEvent(void)
+* const char *getChildRemovedEvent(void)
+* void setEventOutput(bool x)
+* QObject *getParentObject(void)
+* QWidget *getParentWidget(void)
+* void setKeyPressFunc(const char *cStr)
+* void setMouseButtonPressFunc(const char *cStr)
+* void setMouseButtonReleaseFunc(const char *cStr)
+* void setMouseButtonDblClickFunc(const char *cStr)
+* void setMouseMoveFunc(const char *cStr)
+* void setCloseFunc(const char *cStr)
+* void setContextMenuFunc(const char *cStr)
+* void setDragEnterFunc(const char *cStr)
+* void setDragLeaveFunc(const char *cStr)
+* void setDragMoveFunc(const char *cStr)
+* void setDropFunc(const char *cStr)
+* void setEnterFunc(const char *cStr)
+* void setFocusInFunc(const char *cStr)
+* void setFocusOutFunc(const char *cStr)
+* void setKeyReleaseFunc(const char *cStr)
+* void setLeaveFunc(const char *cStr)
+* void setNonClientAreaMouseButtonDblClickFunc(const char *cStr)
+* void setNonClientAreaMouseButtonPressFunc(const char *cStr)
+* void setNonClientAreaMouseButtonReleaseFunc(const char *cStr)
+* void setNonClientAreaMouseMoveFunc(const char *cStr)
+* void setMoveFunc(const char *cStr)
+* void setResizeFunc(const char *cStr)
+* void setWindowActivateFunc(const char *cStr)
+* void setWindowBlockedFunc(const char *cStr)
+* void setWindowDeactivateFunc(const char *cStr)
+* void setWindowStateChangeFunc(const char *cStr)
+* void setWindowUnblockedFunc(const char *cStr)
+* void setPaintFunc(const char *cStr)
+* void setChildAddedFunc(const char *cStr)
+* void setChildPolishedFunc(const char *cStr)
+* void setChildRemovedFunc(const char *cStr)
+* const char *getKeyPressFunc(void)
+* const char *getMouseButtonPressFunc(void)
+* const char *getMouseButtonReleaseFunc(void)
+* const char *getMouseButtonDblClickFunc(void)
+* const char *getMouseMoveFunc(void)
+* const char *getCloseFunc(void)
+* const char *getContextMenuFunc(void)
+* const char *getDragEnterFunc(void)
+* const char *getDragLeaveFunc(void)
+* const char *getDragMoveFunc(void)
+* const char *getDropFunc(void)
+* const char *getEnterFunc(void)
+* const char *getFocusInFunc(void)
+* const char *getFocusOutFunc(void)
+* const char *getKeyReleaseFunc(void)
+* const char *getLeaveFunc(void)
+* const char *getNonClientAreaMouseButtonDblClickFunc(void)
+* const char *getNonClientAreaMouseButtonPressFunc(void)
+* const char *getNonClientAreaMouseButtonReleaseFunc(void)
+* const char *getNonClientAreaMouseMoveFunc(void)
+* const char *getMoveFunc(void)
+* const char *getResizeFunc(void)
+* const char *getWindowActivateFunc(void)
+* const char *getWindowBlockedFunc(void)
+* const char *getWindowDeactivateFunc(void)
+* const char *getWindowStateChangeFunc(void)
+* const char *getWindowUnblockedFunc(void)
+* const char *getPaintFunc(void)
+* const char *getChildAddedFunc(void)
+* const char *getChildPolishedFunc(void)
+* const char *getChildRemovedFunc(void)
+* QDropEvent *getDropEventObject(void)
+* QDragMoveEvent *getDragMoveEventObject(void)
+* QDragEnterEvent *getDragEnterEventObject(void)
+* QDragLeaveEvent *getDragLeaveEventObject(void)
+* QChildEvent *getChildEventObject(void)
+
+.. index::
+       pair: RingQt Classes Reference; QApp Class
+
+QApp Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qapplication.html
+
+
+Parent Class : QGuiApplication
+
+* void exec(void)
+* void quit(void)
+* void processEvents(void)
+* void styleWindows(void)
+* void styleWindowsVista(void)
+* void styleFusion(void)
+* void styleFusionBlack(void)
+* void styleFusionCustom(QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor)
+* void closeAllWindows(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAspectEngine Class
+
+QAspectEngine Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qaspectengine.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QVector<Qt3DCore::QAbstractAspect *> aspects(void)
+* QVariant executeCommand(QString command)
+* void registerAspect(Qt3DCore::QAbstractAspect *aspect)
+* void registerAspect_2(QString name)
+* Qt3DCore::QEntityPtr rootEntity(void)
+* void setRootEntity(Qt3DCore::QEntityPtr root)
+* void unregisterAspect(Qt3DCore::QAbstractAspect *aspect)
+* void unregisterAspect_2(QString name)
+
+.. index::
+       pair: RingQt Classes Reference; QAxBase Class
+
+QAxBase Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaxbase.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QObject
+
+* QVariant asVariant(void)
+* QString control(void)
+* void disableClassInfo(void)
+* void disableEventSink(void)
+* void disableMetaObject(void)
+* QVariant dynamicCall(char *function)
+* QVariant dynamicCall_2(char *function,QVariant)
+* QVariant dynamicCall_3(char *function,QVariant,QVariant)
+* QVariant dynamicCall_4(char *function,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_5(char *function,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_6(char *function,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_7(char *function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_8(char *function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_9(char *function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_10(const char *function, QList<QVariant> )
+* QString generateDocumentation(void)
+* bool isNull(void)
+* QAxObject *querySubObject(const char *name)
+* QAxObject *querySubObject_2(const char *name,QVariant)
+* QAxObject *querySubObject_3(const char *name,QVariant,QVariant)
+* QAxObject *querySubObject_4(const char *name,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_5(const char *name,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_6(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_7(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_8(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_9(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* bool setControl( QString  )
+* QStringList verbs(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAxObject Class
+
+QAxObject Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaxobject.html
+
+
+Parameters : QString
+
+
+Parent Class : QAxBase
+
+* bool doVerb(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QAxWidget Class
+
+QAxWidget Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaxwidget.html
+
+
+Parameters : QWidget *parent, Qt::WindowFlags f
+
+
+Parent Class : QAxBase
+
+* bool doVerb(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QAxWidget2 Class
+
+QAxWidget2 Class
+================
+
+
+Parameters : QString c, QWidget *parent, Qt::WindowFlags f
+
+
+Parent Class : QAxWidget
+
+
+.. index::
+       pair: RingQt Classes Reference; QBitmap Class
+
+QBitmap Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbitmap.html
+
+
+Parameters : void
+
+
+Parent Class : QPixmap
+
+* void clear(void)
+* void swap(QBitmap)
+* QBitmap transformed(QTransform)
+* QBitmap fromData(QSize, const uchar * bits, QImage::Format monoFormat)
+* QBitmap fromImage(QImage, Qt::ImageConversionFlags flags)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothAddress Class
+
+QBluetoothAddress Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothaddress.html
+
+
+Parameters : void
+
+* void clear(void)
+* bool isNull(void)
+* QString toString(void)
+* quint64 toUInt64(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothDeviceDiscoveryAgent Class
+
+QBluetoothDeviceDiscoveryAgent Class
+====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothdevicediscoveryagent.html
+
+
+Parameters : QObject *
+
+* QList<QBluetoothDeviceInfo> discoveredDevices(void)
+* QBluetoothDeviceDiscoveryAgent::Error error(void)
+* QString errorString(void)
+* QBluetoothDeviceDiscoveryAgent::InquiryType inquiryType(void)
+* bool isActive(void)
+* void setInquiryType(QBluetoothDeviceDiscoveryAgent::InquiryType type)
+* void start(void)
+* void stop(void)
+* void setcanceledEvent(const char *)
+* void setdeviceDiscoveredEvent(const char *)
+* void seterrorEvent(const char *)
+* void setfinishedEvent(const char *)
+* const char *getcanceledEvent(void)
+* const char *getdeviceDiscoveredEvent(void)
+* const char *geterrorEvent(void)
+* const char *getfinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothDeviceInfo Class
+
+QBluetoothDeviceInfo Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothdeviceinfo.html
+
+
+Parameters : void
+
+* QBluetoothAddress address(void)
+* bool isValid(void)
+* QBluetoothDeviceInfo::MajorDeviceClass majorDeviceClass(void)
+* quint8 minorDeviceClass(void)
+* QString name(void)
+* qint16 rssi(void)
+* QBluetoothDeviceInfo::ServiceClasses serviceClasses(void)
+* QList<QBluetoothUuid> serviceUuids(QBluetoothDeviceInfo::DataCompleteness *completeness)
+* QBluetoothDeviceInfo::DataCompleteness serviceUuidsCompleteness(void)
+* void setCached(bool cached)
+* void setServiceUuids(QList<QBluetoothUuid> uuids, QBluetoothDeviceInfo::DataCompleteness completeness)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothHostInfo Class
+
+QBluetoothHostInfo Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothhostinfo.html
+
+
+Parameters : void
+
+* QBluetoothAddress address(void)
+* QString name(void)
+* void setAddress(QBluetoothAddress address)
+* void setName(QString name)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothLocalDevice Class
+
+QBluetoothLocalDevice Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothlocaldevice.html
+
+
+Parameters : QObject *
+
+* QBluetoothAddress address(void)
+* QBluetoothLocalDevice::HostMode hostMode(void)
+* bool isValid(void)
+* QString name(void)
+* QBluetoothLocalDevice::Pairing pairingStatus(QBluetoothAddress address)
+* void powerOn(void)
+* void requestPairing(QBluetoothAddress address, QBluetoothLocalDevice::Pairing pairing)
+* void setHostMode(QBluetoothLocalDevice::HostMode mode)
+* void pairingConfirmation(bool accept)
+* QList<QBluetoothHostInfo> allDevices(void)
+* void setdeviceConnectedEvent(const char *)
+* void setdeviceDisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void sethostModeStateChangedEvent(const char *)
+* void setpairingDisplayConfirmationEvent(const char *)
+* void setpairingDisplayPinCodeEvent(const char *)
+* void setpairingFinishedEvent(const char *)
+* const char *getdeviceConnectedEvent(void)
+* const char *getdeviceDisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *gethostModeStateChangedEvent(void)
+* const char *getpairingDisplayConfirmationEvent(void)
+* const char *getpairingDisplayPinCodeEvent(void)
+* const char *getpairingFinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothServer Class
+
+QBluetoothServer Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothserver.html
+
+
+Parameters : QBluetoothServiceInfo::Protocol,QObject *
+
+
+Parent Class : QObject
+
+* void close(void)
+* QBluetoothServer::Error error(void)
+* bool hasPendingConnections(void)
+* bool isListening(void)
+* bool listen(QBluetoothAddress address, quint16 port)
+* QBluetoothServiceInfo listen_2(QBluetoothUuid uuid, QString serviceName))
+* int maxPendingConnections(void)
+* QBluetoothSocket * nextPendingConnection(void)
+* QBluetooth::SecurityFlags securityFlags(void)
+* QBluetoothAddress serverAddress(void)
+* quint16 serverPort(void)
+* QBluetoothServiceInfo::Protocol serverType(void)
+* void setMaxPendingConnections(int numConnections)
+* void setSecurityFlags(QBluetooth::SecurityFlags security)
+* void seterrorEvent(const char *)
+* void setnewConnectionEvent(const char *)
+* const char *geterrorEvent(void)
+* const char *getnewConnectionEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothServiceDiscoveryAgent Class
+
+QBluetoothServiceDiscoveryAgent Class
+=====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothservicediscoveryagent.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QList<QBluetoothServiceInfo> discoveredServices(void)
+* QBluetoothServiceDiscoveryAgent::Error error(void)
+* QString errorString(void)
+* bool isActive(void)
+* QBluetoothAddress remoteAddress(void)
+* bool setRemoteAddress(QBluetoothAddress address)
+* void setUuidFilter(QList<QBluetoothUuid> uuids)
+* void setUuidFilter_2(QBluetoothUuid uuid)
+* QList<QBluetoothUuid> uuidFilter(void)
+* void clear(void)
+* void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode)
+* void stop(void)
+* void setcanceledEvent(const char *)
+* void seterrorEvent(const char *)
+* void setfinishedEvent(const char *)
+* void setserviceDiscoveredEvent(const char *)
+* const char *getcanceledEvent(void)
+* const char *geterrorEvent(void)
+* const char *getfinishedEvent(void)
+* const char *getserviceDiscoveredEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothServiceInfo Class
+
+QBluetoothServiceInfo Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothserviceinfo.html
+
+
+Parameters : void
+
+* QVariant attribute(quint16 attributeId)
+* QList<quint16> attributes(void)
+* bool contains(quint16 attributeId)
+* QBluetoothDeviceInfo device(void)
+* bool isComplete(void)
+* bool isRegistered(void)
+* bool isValid(void)
+* QBluetoothServiceInfo::Sequence protocolDescriptor(QBluetoothUuid::ProtocolUuid protocol)
+* int protocolServiceMultiplexer(void)
+* bool registerService(QBluetoothAddress localAdapter))
+* void removeAttribute(quint16 attributeId)
+* int serverChannel(void)
+* quint8 serviceAvailability(void)
+* QList<QBluetoothUuid> serviceClassUuids(void)
+* QString serviceDescription(void)
+* QString serviceName(void)
+* QString serviceProvider(void)
+* QBluetoothUuid serviceUuid(void)
+* void setAttribute(quint16 attributeId, QVariant value)
+* void setAttribute_2(quint16 attributeId, QBluetoothUuid value)
+* void setAttribute_3(quint16 attributeId, QBluetoothServiceInfo::Sequence value)
+* void setDevice(QBluetoothDeviceInfo device)
+* void setServiceAvailability(quint8 availability)
+* void setServiceDescription(QString description)
+* void setServiceName(QString name)
+* void setServiceProvider(QString provider)
+* void setServiceUuid(QBluetoothUuid uuid)
+* bool unregisterService(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothSocket Class
+
+QBluetoothSocket Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothsocket.html
+
+
+Parameters : QBluetoothServiceInfo::Protocol,QObject *
+
+
+Parent Class : QIODevice
+
+* void abort(void)
+* void connectToService(QBluetoothServiceInfo service, QIODevice::OpenMode openMode)
+* void connectToService_2(QBluetoothAddress address, QBluetoothUuid uuid, QIODevice::OpenMode openMode)
+* void connectToService_3(QBluetoothAddress address, quint16 port, QIODevice::OpenMode openMode)
+* void disconnectFromService(void)
+* QBluetoothSocket::SocketError error(void)
+* QString errorString(void)
+* QBluetoothAddress localAddress(void)
+* QString localName(void)
+* quint16 localPort(void)
+* QBluetoothAddress peerAddress(void)
+* QString peerName(void)
+* quint16 peerPort(void)
+* bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState, QIODevice::OpenMode openMode)
+* int socketDescriptor(void)
+* QBluetoothServiceInfo::Protocol socketType(void)
+* QBluetoothSocket::SocketState state(void)
+* void setconnectedEvent(const char *)
+* void setdisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void setstateChangedEvent(const char *)
+* const char *getconnectedEvent(void)
+* const char *getdisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *getstateChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothTransferManager Class
+
+QBluetoothTransferManager Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothtransfermanager.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QBluetoothTransferReply * put(QBluetoothTransferRequest request, QIODevice *data)
+* void setfinishedEvent(const char *)
+* const char *getfinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothTransferReply Class
+
+QBluetoothTransferReply Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothtransferreply.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QBluetoothTransferManager * manager(void)
+* QBluetoothTransferRequest request(void)
+* void abort(void)
+* void seterrorEvent(const char *)
+* void setfinishedEvent(const char *)
+* void settransferProgressEvent(const char *)
+* const char *geterrorEvent(void)
+* const char *getfinishedEvent(void)
+* const char *gettransferProgressEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothTransferRequest Class
+
+QBluetoothTransferRequest Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothtransferrequest.html
+
+
+Parameters : QBluetoothAddress
+
+* QBluetoothAddress address(void)
+* QVariant attribute(QBluetoothTransferRequest::Attribute code, QVariant defaultValue))
+* void setAttribute(QBluetoothTransferRequest::Attribute code, QVariant value)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothUuid Class
+
+QBluetoothUuid Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothuuid.html
+
+
+Parameters : void
+
+
+Parent Class : QUuid
+
+* int minimumSize(void)
+* quint16 toUInt16(bool *ok)
+* quint32 toUInt32(bool *ok)
+* quint128 toUInt128(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBoxLayout Class
+
+QBoxLayout Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qboxlayout.html
+
+
+Parameters : QBoxLayout::Direction dir, QWidget *parent
+
+
+Parent Class : QLayout
+
+* void  addLayout(QLayout * layout, int stretch )
+* void  addSpacerItem(QSpacerItem * spacerItem)
+* void  addSpacing(int size)
+* void  addStretch(int stretch )
+* void  addStrut(int size)
+* void  addWidget(QWidget * widget, int stretch , Qt::Alignment alignment )
+* QBoxLayout::Direction  direction(void)
+* void  insertLayout(int index, QLayout * layout, int stretch )
+* void  insertSpacerItem(int index, QSpacerItem * spacerItem)
+* void  insertSpacing(int index, int size)
+* void  insertStretch(int index, int stretch )
+* void  insertWidget(int index, QWidget * widget, int stretch , Qt::Alignment alignment )
+* void  setDirection(QBoxLayout::Direction direction)
+* void  setSpacing(int spacing)
+* void  setStretch(int index, int stretch)
+* bool  setStretchFactor(QWidget * widget, int stretch)
+* bool  setStretchFactor_2(QLayout * layout, int stretch)
+* int  spacing(void)
+* int  stretch(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QBrush Class
+
+QBrush Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbrush.html
+
+
+Parameters : void
+
+* QColor color(void)
+* QGradient *gradient(void)
+* bool isOpaque(void)
+* QMatrix matrix(void)
+* void setColor(QColor)
+* void setMatrix(QMatrix)
+* void setStyle(Qt::BrushStyle style)
+* void setTexture(QPixmap)
+* void setTextureImage(QImage)
+* void setTransform(QTransform)
+* int style(void)
+* void swap(QBrush)
+* QPixmap texture(void)
+* QImage textureImage(void)
+* QTransform transform(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBuffer Class
+
+QBuffer Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbuffer.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QIODevice
+
+* QByteArray buffer(void)
+* QByteArray data(void)
+* void setBuffer(QByteArray *byteArray)
+* void setData(QByteArray data)
+* void setData_2(char *data, int size)
+
+.. index::
+       pair: RingQt Classes Reference; QButtonGroup Class
+
+QButtonGroup Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbuttongroup.html
+
+
+Parameters : QObject *parent
+
+* void addButton(QAbstractButton *button, int id)
+* QAbstractButton *button(int id)
+* QAbstractButton *checkedButton(void)
+* int checkedId(void)
+* bool exclusive(void)
+* int id(QAbstractButton *button)
+* void removeButton(QAbstractButton *button)
+* void setExclusive(bool)
+* void setId(QAbstractButton *button, int id)
+* void setbuttonClickedEvent(const char *)
+* void setbuttonPressedEvent(const char *)
+* void setbuttonReleasedEvent(const char *)
+* const char *getbuttonClickedEvent(void)
+* const char *getbuttonPressedEvent(void)
+* const char *getbuttonReleasedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QByteArray Class
+
+QByteArray Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbytearray.html
+
+
+Parameters : void
+
+* QByteArray append(const char *str)
+* char at(int i)
+* int capacity(void)
+* void chop(int n)
+* void clear(void)
+* const char *constData(void)
+* bool contains(const char *str)
+* int count(const char *str)
+* const char *data(void)
+* bool endsWith(const char *str)
+* QByteArray fill(char ch, int size)
+* int indexOf(const char *str, int from)
+* QByteArray insert(int i, const char *str, int len)
+* bool isEmpty(void)
+* bool isNull(void)
+* int lastIndexOf(const char *str, int from)
+* QByteArray left(int len)
+* QByteArray leftJustified(int width, char fill, bool truncate)
+* int length(void)
+* QByteArray mid(int pos, int len)
+* QByteArray prepend(const char *str, int len)
+* void push_back(const char *str)
+* void push_front(const char *str)
+* QByteArray remove(int pos, int len)
+* QByteArray repeated(int times)
+* QByteArray  replace(int pos, int len, const char *after, int alen)
+* void reserve(int size)
+* void resize(int size)
+* QByteArray right(int len)
+* QByteArray rightJustified(int width, char fill, bool truncate)
+* QByteArray setNum(int n, int base)
+* QByteArray setRawData(const char *data, uint size)
+* QByteArray simplified(void)
+* int size(void)
+* void squeeze(void)
+* bool startsWith(const char *str)
+* void swap(QByteArray other)
+* QByteArray toBase64(void)
+* double toDouble(bool * ok)
+* float toFloat(bool * ok)
+* QByteArray toHex(void)
+* int toInt(bool *ok, int base)
+* long toLong(bool *ok, int base)
+* qlonglong toLongLong(bool *ok, int base)
+* QByteArray toLower(void)
+* QByteArray toPercentEncoding(QByteArray,QByteArray, char percent)
+* short toShort(bool *ok, int base)
+* int toUInt(bool *ok, int base)
+* int toULong(bool *ok, int base)
+* int toULongLong(bool * ok, int base)
+* int toUShort(bool * ok, int base)
+* QByteArray toUpper(void)
+* QByteArray trimmed(void)
+* void truncate(int pos)
+* QByteArray fromBase64(QByteArray)
+* QByteArray fromHex(QByteArray)
+* QByteArray fromPercentEncoding(QByteArray, char percent)
+* QByteArray fromRawData(const char *data, int size)
+* QByteArray number(int n, int base)
+
+.. index::
+       pair: RingQt Classes Reference; QCalendarWidget Class
+
+QCalendarWidget Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcalendarwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* int dateEditAcceptDelay(void)
+* QMap<QDate, QTextCharFormat> dateTextFormat(void)
+* QTextCharFormat dateTextFormat_2(QDate date)
+* Qt::DayOfWeek firstDayOfWeek(void)
+* QTextCharFormat headerTextFormat(void)
+* QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat(void)
+* bool isDateEditEnabled(void)
+* bool isGridVisible(void)
+* bool isNavigationBarVisible(void)
+* QDate maximumDate(void)
+* QDate minimumDate(void)
+* int monthShown(void)
+* QDate selectedDate(void)
+* QCalendarWidget::SelectionMode selectionMode(void)
+* void setDateEditAcceptDelay(int delay)
+* void setDateEditEnabled(bool enable)
+* void setDateTextFormat(QDate date, QTextCharFormat format)
+* void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
+* void setHeaderTextFormat(QTextCharFormat format)
+* void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
+* void setMaximumDate(QDate date)
+* void setMinimumDate(QDate date)
+* void setSelectionMode(QCalendarWidget::SelectionMode mode)
+* void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)
+* void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, QTextCharFormat format)
+* QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat(void)
+* QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek)
+* int yearShown(void)
+* void setCurrentPage(int year, int month)
+* void setDateRange(QDate min, QDate max)
+* void setGridVisible(bool show)
+* void setNavigationBarVisible(bool visible)
+* void setSelectedDate(QDate date)
+* void showNextMonth(void)
+* void showNextYear(void)
+* void showPreviousMonth(void)
+* void showPreviousYear(void)
+* void showSelectedDate(void)
+* void showToday(void)
+* void setactivatedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setcurrentPageChangedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* const char *getactivatedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getcurrentPageChangedEvent(void)
+* const char *getselectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QCamera Class
+
+QCamera Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcamera.html
+
+
+Parameters : void
+
+
+Parent Class : QMediaObject
+
+* QCamera::CaptureModes captureMode(void)
+* QCamera::Error error(void)
+* QString errorString(void)
+* QCameraExposure * exposure(void)
+* QCameraFocus * focus(void)
+* QCameraImageProcessing * imageProcessing(void)
+* bool isCaptureModeSupported(QCamera::CaptureModes mode)
+* QCamera::LockStatus lockStatus(void)
+* QCamera::LockStatus lockStatus_2(QCamera::LockType lockType)
+* QCamera::LockTypes requestedLocks(void)
+* void setViewfinder(QVideoWidget * viewfinder)
+* void setViewfinder_2(QGraphicsVideoItem * viewfinder)
+* void setViewfinder_3(QAbstractVideoSurface * surface)
+* QCamera::State state(void)
+* QCamera::Status status(void)
+* QCamera::LockTypes supportedLocks(void)
+* void load(void)
+* void searchAndLock(void)
+* void searchAndLock_2(QCamera::LockTypes locks)
+* void setCaptureMode(QCamera::CaptureModes mode)
+* void start(void)
+* void stop(void)
+* void unload(void)
+* void unlock(void)
+* void unlock_2(QCamera::LockTypes locks)
+
+.. index::
+       pair: RingQt Classes Reference; QCameraImageCapture Class
+
+QCameraImageCapture Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcameraimagecapture.html
+
+
+Parameters : QMediaObject * mediaObject
+
+* QMultimedia::AvailabilityStatus availability(void)
+* QVideoFrame::PixelFormat bufferFormat(void)
+* QCameraImageCapture::CaptureDestinations captureDestination(void)
+* QImageEncoderSettings encodingSettings(void)
+* QCameraImageCapture::Error error(void)
+* QString errorString(void)
+* QString imageCodecDescription( QString   codec)
+* bool isAvailable(void)
+* bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination)
+* bool isReadyForCapture(void)
+* void setBufferFormat( QVideoFrame::PixelFormat format)
+* void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination)
+* void setEncodingSettings( QImageEncoderSettings   settings)
+* QList<QVideoFrame::PixelFormat> supportedBufferFormats(void)
+* QStringList supportedImageCodecs(void)
+* QList<QSize> supportedResolutions( QImageEncoderSettings   settings , bool * continuous )
+* void cancelCapture(void)
+* int capture( QString   file )
+
+.. index::
+       pair: RingQt Classes Reference; QCameraLens Class
+
+QCameraLens Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcameralens.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float aspectRatio(void)
+* float bottom(void)
+* float exposure(void)
+* float farPlane(void)
+* float fieldOfView(void)
+* float left(void)
+* float nearPlane(void)
+* QMatrix4x4 projectionMatrix(void)
+* Qt3DRender::QCameraLens::ProjectionType projectionType(void)
+* float right(void)
+* void setFrustumProjection(float left, float right, float bottom, float top, float nearPlane, float farPlane)
+* void setOrthographicProjection(float left, float right, float bottom, float top, float nearPlane, float farPlane)
+* void setPerspectiveProjection(float fieldOfView, float aspectRatio, float nearPlane, float farPlane)
+* float top(void)
+* void setBottom(float bottom)
+* void setExposure(float exposure)
+* void setFarPlane(float farPlane)
+* void setFieldOfView(float fieldOfView)
+* void setLeft(float left)
+* void setNearPlane(float nearPlane)
+* void setProjectionMatrix(QMatrix4x4 projectionMatrix)
+* void setProjectionType(Qt3DRender::QCameraLens::ProjectionType projectionType)
+* void setRight(float right)
+* void setTop(float top)
+
+.. index::
+       pair: RingQt Classes Reference; QCameraSelector Class
+
+QCameraSelector Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcameraselector .html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DCore::QEntity * camera(void)
+* void setCamera(Qt3DCore::QEntity *camera)
+
+.. index::
+       pair: RingQt Classes Reference; QCameraViewfinder Class
+
+QCameraViewfinder Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcameraviewfinder.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QVideoWidget
+
+
+.. index::
+       pair: RingQt Classes Reference; QChar Class
+
+QChar Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qchar.html
+
+
+Parameters : int
+
+* QChar::Category category(void)
+* uchar cell(void)
+* unsigned char combiningClass(void)
+* QString decomposition(void)
+* QChar::Decomposition decompositionTag(void)
+* int digitValue(void)
+* QChar::Direction direction(void)
+* bool hasMirrored(void)
+* bool isDigit(void)
+* bool isHighSurrogate(void)
+* bool isLetter(void)
+* bool isLetterOrNumber(void)
+* bool isLowSurrogate(void)
+* bool isLower(void)
+* bool isMark(void)
+* bool isNonCharacter(void)
+* bool isNull(void)
+* bool isNumber(void)
+* bool isPrint(void)
+* bool isPunct(void)
+* bool isSpace(void)
+* bool isSurrogate(void)
+* bool isSymbol(void)
+* bool isTitleCase(void)
+* bool isUpper(void)
+* QChar mirroredChar(void)
+* uchar row(void)
+* QChar::Script script(void)
+* QChar toCaseFolded(void)
+* char toLatin1(void)
+* QChar toLower(void)
+* QChar toTitleCase(void)
+* QChar toUpper(void)
+* ushort unicode(void)
+* ushort unicode_2(void)
+* QChar::UnicodeVersion unicodeVersion(void)
+* QChar::Category category_2(uint ucs4)
+* unsigned char combiningClass_2(uint ucs4)
+* QChar::UnicodeVersion currentUnicodeVersion(void)
+* QString decomposition_2(uint ucs4)
+* QChar::Decomposition decompositionTag_2(uint ucs4)
+* int digitValue_2(uint ucs4)
+* QChar::Direction direction_2(uint ucs4)
+* QChar fromLatin1(char c)
+* bool hasMirrored_2(uint ucs4)
+* ushort highSurrogate(uint ucs4)
+* bool isDigit_2(uint ucs4)
+* bool isHighSurrogate_2(uint ucs4)
+* bool isLetter_2(uint ucs4)
+* bool isLetterOrNumber_2(uint ucs4)
+* bool isLowSurrogate_2(uint ucs4)
+* bool isLower_2(uint ucs4)
+* bool isMark_2(uint ucs4)
+* bool isNonCharacter_2(uint ucs4)
+* bool isNumber_2(uint ucs4)
+* bool isPrint_2(uint ucs4)
+* bool isPunct_2(uint ucs4)
+* bool isSpace_2(uint ucs4)
+* bool isSurrogate_2(uint ucs4)
+* bool isSymbol_2(uint ucs4)
+* bool isTitleCase_2(uint ucs4)
+* bool isUpper_2(uint ucs4)
+* ushort lowSurrogate(uint ucs4)
+* uint mirroredChar_2(uint ucs4)
+* bool requiresSurrogates(uint ucs4)
+* QChar::Script script_2(uint ucs4)
+* uint surrogateToUcs4(ushort high, ushort low)
+* uint surrogateToUcs4_2(QChar high, QChar low)
+* uint toCaseFolded_2(uint ucs4)
+* uint toLower_2(uint ucs4)
+* uint toTitleCase_2(uint ucs4)
+* uint toUpper_2(uint ucs4)
+* QChar::UnicodeVersion unicodeVersion_2(uint ucs4)
+
+.. index::
+       pair: RingQt Classes Reference; QCheckBox Class
+
+QCheckBox Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcheckbox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractButton
+
+* int checkState(void)
+* bool isTristate(void)
+* void setCheckState(Qt::CheckState state)
+* void setTristate(bool y)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setstateChangedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setpressedEvent(const char *)
+* void setreleasedEvent(const char *)
+* void settoggledEvent(const char *)
+* const char *getstateChangedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getpressedEvent(void)
+* const char *getreleasedEvent(void)
+* const char *gettoggledEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QChildEvent Class
+
+QChildEvent Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qchildevent.html
+
+
+Parameters : QEvent::Type,QObject *
+
+
+Parent Class : QEvent
+
+* bool added(void)
+* QObject *child(void)
+* bool polished(void)
+* bool removed(void)
+
+.. index::
+       pair: RingQt Classes Reference; QClipboard Class
+
+QClipboard Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qclipboard.html
+
+* void clear(QClipboard::Mode mode)
+* QImage image(QClipboard::Mode mode)
+* QMimeData * mimeData(QClipboard::Mode mode)
+* bool ownsClipboard(void)
+* bool ownsFindBuffer(void)
+* bool ownsSelection(void)
+* QPixmap pixmap(QClipboard::Mode mode)
+* void setImage(QImage image, QClipboard::Mode mode)
+* void setMimeData(QMimeData * src, QClipboard::Mode mode)
+* void setPixmap(QPixmap pixmap, QClipboard::Mode mode)
+* void setText(QString text, QClipboard::Mode mode)
+* bool supportsFindBuffer(void)
+* bool supportsSelection(void)
+* QString text(QClipboard::Mode mode)
+
+.. index::
+       pair: RingQt Classes Reference; QColor Class
+
+QColor Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcolor.html
+
+
+Parameters : void
+
+* int alpha(void)
+* double alphaF(void)
+* int black(void)
+* double blackF(void)
+* int blue(void)
+* double blueF(void)
+* QColor convertTo(QColor::Spec colorSpec)
+* int cyan(void)
+* double cyanF(void)
+* QColor darker(int factor)
+* void getCmyk(int *c, int *m, int *y, int *k, int *a)
+* void getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *a)
+* void getHsl(int *h, int *s, int *l, int *a)
+* void getHslF(qreal *h, qreal *s, qreal *l, qreal *a)
+* void getHsv(int *h, int *s, int *v, int *a)
+* void getHsvF(qreal *h, qreal *s, qreal *v, qreal *a)
+* void getRgb(int *r, int *g, int *b, int *a)
+* void getRgbF(qreal *r, qreal *g, qreal *b, qreal *a)
+* int green(void)
+* double greenF(void)
+* int hslHue(void)
+* double hslHueF(void)
+* int hslSaturation(void)
+* double hslSaturationF(void)
+* int hsvHue(void)
+* double hsvHueF(void)
+* int hsvSaturation(void)
+* double hsvSaturationF(void)
+* int hue(void)
+* double hueF(void)
+* bool isValid(void)
+* QColor lighter(int factor)
+* int lightness(void)
+* double lightnessF(void)
+* int magenta(void)
+* double magentaF(void)
+* QString name(void)
+* int red(void)
+* double redF(void)
+* QRgb rgb(void)
+* QRgb rgba(void)
+* int saturation(void)
+* double saturationF(void)
+* void setAlpha(int alpha)
+* void setAlphaF(double alpha)
+* void setBlue(int blue)
+* void setBlueF(double blue)
+* void setCmyk(int c, int m, int y, int k, int a)
+* void setCmykF(double c, double m, double y, double k, double a)
+* void setGreen(int green)
+* void setGreenF(double green)
+* void setHsl(int h, int s, int l, int a)
+* void setHslF(double h, double s, double l, double a)
+* void setHsv(int h, int s, int v, int a)
+* void setHsvF(double h, double s, double v, double a)
+* void setNamedColor(QString)
+* void setRed(int red)
+* void setRedF(double red)
+* void setRgb(int r, int g, int b, int a)
+* void setRgbF(double r, double g, double b, double a)
+* void setRgba(QRgb rgba)
+* int spec(void)
+* QColor toCmyk(void)
+* QColor toHsl(void)
+* QColor toHsv(void)
+* QColor toRgb(void)
+* int value(void)
+* double valueF(void)
+* int yellow(void)
+* double yellowF(void)
+* QStringList colorNames(void)
+* QColor fromCmyk(int c, int m, int y, int k, int a)
+* QColor fromCmykF(double c, double m, double y, double k, double a)
+* QColor fromHsl(int h, int s, int l, int a)
+* QColor fromHslF(double h, double s, double l, double a)
+* QColor fromHsv(int h, int s, int v, int a)
+* QColor fromHsvF(double h, double s, double v, double a)
+* QColor fromRgb(int r, int g, int b, int a)
+* QColor fromRgbF(double r, double g, double b, double a)
+* QColor fromRgba(QRgb rgba)
+* bool isValidColor(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QColorDialog Class
+
+QColorDialog Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcolordialog.html
+
+
+Parameters : void
+
+
+Parent Class : QDialog
+
+* QColor currentColor(void)
+* void open(void)
+* int options(void)
+* QColor selectedColor(void)
+* void setCurrentColor(QColor)
+* void setOption(QColorDialog::ColorDialogOption option, bool on )
+* void setOptions(QColorDialog::ColorDialogOption options)
+* bool testOption(QColorDialog::ColorDialogOption option)
+* QColor customColor(int index)
+* int customCount(void)
+* void setCustomColor(int index, int color)
+* void setStandardColor(int index, int color)
+* int getcolor(void)
+
+.. index::
+       pair: RingQt Classes Reference; QComboBox Class
+
+QComboBox Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcombobox.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void addItem(QString,int)
+* QCompleter *completer(void)
+* int count(void)
+* int currentIndex(void)
+* QString currentText(void)
+* bool duplicatesEnabled(void)
+* int findData(QVariant, int role, Qt::MatchFlag flags)
+* int findText(QString, Qt::MatchFlag flags)
+* bool hasFrame(void)
+* void hidePopup(void)
+* QSize iconSize(void)
+* void insertItem(int index, QString, QVariant)
+* bool isEditable(void)
+* QVariant itemData(int index, int role)
+* QAbstractItemDelegate *itemDelegate(void)
+* QIcon itemIcon(int index)
+* QString itemText(int index)
+* QLineEdit *lineEdit(void)
+* int maxCount(void)
+* int maxVisibleItems(void)
+* int minimumContentsLength(void)
+* QAbstractItemModel *model(void)
+* int modelColumn(void)
+* void removeItem(int index)
+* QModelIndex rootModelIndex(void)
+* void setCompleter(QCompleter *completer)
+* void setDuplicatesEnabled(bool enable)
+* void setEditable(bool editable)
+* void setFrame(bool)
+* void setIconSize(QSize)
+* void setItemDelegate(QAbstractItemDelegate *delegate)
+* void setItemIcon(int index, QIcon)
+* void setItemText(int index, QString)
+* void setLineEdit(QLineEdit *edit)
+* void setMaxCount(int max)
+* void setMaxVisibleItems(int maxItems)
+* void setMinimumContentsLength(int characters)
+* void setModel(QAbstractItemModel *model)
+* void setModelColumn(int visibleColumn)
+* void setRootModelIndex(QModelIndex)
+* void setView(QAbstractItemView *itemView)
+* void showPopup(void)
+* QAbstractItemView *view(void)
+* void clear(void)
+* void clearEditText(void)
+* void setCurrentIndex(int index)
+* void setEditText(QString)
+* void setactivatedEvent(const char *)
+* void setcurrentIndexChangedEvent(const char *)
+* void seteditTextChangedEvent(const char *)
+* void sethighlightedEvent(const char *)
+* const char *getactivatedEvent(void)
+* const char *getcurrentIndexChangedEvent(void)
+* const char *geteditTextChangedEvent(void)
+* const char *gethighlightedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QCompleter Class
+
+QCompleter Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcompleter.html
+
+
+Parameters : QObject *parent
+
+
+Parent Class : QObject
+
+* Qt::CaseSensitivity caseSensitivity(void)
+* int completionColumn(void)
+* int completionCount(void)
+* QCompleter::CompletionMode completionMode(void)
+* QAbstractItemModel *completionModel(void)
+* QString completionPrefix(void)
+* int completionRole(void)
+* QString currentCompletion(void)
+* QModelIndex currentIndex(void)
+* int currentRow(void)
+* Qt::MatchFlags filterMode(void)
+* int maxVisibleItems(void)
+* QAbstractItemModel * model(void)
+* QCompleter::ModelSorting modelSorting(void)
+* QAbstractItemView * popup(void)
+* void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
+* void setCompletionColumn(int column)
+* void setCompletionMode(QCompleter::CompletionMode mode)
+* void setCompletionRole(int role)
+* bool setCurrentRow(int row)
+* void setFilterMode(Qt::MatchFlags filterMode)
+* void setMaxVisibleItems(int maxItems)
+* void setModel(QAbstractItemModel *model)
+* void setModelSorting(QCompleter::ModelSorting sorting)
+* void setPopup(QAbstractItemView *popup)
+* void setWidget(QWidget *widget)
+* QWidget * widget(void)
+* bool wrapAround(void)
+* void complete(QRect  rect)
+* void setCompletionPrefix(QString prefix)
+* void setWrapAround(bool wrap)
+
+.. index::
+       pair: RingQt Classes Reference; QCompleter2 Class
+
+QCompleter2 Class
+=================
+
+
+Parameters : QAbstractItemModel *model, QObject *parent
+
+
+Parent Class : QCompleter
+
+
+.. index::
+       pair: RingQt Classes Reference; QCompleter3 Class
+
+QCompleter3 Class
+=================
+
+
+Parameters : QStringList list, QObject *parent
+
+
+Parent Class : QCompleter
+
+
+.. index::
+       pair: RingQt Classes Reference; QConeGeometry Class
+
+QConeGeometry Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qconegeometry.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float bottomRadius(void)
+* bool hasBottomEndcap(void)
+* bool hasTopEndcap(void)
+* Qt3DRender::QAttribute * indexAttribute(void)
+* float length(void)
+* Qt3DRender::QAttribute * normalAttribute(void)
+* Qt3DRender::QAttribute * positionAttribute(void)
+* int rings(void)
+* int slices(void)
+* Qt3DRender::QAttribute * texCoordAttribute(void)
+* float topRadius(void)
+* void updateIndices(void)
+* void updateVertices(void)
+* void setBottomRadius(float bottomRadius)
+* void setHasBottomEndcap(bool hasBottomEndcap)
+* void setHasTopEndcap(bool hasTopEndcap)
+* void setLength(float length)
+* void setRings(int rings)
+* void setSlices(int slices)
+* void setTopRadius(float topRadius)
+
+.. index::
+       pair: RingQt Classes Reference; QConeMesh Class
+
+QConeMesh Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qconemesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float bottomRadius(void)
+* bool hasBottomEndcap(void)
+* bool hasTopEndcap(void)
+* float length(void)
+* int rings(void)
+* int slices(void)
+* float topRadius(void)
+* void setBottomRadius(float bottomRadius)
+* void setHasBottomEndcap(bool hasBottomEndcap)
+* void setHasTopEndcap(bool hasTopEndcap)
+* void setLength(float length)
+* void setRings(int rings)
+* void setSlices(int slices)
+* void setTopRadius(float topRadius)
+
+.. index::
+       pair: RingQt Classes Reference; QCoreApplication Class
+
+QCoreApplication Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcoreapplication.html
+
+
+Parent Class : QObject
+
+* void installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
+* void removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
+* void quit(void)
+* void addLibraryPath(QString path)
+* QString applicationDirPath(void)
+* QString applicationFilePath(void)
+* QString applicationName(void)
+* qint64 applicationPid(void)
+* QString applicationVersion(void)
+* QStringList arguments(void)
+* bool closingDown(void)
+* QAbstractEventDispatcher * eventDispatcher(void)
+* int exec(void)
+* void exit(int returnCode)
+* bool installTranslator(QTranslator *translationFile)
+* QCoreApplication * instance(void)
+* bool isQuitLockEnabled(void)
+* QStringList libraryPaths(void)
+* QString organizationDomain(void)
+* QString organizationName(void)
+* void postEvent(QObject *receiver, QEvent *event, int priority)
+* void processEvents(QEventLoop::ProcessEventsFlags flags)
+* void processEvents_2(QEventLoop::ProcessEventsFlags flags, int maxtime)
+* void removeLibraryPath(QString path)
+* void removePostedEvents(QObject *receiver, int eventType)
+* bool removeTranslator(QTranslator *translationFile)
+* bool sendEvent(QObject *receiver, QEvent *event)
+* void sendPostedEvents(QObject *receiver, int event_type)
+* void setApplicationName(QString application)
+* void setApplicationVersion(QString version)
+* void setAttribute(Qt::ApplicationAttribute attribute, bool on)
+* void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
+* void setLibraryPaths(QStringList paths)
+* void setOrganizationDomain(QString orgDomain)
+* void setOrganizationName(QString orgName)
+* void setQuitLockEnabled(bool enabled)
+* bool startingUp(void)
+* bool testAttribute(Qt::ApplicationAttribute attribute)
+* QString translate(char *context, char *sourceText, char *disambiguation, int n)
+
+.. index::
+       pair: RingQt Classes Reference; QCuboidMesh Class
+
+QCuboidMesh Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qcuboidmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float xExtent(void)
+* QSize xyMeshResolution(void)
+* QSize xzMeshResolution(void)
+* float yExtent(void)
+* QSize yzMeshResolution(void)
+* float zExtent(void)
+* void setXExtent(float xExtent)
+* void setXYMeshResolution(QSize resolution)
+* void setXZMeshResolution(QSize resolution)
+* void setYExtent(float yExtent)
+* void setYZMeshResolution(QSize resolution)
+* void setZExtent(float zExtent)
+
+.. index::
+       pair: RingQt Classes Reference; QCullFace Class
+
+QCullFace Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcullface.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DRender::QCullFace::CullingMode mode(void)
+* void setMode(Qt3DRender::QCullFace::CullingMode mode)
+
+.. index::
+       pair: RingQt Classes Reference; QCursor Class
+
+QCursor Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcursor.html
+
+
+Parameters : void
+
+* QBitmap *bitmap(void)
+* QPoint hotSpot(void)
+* QBitmap *mask(void)
+* QPixmap pixmap(void)
+* void setShape(Qt::CursorShape shape)
+* Qt::CursorShape shape(void)
+* QPoint pos(void)
+* QPoint pos_2(QScreen *)
+* void setPos(int x, int y)
+* void setPos_2(QScreen *screen, int x, int y)
+* void setPos_3(QPoint)
+* void setPos_4(QScreen *screen, QPoint)
+
+.. index::
+       pair: RingQt Classes Reference; QCylinderMesh Class
+
+QCylinderMesh Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qcylindermesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float length(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setLength(float length)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt Classes Reference; QDate Class
+
+QDate Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdate.html
+
+
+Parameters : void
+
+* QDate addDays(int ndays)
+* QDate addMonths(int nmonths)
+* QDate addYears(int nyears)
+* int day(void)
+* int dayOfWeek(void)
+* int dayOfYear(void)
+* int daysInMonth(void)
+* int daysInYear(void)
+* int daysTo(QDate)
+* void getDate(int * year, int * month, int * day)
+* bool isNull(void)
+* bool isValid(void)
+* int month(void)
+* bool setDate(int year, int month, int day)
+* int toJulianDay(void)
+* QString toString(QString)
+* int weekNumber(int * yearNumber)
+* int year(void)
+* QDate currentDate(void)
+* QDate fromJulianDay(int jd)
+* QDate fromString(QString, QString)
+* bool isLeapYear(int year)
+* QString longDayName(int weekday)
+* QString longMonthName(int month)
+* QString shortDayName(int weekday)
+* QString shortMonthName(int month)
+
+.. index::
+       pair: RingQt Classes Reference; QDateEdit Class
+
+QDateEdit Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdateedit.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QDateTimeEdit
+
+
+.. index::
+       pair: RingQt Classes Reference; QDateTime Class
+
+QDateTime Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdatetime.html
+
+
+Parameters : void
+
+* QDateTime addDays(int ndays)
+* QDateTime addMSecs(qint64 msecs)
+* QDateTime addMonths(int nmonths)
+* QDateTime addSecs(int s)
+* QDateTime addYears(int nyears)
+* QDate date(void)
+* int daysTo(QDateTime other)
+* bool isNull(void)
+* bool isValid(void)
+* qint64 msecsTo(QDateTime other)
+* int secsTo(QDateTime other)
+* void setDate(QDate date)
+* void setMSecsSinceEpoch(qint64 msecs)
+* void setTime(QTime time)
+* void setTimeSpec(Qt::TimeSpec spec)
+* void setTime_t(uint seconds)
+* QTime time(void)
+* Qt::TimeSpec timeSpec(void)
+* QDateTime toLocalTime(void)
+* qint64 toMSecsSinceEpoch(void)
+* QString toString(QString format)
+* QString toString_2(Qt::DateFormat format)
+* QDateTime toTimeSpec(Qt::TimeSpec specification)
+* uint toTime_t(void)
+* QDateTime toUTC(void)
+* QDateTime currentDateTime(void)
+* QDateTime currentDateTimeUtc(void)
+* qint64 currentMSecsSinceEpoch(void)
+* QDateTime fromMSecsSinceEpoch(qint64 msecs)
+* QDateTime fromString(QString string, Qt::DateFormat format)
+* QDateTime fromString_2(QString string, QString format)
+* QDateTime fromTime_t(uint seconds)
+
+.. index::
+       pair: RingQt Classes Reference; QDateTimeEdit Class
+
+QDateTimeEdit Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdatetimeedit.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSpinBox
+
+* bool calendarPopup(void)
+* QCalendarWidget *calendarWidget(void)
+* void clearMaximumDate(void)
+* void clearMaximumDateTime(void)
+* void clearMaximumTime(void)
+* void clearMinimumDate(void)
+* void clearMinimumDateTime(void)
+* void clearMinimumTime(void)
+* int currentSection(void)
+* int currentSectionIndex(void)
+* QDate date(void)
+* QDateTime dateTime(void)
+* QString displayFormat(void)
+* int displayedSections(void)
+* QDate maximumDate(void)
+* QDateTime maximumDateTime(void)
+* QTime maximumTime(void)
+* QDate minimumDate(void)
+* QDateTime minimumDateTime(void)
+* QTime minimumTime(void)
+* int sectionAt(int index)
+* int sectionCount(void)
+* QString sectionText(QDateTimeEdit::Section section)
+* void setCalendarPopup(bool enable)
+* void setCalendarWidget(QCalendarWidget *calendarWidget)
+* void setCurrentSection(QDateTimeEdit::Section section)
+* void setCurrentSectionIndex(int index)
+* void setDateRange(QDate,QDate)
+* void setDateTimeRange(QDateTime,QDateTime)
+* void setDisplayFormat(QString)
+* void setMaximumDate(QDate)
+* void setMaximumDateTime(QDateTime)
+* void setMaximumTime(QTime)
+* void setMinimumDate(QDate)
+* void setMinimumDateTime(QDateTime)
+* void setMinimumTime(QTime)
+* void setSelectedSection(QDateTimeEdit::Section section)
+* void setTimeRange(QTime,QTime)
+* void setTimeSpec(Qt::TimeSpec spec)
+* QTime time(void)
+* Qt::TimeSpec timeSpec(void)
+* void setDate(QDate)
+* void setDateTime(QDateTime)
+* void setTime(QTime)
+
+.. index::
+       pair: RingQt Classes Reference; QDepthTest Class
+
+QDepthTest Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qdepthtest.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DRender::QDepthTest::DepthFunction depthFunction(void)
+* void setDepthFunction(Qt3DRender::QDepthTest::DepthFunction depthFunction)
+
+.. index::
+       pair: RingQt Classes Reference; QDesktopServices Class
+
+QDesktopServices Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdesktopservices.html
+
+* bool openUrl(QUrl)
+* void setUrlHandler(QString, QObject *receiver, const char *method)
+* void unsetUrlHandler(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QDesktopWidget Class
+
+QDesktopWidget Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdesktopwidget.html
+
+
+Parameters : void
+
+
+Parent Class : QWidget
+
+* QRect availableGeometry(int screen)
+* bool isVirtualDesktop(void)
+* int primaryScreen(void)
+* QWidget *screen(int screen)
+* int screenCount(void)
+* QRect screenGeometry(int screen)
+* int screenNumber(QWidget *widget)
+
+.. index::
+       pair: RingQt Classes Reference; QDial Class
+
+QDial Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdial.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSlider
+
+* int notchSize(void)
+* qreal notchTarget(void)
+* bool notchesVisible(void)
+* void setNotchTarget(double target)
+* bool wrapping(void)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setNotchesVisible(bool visible)
+* void setWrapping(bool on)
+* void setactionTriggeredEvent(const char *)
+* void setrangeChangedEvent(const char *)
+* void setsliderMovedEvent(const char *)
+* void setsliderPressedEvent(const char *)
+* void setsliderReleasedEvent(const char *)
+* void setvalueChangedEvent(const char *)
+* const char *getactionTriggeredEvent(void)
+* const char *getrangeChangedEvent(void)
+* const char *getsliderMovedEvent(void)
+* const char *getsliderPressedEvent(void)
+* const char *getsliderReleasedEvent(void)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDialog Class
+
+QDialog Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdialog.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool isSizeGripEnabled(void)
+* int result(void)
+* void setModal(bool modal)
+* void setResult(int i)
+* void setSizeGripEnabled(bool)
+* void accept(void)
+* void done(int r) # In RingQt use : void donedialog(int r)
+* int exec(void)
+* void open(void)
+* void reject(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDiffuseSpecularMaterial Class
+
+QDiffuseSpecularMaterial Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qdiffusespecularmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QColor ambient(void)
+* QVariant diffuse(void)
+* bool isAlphaBlendingEnabled(void)
+* QVariant normal(void)
+* float shininess(void)
+* QVariant specular(void)
+* float textureScale(void)
+* void setAlphaBlendingEnabled(bool enabled)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QVariant diffuse)
+* void setNormal(QVariant normal)
+* void setShininess(float shininess)
+* void setSpecular(QVariant specular)
+* void setTextureScale(float textureScale)
+
+.. index::
+       pair: RingQt Classes Reference; QDir Class
+
+QDir Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdir.html
+
+
+Parameters : void
+
+* QString absoluteFilePath(QString fileName)
+* QString absolutePath(void)
+* QString canonicalPath(void)
+* bool cd(QString dirName)
+* bool cdUp(void)
+* uint count(void)
+* QString dirName(void)
+* QFileInfoList entryInfoList(QStringList nameFilters, QDir::Filters filters, QDir::SortFlags sort)
+* QFileInfoList entryInfoList_2(QDir::Filters filters, QDir::SortFlags sort)
+* QStringList entryList(QStringList nameQDir::Filters, QDir::Filters filters, QDir::SortFlags sort)
+* QStringList entryList_2(QDir::Filters filters, QDir::SortFlags sort)
+* bool exists(QString name)
+* bool exists_2(void)
+* QString filePath(QString fileName)
+* QDir::Filters filter(void)
+* bool isAbsolute(void)
+* bool isReadable(void)
+* bool isRelative(void)
+* bool isRoot(void)
+* bool makeAbsolute(void)
+* bool mkdir(QString dirName)
+* bool mkpath(QString dirPath)
+* QStringList nameFilters(void)
+* QString path(void)
+* void refresh(void)
+* QString relativeFilePath(QString fileName)
+* bool remove(QString fileName)
+* bool removeRecursively(void)
+* bool rename(QString oldName, QString newName)
+* bool rmdir(QString dirName)
+* bool rmpath(QString dirPath)
+* void setFilter(QDir::Filters filters)
+* void setNameFilters(QStringList nameQDir::Filters)
+* void setPath(QString path)
+* void setSorting(QDir::SortFlags sort)
+* QDir::SortFlags sorting(void)
+* void swap(QDir other)
+* void addSearchPath(QString prefix, QString path)
+* QString cleanPath(QString path)
+* QDir current(void)
+* QString currentPath(void)
+* QFileInfoList drives(void)
+* QString fromNativeSeparators(QString pathName)
+* QDir home(void)
+* QString homePath(void)
+* bool isAbsolutePath(QString path)
+* bool isRelativePath(QString path)
+* bool match(QString filter, QString fileName)
+* bool match_2(QStringList filters, QString fileName)
+* QDir root(void)
+* QString rootPath(void)
+* QStringList searchPaths(QString prefix)
+* QChar separator(void)
+* bool setCurrent(QString path)
+* void setSearchPaths(QString prefix, QStringList searchPaths)
+* QDir temp(void)
+* QString tempPath(void)
+* QString toNativeSeparators(QString pathName)
+
+.. index::
+       pair: RingQt Classes Reference; QDirModel Class
+
+QDirModel Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdirmodel.html
+
+
+Parameters : void
+
+* QIcon fileIcon(QModelIndex)
+* QFileInfo fileInfo(QModelIndex)
+* QString fileName(QModelIndex)
+* QString filePath(QModelIndex)
+* int filter(void)
+* QFileIconProvider *iconProvider(void)
+* QModelIndex index(QString path, int column)
+* bool isDir(QModelIndex)
+* bool isReadOnly(void)
+* bool lazyChildCount(void)
+* QModelIndex mkdir(QModelIndex parent, QString name)
+* QStringList nameFilters(void)
+* bool remove(QModelIndex index)
+* bool resolveSymlinks(void)
+* bool rmdir(QModelIndex index)
+* void setFilter(QDir::Filter filters)
+* void setIconProvider(QFileIconProvider *provider)
+* void setLazyChildCount(bool enable)
+* void setNameFilters(QStringList filters)
+* void setReadOnly(bool enable)
+* void setResolveSymlinks(bool enable)
+* void setSorting(QDir::SortFlag sort)
+* int sorting(void)
+* void refresh(QModelIndex parent)
+
+.. index::
+       pair: RingQt Classes Reference; QDockWidget Class
+
+QDockWidget Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdockwidget.html
+
+
+Parameters : QWidget *parent,Qt::WindowType flag
+
+
+Parent Class : QWidget
+
+* int allowedAreas(void)
+* int features(void)
+* bool isAreaAllowed(Qt::DockWidgetArea area)
+* bool isFloating(void)
+* void setAllowedAreas(Qt::DockWidgetArea areas)
+* void setFeatures(QDockWidget::DockWidgetFeature features)
+* void setFloating(bool floating)
+* void setTitleBarWidget(QWidget *widget)
+* void setWidget(QWidget *widget)
+* QWidget *titleBarWidget(void)
+* QAction *toggleViewAction(void)
+* QWidget *widget(void)
+* void allowedAreasChanged(Qt::DockWidgetArea allowedAreas)
+* void dockLocationChanged(Qt::DockWidgetArea area)
+* void featuresChanged(QDockWidget::DockWidgetFeature features)
+* void topLevelChanged(bool topLevel)
+* void visibilityChanged(bool visible)
+* void setallowedAreasChangedEvent(const char *)
+* void setdockLocationChangedEvent(const char *)
+* void setfeaturesChangedEvent(const char *)
+* void settopLevelChangedEvent(const char *)
+* void setvisibilityChangedEvent(const char *)
+* const char *getallowedAreasChangedEvent(void)
+* const char *getdockLocationChangedEvent(void)
+* const char *getfeaturesChangedEvent(void)
+* const char *gettopLevelChangedEvent(void)
+* const char *getvisibilityChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDrag Class
+
+QDrag Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdrag.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* Qt::DropAction defaultAction(void)
+* QPixmap dragCursor(Qt::DropAction action)
+* Qt::DropAction exec(Qt::DropActions supportedActions)
+* Qt::DropAction exec_2(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction)
+* QPoint hotSpot(void)
+* QMimeData *mimeData(void)
+* QPixmap pixmap(void)
+* void setDragCursor(QPixmap cursor, Qt::DropAction action)
+* void setHotSpot(QPoint hotspot)
+* void setMimeData(QMimeData * data)
+* void setPixmap(QPixmap pixmap)
+* QObject * source(void)
+* Qt::DropActions supportedActions(void)
+* QObject * target(void)
+* void setactionChangedEvent(const char *)
+* void settargetChangedEvent(const char *)
+* const char *getactionChangedEvent(void)
+* const char *gettargetChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDragEnterEvent Class
+
+QDragEnterEvent Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdragenterevent.html
+
+
+Parameters : QPoint,Qt::DropActions,const QMimeData *,Qt::MouseButtons,Qt::KeyboardModifiers
+
+
+Parent Class : QDragMoveEvent
+
+
+.. index::
+       pair: RingQt Classes Reference; QDragLeaveEvent Class
+
+QDragLeaveEvent Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdragleaveevent.html
+
+
+Parameters : void
+
+
+Parent Class : QEvent
+
+
+.. index::
+       pair: RingQt Classes Reference; QDragMoveEvent Class
+
+QDragMoveEvent Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdragmoveevent.html
+
+
+Parameters : QPoint,Qt::DropActions,const QMimeData *,Qt::MouseButtons,Qt::KeyboardModifiers,QEvent::Type
+
+
+Parent Class : QDropEvent
+
+* void accept(QRect rectangle)
+* void accept_2(void)
+* QRect answerRect(void)
+* void ignore(QRect rectangle)
+* void ignore_2(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDropEvent Class
+
+QDropEvent Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdropevent.html
+
+
+Parameters : QPointF,Qt::DropActions,const QMimeData *,Qt::MouseButtons,Qt::KeyboardModifiers,QEvent::Type
+
+
+Parent Class : QEvent
+
+* void acceptProposedAction(void)
+* Qt::DropAction dropAction(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+* QMimeData * mimeData(void)
+* Qt::MouseButtons mouseButtons(void)
+* QPoint pos(void)
+* QPointF posF(void)
+* Qt::DropActions possibleActions(void)
+* Qt::DropAction proposedAction(void)
+* void setDropAction(Qt::DropAction action)
+* QObject * source(void)
+
+.. index::
+       pair: RingQt Classes Reference; QEffect Class
+
+QEffect Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qeffect.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void addParameter(Qt3DRender::QParameter *parameter)
+* void addTechnique(Qt3DRender::QTechnique *t)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void removeTechnique(Qt3DRender::QTechnique *t)
+* QVector<Qt3DRender::QTechnique *> techniques(void)
+
+.. index::
+       pair: RingQt Classes Reference; QEntity Class
+
+QEntity Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qentity.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QNode
+
+* void addComponent(Qt3DCore::QComponent *comp)
+* Qt3DCore::QComponentVector components(void)
+* Qt3DCore::QEntity * parentEntity(void)
+* void removeComponent(Qt3DCore::QComponent *comp)
+
+.. index::
+       pair: RingQt Classes Reference; QEvent Class
+
+QEvent Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qevent.html
+
+
+Parameters : QEvent::Type Type
+
+* void accept(void)
+* void ignore(void)
+* bool isAccepted(void)
+* void setAccepted(bool accepted)
+* bool spontaneous(void)
+* int type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QExtrudedTextMesh Class
+
+QExtrudedTextMesh Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qextrudedtextmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float depth(void)
+* QFont font(void)
+* QString text(void)
+* void setDepth(float depth)
+* void setFont(QFont font)
+* void setText(QString text)
+
+.. index::
+       pair: RingQt Classes Reference; QFile Class
+
+QFile Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfile.html
+
+
+Parameters : void
+
+
+Parent Class : QFileDevice
+
+* bool copy(QString newName)
+* bool exists(void)
+* bool link(QString linkName)
+* bool open(FILE *fh, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags)
+* bool open_2(int fd, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags)
+* bool open_3(QIODevice::OpenMode mode)
+* bool remove(void)
+* bool rename(QString newName)
+* void setFileName(QString name)
+* QString symLinkTarget(void)
+* bool copy_2(QString fileName, QString newName)
+* QString decodeName(QByteArray localFileName)
+* QString decodeName_2(char *localFileName)
+* QByteArray encodeName(QString fileName)
+* bool exists_2(QString fileName)
+* bool link_2(QString fileName, QString linkName)
+* QFile::Permissions permissions(QString fileName)
+* bool remove_2(QString fileName)
+* bool rename_2(QString oldName, QString newName)
+* bool resize(QString fileName, qint64 sz)
+* bool setPermissions(QString fileName, QFile::Permissions permissions)
+* QString symLinkTarget_2(QString fileName)
+
+.. index::
+       pair: RingQt Classes Reference; QFile2 Class
+
+QFile2 Class
+============
+
+
+Parameters : QString
+
+
+Parent Class : QFile
+
+
+.. index::
+       pair: RingQt Classes Reference; QFileDevice Class
+
+QFileDevice Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfiledevice.html
+
+
+Parent Class : QIODevice
+
+* QFileDevice::FileError error(void)
+* bool flush(void)
+* int handle(void)
+* uchar * map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags)
+* QFileDevice::Permissions permissions(void)
+* bool resize(qint64 sz)
+* QString fileName(void)
+* bool unmap(uchar *address)
+* void unsetError(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFileDialog Class
+
+QFileDialog Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfiledialog.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int acceptMode(void)
+* QString defaultSuffix(void)
+* QDir directory(void)
+* QUrl directoryUrl(void)
+* int fileMode(void)
+* int filter(void)
+* QStringList history(void)
+* QFileIconProvider *iconProvider(void)
+* QAbstractItemDelegate *itemDelegate(void)
+* QString labelText(QFileDialog::DialogLabel label)
+* QStringList mimeTypeFilters(void)
+* QStringList nameFilters(void)
+* void open(QObject *receiver, const char *member)
+* int options(void)
+* QAbstractProxyModel *proxyModel(void)
+* bool restoreState(QByteArray)
+* QByteArray saveState(void)
+* void selectFile(QString)
+* void selectMimeTypeFilter(QString)
+* void selectNameFilter(QString)
+* void selectUrl(QUrl)
+* QStringList selectedFiles(void)
+* QString selectedNameFilter(void)
+* void setDefaultSuffix(QString)
+* void setDirectory(QString)
+* void setDirectoryUrl(QUrl)
+* void setFileMode(QFileDialog::FileMode mode)
+* void setFilter(QDir::Filter filters)
+* void setHistory(QStringList)
+* void setIconProvider(QFileIconProvider *provider)
+* void setItemDelegate(QAbstractItemDelegate *delegate)
+* void setLabelText(QFileDialog::DialogLabel label, QString)
+* void setMimeTypeFilters(QStringList)
+* void setNameFilter(QString)
+* void setNameFilters(QStringList)
+* void setOption(QFileDialog::Option option, bool)
+* void setOptions(QFileDialog::Option options)
+* void setProxyModel(QAbstractProxyModel *proxyModel)
+* int viewMode(void)
+* QString getExistingDirectory(QWidget *,QString,QString, QFileDialog::Option)
+* QUrl getExistingDirectoryUrl(QWidget *,QString,QUrl, QFileDialog::Option,QStringList)
+* QString getOpenFileName(QWidget *,QString,QString,QString)
+* QUrl getSaveFileUrl(QWidget *,QString, QUrl,QString, QString *, QFileDialog::Option options,QStringList)
+
+.. index::
+       pair: RingQt Classes Reference; QFileInfo Class
+
+QFileInfo Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfileinfo.html
+
+
+Parameters : void
+
+* QDir absoluteDir(void)
+* QString absoluteFilePath(void)
+* QString absolutePath(void)
+* QString baseName(void)
+* QString bundleName(void)
+* bool caching(void)
+* QString canonicalFilePath(void)
+* QString canonicalPath(void)
+* QString completeBaseName(void)
+* QString completeSuffix(void)
+* QDateTime created(void)
+* QDir dir(void)
+* bool exists(void)
+* QString fileName(void)
+* QString filePath(void)
+* QString group(void)
+* int groupId(void)
+* bool isAbsolute(void)
+* bool isBundle(void)
+* bool isDir(void)
+* bool isExecutable(void)
+* bool isFile(void)
+* bool isHidden(void)
+* bool isNativePath(void)
+* bool isReadable(void)
+* bool isRelative(void)
+* bool isRoot(void)
+* bool isSymLink(void)
+* bool isWritable(void)
+* QDateTime lastModified(void)
+* QDateTime lastRead(void)
+* bool makeAbsolute(void)
+* QString owner(void)
+* uint ownerId(void)
+* QString path(void)
+* bool permission(QFileDevice::Permission permissions)
+* int permissions(void)
+* void refresh(void)
+* void setCaching(bool enable)
+* void setFile(QString)
+* int size(void)
+* QString suffix(void)
+* void swap(QFileInfo)
+* QString symLinkTarget(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFileSystemModel Class
+
+QFileSystemModel Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfilesystemmodel.html
+
+
+Parameters : void
+
+* QIcon fileIcon(QModelIndex)
+* QFileInfo fileInfo(QModelIndex)
+* QString fileName(QModelIndex)
+* QString filePath(QModelIndex)
+* int filter(void)
+* QFileIconProvider *iconProvider(void)
+* QModelIndex index(QString, int column)
+* bool isDir(QModelIndex)
+* bool isReadOnly(void)
+* QDateTime lastModified(QModelIndex)
+* QModelIndex mkdir(QModelIndex,QString)
+* QVariant myComputer(int role)
+* bool nameFilterDisables(void)
+* QStringList nameFilters(void)
+* int permissions(QModelIndex)
+* bool remove(QModelIndex)
+* bool resolveSymlinks(void)
+* bool rmdir(QModelIndex)
+* QDir rootDirectory(void)
+* QString rootPath(void)
+* void setFilter(QDir::Filter filters)
+* void setIconProvider(QFileIconProvider *provider)
+* void setNameFilterDisables(bool enable)
+* void setNameFilters(QStringList)
+* void setReadOnly(bool enable)
+* void setResolveSymlinks(bool enable)
+* QModelIndex setRootPath(QString)
+* int size(QModelIndex)
+* QString type(QModelIndex)
+* bool canFetchMore(QModelIndex)
+* int columnCount(void)
+* QVariant data( QModelIndex index, int role)
+* bool dropMimeData( QMimeData *data, Qt::DropAction action, int row, int column, QModelIndex parent)
+* void fetchMore( QModelIndex parent)
+* int flags( QModelIndex index)
+* bool hasChildren( QModelIndex parent )
+* QVariant headerData(int section, Qt::Orientation orientation, int role )
+* QMimeData * mimeData( QModelIndexList indexes)
+* QStringList mimeTypes(void)
+* QModelIndex parent( QModelIndex index)
+* int rowCount( QModelIndex parent)
+* bool setData( QModelIndex idx,  QVariant value, int role)
+* void sort(int column, Qt::SortOrder order )
+* int supportedDropActions(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFirstPersonCameraController Class
+
+QFirstPersonCameraController Class
+==================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qfirstpersoncameracontroller.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QAbstractCameraController
+
+
+.. index::
+       pair: RingQt Classes Reference; QFont Class
+
+QFont Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfont.html
+
+
+Parameters : QString, int, int, bool
+
+* bool bold(void)
+* int capitalization(void)
+* QString defaultFamily(void)
+* bool exactMatch(void)
+* QString family(void)
+* bool fixedPitch(void)
+* bool fromString(QString)
+* int hintingPreference(void)
+* bool isCopyOf(QFont)
+* bool italic(void)
+* bool kerning(void)
+* QString key(void)
+* QString lastResortFamily(void)
+* QString lastResortFont(void)
+* double letterSpacing(void)
+* int letterSpacingType(void)
+* bool overline(void)
+* int pixelSize(void)
+* int pointSize(void)
+* double pointSizeF(void)
+* bool rawMode(void)
+* QString rawName(void)
+* QFont resolve(QFont)
+* void setBold(bool enable)
+* void setCapitalization(QFont::Capitalization caps)
+* void setFamily(QString)
+* void setFixedPitch(bool enable)
+* void setHintingPreference(QFont::HintingPreference hintingPreference)
+* void setItalic(bool enable)
+* void setKerning(bool enable)
+* void setLetterSpacing(QFont::SpacingType type, double spacing)
+* void setOverline(bool enable)
+* void setPixelSize(int pixelSize)
+* void setPointSize(int pointSize)
+* void setPointSizeF(double pointSize)
+* void setRawMode(bool enable)
+* void setRawName(QString)
+* void setStretch(int factor)
+* void setStrikeOut(bool enable)
+* void setStyle(QFont::Style style)
+* void setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy)
+* void setStyleName(QString)
+* void setStyleStrategy(QFont::StyleStrategy s)
+* void setUnderline(bool enable)
+* void setWeight(int weight)
+* void setWordSpacing(double spacing)
+* int stretch(void)
+* bool strikeOut(void)
+* int style(void)
+* int styleHint(void)
+* QString styleName(void)
+* int styleStrategy(void)
+* QString toString(void)
+* bool underline(void)
+* int weight(void)
+* double wordSpacing(void)
+* void insertSubstitution(QString,QString)
+* void insertSubstitutions(QString,QStringList)
+* QString substitute(QString)
+* QStringList substitutes(QString)
+* QStringList substitutions(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFontDialog Class
+
+QFontDialog Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfontdialog.html
+
+
+Parameters : void
+
+
+Parent Class : QDialog
+
+* QFont currentFont(void)
+* void open(QObject *receiver, const char *member)
+* int options(void)
+* QFont selectedFont(void)
+* void setCurrentFont(QFont)
+* void setOption(QFontDialog::FontDialogOption option, bool on)
+* void setOptions(QFontDialog::FontDialogOption options)
+* bool testOption(QFontDialog::FontDialogOption option)
+* int getfont(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFontMetrics Class
+
+QFontMetrics Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfontmetrics.html
+
+
+Parameters : QFont
+
+* int ascent(void)
+* int averageCharWidth(void)
+* QRect boundingRect(QChar ch)
+* QRect boundingRect_2( QString   text)
+* QRect boundingRect_3(int x, int y, int width, int height, int flags,  QString   text, int tabStops , int * tabArray )
+* QRect boundingRect_4( QRect   rect, int flags,  QString   text, int tabStops , int * tabArray )
+* int descent(void)
+* QString elidedText( QString   text, Qt::TextElideMode mode, int width, int flags )
+* int height(void)
+* bool inFont(QChar ch)
+* bool inFontUcs4(uint character)
+* int leading(void)
+* int leftBearing(QChar ch)
+* int lineSpacing(void)
+* int lineWidth(void)
+* int maxWidth(void)
+* int minLeftBearing(void)
+* int minRightBearing(void)
+* int overlinePos(void)
+* int rightBearing(QChar ch)
+* QSize size(int flags,  QString   text, int tabStops , int * tabArray )
+* int strikeOutPos(void)
+* QRect tightBoundingRect( QString   text)
+* int underlinePos(void)
+* int width( QString   text, int len )
+* int width_2(QChar ch)
+* int xHeight(void)
+
+.. index::
+       pair: RingQt Classes Reference; QForwardRenderer Class
+
+QForwardRenderer Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qforwardrenderer.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DCore::QEntity * camera(void)
+* QColor clearColor(void)
+* QSize externalRenderTargetSize(void)
+* float gamma(void)
+* bool isFrustumCullingEnabled(void)
+* QObject * surface(void)
+* QRectF viewportRect(void)
+* void setCamera(Qt3DCore::QEntity *camera)
+* void setClearColor(QColor clearColor)
+* void setExternalRenderTargetSize(QSize size)
+* void setFrustumCullingEnabled(bool enabled)
+* void setGamma(float gamma)
+* void setSurface(QObject *surface)
+* void setViewportRect(QRectF viewportRect)
+
+.. index::
+       pair: RingQt Classes Reference; QFrame Class
+
+QFrame Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qframe.html
+
+
+Parameters : QWidget *parent, Qt::WindowType flag
+
+
+Parent Class : QWidget
+
+* QRect frameRect(void)
+* int frameShadow(void)
+* int frameShape(void)
+* int frameStyle(void)
+* int frameWidth(void)
+* int lineWidth(void)
+* int midLineWidth(void)
+* void setFrameRect(QRect)
+* void setFrameShadow(QFrame::Shadow)
+* void setFrameShape(QFrame::Shape)
+* void setFrameStyle(int style)
+* void setLineWidth(int)
+* void setMidLineWidth(int)
+* QSize sizeHint(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFrame2 Class
+
+QFrame2 Class
+=============
+
+
+Parameters : void
+
+
+Parent Class : QFrame
+
+
+.. index::
+       pair: RingQt Classes Reference; QFrame3 Class
+
+QFrame3 Class
+=============
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QFrame
+
+
+.. index::
+       pair: RingQt Classes Reference; QFrameAction Class
+
+QFrameAction Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dlogic-qframeaction.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void settriggeredEvent(const char *)
+* const char *gettriggeredEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoAddress Class
+
+QGeoAddress Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoaddress.html
+
+
+Parameters : void
+
+* QString city(void)
+* void clear(void)
+* QString country(void)
+* QString countryCode(void)
+* QString county(void)
+* QString district(void)
+* bool isEmpty(void)
+* bool isTextGenerated(void)
+* QString postalCode(void)
+* void setCity(QString city)
+* void setCountry(QString country)
+* void setCountryCode(QString countryCode)
+* void setCounty(QString county)
+* void setDistrict(QString district)
+* void setPostalCode(QString postalCode)
+* void setState(QString state)
+* void setStreet(QString street)
+* void setText(QString text)
+* QString state(void)
+* QString street(void)
+* QString text(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoAreaMonitorInfo Class
+
+QGeoAreaMonitorInfo Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoareamonitorinfo.html
+
+
+Parameters : QString
+
+* QGeoShape area(void)
+* QDateTime expiration(void)
+* QString identifier(void)
+* bool isPersistent(void)
+* bool isValid(void)
+* QString name(void)
+* QVariantMap notificationParameters(void)
+* void setArea(QGeoShape newShape)
+* void setExpiration(QDateTime expiry)
+* void setName(QString name)
+* void setNotificationParameters(QVariantMap parameters)
+* void setPersistent(bool isPersistent)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoAreaMonitorSource Class
+
+QGeoAreaMonitorSource Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoareamonitorsource.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QString sourceName(void)
+* QStringList availableSources(void)
+* QGeoAreaMonitorSource * createDefaultSource(QObject * parent)
+* QGeoAreaMonitorSource * createSource(QString sourceName, QObject * parent)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoCircle Class
+
+QGeoCircle Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeocircle.html
+
+
+Parameters : void
+
+* QGeoCoordinate center(void)
+* qreal radius(void)
+* void setCenter(QGeoCoordinate center)
+* void setRadius(qreal radius)
+* void translate(double degreesLatitude, double degreesLongitude)
+* QGeoCircle translated(double degreesLatitude, double degreesLongitude)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoCoordinate Class
+
+QGeoCoordinate Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeocoordinate.html
+
+
+Parameters : void
+
+* double altitude(void)
+* QGeoCoordinate atDistanceAndAzimuth(qreal distance, qreal azimuth, qreal distanceUp)
+* qreal azimuthTo(QGeoCoordinate other)
+* qreal distanceTo(QGeoCoordinate other)
+* bool isValid(void)
+* double latitude(void)
+* double longitude(void)
+* void setAltitude(double altitude)
+* void setLatitude(double latitude)
+* void setLongitude(double longitude)
+* QString toString(QGeoCoordinate::CoordinateFormat format)
+* QGeoCoordinate::CoordinateType type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoPositionInfo Class
+
+QGeoPositionInfo Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeopositioninfo.html
+
+
+Parameters : void
+
+* qreal attribute(QGeoPositionInfo::Attribute attribute)
+* QGeoCoordinate coordinate(void)
+* bool hasAttribute(QGeoPositionInfo::Attribute attribute)
+* bool isValid(void)
+* void removeAttribute(QGeoPositionInfo::Attribute attribute)
+* void setAttribute(QGeoPositionInfo::Attribute attribute, qreal value)
+* void setCoordinate(QGeoCoordinate coordinate)
+* void setTimestamp(QDateTime timestamp)
+* QDateTime timestamp(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoPositionInfoSource Class
+
+QGeoPositionInfoSource Class
+============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeopositioninfosource.html
+
+
+Parent Class : QObject
+
+* QGeoPositionInfoSource::PositioningMethods preferredPositioningMethods(void)
+* QString sourceName(void)
+* int updateInterval(void)
+* void seterrorEvent(const char *)
+* void setpositionUpdatedEvent(const char *)
+* void setupdateTimeoutEvent(const char *)
+* const char *geterrorEvent(void)
+* const char *getpositionUpdatedEvent(void)
+* const char *getupdateTimeoutEvent(void)
+* QStringList availableSources(void)
+* QGeoPositionInfoSource *createDefaultSource(QObject *parent)
+* QGeoPositionInfoSource *createSource(QString sourceName, QObject *parent)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoRectangle Class
+
+QGeoRectangle Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeorectangle.html
+
+
+Parameters : void
+
+
+Parent Class : QGeoShape
+
+* QGeoCoordinate bottomLeft(void)
+* QGeoCoordinate bottomRight(void)
+* QGeoCoordinate center(void)
+* bool contains(QGeoRectangle rectangle)
+* double height(void)
+* bool intersects(QGeoRectangle rectangle)
+* void setBottomLeft(QGeoCoordinate bottomLeft)
+* void setBottomRight(QGeoCoordinate bottomRight)
+* void setCenter(QGeoCoordinate center)
+* void setHeight(double degreesHeight)
+* void setTopLeft(QGeoCoordinate topLeft)
+* void setTopRight(QGeoCoordinate topRight)
+* void setWidth(double degreesWidth)
+* QGeoCoordinate topLeft(void)
+* QGeoCoordinate topRight(void)
+* void translate(double degreesLatitude, double degreesLongitude)
+* QGeoRectangle translated(double degreesLatitude, double degreesLongitude)
+* QGeoRectangle united(QGeoRectangle rectangle)
+* double width(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoSatelliteInfo Class
+
+QGeoSatelliteInfo Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeosatelliteinfo.html
+
+
+Parameters : void
+
+* qreal attribute(QGeoSatelliteInfo::Attribute attribute)
+* bool hasAttribute(QGeoSatelliteInfo::Attribute attribute)
+* void removeAttribute(QGeoSatelliteInfo::Attribute attribute)
+* int satelliteIdentifier(void)
+* QGeoSatelliteInfo::SatelliteSystem satelliteSystem(void)
+* void setAttribute(QGeoSatelliteInfo::Attribute attribute, qreal value)
+* void setSatelliteIdentifier(int satId)
+* void setSatelliteSystem(QGeoSatelliteInfo::SatelliteSystem system)
+* void setSignalStrength(int signalStrength)
+* int signalStrength(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoSatelliteInfoSource Class
+
+QGeoSatelliteInfoSource Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeosatelliteinfosource.html
+
+* QString sourceName(void)
+* int updateInterval(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoShape Class
+
+QGeoShape Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoshape.html
+
+
+Parameters : void
+
+* bool contains(QGeoCoordinate coordinate)
+* bool isEmpty(void)
+* bool isValid(void)
+* QGeoShape::ShapeType type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGoochMaterial Class
+
+QGoochMaterial Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qgoochmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float alpha(void)
+* float beta(void)
+* QColor cool(void)
+* QColor diffuse(void)
+* float shininess(void)
+* QColor specular(void)
+* QColor warm(void)
+* void setAlpha(float alpha)
+* void setBeta(float beta)
+* void setCool(QColor cool)
+* void setDiffuse(QColor diffuse)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+* void setWarm(QColor warm)
+
+.. index::
+       pair: RingQt Classes Reference; QGradient Class
+
+QGradient Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgradient.html
+
+
+Parameters : void
+
+* QGradient::CoordinateMode coordinateMode(void)
+* void setColorAt(qreal position,  QColor   color)
+* void setCoordinateMode(QGradient::CoordinateMode mode)
+* void setSpread(QGradient::Spread method)
+* void setStops(QGradientStops stopPoints)
+* QGradient::Spread spread(void)
+* QGradientStops stops(void)
+* QGradient::Type type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGraphicsVideoItem Class
+
+QGraphicsVideoItem Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgraphicsvideoitem.html
+
+
+Parameters : void
+
+* Qt::AspectRatioMode aspectRatioMode(void)
+* QSizeF nativeSize(void)
+* QPointF offset(void)
+* void setAspectRatioMode(Qt::AspectRatioMode mode)
+* void setOffset(QPointF offset)
+* void setSize(QSizeF size)
+* QSizeF size(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGraphicsView Class
+
+QGraphicsView Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgraphicsview.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* Qt::Alignment alignment(void)
+* QBrush backgroundBrush(void)
+* QGraphicsView::CacheMode cacheMode(void)
+* void centerOn(QPointF pos)
+* void centerOn_2(qreal x, qreal y)
+* void centerOn_3(QGraphicsItem *item)
+* QGraphicsView::DragMode dragMode(void)
+* void ensureVisible(QRectF rect, int xmargin, int ymargin)
+* void ensureVisible_2(qreal x, qreal y, qreal w, qreal h, int xmargin, int ymargin)
+* void ensureVisible_3(QGraphicsItem *item, int xmargin, int ymargin)
+* void fitInView(QRectF rect, Qt::AspectRatioMode aspectRatioMode)
+* void fitInView_2(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode aspectRatioMode)
+* void fitInView_3(QGraphicsItem *item, Qt::AspectRatioMode aspectRatioMode)
+* QBrush foregroundBrush(void)
+* bool isInteractive(void)
+* bool isTransformed(void)
+* QGraphicsItem * itemAt(QPoint pos)
+* QGraphicsItem * itemAt_2(int x, int y)
+* QList<QGraphicsItem *> items(void)
+* QList<QGraphicsItem *> items_2(QPoint pos)
+* QList<QGraphicsItem *> items_3(int x, int y)
+* QList<QGraphicsItem *> items_4(QRect rect, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem *> items_5(int x, int y, int w, int h, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem *> items_6(QPolygon polygon, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem *> items_7(QPainterPath path, Qt::ItemSelectionMode mode)
+* QPoint mapFromScene(QPointF point)
+* QPolygon mapFromScene_2(QRectF rect)
+* QPolygon mapFromScene_3(QPolygonF polygon)
+* QPainterPath mapFromScene_4(QPainterPath path)
+* QPoint mapFromScene_5(qreal x, qreal y)
+* QPolygon mapFromScene_6(qreal x, qreal y, qreal w, qreal h)
+* QPointF mapToScene(QPoint point)
+* QPolygonF mapToScene_2(QRect rect)
+* QPolygonF mapToScene_3(QPolygon polygon)
+* QPainterPath mapToScene_4(QPainterPath path)
+* QPointF mapToScene_5(int x, int y)
+* QPolygonF mapToScene_6(int x, int y, int w, int h)
+* QMatrix matrix(void)
+* QGraphicsView::OptimizationFlags optimizationFlags(void)
+* void render(QPainter *painter, QRectF target, QRect source, Qt::AspectRatioMode aspectRatioMode)
+* QPainter::RenderHints renderHints(void)
+* void resetCachedContent(void)
+* void resetMatrix(void)
+* void resetTransform(void)
+* QGraphicsView::ViewportAnchor resizeAnchor(void)
+* void rotate(qreal angle)
+* QRect rubberBandRect(void)
+* Qt::ItemSelectionMode rubberBandSelectionMode(void)
+* void scale(qreal sx, qreal sy)
+* QGraphicsScene * scene(void)
+* QRectF sceneRect(void)
+* void setAlignment(Qt::Alignment alignment)
+* void setBackgroundBrush(QBrush brush)
+* void setCacheMode(QGraphicsView::CacheMode mode)
+* void setDragMode(QGraphicsView::DragMode mode)
+* void setForegroundBrush(QBrush brush)
+* void setInteractive(bool allowed)
+* void setMatrix(QMatrix matrix, bool combine)
+* void setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled)
+* void setOptimizationFlags(QGraphicsView::OptimizationFlags flags)
+* void setRenderHint(QPainter::RenderHint hint, bool enabled)
+* void setRenderHints(QPainter::RenderHints hints)
+* void setResizeAnchor(QGraphicsView::ViewportAnchor anchor)
+* void setRubberBandSelectionMode(Qt::ItemSelectionMode mode)
+* void setScene(QGraphicsScene *scene)
+* void setSceneRect(QRectF rect)
+* void setSceneRect_2(qreal x, qreal y, qreal w, qreal h)
+* void setTransform(QTransform matrix, bool combine)
+* void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor)
+* void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode)
+* void shear(qreal sh, qreal sv)
+* QTransform transform(void)
+* QGraphicsView::ViewportAnchor transformationAnchor(void)
+* void translate(qreal dx, qreal dy)
+* QTransform viewportTransform(void)
+* QGraphicsView::ViewportUpdateMode viewportUpdateMode(void)
+* void invalidateScene(QRectF rect, QGraphicsScene::SceneLayers layers)
+* void updateScene(QList<QRectF> rects)
+* void updateSceneRect(QRectF rect)
+
+.. index::
+       pair: RingQt Classes Reference; QGridLayout Class
+
+QGridLayout Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgridlayout.html
+
+
+Parameters : void
+
+* void addItem(QLayoutItem * item, int row, int column, int rowSpan , int columnSpan , Qt::Alignment alignment )
+* void addLayout(QLayout * layout, int row, int column, Qt::Alignment alignment )
+* void addLayout_2(QLayout * layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment )
+* void addWidget(QWidget * widget, int row, int column, Qt::Alignment alignment )
+* void addWidget_2(QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment )
+* QRect cellRect(int row, int column)
+* int columnCount(void)
+* int columnMinimumWidth(int column)
+* int columnStretch(int column)
+* void getItemPosition(int index, int * row, int * column, int * rowSpan, int * columnSpan)
+* int horizontalSpacing(void)
+* QLayoutItem * itemAtPosition(int row, int column)
+* Qt::Corner originCorner(void)
+* int rowCount(void)
+* int rowMinimumHeight(int row)
+* int rowStretch(int row)
+* void setColumnMinimumWidth(int column, int minSize)
+* void setColumnStretch(int column, int stretch)
+* void setHorizontalSpacing(int spacing)
+* void setOriginCorner(Qt::Corner corner)
+* void setRowMinimumHeight(int row, int minSize)
+* void setRowStretch(int row, int stretch)
+* void setSpacing(int spacing)
+* void setVerticalSpacing(int spacing)
+* int spacing(void)
+* int verticalSpacing(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGuiApplication Class
+
+QGuiApplication Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qguiapplication.html
+
+
+Parent Class : QCoreApplication
+
+
+Parameters : int,char **
+
+* qreal devicePixelRatio(void)
+* bool isSavingSession(void)
+* bool isSessionRestored(void)
+* QString sessionId(void)
+* QString sessionKey(void)
+* QWindowList allWindows(void)
+* QString applicationDisplayName(void)
+* Qt::ApplicationState applicationState(void)
+* void changeOverrideCursor(QCursor cursor)
+* QClipboard * clipboard(void)
+* bool desktopSettingsAware(void)
+* int exec(void)
+* QObject * focusObject(void)
+* QWindow * focusWindow(void)
+* QFont font(void)
+* QInputMethod * inputMethod(void)
+* bool isLeftToRight(void)
+* bool isRightToLeft(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+* Qt::LayoutDirection layoutDirection(void)
+* QWindow * modalWindow(void)
+* Qt::MouseButtons mouseButtons(void)
+* QCursor * overrideCursor(void)
+* QPalette palette(void)
+* QString platformName(void)
+* QPlatformNativeInterface * platformNativeInterface(void)
+* QScreen * primaryScreen(void)
+* Qt::KeyboardModifiers queryKeyboardModifiers(void)
+* bool quitOnLastWindowClosed(void)
+* void restoreOverrideCursor(void)
+* QList<QScreen *> screens(void)
+* void setApplicationDisplayName(QString name)
+* void setDesktopSettingsAware(bool on)
+* void setFont(QFont font)
+* void setLayoutDirection(Qt::LayoutDirection direction)
+* void setOverrideCursor(QCursor cursor)
+* void setPalette(QPalette pal)
+* void setQuitOnLastWindowClosed(bool quit)
+* QStyleHints * styleHints(void)
+* void sync(void)
+* QWindow * topLevelAt(QPoint pos)
+* QWindowList topLevelWindows(void)
+* void setapplicationDisplayNameChangedEvent(const char *)
+* void setapplicationStateChangedEvent(const char *)
+* void setcommitDataRequestEvent(const char *)
+* void setfocusObjectChangedEvent(const char *)
+* void setfocusWindowChangedEvent(const char *)
+* void setfontDatabaseChangedEvent(const char *)
+* void setlastWindowClosedEvent(const char *)
+* void setlayoutDirectionChangedEvent(const char *)
+* void setpaletteChangedEvent(const char *)
+* void setprimaryScreenChangedEvent(const char *)
+* void setsaveStateRequestEvent(const char *)
+* void setscreenAddedEvent(const char *)
+* void setscreenRemovedEvent(const char *)
+* const char *getapplicationDisplayNameChangedEvent(void)
+* const char *getapplicationStateChangedEvent(void)
+* const char *getcommitDataRequestEvent(void)
+* const char *getfocusObjectChangedEvent(void)
+* const char *getfocusWindowChangedEvent(void)
+* const char *getfontDatabaseChangedEvent(void)
+* const char *getlastWindowClosedEvent(void)
+* const char *getlayoutDirectionChangedEvent(void)
+* const char *getpaletteChangedEvent(void)
+* const char *getprimaryScreenChangedEvent(void)
+* const char *getsaveStateRequestEvent(void)
+* const char *getscreenAddedEvent(void)
+* const char *getscreenRemovedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QHBoxLayout Class
+
+QHBoxLayout Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qhboxlayout.html
+
+
+Parameters : void
+
+
+Parent Class : QBoxLayout
+
+* void addWidget(QWidget *)
+* void addLayout(QLayout *)
+
+.. index::
+       pair: RingQt Classes Reference; QHeaderView Class
+
+QHeaderView Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qheaderview.html
+
+
+Parameters : Qt::Orientation, QWidget *
+
+
+Parent Class : QAbstractItemView
+
+* bool cascadingSectionResizes(void)
+* int count(void)
+* Qt::Alignment defaultAlignment(void)
+* int defaultSectionSize(void)
+* int hiddenSectionCount(void)
+* void hideSection(int logicalIndex)
+* bool highlightSections(void)
+* bool isSectionHidden(int logicalIndex)
+* bool isSortIndicatorShown(void)
+* int length(void)
+* int logicalIndex(int visualIndex)
+* int logicalIndexAt(int position)
+* int logicalIndexAt_2(int x, int y)
+* int logicalIndexAt_3( QPoint   pos)
+* int maximumSectionSize(void)
+* int minimumSectionSize_2(void)
+* void moveSection(int from, int to)
+* int offset(void)
+* Qt::Orientation orientation(void)
+* int resizeContentsPrecision(void)
+* void resizeSection(int logicalIndex, int size)
+* void resizeSections(QHeaderView::ResizeMode mode)
+* bool restoreState( QByteArray   state)
+* QByteArray saveState(void)
+* int sectionPosition(int logicalIndex)
+* QHeaderView::ResizeMode sectionResizeMode(int logicalIndex)
+* int sectionSize(int logicalIndex)
+* int sectionSizeHint(int logicalIndex)
+* int sectionViewportPosition(int logicalIndex)
+* bool sectionsClickable(void)
+* bool sectionsHidden(void)
+* bool sectionsMovable(void)
+* bool sectionsMoved(void)
+* void setCascadingSectionResizes(bool enable)
+* void setDefaultAlignment(Qt::Alignment alignment)
+* void setDefaultSectionSize(int size)
+* void setHighlightSections(bool highlight)
+* void setMaximumSectionSize(int size)
+* void setMinimumSectionSize(int size)
+* void setResizeContentsPrecision(int precision)
+* void setSectionHidden(int logicalIndex, bool hide)
+* void setSectionResizeMode(QHeaderView::ResizeMode mode)
+* void setSectionResizeMode_2(int logicalIndex, QHeaderView::ResizeMode mode)
+* void setSectionsClickable(bool clickable)
+* void setSectionsMovable(bool movable)
+* void setSortIndicator(int logicalIndex, Qt::SortOrder order)
+* void setSortIndicatorShown(bool show)
+* void setStretchLastSection(bool stretch)
+* void showSection(int logicalIndex)
+* Qt::SortOrder sortIndicatorOrder(void)
+* int sortIndicatorSection(void)
+* bool stretchLastSection(void)
+* int stretchSectionCount(void)
+* void swapSections(int first, int second)
+* int visualIndex(int logicalIndex)
+* int visualIndexAt(int position)
+* void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast)
+* void setOffset(int offset)
+* void setOffsetToLastSection(void)
+* void setOffsetToSectionPosition(int visualSectionNumber)
+* void setgeometriesChangedEvent(const char *)
+* void setsectionClickedEvent(const char *)
+* void setsectionCountChangedEvent(const char *)
+* void setsectionDoubleClickedEvent(const char *)
+* void setsectionEnteredEvent(const char *)
+* void setsectionHandleDoubleClickedEvent(const char *)
+* void setsectionMovedEvent(const char *)
+* void setsectionPressedEvent(const char *)
+* void setsectionResizedEvent(const char *)
+* void setsortIndicatorChangedEvent(const char *)
+* const char *getgeometriesChangedEvent(void)
+* const char *getsectionClickedEvent(void)
+* const char *getsectionCountChangedEvent(void)
+* const char *getsectionDoubleClickedEvent(void)
+* const char *getsectionEnteredEvent(void)
+* const char *getsectionHandleDoubleClickedEvent(void)
+* const char *getsectionMovedEvent(void)
+* const char *getsectionPressedEvent(void)
+* const char *getsectionResizedEvent(void)
+* const char *getsortIndicatorChangedEvent(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt Classes Reference; QHostAddress Class
+
+QHostAddress Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qhostaddress.html
+
+
+Parameters : void
+
+* void clear(void)
+* bool isInSubnet(QHostAddress, int netmask)
+* bool isNull(void)
+* int protocol(void)
+* QString scopeId(void)
+* bool setAddress(QString)
+* int toIPv4Address(void)
+* Q_IPV6ADDR toIPv6Address(void)
+* QString toString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QHostInfo Class
+
+QHostInfo Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qhostinfo.html
+
+
+Parameters : void
+
+* int error(void)
+* QString errorString(void)
+* QString hostName(void)
+* int lookupId(void)
+* void setError(QHostInfo::HostInfoError error)
+* void setErrorString(QString)
+* void setHostName(QString)
+* void setLookupId(int id)
+* void abortHostLookup(int id)
+* QHostInfo fromName(QString)
+* QString localDomainName(void)
+* QString localHostName(void)
+
+.. index::
+       pair: RingQt Classes Reference; QIODevice Class
+
+QIODevice Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qiodevice.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* QString errorString(void)
+* bool getChar(char *c)
+* bool isOpen(void)
+* bool isReadable(void)
+* bool isTextModeEnabled(void)
+* bool isWritable(void)
+* int openMode(void)
+* int peek(char *data, int maxSize)
+* int read(char *data, int maxSize)
+* int readLine(char *data, int maxSize)
+* void ungetChar(char c)
+* int write(const char *data, int maxSize)
+* bool atEnd(void)
+* bool canReadLine(void)
+* void close(void)
+* bool open(QIODevice::OpenMode flags)
+* qint64 pos(void)
+* bool seek(qint64 pos)
+* qint64 size(void)
+* void setaboutToCloseEvent(const char *)
+* void setbytesWrittenEvent(const char *)
+* void setreadChannelFinishedEvent(const char *)
+* void setreadyReadEvent(const char *)
+* const char *getaboutToCloseEvent(void)
+* const char *getbytesWrittenEvent(void)
+* const char *getreadChannelFinishedEvent(void)
+* const char *getreadyReadEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QIcon Class
+
+QIcon Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qicon.html
+
+
+Parameters : QPixmap
+
+
+.. index::
+       pair: RingQt Classes Reference; QImage Class
+
+QImage Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qimage.html
+
+
+Parameters : void
+
+* bool allGray(void)
+* int bitPlaneCount(void)
+* uchar *bits(void)
+* int byteCount(void)
+* int bytesPerLine(void)
+* qint64 cacheKey(void)
+* QRgb color(int i)
+* int colorCount(void)
+* const uchar *constBits(void)
+* const uchar *constScanLine(int i)
+* QImage convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags)
+* QImage copy(int x, int y, int width, int height)
+* QImage createAlphaMask(Qt::ImageConversionFlags flags)
+* QImage createHeuristicMask(bool clipTight)
+* QImage createMaskFromColor(QRgb color, Qt::MaskMode mode)
+* int depth(void)
+* int dotsPerMeterX(void)
+* int dotsPerMeterY(void)
+* void fill(QColor)
+* QImage::Format format(void)
+* bool hasAlphaChannel(void)
+* int height(void)
+* void invertPixels(QImage::InvertMode mode)
+* bool isGrayscale(void)
+* bool isNull(void)
+* bool load(QString, const char *format) # In RingQt use : bool loadimage(QString, const char *format)
+* bool loadFromData(QByteArray, const char * format)
+* QImage mirrored(bool horizontal, bool vertical)
+* QPoint offset(void)
+* QRgb pixel(int x, int y)
+* int pixelIndex(int x, int y)
+* QRect rect(void)
+* QImage rgbSwapped(void)
+* bool save(QString, const char * format, int quality)
+* QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* QImage scaledToHeight(int height, Qt::TransformationMode mode )
+* QImage scaledToWidth(int width, Qt::TransformationMode mode)
+* uchar *scanLine(int i)
+* void setColor(int index, QRgb colorValue)
+* void setColorCount(int colorCount)
+* void setDotsPerMeterX(int x)
+* void setDotsPerMeterY(int y)
+* void setOffset(QPoint)
+* void setPixel(int x, int y, uint index_or_rgb)
+* void setText(QString,QString)
+* QSize size(void)
+* void swap(QImage)
+* QString text(QString)
+* QStringList textKeys(void)
+* QImage transformed(QMatrix, Qt::TransformationMode mode)
+* bool valid(int x, int y)
+* int width(void)
+
+.. index::
+       pair: RingQt Classes Reference; QInputAspect Class
+
+QInputAspect Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dinput-qinputaspect.html
+
+
+Parameters : QObject *
+
+* QStringList availablePhysicalDevices(void)
+* Qt3DInput::QAbstractPhysicalDevice * createPhysicalDevice(QString name)
+
+.. index::
+       pair: RingQt Classes Reference; QInputDialog Class
+
+QInputDialog Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qinputdialog.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QDialog
+
+* QString cancelButtonText(void)
+* QStringList comboBoxItems(void)
+* int doubleDecimals(void)
+* double doubleMaximum(void)
+* double doubleMinimum(void)
+* double doubleValue(void)
+* int inputMode(void)
+* int intMaximum(void)
+* int intMinimum(void)
+* int intStep(void)
+* int intValue(void)
+* bool isComboBoxEditable(void)
+* QString labelText(void)
+* QString okButtonText(void)
+* void open(QObject *receiver, const char *member)
+* int options(void)
+* void setCancelButtonText(QString)
+* void setComboBoxEditable(bool editable)
+* void setComboBoxItems(QStringList)
+* void setDoubleDecimals(int decimals)
+* void setDoubleMaximum(double max)
+* void setDoubleMinimum(double min)
+* void setDoubleRange(double min, double max)
+* void setDoubleValue(double value)
+* void setInputMode(QInputDialog::InputMode mode)
+* void setIntMaximum(int max)
+* void setIntMinimum(int min)
+* void setIntRange(int min, int max)
+* void setIntStep(int step)
+* void setIntValue(int value)
+* void setLabelText(QString)
+* void setOkButtonText(QString)
+* void setOption(QInputDialog::InputDialogOption option, bool on)
+* void setOptions(QInputDialog::InputDialogOption options)
+* void setTextEchoMode(QLineEdit::EchoMode mode)
+* void setTextValue(QString)
+* bool testOption(QInputDialog::InputDialogOption option)
+* int textEchoMode(void)
+* QString textValue(void)
+* double getDouble(QWidget *parent,QString,QString, double value, double min, double max , int decimals, bool *ok, Qt::WindowType flags)
+* int getInt(QWidget *parent,QString,QString, int value, int min, int max, int step, bool *ok, Qt::WindowType flags)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonArray Class
+
+QJsonArray Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonarray.html
+
+
+Parameters : void
+
+* void append(QJsonValue  value)
+* QJsonValue at(int i)
+* bool contains(QJsonValue  value)
+* int count(void)
+* bool empty(void)
+* QJsonValue first(void)
+* void insert(int i, QJsonValue  value)
+* bool isEmpty(void)
+* QJsonValue last(void)
+* void pop_back(void)
+* void pop_front(void)
+* void prepend(QJsonValue  value)
+* void push_back(QJsonValue  value)
+* void push_front(QJsonValue  value)
+* void removeAt(int i)
+* void removeFirst(void)
+* void removeLast(void)
+* void replace(int i, QJsonValue  value)
+* int size(void)
+* QJsonValue takeAt(int i)
+* QVariantList toVariantList(void)
+* QJsonArray fromStringList(QStringList  list)
+* QJsonArray fromVariantList(QVariantList  list)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonDocument Class
+
+QJsonDocument Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsondocument.html
+
+
+Parameters : void
+
+* QJsonArray array(void)
+* bool isArray(void)
+* bool isEmpty(void)
+* bool isNull(void)
+* bool isObject(void)
+* QJsonObject object(void)
+* const char * rawData(int * size)
+* void setArray(QJsonArray  array)
+* void setObject(QJsonObject  object)
+* QByteArray toBinaryData(void)
+* QByteArray toJson(QJsonDocument::JsonFormat format)
+* QVariant toVariant(void)
+* QJsonDocument fromBinaryData( QByteArray  data, QJsonDocument::DataValidation validation)
+* QJsonDocument fromJson( QByteArray  json, QJsonParseError * error)
+* QJsonDocument fromRawData( char * data, int size, QJsonDocument::DataValidation validation)
+* QJsonDocument fromVariant( QVariant  variant)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonObject Class
+
+QJsonObject Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonobject.html
+
+
+Parameters : void
+
+* bool contains(QString  key)
+* int count(void)
+* bool empty(void)
+* bool isEmpty(void)
+* QStringList keys(void)
+* int length(void)
+* void remove(QString  key)
+* int size(void)
+* QJsonValue take(QString  key)
+* QVariantMap toVariantMap(void)
+* QJsonValue value(QString  key)
+* QJsonObject fromVariantMap(QVariantMap  map)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonParseError Class
+
+QJsonParseError Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonparseerror.html
+
+
+Parameters : void
+
+* QString errorString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonValue Class
+
+QJsonValue Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonvalue.html
+
+
+Parameters : void
+
+* bool isArray(void)
+* bool isBool(void)
+* bool isDouble(void)
+* bool isNull(void)
+* bool isObject(void)
+* bool isString(void)
+* bool isUndefined(void)
+* QJsonArray toArray(QJsonArray  defaultValue)
+* QJsonArray toArray_2(void)
+* bool toBool(bool defaultValue  )
+* double toDouble(double defaultValue )
+* int toInt(int defaultValue )
+* QJsonObject toObject(QJsonObject  defaultValue)
+* QJsonObject toObject_2(void)
+* QString toString(QString  defaultValue  )
+* QVariant toVariant(void)
+* QJsonValue::Type type(void)
+* QJsonValue fromVariant(QVariant  variant)
+
+.. index::
+       pair: RingQt Classes Reference; QKeySequence Class
+
+QKeySequence Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qkeysequence.html
+
+
+Parameters : QString
+
+
+.. index::
+       pair: RingQt Classes Reference; QLCDNumber Class
+
+QLCDNumber Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlcdnumber.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QFrame
+
+* bool checkOverflow(double num)
+* int digitCount(void)
+* int intValue(void)
+* int mode(void)
+* int segmentStyle(void)
+* void setDigitCount(int numDigits)
+* void setMode(QLCDNumber::Mode)
+* void setSegmentStyle(QLCDNumber::SegmentStyle)
+* bool smallDecimalPoint(void)
+* double value(void)
+* void display(double)
+* void setBinMode(void)
+* void setDecMode(void)
+* void setHexMode(void)
+* void setOctMode(void)
+* void setSmallDecimalPoint(bool)
+
+.. index::
+       pair: RingQt Classes Reference; QLabel Class
+
+QLabel Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlabel.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* 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)
+* QString selectedText(void)
+* int selectionStart(void)
+* void setAlignment(Qt::AlignmentFlag)
+* void setBuddy(QWidget *buddy)
+* void setIndent(int)
+* void setMargin(int)
+* void setOpenExternalLinks(bool open)
+* void setScaledContents(bool)
+* void setSelection(int start, int length)
+* void setTextFormat(Qt::TextFormat)
+* void setTextInteractionFlags(Qt::TextInteractionFlag flags)
+* void setWordWrap(bool on)
+* QString text(void)
+* int textFormat(void)
+* int textInteractionFlags(void)
+* bool wordWrap(void)
+* void clear(void)
+* void setMovie(QMovie *movie)
+* void setNum(double num)
+* void setPicture(QPicture)
+* void setPixmap(QPixmap)
+* void setText(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QLayout Class
+
+QLayout Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlayout.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QObject
+
+* bool activate(void)
+* void addWidget(QWidget *w)
+* QMargins contentsMargins(void)
+* QRect contentsRect(void)
+* void getContentsMargins(int *left, int *top, int *right, int *bottom)
+* bool isEnabled(void)
+* QWidget *menuBar(void)
+* QWidget *parentWidget(void)
+* void removeItem(QLayoutItem *item)
+* void removeWidget(QWidget *widget)
+* bool setAlignment(QWidget *w, Qt::Alignment alignment)
+* void setAlignment_2(Qt::Alignment alignment)
+* bool setAlignment_3(QLayout *l, Qt::Alignment alignment)
+* void setContentsMargins(int left, int top, int right, int bottom)
+* void setContentsMargins_2(QMargins margins)
+* void setEnabled(bool enable)
+* void setMenuBar(QWidget *widget)
+* void setSizeConstraint(QLayout::SizeConstraint)
+* void setSpacing(int)
+* QLayout::SizeConstraint sizeConstraint(void)
+* int spacing(void)
+* void update(void)
+* QSize  closestAcceptableSize( QWidget * widget,  QSize   size)
+
+.. index::
+       pair: RingQt Classes Reference; QLineEdit Class
+
+QLineEdit Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlineedit.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* int alignment(void)
+* void backspace(void)
+* QCompleter *completer(void)
+* QMenu *createStandardContextMenu(void)
+* void cursorBackward(bool mark, int steps)
+* void cursorForward(bool mark, int steps)
+* int cursorMoveStyle(void)
+* int cursorPosition(void)
+* int cursorPositionAt(QPoint)
+* void cursorWordBackward(bool mark)
+* void cursorWordForward(bool mark)
+* void del(void)
+* void deselect(void)
+* QString displayText(void)
+* bool dragEnabled(void)
+* int echoMode(void)
+* void end(bool mark) # In RingQt use : void endtext(bool mark)
+* void getTextMargins(int *left, int *top, int *right, int *bottom)
+* bool hasAcceptableInput(void)
+* bool hasFrame(void)
+* bool hasSelectedText(void)
+* void home(bool mark)
+* QString inputMask(void)
+* void insert(QString)
+* bool isModified(void)
+* bool isReadOnly(void)
+* bool isRedoAvailable(void)
+* bool isUndoAvailable(void)
+* int maxLength(void)
+* QString placeholderText(void)
+* QString selectedText(void)
+* int selectionStart(void)
+* void setAlignment(Qt::AlignmentFlag flag)
+* void setCompleter(QCompleter *c)
+* void setCursorMoveStyle(Qt::CursorMoveStyle style)
+* void setCursorPosition(int)
+* void setDragEnabled(bool b)
+* void setEchoMode(QLineEdit::EchoMode)
+* void setFrame(bool)
+* void setInputMask(QString)
+* void setMaxLength(int)
+* void setModified(bool)
+* void setPlaceholderText(QString)
+* void setReadOnly(bool)
+* void setSelection(int start, int length)
+* void setTextMargins(int left, int top, int right, int bottom)
+* void setValidator(QValidator *v)
+* QString text(void)
+* QMargins textMargins(void)
+* QValidator *validator(void)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void paste(void)
+* void redo(void)
+* void selectAll(void)
+* void setText(QString)
+* void undo(void)
+* void setTextChangedEvent(const char *)
+* void setcursorPositionChangedEvent(const char *)
+* void seteditingFinishedEvent(const char *)
+* void setreturnPressedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void settextEditedEvent(const char *)
+* const char *getTextChangedEvent(void)
+* const char *getcursorPositionChangedEvent(void)
+* const char *geteditingFinishedEvent(void)
+* const char *getreturnPressedEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettextEditedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QLinearGradient Class
+
+QLinearGradient Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlineargradient.html
+
+
+Parameters : void
+
+
+Parent Class : QGradient
+
+* QPointF finalStop(void)
+* void setFinalStop(QPointF stop)
+* void setFinalStop_2(qreal x,qreal y)
+* void setStart(QPointF start)
+* void setStart_2(qreal x,qreal y)
+* QPointF start(void)
+
+.. index::
+       pair: RingQt Classes Reference; QListView Class
+
+QListView Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlistview.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractItemView
+
+* int  batchSize(void)
+* void  clearPropertyFlags(void)
+* QListView::Flow  flow(void)
+* QSize  gridSize(void)
+* bool  isRowHidden(int row)
+* bool  isSelectionRectVisible(void)
+* bool  isWrapping(void)
+* QListView::LayoutMode  layoutMode(void)
+* int  modelColumn(void)
+* QListView::Movement  movement(void)
+* QListView::ResizeMode  resizeMode(void)
+* void  setBatchSize(int batchSize)
+* void  setFlow(QListView::Flow flow)
+* void  setGridSize( QSize   size)
+* void  setLayoutMode(QListView::LayoutMode mode)
+* void  setModelColumn(int column)
+* void  setMovement(QListView::Movement movement)
+* void  setResizeMode(QListView::ResizeMode mode)
+* void  setRowHidden(int row, bool hide)
+* void  setSelectionRectVisible(bool show)
+* void  setSpacing(int space)
+* void  setUniformItemSizes(bool enable)
+* void  setViewMode(QListView::ViewMode mode)
+* void  setWordWrap(bool on)
+* void  setWrapping(bool enable)
+* int  spacing(void)
+* bool  uniformItemSizes(void)
+* QListView::ViewMode  viewMode(void)
+* bool  wordWrap(void)
+
+.. index::
+       pair: RingQt Classes Reference; QListWidget Class
+
+QListWidget Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlistwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QListView
+
+* void addItem(QString)
+* int count(void)
+* void editItem(QListWidgetItem *item)
+* bool isSortingEnabled(void)
+* QListWidgetItem *item(int row)
+* QListWidgetItem *itemAt(int x, int y)
+* QWidget *itemWidget(QListWidgetItem *item)
+* void openPersistentEditor(QListWidgetItem *item)
+* void removeItemWidget(QListWidgetItem *item)
+* int row(QListWidgetItem *item)
+* void setCurrentRow(int row, QItemSelectionModel::SelectionFlag command)
+* void setItemWidget(QListWidgetItem *item, QWidget *widget)
+* void setSortingEnabled(bool enable)
+* void sortItems(Qt::SortOrder order)
+* QListWidgetItem *takeItem(int row)
+* QRect visualItemRect(QListWidgetItem *item)
+* void clear(void)
+* void scrollToItem(QListWidgetItem *item,QAbstractItemView::ScrollHint hint)
+* void setcurrentItemChangedEvent(const char *)
+* void setcurrentRowChangedEvent(const char *)
+* void setcurrentTextChangedEvent(const char *)
+* void setitemActivatedEvent(const char *)
+* void setitemChangedEvent(const char *)
+* void setitemClickedEvent(const char *)
+* void setitemDoubleClickedEvent(const char *)
+* void setitemEnteredEvent(const char *)
+* void setitemPressedEvent(const char *)
+* void setitemSelectionChangedEvent(const char *)
+* const char *getcurrentItemChangedEvent(void)
+* const char *getcurrentRowChangedEvent(void)
+* const char *getcurrentTextChangedEvent(void)
+* const char *getitemActivatedEvent(void)
+* const char *getitemChangedEvent(void)
+* const char *getitemClickedEvent(void)
+* const char *getitemDoubleClickedEvent(void)
+* const char *getitemEnteredEvent(void)
+* const char *getitemPressedEvent(void)
+* const char *getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QListWidgetItem Class
+
+QListWidgetItem Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlistwidgetitem.html
+
+
+Parameters : void
+
+* QBrush background(void)
+* Qt::CheckState checkState(void)
+* Qt::ItemFlags flags(void)
+* QFont font(void)
+* QBrush foreground(void)
+* QIcon icon(void)
+* bool isHidden(void)
+* bool isSelected(void)
+* QListWidget *listWidget(void)
+* void setBackground(QBrush brush)
+* void setCheckState(Qt::CheckState state)
+* void setFlags(Qt::ItemFlags flags)
+* void setFont(QFont font)
+* void setForeground(QBrush brush)
+* void setHidden(bool hide)
+* void setIcon(QIcon icon)
+* void setSelected(bool select)
+* void setSizeHint(QSize size)
+* void setStatusTip(QString statusTip)
+* void setText(QString text)
+* void setTextAlignment(int alignment)
+* void setToolTip(QString toolTip)
+* void setWhatsThis(QString whatsThis)
+* QSize sizeHint(void)
+* QString statusTip(void)
+* QString text(void)
+* int textAlignment(void)
+* QString toolTip(void)
+* int type(void)
+* QString whatsThis(void)
+
+.. index::
+       pair: RingQt Classes Reference; QLogicAspect Class
+
+QLogicAspect Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dlogic-qlogicaspect.html
+
+
+Parameters : QObject *
+
+
+Parent Class : Qt3DCore::QAbstractAspect
+
+.. index::
+       pair: RingQt Classes Reference; QMainWindow Class
+
+QMainWindow Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmainwindow.html
+
+
+Parameters : void
+
+
+Parent Class : QWidget
+
+* void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
+* QToolBar *addToolBar(QString)
+* void addToolBar_2(Qt::ToolBarArea area, QToolBar *toolbar)
+* void addToolBarBreak(Qt::ToolBarArea)
+* QWidget *centralWidget(void)
+* int corner(Qt::Corner corner)
+* QMenu *createPopupMenu(void)
+* int dockOptions(void)
+* int dockWidgetArea(QDockWidget *dockwidget)
+* bool documentMode(void)
+* QSize iconSize(void)
+* void insertToolBar(QToolBar *before, QToolBar *toolbar)
+* void insertToolBarBreak(QToolBar *before)
+* bool isAnimated(void)
+* bool isDockNestingEnabled(void)
+* QMenuBar *menuBar(void)
+* QWidget *menuWidget(void)
+* void removeDockWidget(QDockWidget *dockwidget)
+* void removeToolBar(QToolBar *toolbar)
+* void removeToolBarBreak(QToolBar *before)
+* bool restoreDockWidget(QDockWidget *dockwidget)
+* bool restoreState(QByteArray state, int version)
+* QByteArray saveState(int version)
+* void setCentralWidget(QWidget *widget)
+* void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)
+* void setDockOptions(QMainWindow::DockOption options)
+* void setDocumentMode(bool enabled)
+* void setIconSize(QSize)
+* void setMenuBar(QMenuBar *menuBar)
+* void setMenuWidget(QWidget *menuBar)
+* void setStatusBar(QStatusBar *statusbar)
+* void setTabPosition(Qt::DockWidgetArea areas, QTabWidget::TabPosition tabPosition)
+* void setTabShape(QTabWidget::TabShape tabShape)
+* void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
+* void setUnifiedTitleAndToolBarOnMac(bool set)
+* void splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
+* QStatusBar *statusBar(void)
+* int tabPosition(Qt::DockWidgetArea area)
+* int tabShape(void)
+* void tabifyDockWidget(QDockWidget *first, QDockWidget *second)
+* int toolBarArea(QToolBar *toolbar)
+* bool toolBarBreak(QToolBar *toolbar)
+* int toolButtonStyle(void)
+* bool unifiedTitleAndToolBarOnMac(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMaterial Class
+
+QMaterial Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : Qt3DCore::QComponent
+
+* void addParameter(Qt3DRender::QParameter *parameter)
+* Qt3DRender::QEffect * effect(void)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void setEffect(Qt3DRender::QEffect *effect)
+
+.. index::
+       pair: RingQt Classes Reference; QMatrix4x4 Class
+
+QMatrix4x4 Class
+================
+
+
+Parameters : qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal
+
+* QVector4D column(int index)
+* qreal * constData(void)
+* qreal * data_2(void)
+* qreal determinant(void)
+* void fill(qreal value)
+* void flipCoordinates(void)
+* void frustum(qreal left, qreal right, qreal bottom, qreal top, qreal nearPlane, qreal farPlane)
+* QMatrix4x4 inverted(bool * invertible)
+* bool isIdentity(void)
+* void lookAt(QVector3D eye, QVector3D center, QVector3D up)
+* QPoint map(QPoint point)
+* QPointF map_2(QPointF point)
+* QVector3D map_3(QVector3D point)
+* QVector4D map_4(QVector4D point)
+* QRect mapRect(QRect rect)
+* QRectF mapRect_2(QRectF rect)
+* QVector3D mapVector(QVector3D vector)
+* QMatrix3x3 normalMatrix(void)
+* void optimize(void)
+* void ortho(qreal left, qreal right, qreal bottom, qreal top, qreal nearPlane, qreal farPlane)
+* void ortho_2(QRect rect)
+* void ortho_3(QRectF rect)
+* void perspective(qreal angle, qreal aspect, qreal nearPlane, qreal farPlane)
+* void rotate(qreal angle, QVector3D vector)
+* void rotate_2(QQuaternion quaternion)
+* void rotate_3(qreal angle, qreal x, qreal y, qreal z)
+* QVector4D row(int index)
+* void scale(QVector3D vector)
+* void scale_2(qreal x, qreal y)
+* void scale_3(qreal x, qreal y, qreal z)
+* void scale_4(qreal factor)
+* void setColumn(int index, QVector4D value)
+* void setRow(int index, QVector4D value)
+* void setToIdentity(void)
+* QMatrix toAffine(void)
+* QTransform toTransform_2(qreal distanceToPlane)
+* void translate(QVector3D vector)
+* void translate_2(qreal x, qreal y)
+* void translate_3(qreal x, qreal y, qreal z)
+* QMatrix4x4 transposed(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMdiArea Class
+
+QMdiArea Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmdiarea.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* QMdiArea::WindowOrder activationOrder(void)
+* QMdiSubWindow * activeSubWindow(void)
+* QMdiSubWindow * addSubWindow(QWidget * widget, Qt::WindowFlags windowFlags )
+* QBrush background(void)
+* QMdiSubWindow * currentSubWindow(void)
+* bool documentMode(void)
+* void removeSubWindow(QWidget * widget)
+* void setActivationOrder(QMdiArea::WindowOrder order)
+* void setBackground( QBrush   background)
+* void setDocumentMode(bool enabled)
+* void setOption(QMdiArea::AreaOption option, bool on )
+* void setTabPosition(QTabWidget::TabPosition position)
+* void setTabShape(QTabWidget::TabShape shape)
+* void setTabsClosable(bool closable)
+* void setTabsMovable(bool movable)
+* void setViewMode(QMdiArea::ViewMode mode)
+* QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder order )
+* QTabWidget::TabPosition tabPosition(void)
+* QTabWidget::TabShape tabShape(void)
+* bool tabsClosable(void)
+* bool tabsMovable(void)
+* bool testOption(QMdiArea::AreaOption option)
+* QMdiArea::ViewMode viewMode(void)
+* void activateNextSubWindow(void)
+* void activatePreviousSubWindow(void)
+* void cascadeSubWindows(void)
+* void closeActiveSubWindow(void)
+* void closeAllSubWindows(void)
+* void setActiveSubWindow(QMdiSubWindow * window)
+* void tileSubWindows(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMdiSubWindow Class
+
+QMdiSubWindow Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmdisubwindow.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* bool isShaded(void)
+* int keyboardPageStep(void)
+* int keyboardSingleStep(void)
+* QMdiArea * mdiArea(void)
+* void setKeyboardPageStep(int step)
+* void setKeyboardSingleStep(int step)
+* void setOption(QMdiSubWindow::SubWindowOption option, bool on )
+* void setSystemMenu(QMenu * systemMenu)
+* void setWidget(QWidget * widget)
+* QMenu * systemMenu(void)
+* bool testOption(QMdiSubWindow::SubWindowOption option)
+* QWidget * widget(void)
+* void showShaded(void)
+* void showSystemMenu(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMediaObject Class
+
+QMediaObject Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmediaobject.html
+
+
+Parameters : void
+
+
+Parent Class : QWidget
+
+* QStringList availableMetaData(void)
+* bool isMetaDataAvailable(void)
+* QVariant metaData( QString   key)
+* int notifyInterval(void)
+* void setNotifyInterval(int milliSeconds)
+
+.. index::
+       pair: RingQt Classes Reference; QMediaPlayer Class
+
+QMediaPlayer Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmediaplayer.html
+
+
+Parameters : void
+
+* int bufferStatus(void)
+* QMediaContent currentMedia(void)
+* QNetworkConfiguration currentNetworkConfiguration(void)
+* int duration(void)
+* int error(void)
+* QString errorString(void)
+* bool isAudioAvailable(void)
+* bool isMuted(void)
+* bool isSeekable(void)
+* bool isVideoAvailable(void)
+* QMediaContent media(void)
+* int mediaStatus(void)
+* QIODevice *mediaStream(void)
+* qreal playbackRate(void)
+* QMediaPlaylist *playlist(void)
+* int position(void)
+* void setVideoOutput(QVideoWidget *output)
+* int volume(void)
+* void pause(void)
+* void play(void)
+* void setMuted(bool muted)
+* void setPlaylist(QMediaPlaylist *playlist)
+* void setPosition(int position)
+* void setVolume(int volume)
+* void stop(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMediaPlaylist Class
+
+QMediaPlaylist Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmediaplaylist.html
+
+
+Parameters : void
+
+* int currentIndex(void)
+* QMediaContent currentMedia(void)
+* int error(void)
+* QString errorString(void)
+* bool insertMedia(int pos, QMediaContent)
+* bool isReadOnly(void)
+* QMediaContent media(int index)
+* int mediaCount(void)
+* int nextIndex(int steps)
+* int playbackMode(void)
+* int previousIndex(int steps)
+* bool save(QUrl, const char * format)
+* void next(void) # In RingQt use : void movenext(void)
+* void previous(void)
+* void setCurrentIndex(int playlistPosition)
+* void shuffle(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMenu Class
+
+QMenu Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmenu.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QAction *actionAt(QPoint)
+* QRect actionGeometry(QAction *act)
+* QAction *activeAction(void)
+* void addAction(QAction *)
+* QMenu *addMenu(QString)
+* QAction *addSeparator(void)
+* void clear(void)
+* QAction *defaultAction(void)
+* QAction *exec(const QPoint &)
+* QAction *exec_2(void)
+* QAction *exec_3(const QPoint &,QAction *)
+* void hideTearOffMenu(void)
+* QIcon icon(void)
+* QAction *insertMenu(QAction *before, QMenu *menu)
+* QAction *insertSeparator(QAction *before)
+* bool isEmpty(void)
+* bool isTearOffEnabled(void)
+* bool isTearOffMenuVisible(void)
+* QAction *menuAction(void)
+* void popup(QPoint, QAction *atAction)
+* bool separatorsCollapsible(void)
+* void setActiveAction(QAction *act)
+* void setDefaultAction(QAction *act)
+* void setIcon(QIcon)
+* void setSeparatorsCollapsible(bool collapse)
+* void setTearOffEnabled(bool)
+* void setTitle(QString)
+* QString title(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMenuBar Class
+
+QMenuBar Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmenubar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QAction *actionAt(QPoint)
+* QRect actionGeometry(QAction *act)
+* QAction *activeAction(void)
+* QAction *addAction(QString)
+* QAction *addSeparator(void)
+* void clear(void)
+* QWidget *cornerWidget(Qt::Corner)
+* QAction *insertSeparator(QAction *before)
+* bool isDefaultUp(void)
+* bool isNativeMenuBar(void)
+* void setActiveAction(QAction *act)
+* void setCornerWidget(QWidget *widget, Qt::Corner)
+* void setNativeMenuBar(bool nativeMenuBar)
+
+.. index::
+       pair: RingQt Classes Reference; QMesh Class
+
+QMesh Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QString meshName(void)
+* QUrl source(void)
+* Qt3DRender::QMesh::Status status(void)
+* void setMeshName(QString meshName)
+* void setSource(QUrl source)
+
+.. index::
+       pair: RingQt Classes Reference; QMessageBox Class
+
+QMessageBox Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmessagebox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QDialog
+
+* void addButton(QAbstractButton *button, QMessageBox::ButtonRole role)
+* QAbstractButton *button(QMessageBox::StandardButton which)
+* int buttonRole(QAbstractButton *button)
+* QAbstractButton *clickedButton(void)
+* QPushButton *defaultButton(void)
+* QString detailedText(void)
+* QAbstractButton *escapeButton(void)
+* QPixmap iconPixmap(void)
+* QString informativeText(void)
+* void open(QObject *receiver, const char *member)
+* void removeButton(QAbstractButton *button)
+* void setDefaultButton(QPushButton *button)
+* void setDetailedText(QString)
+* void setEscapeButton(QAbstractButton *button)
+* void setIconPixmap(QPixmap)
+* void setInformativeText(QString)
+* void setStandardButtons(QMessageBox::StandardButton buttons)
+* void setText(QString)
+* void setTextFormat(Qt::TextFormat format)
+* void setWindowModality(Qt::WindowModality windowModality)
+* void setWindowTitle(QString)
+* int standardButton(QAbstractButton *button)
+* int standardButtons(void)
+* QString text(void)
+* int textFormat(void)
+* int exec(void)
+* void about(QWidget *parent, QString,QString)
+* void aboutQt(QWidget *parent, QString)
+* int critical(QWidget * parent, QString , QString, int buttons, int defaultButton)
+* int information(QWidget * parent, QString ,QString, int buttons,int defaultButton)
+* int question(QWidget * parent,QString,QString, int buttons ,int  defaultButton)
+* int warning(QWidget *parent, QString,QString, int buttons,int defaultButton)
+
+.. index::
+       pair: RingQt Classes Reference; QMetalRoughMaterial Class
+
+QMetalRoughMaterial Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qmetalroughmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QVariant ambientOcclusion(void)
+* QVariant baseColor(void)
+* QVariant metalness(void)
+* QVariant normal(void)
+* QVariant roughness(void)
+* float textureScale(void)
+* void setAmbientOcclusion(QVariant ambientOcclusion)
+* void setBaseColor(QVariant baseColor)
+* void setMetalness(QVariant metalness)
+* void setNormal(QVariant normal)
+* void setRoughness(QVariant roughness)
+* void setTextureScale(float textureScale)
+
+.. index::
+       pair: RingQt Classes Reference; QMimeData Class
+
+QMimeData Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmimedata.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* void clear(void)
+* QVariant colorData(void)
+* QByteArray data(QString mimeType)
+* QStringList formats(void)
+* bool hasColor(void)
+* bool hasFormat(QString mimeType)
+* bool hasHtml(void)
+* bool hasImage(void)
+* bool hasText(void)
+* bool hasUrls(void)
+* QString html(void)
+* QVariant imageData(void)
+* void removeFormat(QString mimeType)
+* void setColorData(QVariant color)
+* void setData(QString mimeType, QByteArray data)
+* void setHtml(QString html)
+* void setImageData(QVariant image)
+* void setText(QString text)
+* void setUrls(QList<QUrl> urls)
+* QString text(void)
+* QList<QUrl> urls(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMorphPhongMaterial Class
+
+QMorphPhongMaterial Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmorphphongmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QColor ambient(void)
+* QColor diffuse(void)
+* float interpolator(void)
+* float shininess(void)
+* QColor specular(void)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QColor diffuse)
+* void setInterpolator(float interpolator)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+
+.. index::
+       pair: RingQt Classes Reference; QMutex Class
+
+QMutex Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmutex.html
+
+
+Parameters : QMutex::RecursionMode
+
+* bool isRecursive(void)
+* void lock(void)
+* void unlock(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMutexLocker Class
+
+QMutexLocker Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmutexlocker.html
+
+
+Parameters : QMutex *
+
+* QMutex * mutex(void)
+* void relock(void)
+* void unlock(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkAccessManager Class
+
+QNetworkAccessManager Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkaccessmanager.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* void setfinishedEvent(const char *)
+* const char *getfinishedEvent(void)
+* QNetworkConfiguration activeConfiguration(void)
+* QAbstractNetworkCache *cache(void)
+* void clearAccessCache(void)
+* QNetworkConfiguration configuration(void)
+* void connectToHost(QString, quint16)
+* QNetworkReply *deleteResource(QNetworkRequest)
+* QNetworkReply *get(QNetworkRequest) # In RingQt use : QNetworkReply *getvalue(QNetworkRequest)
+* QNetworkReply *head(QNetworkRequest)
+* QNetworkAccessManager::NetworkAccessibility networkAccessible(void)
+* QNetworkReply *post(QNetworkRequest, QByteArray)
+* QNetworkProxy proxy(void)
+* QNetworkProxyFactory *proxyFactory(void)
+* QNetworkReply *put(QNetworkRequest, QByteArray) # In RingQt use : QNetworkReply *putvalue(QNetworkRequest, QByteArray)
+* QNetworkReply *sendCustomRequest(QNetworkRequest, QByteArray, QIODevice *)
+* void setCache(QAbstractNetworkCache *cache)
+* void setConfiguration(QNetworkConfiguration)
+* void setCookieJar(QNetworkCookieJar *cookieJar)
+* void setNetworkAccessible(QNetworkAccessManager::NetworkAccessibility accessible)
+* void setProxy(QNetworkProxy)
+* void setProxyFactory(QNetworkProxyFactory *factory)
+* QStringList supportedSchemes(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkProxy Class
+
+QNetworkProxy Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkproxy.html
+
+
+Parameters : void
+
+* int capabilities(void)
+* bool hasRawHeader(QByteArray headerName)
+* QVariant header(QNetworkRequest::KnownHeaders header)
+* QString hostName(void)
+* bool isCachingProxy(void)
+* bool isTransparentProxy(void)
+* QString password(void)
+* int port(void)
+* QByteArray rawHeader(QByteArray headerName)
+* void setCapabilities(QNetworkProxy::Capability capabilities)
+* void setHeader(QNetworkRequest::KnownHeaders header,  QVariant value)
+* void setHostName(QString hostName)
+* void setPassword(QString password)
+* void setPort(int port)
+* void setRawHeader(QByteArray headerName, QByteArray headerValue)
+* void setType(QNetworkProxy::ProxyType type)
+* void setUser(QString user)
+* void swap(QNetworkProxy  other)
+* int type(void)
+* QString user(void)
+* QNetworkProxy applicationProxy(void)
+* void setApplicationProxy(QNetworkProxy  networkProxy)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkReply Class
+
+QNetworkReply Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkreply.html
+
+
+Parameters : void
+
+
+Parent Class : QIODevice
+
+* QVariant attribute(QNetworkRequest::Attribute code)
+* QNetworkReply::NetworkError error(void)
+* bool hasRawHeader(QByteArray)
+* QVariant header(QNetworkRequest::KnownHeaders header)
+* bool isFinished(void)
+* bool isRunning(void)
+* QNetworkAccessManager *manager(void)
+* QNetworkAccessManager::Operation operation(void)
+* QByteArray rawHeader(QByteArray)
+* qint64 readBufferSize(void)
+* QNetworkRequest request(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkRequest Class
+
+QNetworkRequest Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkrequest.html
+
+
+Parameters : QUrl
+
+* QVariant attribute(QNetworkRequest::Attribute, QVariant)
+* bool hasRawHeader(QByteArray)
+* QVariant header(QNetworkRequest::KnownHeaders)
+* QObject *originatingObject(void)
+* QNetworkRequest::Priority priority(void)
+* QByteArray rawHeader(QByteArray)
+* void setAttribute(QNetworkRequest::Attribute, QVariant)
+* void setHeader(QNetworkRequest::KnownHeaders, QVariant)
+* void setOriginatingObject(QObject *object)
+* void setPriority(QNetworkRequest::Priority priority)
+* void setRawHeader(QByteArray, QByteArray)
+* void swap(QNetworkRequest)
+* QUrl url(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNmeaPositionInfoSource Class
+
+QNmeaPositionInfoSource Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnmeapositioninfosource.html
+
+
+Parameters : QNmeaPositionInfoSource::UpdateMode,QObject *
+
+
+Parent Class : QGeoPositionInfoSource
+
+* QIODevice * device(void)
+* void setDevice(QIODevice * device)
+* QNmeaPositionInfoSource::UpdateMode updateMode(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNode Class
+
+QNode Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qnode.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QObject
+
+* bool blockNotifications(bool block)
+* Qt3DCore::QNodeVector childNodes(void)
+* void clearPropertyTracking(QString propertyName)
+* void clearPropertyTrackings(void)
+* Qt3DCore::QNode::PropertyTrackingMode defaultPropertyTrackingMode(void)
+* Qt3DCore::QNodeId id(void)
+* bool isEnabled(void)
+* bool notificationsBlocked(void)
+* Qt3DCore::QNode * parentNode(void)
+* Qt3DCore::QNode::PropertyTrackingMode propertyTracking(QString propertyName)
+* void setPropertyTracking(QString propertyName, Qt3DCore::QNode::PropertyTrackingMode trackMode)
+* void setDefaultPropertyTrackingMode(Qt3DCore::QNode::PropertyTrackingMode mode)
+* void setEnabled(bool isEnabled)
+* void setParent(Qt3DCore::QNode *parent)
+
+.. index::
+       pair: RingQt Classes Reference; QObject Class
+
+QObject Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qobject.html
+
+
+Parameters : void
+
+* 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)
+* 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 setProperty_2(const char *name, int)
+* bool setProperty_3(const char *name, float)
+* bool setProperty_4(const char *name, double)
+* bool setProperty_5(const char *name, QString)
+* bool setProperty_int(const char *name, int)
+* bool setProperty_float(const char *name, float)
+* bool setProperty_double(const char *name, double)
+* bool setProperty_string(const char *name, QString)
+* bool signalsBlocked(void)
+* int startTimer(int interval)
+* QThread *thread(void)
+* void deleteLater(void)
+
+.. index::
+       pair: RingQt Classes Reference; QObjectPicker Class
+
+QObjectPicker Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qobjectpicker.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool containsMouse(void)
+* bool isDragEnabled(void)
+* bool isHoverEnabled(void)
+* bool isPressed(void)
+* void setDragEnabled(bool dragEnabled)
+* void setHoverEnabled(bool hoverEnabled)
+* void setclickedEvent(const char *)
+* void setcontainsMouseChangedEvent(const char *)
+* void setdragEnabledChangedEvent(const char *)
+* void setenteredEvent(const char *)
+* void setexitedEvent(const char *)
+* void sethoverEnabledChangedEvent(const char *)
+* void setmovedEvent(const char *)
+* void setpressedEvent(const char *)
+* void setpressedChangedEvent(const char *)
+* void setreleasedEvent(const char *)
+* const char *getclickedEvent(void)
+* const char *getcontainsMouseChangedEvent(void)
+* const char *getdragEnabledChangedEvent(void)
+* const char *getenteredEvent(void)
+* const char *getexitedEvent(void)
+* const char *gethoverEnabledChangedEvent(void)
+* const char *getmovedEvent(void)
+* const char *getpressedEvent(void)
+* const char *getpressedChangedEvent(void)
+* const char *getreleasedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLBuffer Class
+
+QOpenGLBuffer Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglbuffer.html
+
+
+Parameters : void
+
+* void allocate(void *data, int count)
+* void allocate_2(int count)
+* bool bind(void)
+* GLuint bufferId(void)
+* bool create(void)
+* void destroy(void)
+* bool isCreated(void)
+* void * map(QOpenGLBuffer::Access access)
+* void release(void)
+* void setUsagePattern(QOpenGLBuffer::UsagePattern value)
+* int size(void)
+* QOpenGLBuffer::Type type(void)
+* bool unmap(void)
+* QOpenGLBuffer::UsagePattern usagePattern(void)
+* void write(int offset, void *data, int count)
+* void release_2(QOpenGLBuffer::Type type)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLContext Class
+
+QOpenGLContext Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglcontext.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* bool create(void)
+* GLuint defaultFramebufferObject(void)
+* void doneCurrent(void)
+* QSet<QByteArray> extensions(void)
+* QOpenGLFunctions * functions(void)
+* QFunctionPointer getProcAddress(QByteArray procName)
+* QFunctionPointer getProcAddress_2(char *procName)
+* bool hasExtension(QByteArray extension)
+* bool isOpenGLES(void)
+* bool isValid(void)
+* bool makeCurrent(QSurface *surface)
+* QVariant nativeHandle(void)
+* QScreen * screen(void)
+* void setFormat(QSurfaceFormat format)
+* void setNativeHandle(QVariant handle)
+* void setScreen(QScreen *screen)
+* void setShareContext(QOpenGLContext *shareContext)
+* QOpenGLContext * shareContext(void)
+* QOpenGLContextGroup * shareGroup(void)
+* QSurface * surface(void)
+* void swapBuffers(QSurface *surface)
+* QAbstractOpenGLFunctions * versionFunctions(QOpenGLVersionProfile versionProfile))
+* TYPE * versionFunctions_2(void)
+* bool areSharing(QOpenGLContext *first, QOpenGLContext *second)
+* QOpenGLContext * currentContext(void)
+* QOpenGLContext * globalShareContext(void)
+* void * openGLModuleHandle(void)
+* QOpenGLContext::OpenGLModuleType openGLModuleType(void)
+* bool supportsThreadedOpenGL(void)
+* QOpenGLFunctions_3_2_Core *opengl32(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLDebugLogger Class
+
+QOpenGLDebugLogger Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopengldebuglogger.html
+
+
+Parameters : QObject *
+
+* void disableMessages(QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types, QOpenGLDebugMessage::Severities severities)
+* void disableMessages_2(QVector<GLuint> ids, QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types)
+* void enableMessages(QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types, QOpenGLDebugMessage::Severities severities)
+* void enableMessages_2(QVector<GLuint> ids, QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types)
+* bool initialize(void)
+* bool isLogging(void)
+* QList<QOpenGLDebugMessage> loggedMessages(void)
+* QOpenGLDebugLogger::LoggingMode loggingMode(void)
+* qint64 maximumMessageLength(void)
+* void popGroup(void)
+* void pushGroup(QString name, GLuint id, QOpenGLDebugMessage::Source source)
+* void logMessage(QOpenGLDebugMessage debugMessage)
+* void startLogging(QOpenGLDebugLogger::LoggingMode loggingMode)
+* void stopLogging(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLFramebufferObject Class
+
+QOpenGLFramebufferObject Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglframebufferobject.html
+
+
+Parameters : int,int,GLenum
+
+* bool bind(void)
+* QOpenGLFramebufferObjectFormat format(void)
+* GLuint handle(void)
+* int height(void)
+* bool isBound(void)
+* bool isValid(void)
+* bool release(void)
+* void setAttachment(QOpenGLFramebufferObject::Attachment attachment)
+* QSize size(void)
+* QImage toImage(bool flipped)
+* QImage toImage_3(bool flipped, int colorQOpenGLFramebufferObject::AttachmentIndex)
+* QImage toImage_2(void)
+* int width(void)
+* bool bindDefault(void)
+* bool hasOpenGLFramebufferObjects(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLFunctions Class
+
+QOpenGLFunctions Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglfunctions.html
+
+
+Parameters : void
+
+* void glActiveTexture(GLenum texture)
+* void glAttachShader(GLuint program, GLuint shader)
+* void glBindAttribLocation(GLuint program, GLuint index, char *name)
+* void glBindBuffer(GLenum target, GLuint buffer)
+* void glBindFramebuffer(GLenum target, GLuint framebuffer)
+* void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+* void glBufferData(GLenum target, qopengl_GLsizeiptr size, void *data, GLenum usage)
+* void glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, void *data)
+* GLenum glCheckFramebufferStatus(GLenum target)
+* void glClear(GLbitfield mask)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepthf(GLclampf depth)
+* void glClearStencil(GLint s)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, void *data)
+* void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, void *data)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum type)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n, GLuint *buffers)
+* void glDeleteFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glDeleteProgram(GLuint program)
+* void glDeleteRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n, GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRangef(GLclampf zNear, GLclampf zFar)
+* void glDetachShader(GLuint program, GLuint shader)
+* void glDisable(GLenum cap)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid *indices)
+* void glEnable(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glFinish(void)
+* void glFlush(void)
+* void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+* void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFrontFace(GLenum mode)
+* void glGenBuffers(GLsizei n, GLuint *buffers)
+* void glGenFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGenerateMipmap(GLenum target)
+* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name)
+* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name)
+* void glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program, char *name)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei *length, char *infolog)
+* void glGetProgramiv(GLuint program, GLenum pname, GLint *params)
+* void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei *length, char *infolog)
+* void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision)
+* void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei *length, char *source)
+* void glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* GLint glGetUniformLocation(GLuint program, char *name)
+* void glGetUniformfv(GLuint program, GLint location, GLfloat *params)
+* void glGetUniformiv(GLuint program, GLint location, GLint *params)
+* void glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsFramebuffer(GLuint framebuffer)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsRenderbuffer(GLuint renderbuffer)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glReleaseShaderCompiler(void)
+* void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+* void glSampleCoverage(GLclampf value, GLboolean invert)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glShaderBinary(GLint n, GLuint *shaders, GLenum binaryformat, void *binary, GLint length)
+* void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face, GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glUniform1f(GLint location, GLfloat x)
+* void glUniform1fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform1i(GLint location, GLint x)
+* void glUniform1iv(GLint location, GLsizei count, GLint *v)
+* void glUniform2f(GLint location, GLfloat x, GLfloat y)
+* void glUniform2fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform2i(GLint location, GLint x, GLint y)
+* void glUniform2iv(GLint location, GLsizei count, GLint *v)
+* void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+* void glUniform3fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform3i(GLint location, GLint x, GLint y, GLint z)
+* void glUniform3iv(GLint location, GLsizei count, GLint *v)
+* void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glUniform4fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+* void glUniform4iv(GLint location, GLsizei count, GLint *v)
+* void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertexAttrib1f(GLuint indx, GLfloat x)
+* void glVertexAttrib1fv(GLuint indx, GLfloat *values)
+* void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
+* void glVertexAttrib2fv(GLuint indx, GLfloat *values)
+* void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
+* void glVertexAttrib3fv(GLuint indx, GLfloat *values)
+* void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertexAttrib4fv(GLuint indx, GLfloat *values)
+* void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void *ptr)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+* bool hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature)
+* void initializeOpenGLFunctions(void)
+* QOpenGLFunctions::OpenGLFeatures openGLFeatures(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLFunctions_3_2_Core Class
+
+QOpenGLFunctions_3_2_Core Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglfunctions_3_2_core.html
+
+
+Parameters : void
+
+* void glActiveTexture(GLenum texture)
+* void glAttachShader(GLuint program, GLuint shader)
+* void glBeginConditionalRender(GLuint id, GLenum mode)
+* void glBeginQuery(GLenum target, GLuint id)
+* void glBeginTransformFeedback(GLenum primitiveMode)
+* void glBindAttribLocation(GLuint program, GLuint index, GLchar *name)
+* void glBindBuffer(GLenum target, GLuint buffer)
+* void glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
+* void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+* void glBindFragDataLocation(GLuint program, GLuint color, GLchar *name)
+* void glBindFramebuffer(GLenum target, GLuint framebuffer)
+* void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBindVertexArray(GLuint array)
+* void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+* void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+* void glBufferData(GLenum target, GLsizeiptr size, GLvoid *data, GLenum usage)
+* void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)
+* GLenum glCheckFramebufferStatus(GLenum target)
+* void glClampColor(GLenum target, GLenum clamp)
+* void glClear(GLbitfield mask)
+* void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+* void glClearBufferfv(GLenum buffer, GLint drawbuffer, GLfloat *value)
+* void glClearBufferiv(GLenum buffer, GLint drawbuffer, GLint *value)
+* void glClearBufferuiv(GLenum buffer, GLint drawbuffer, GLuint *value)
+* void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearDepth(GLdouble depth)
+* void glClearStencil(GLint s)
+* GLenum glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLvoid *data)
+* void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum type)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n, GLuint *buffers)
+* void glDeleteFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n, GLuint *ids)
+* void glDeleteRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glDeleteShader(GLuint shader)
+* void glDeleteSync(GLsync sync)
+* void glDeleteTextures(GLsizei n, GLuint *textures)
+* void glDeleteVertexArrays(GLsizei n, GLuint *arrays)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLdouble nearVal, GLdouble farVal)
+* void glDetachShader(GLuint program, GLuint shader)
+* void glDisable(GLenum cap)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDisablei(GLenum target, GLuint index)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n, GLenum *bufs)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid *indices)
+* void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, GLvoid *indices, GLint basevertex)
+* void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLvoid *indices, GLsizei instancecount)
+* void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, GLvoid *indices, GLsizei instancecount, GLint basevertex)
+* void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid *indices)
+* void glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid *indices, GLint basevertex)
+* void glEnable(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glEnablei(GLenum target, GLuint index)
+* void glEndConditionalRender(void)
+* void glEndQuery(GLenum target)
+* void glEndTransformFeedback(void)
+* GLsync glFenceSync(GLenum condition, GLbitfield flags)
+* void glFinish(void)
+* void glFlush(void)
+* void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+* void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+* void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level)
+* void glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+* void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+* void glFrontFace(GLenum mode)
+* void glGenBuffers(GLsizei n, GLuint *buffers)
+* void glGenFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glGenQueries(GLsizei n, GLuint *ids)
+* void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGenVertexArrays(GLsizei n, GLuint *arrays)
+* void glGenerateMipmap(GLenum target)
+* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
+* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
+* void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
+* void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
+* void glGetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName)
+* void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, GLuint *uniformIndices, GLenum pname, GLint *params)
+* void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj)
+* GLint glGetAttribLocation(GLuint program, GLchar *name)
+* void glGetBooleani_v(GLenum target, GLuint index, GLboolean *data)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
+* void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetCompressedTexImage(GLenum target, GLint level, GLvoid *img)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* GLint glGetFragDataLocation(GLuint program, GLchar *name)
+* void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params)
+* void glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
+* void glGetInteger64v(GLenum pname, GLint64 *params)
+* void glGetIntegeri_v(GLenum target, GLuint index, GLint *data)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
+* void glGetProgramiv(GLuint program, GLenum pname, GLint *params)
+* void glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
+* void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+* void glGetQueryiv(GLenum target, GLenum pname, GLint *params)
+* void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
+* void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
+* void glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
+* GLubyte * glGetString(GLenum name)
+* GLubyte * glGetStringi(GLenum name, GLuint index)
+* void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterIiv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
+* GLuint glGetUniformBlockIndex(GLuint program, GLchar *uniformBlockName)
+* void glGetUniformfv(GLuint program, GLint location, GLfloat *params)
+* void glGetUniformiv(GLuint program, GLint location, GLint *params)
+* void glGetUniformuiv(GLuint program, GLint location, GLuint *params)
+* void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
+* void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
+* void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
+* void glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexub(GLubyte c)
+* void glIndexubv(GLubyte *c)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsEnabledi(GLenum target, GLuint index)
+* GLboolean glIsFramebuffer(GLuint framebuffer)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsRenderbuffer(GLuint renderbuffer)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsSync(GLsync sync)
+* GLboolean glIsTexture(GLuint texture)
+* GLboolean glIsVertexArray(GLuint array)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glLogicOp(GLenum opcode)
+* GLvoid * glMapBuffer(GLenum target, GLenum access)
+* GLvoid * glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+* void glMultiDrawArrays(GLenum mode, GLint *first, GLsizei *count, GLsizei drawcount)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPointParameterf(GLenum pname, GLfloat param)
+* void glPointParameterfv(GLenum pname, GLfloat *params)
+* void glPointParameteri(GLenum pname, GLint param)
+* void glPointParameteriv(GLenum pname, GLint *params)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPrimitiveRestartIndex(GLuint index)
+* void glProvokingVertex(GLenum mode)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+* void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+* void glSampleCoverage(GLfloat value, GLboolean invert)
+* void glSampleMaski(GLuint index, GLbitfield mask)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face, GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
+* void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexImage2DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
+* void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexImage3DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
+* void glTexParameterIiv(GLenum target, GLenum pname, GLint *params)
+* void glTexParameterIuiv(GLenum target, GLenum pname, GLuint *params)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *pixels)
+* void glUniform1fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform1i(GLint location, GLint v0)
+* void glUniform1iv(GLint location, GLsizei count, GLint *value)
+* void glUniform1ui(GLint location, GLuint v0)
+* void glUniform1uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniform2f(GLint location, GLfloat v0, GLfloat v1)
+* void glUniform2fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform2i(GLint location, GLint v0, GLint v1)
+* void glUniform2iv(GLint location, GLsizei count, GLint *value)
+* void glUniform2ui(GLint location, GLuint v0, GLuint v1)
+* void glUniform2uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+* void glUniform3fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2)
+* void glUniform3iv(GLint location, GLsizei count, GLint *value)
+* void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+* void glUniform3uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+* void glUniform4fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+* void glUniform4iv(GLint location, GLsizei count, GLint *value)
+* void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+* void glUniform4uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+* void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* GLboolean glUnmapBuffer(GLenum target)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLPaintDevice Class
+
+QOpenGLPaintDevice Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglpaintdevice.html
+
+
+Parameters : void
+
+
+Parent Class : QPaintDevice
+
+* QOpenGLContext * context(void)
+* qreal dotsPerMeterX(void)
+* qreal dotsPerMeterY(void)
+* void ensureActiveTarget(void)
+* bool paintFlipped(void)
+* void setDevicePixelRatio(qreal devicePixelRatio)
+* void setDotsPerMeterX(qreal dpmx)
+* void setDotsPerMeterY(qreal dpmy)
+* void setPaintFlipped(bool flipped)
+* void setSize(QSize size)
+* QSize size(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLShader Class
+
+QOpenGLShader Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglshader.html
+
+
+Parameters : QOpenGLShader::ShaderType,QObject *
+
+* bool compileSourceCode(char *source)
+* bool compileSourceCode_2(QByteArray source)
+* bool compileSourceCode_3(QString source)
+* bool compileSourceFile(QString fileName)
+* bool isCompiled(void)
+* QString log(void)
+* GLuint shaderId(void)
+* QOpenGLShader::ShaderType shaderType(void)
+* QByteArray sourceCode(void)
+* bool hasOpenGLShaders(QOpenGLShader::ShaderType type, QOpenGLContext *context)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLShaderProgram Class
+
+QOpenGLShaderProgram Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglshaderprogram.html
+
+
+Parameters : QObject *
+
+* bool addShaderFromSourceCode(QOpenGLShader::ShaderType type, char *source)
+* bool addShaderFromSourceCode_2(QOpenGLShader::ShaderType type, QByteArray source)
+* bool addShaderFromSourceCode_3(QOpenGLShader::ShaderType type, QString source)
+* bool addShaderFromSourceFile(QOpenGLShader::ShaderType type, QString fileName)
+* int attributeLocation(char *name)
+* int attributeLocation_2(QByteArray name)
+* int attributeLocation_3(QString name)
+* bool bind(void)
+* void bindAttributeLocation(char *name, int location)
+* void bindAttributeLocation_2(QByteArray name, int location)
+* void bindAttributeLocation_3(QString name, int location)
+* QVector<float> defaultOuterTessellationLevels(void)
+* void disableAttributeArray(int location)
+* void disableAttributeArray_2(char *name)
+* void enableAttributeArray(int location)
+* void enableAttributeArray_2(char *name)
+* bool isLinked(void)
+* bool link(void)
+* QString log(void)
+* int maxGeometryOutputVertices(void)
+* int patchVertexCount(void)
+* GLuint programId(void)
+* void release(void)
+* void removeAllShaders(void)
+* void removeShader(QOpenGLShader *shader)
+* void setAttributeArray(int location, GLfloat *values, int tupleSize, int stride)
+* void setAttributeArray_2(int location, QVector2D *values, int stride)
+* void setAttributeArray_3(int location, QVector3D *values, int stride)
+* void setAttributeArray_4(int location, QVector4D *values, int stride)
+* void setAttributeArray_5(int location, GLenum type, void *values, int tupleSize, int stride)
+* void setAttributeArray_6(char *name, GLfloat *values, int tupleSize, int stride)
+* void setAttributeArray_7(char *name, QVector2D *values, int stride)
+* void setAttributeArray_8(char *name, QVector3D *values, int stride)
+* void setAttributeArray_9(char *name, QVector4D *values, int stride)
+* void setAttributeArray_10(char *name, GLenum type, void *values, int tupleSize, int stride)
+* void setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride)
+* void setAttributeBuffer_2(char *name, GLenum type, int offset, int tupleSize, int stride)
+* void setAttributeValue(int location, GLfloat value)
+* void setAttributeValue_2(int location, GLfloat x, GLfloat y)
+* void setAttributeValue_3(int location, GLfloat x, GLfloat y, GLfloat z)
+* void setAttributeValue_4(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setAttributeValue_5(int location, QVector2D value)
+* void setAttributeValue_6(int location, QVector3D value)
+* void setAttributeValue_7(int location, QVector4D value)
+* void setAttributeValue_8(int location, QColor value)
+* void setAttributeValue_9(int location, GLfloat *values, int columns, int rows)
+* void setAttributeValue_10(char *name, GLfloat value)
+* void setAttributeValue_11(char *name, GLfloat x, GLfloat y)
+* void setAttributeValue_12(char *name, GLfloat x, GLfloat y, GLfloat z)
+* void setAttributeValue_13(char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setAttributeValue_14(char *name, QVector2D value)
+* void setAttributeValue_15(char *name, QVector3D value)
+* void setAttributeValue_16(char *name, QVector4D value)
+* void setDefaultInnerTessellationLevels(QVector<float> levels)
+* void setDefaultOuterTessellationLevels(QVector<float> levels)
+* void setPatchVertexCount(int count)
+* void setUniformValue(int location, GLfloat value)
+* void setUniformValue_2(int location, GLint value)
+* void setUniformValue_3(char *name, QColor color)
+* void setUniformValue_4(char *name, QPoint point)
+* void setUniformValue_5(char *name, QPointF point)
+* void setUniformValue_6(char *name, QSize size)
+* void setUniformValue_7(char *name, QSizeF size)
+* void setUniformValue_8(char *name, QMatrix2x2 value)
+* void setUniformValue_9(char *name, QMatrix2x3 value)
+* void setUniformValue_10(char *name, QMatrix2x4 value)
+* void setUniformValue_11(char *name, QMatrix3x2 value)
+* void setUniformValue_12(char *name, QMatrix3x3 value)
+* void setUniformValue_13(char *name, QMatrix3x4 value)
+* void setUniformValue_14(char *name, QMatrix4x2 value)
+* void setUniformValue_15(char *name, QMatrix4x3 value)
+* void setUniformValue_16(char *name, QMatrix4x4 value)
+* void setUniformValue_21(int location, GLuint value)
+* void setUniformValue_22(int location, GLfloat x, GLfloat y)
+* void setUniformValue_23(int location, GLfloat x, GLfloat y, GLfloat z)
+* void setUniformValue_24(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setUniformValue_25(int location, QVector2D value)
+* void setUniformValue_26(int location, QVector3D value)
+* void setUniformValue_27(int location, QVector4D value)
+* void setUniformValue_28(int location, QColor color)
+* void setUniformValue_29(int location, QPoint point)
+* void setUniformValue_30(int location, QPointF point)
+* void setUniformValue_31(int location, QSize size)
+* void setUniformValue_32(int location, QSizeF size)
+* void setUniformValue_33(int location, QMatrix2x2 value)
+* void setUniformValue_34(int location, QMatrix2x3 value)
+* void setUniformValue_35(int location, QMatrix2x4 value)
+* void setUniformValue_36(int location, QMatrix3x2 value)
+* void setUniformValue_37(int location, QMatrix3x3 value)
+* void setUniformValue_38(int location, QMatrix3x4 value)
+* void setUniformValue_39(int location, QMatrix4x2 value)
+* void setUniformValue_40(int location, QMatrix4x3 value)
+* void setUniformValue_41(int location, QMatrix4x4 value)
+* void setUniformValue_46(char *name, GLfloat value)
+* void setUniformValue_47(char *name, GLint value)
+* void setUniformValue_48(char *name, GLuint value)
+* void setUniformValue_49(char *name, GLfloat x, GLfloat y)
+* void setUniformValue_50(char *name, GLfloat x, GLfloat y, GLfloat z)
+* void setUniformValue_51(char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setUniformValue_52(char *name, QVector2D value)
+* void setUniformValue_53(char *name, QVector3D value)
+* void setUniformValue_54(char *name, QVector4D value)
+* void setUniformValueArray(int location, GLfloat *values, int count, int tupleSize)
+* void setUniformValueArray_2(int location, GLint *values, int count)
+* void setUniformValueArray_3(int location, GLuint *values, int count)
+* void setUniformValueArray_4(int location, QVector2D *values, int count)
+* void setUniformValueArray_5(int location, QVector3D *values, int count)
+* void setUniformValueArray_6(int location, QVector4D *values, int count)
+* void setUniformValueArray_7(int location, QMatrix2x2 *values, int count)
+* void setUniformValueArray_8(int location, QMatrix2x3 *values, int count)
+* void setUniformValueArray_9(int location, QMatrix2x4 *values, int count)
+* void setUniformValueArray_10(int location, QMatrix3x2 *values, int count)
+* void setUniformValueArray_11(int location, QMatrix3x3 *values, int count)
+* void setUniformValueArray_12(int location, QMatrix3x4 *values, int count)
+* void setUniformValueArray_13(int location, QMatrix4x2 *values, int count)
+* void setUniformValueArray_14(int location, QMatrix4x3 *values, int count)
+* void setUniformValueArray_15(int location, QMatrix4x4 *values, int count)
+* void setUniformValueArray_16(char *name, GLfloat *values, int count, int tupleSize)
+* void setUniformValueArray_17(char *name, GLint *values, int count)
+* void setUniformValueArray_18(char *name, GLuint *values, int count)
+* void setUniformValueArray_19(char *name, QVector2D *values, int count)
+* void setUniformValueArray_20(char *name, QVector3D *values, int count)
+* void setUniformValueArray_21(char *name, QVector4D *values, int count)
+* void setUniformValueArray_22(char *name, QMatrix2x2 *values, int count)
+* void setUniformValueArray_23(char *name, QMatrix2x3 *values, int count)
+* void setUniformValueArray_24(char *name, QMatrix2x4 *values, int count)
+* void setUniformValueArray_25(char *name, QMatrix3x2 *values, int count)
+* void setUniformValueArray_26(char *name, QMatrix3x3 *values, int count)
+* void setUniformValueArray_27(char *name, QMatrix3x4 *values, int count)
+* void setUniformValueArray_28(char *name, QMatrix4x2 *values, int count)
+* void setUniformValueArray_29(char *name, QMatrix4x3 *values, int count)
+* void setUniformValueArray_30(char *name, QMatrix4x4 *values, int count)
+* QList<QOpenGLShader *> shaders(void)
+* int uniformLocation(char *name)
+* int uniformLocation_2(QByteArray name)
+* int uniformLocation_3(QString name)
+* bool hasOpenGLShaderPrograms(QOpenGLContext *context)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLTexture Class
+
+QOpenGLTexture Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopengltexture.html
+
+
+Parameters : QOpenGLTexture::Target
+
+* void allocateStorage(void)
+* void bind_2(uint unit, QOpenGLTexture::TextureUnitReset reset)
+* QColor borderColor(void)
+* void borderColor_2(float *border)
+* void borderColor_3(int *border)
+* void borderColor_4(unsigned int *border)
+* QOpenGLTexture * createTextureView(QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat viewFormat, int minimumMipmapLevel, int maximumMipmapLevel, int minimumLayer, int maximumLayer)
+* int depth(void)
+* QOpenGLTexture::DepthStencilMode depthStencilMode(void)
+* void destroy(void)
+* int faces(void)
+* QOpenGLTexture::TextureFormat format(void)
+* void generateMipMaps(void)
+* void generateMipMaps_2(int baseLevel, bool resetBaseLevel)
+* int height(void)
+* bool isAutoMipMapGenerationEnabled(void)
+* bool isBound(void)
+* bool isBound_2(uint unit)
+* bool isCreated(void)
+* bool isTextureView(void)
+* int layers(void)
+* QPair<float, float> levelOfDetailRange(void)
+* float levelofDetailBias(void)
+* QOpenGLTexture::Filter magnificationFilter(void)
+* float maximumAnisotropy(void)
+* float maximumLevelOfDetail(void)
+* int maximumMipLevels(void)
+* float minimumLevelOfDetail(void)
+* int mipBaseLevel(void)
+* int mipMaxLevel(void)
+* void release(void)
+* void release_2(uint unit, QOpenGLTexture::TextureUnitReset reset)
+* void setBorderColor(QColor color)
+* void setBorderColor_4(uint r, uint g, uint b, uint a)
+* void setCompressedData_4(int mipLevel, int dataSize, void *data, QOpenGLPixelTransferOptions * options)
+* void setCompressedData_5(int dataSize, void *data, QOpenGLPixelTransferOptions * options)
+* void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, QOpenGLPixelTransferOptions * options)
+* void setData_4(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, QOpenGLPixelTransferOptions * options)
+* void setData_5(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, QOpenGLPixelTransferOptions * options)
+* void setData_6(QImage image, QOpenGLTexture::MipMapGeneration genMipMaps)
+* void setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode)
+* void setLayers(int layers)
+* void setLevelOfDetailRange(float min, float max)
+* void setLevelofDetailBias(float bias)
+* void setMagnificationFilter(QOpenGLTexture::Filter filter)
+* void setMaximumAnisotropy(float anisotropy)
+* void setMaximumLevelOfDetail(float value)
+* void setMinMagFilters(QOpenGLTexture::Filter minificationQOpenGLTexture::Filter, QOpenGLTexture::Filter magnificationQOpenGLTexture::Filter)
+* void setMinificationFilter(QOpenGLTexture::Filter filter)
+* void setMinimumLevelOfDetail(float value)
+* void setMipBaseLevel(int baseLevel)
+* void setMipLevelRange(int baseLevel, int maxLevel)
+* void setMipLevels(int levels)
+* void setMipMaxLevel(int maxLevel)
+* void setSwizzleMask(QOpenGLTexture::SwizzleComponent component, QOpenGLTexture::SwizzleValue value)
+* void setSwizzleMask_2(QOpenGLTexture::SwizzleValue r, QOpenGLTexture::SwizzleValue g, QOpenGLTexture::SwizzleValue b, QOpenGLTexture::SwizzleValue a)
+* void setWrapMode(QOpenGLTexture::WrapMode mode)
+* void setWrapMode_2(QOpenGLTexture::CoordinateDirection direction, QOpenGLTexture::WrapMode mode)
+* QOpenGLTexture::SwizzleValue swizzleMask(QOpenGLTexture::SwizzleComponent component)
+* int width(void)
+* QOpenGLTexture::WrapMode wrapMode(QOpenGLTexture::CoordinateDirection direction)
+* GLuint boundTextureId(QOpenGLTexture::BindingTarget target)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLTimerQuery Class
+
+QOpenGLTimerQuery Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopengltimerquery.html
+
+
+Parameters : QObject *
+
+* void begin(void)
+* bool create(void)
+* void destroy(void)
+* void end(void)
+* bool isCreated(void)
+* bool isResultAvailable(void)
+* GLuint objectId(void)
+* void recordTimestamp(void)
+* GLuint64 waitForResult(void)
+* GLuint64 waitForTimestamp(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLVersionProfile Class
+
+QOpenGLVersionProfile Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglversionprofile.html
+
+
+Parameters : void
+
+* bool hasProfiles(void)
+* bool isLegacyVersion(void)
+* bool isValid(void)
+* QSurfaceFormat::OpenGLContextProfile profile(void)
+* void setProfile(QSurfaceFormat::OpenGLContextProfile profile)
+* void setVersion(int majorVersion, int minorVersion)
+* QPair<int, int> version(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLVertexArrayObject Class
+
+QOpenGLVertexArrayObject Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglvertexarrayobject.html
+
+
+Parameters : QObject *
+
+* void bind(void)
+* bool create(void)
+* void destroy(void)
+* bool isCreated(void)
+* GLuint objectId(void)
+* void release(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLWidget Class
+
+QOpenGLWidget Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void geteventparameters(void)
+* void setInitEvent(const char *cStr)
+* const char *getInitEvent(void)
+* void setPaintEvent(const char *cStr)
+* const char *getPaintEvent(void)
+* void setResizeEvent(const char *cStr)
+* const char *getResizeEvent(void)
+* QOpenGLContext * context(void)
+* GLuint defaultFramebufferObject(void)
+* void doneCurrent(void)
+* QSurfaceFormat format(void)
+* QImage grabFramebuffer(void)
+* bool isValid(void)
+* void makeCurrent(void)
+* void setFormat(QSurfaceFormat format)
+* QOpenGLWidget::UpdateBehavior updateBehavior(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOrbitCameraController Class
+
+QOrbitCameraController Class
+============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qorbitcameracontroller.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QAbstractCameraController
+
+* void setZoomInLimit(float zoomInLimit)
+* float zoomInLimit(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPageSetupDialog Class
+
+QPageSetupDialog Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpagesetupdialog.html
+
+
+Parameters : QPrinter *,QWidget *
+
+
+Parent Class : QDialog
+
+* void open(QObject * receiver, char * member)
+* QPrinter * printer(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPaintDevice Class
+
+QPaintDevice Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpaintdevice.html
+
+* int colorCount(void)
+* int depth(void)
+* int devicePixelRatio(void)
+* int heightMM(void)
+* int logicalDpiX(void)
+* int logicalDpiY(void)
+* QPaintEngine * paintEngine(void)
+* bool paintingActive(void)
+* int physicalDpiX(void)
+* int physicalDpiY(void)
+* int width(void)
+* int widthMM(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPainter Class
+
+QPainter Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpainter.html
+
+
+Parameters : void
+
+* QBrush background(void)
+* int backgroundMode(void)
+* bool begin(QPaintDevice *device)
+* void beginNativePainting(void)
+* QRect boundingRect(int x, int y, int w, int h, int flags, QString text)
+* QBrush brush(void)
+* QPoint brushOrigin(void)
+* QRectF clipBoundingRect(void)
+* QPainterPath clipPath(void)
+* QRegion clipRegion(void)
+* QTransform combinedTransform(void)
+* int compositionMode(void)
+* QPaintDevice *device(void)
+* QTransform deviceTransform(void)
+* void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawEllipse(int x, int y, int width, int height)
+* void drawGlyphRun(QPointF  position,  QGlyphRun  glyphs)
+* void drawImage(int x, int y,  QImage image)
+* void drawLine(int x1, int y1, int x2, int y2)
+* void drawLines(QLine *lines, int lineCount)
+* void drawPath(QPainterPath path)
+* void drawPicture(int x, int y,  QPicture  picture)
+* void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawPixmap(int x, int y,  QPixmap)
+* void drawPoint(int x, int y)
+* void drawRect(int x, int y, int width, int height)
+* void drawRects(QRectF *rectangles, int rectCount)
+* void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
+* void drawStaticText(int left, int top,  QStaticText  staticText)
+* void drawText(int x, int y, QString  text)
+* void drawTiledPixmap(int x, int y, int width, int height,  QPixmap  pixmap, int sx, int sy)
+* bool end(void) # In RingQt use : bool endpaint(void)
+* void endNativePainting(void)
+* void eraseRect(int x, int y, int width, int height)
+* void fillPath(QPainterPath  path,  QBrush  brush)
+* void fillRect(int x, int y, int width, int height, QBrush)
+* QFont font(void)
+* QFontInfo fontInfo(void)
+* bool hasClipping(void)
+* void initFrom(QWidget *widget)
+* bool isActive(void)
+* int layoutDirection(void)
+* double opacity(void)
+* QPaintEngine *paintEngine(void)
+* QPen pen(void)
+* int renderHints(void)
+* void resetTransform(void)
+* void restore(void)
+* void rotate(qreal angle)
+* void save(void)
+* void scale(double sx, double sy)
+* void setBackground(QBrush  brush)
+* void setBackgroundMode(Qt::BGMode mode)
+* void setBrush(QBrush brush)
+* void setBrushOrigin(int x, int y)
+* void setClipPath(QPainterPath  path, Qt::ClipOperation operation)
+* void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation)
+* void setClipRegion(QRegion  region, Qt::ClipOperation operation)
+* void setClipping(bool enable)
+* void setCompositionMode(QPainter::CompositionMode mode)
+* void setFont(QFont font)
+* void setLayoutDirection(Qt::LayoutDirection direction)
+* void setOpacity(qreal opacity)
+* void setPen(QPen pen)
+* void setRenderHint(QPainter::RenderHint hint, bool on)
+* void setTransform(QTransform  transform, bool combine)
+* void setViewTransformEnabled(bool enable)
+* void setViewport(int x, int y, int width, int height)
+* void setWindow(int x, int y, int width, int height)
+* void setWorldMatrixEnabled(bool enable)
+* void setWorldTransform( QTransform  matrix, bool combine)
+* void shear(double sh, double sv)
+* void strokePath(QPainterPath  path,  QPen  pen)
+* bool testRenderHint(QPainter::RenderHint hint)
+* QTransform transform(void)
+* void translate(double dx, double dy)
+* bool viewTransformEnabled(void)
+* QRect viewport(void)
+* QRect window(void)
+* bool worldMatrixEnabled(void)
+* QTransform  worldTransform(void)
+* void drawPolygon(List *pPoints, Qt::FillRule fillRule)
+* void drawConvexPolygon(List *pPoints)
+* void drawPoints(List *pPoints)
+* void drawPolyline(List *pPoints)
+
+.. index::
+       pair: RingQt Classes Reference; QPainter2 Class
+
+QPainter2 Class
+===============
+
+
+Parameters : QPaintDevice *
+
+
+Parent Class : QPainter
+
+
+.. index::
+       pair: RingQt Classes Reference; QPainterPath Class
+
+QPainterPath Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpainterpath.html
+
+
+Parameters : void
+
+* void addEllipse(qreal x, qreal y, qreal width, qreal height)
+* void addPath(QPainterPath)
+* void addPolygon(QPolygonF)
+* void addRect(qreal x, qreal y, qreal width, qreal height)
+* void addRegion(QRegion)
+* void addRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
+* void addText(qreal x, qreal y, QFont, QString)
+* qreal angleAtPercent(qreal t)
+* void arcMoveTo(qreal x, qreal y, qreal width, qreal height, qreal angle)
+* void arcTo(qreal x, qreal y, qreal width, qreal height, qreal startAngle, qreal sweepLength)
+* QRectF boundingRect(void)
+* void closeSubpath(void)
+* void connectPath(QPainterPath)
+* bool contains(QPointF)
+* QRectF controlPointRect(void)
+* void cubicTo(qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY)
+* QPointF currentPosition(void)
+* QPainterPath::Element elementAt(int index)
+* int elementCount(void)
+* Qt::FillRule fillRule(void)
+* QPainterPath intersected(QPainterPath)
+* bool intersects(QRectF)
+* bool isEmpty(void)
+* qreal length(void)
+* void lineTo(qreal x, qreal y)
+* void moveTo(qreal x, qreal y)
+* qreal percentAtLength(qreal len)
+* QPointF pointAtPercent(qreal t)
+* void quadTo(qreal cx, qreal cy, qreal endPointX, qreal endPointY)
+* void setElementPositionAt(int index, qreal x, qreal y)
+* void setFillRule(Qt::FillRule fillRule)
+* QPainterPath simplified(void)
+* qreal slopeAtPercent(qreal t)
+* QPainterPath subtracted(QPainterPath)
+* void swap(QPainterPath)
+* QPolygonF toFillPolygon(QTransform)
+* QPainterPath toReversed(void)
+* void translate(qreal dx, qreal dy)
+* QPainterPath translated(qreal dx, qreal dy)
+* QPainterPath united(QPainterPath)
+
+.. index::
+       pair: RingQt Classes Reference; QPen Class
+
+QPen Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpen.html
+
+
+Parameters : void
+
+* QBrush brush(void)
+* int capStyle(void)
+* QColor color(void)
+* double dashOffset(void)
+* bool isCosmetic(void)
+* bool isSolid(void)
+* int joinStyle(void)
+* double miterLimit(void)
+* void setBrush(QBrush)
+* void setCapStyle(Qt::PenCapStyle style)
+* void setColor(QColor)
+* void setCosmetic(bool cosmetic)
+* void setDashOffset(double offset)
+* void setJoinStyle(Qt::PenJoinStyle style)
+* void setMiterLimit(double limit)
+* void setStyle(Qt::PenStyle style)
+* void setWidth(int width)
+* void setWidthF(double width)
+* int style(void)
+* void swap(QPen)
+* int width(void)
+* double widthF(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPerVertexColorMaterial Class
+
+QPerVertexColorMaterial Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qpervertexcolormaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+.. index::
+       pair: RingQt Classes Reference; QPhongMaterial Class
+
+QPhongMaterial Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qphongmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QColor ambient(void)
+* QColor diffuse(void)
+* float shininess(void)
+* QColor specular(void)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QColor diffuse)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+
+.. index::
+       pair: RingQt Classes Reference; QPicture Class
+
+QPicture Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpicture.html
+
+
+Parameters : void
+
+* QRect boundingRect(void)
+* const char *data(void)
+* bool isNull(void)
+* bool load(QString, const char *format) # In RingQt use : bool loadfile(QString, const char *format)
+* bool play(QPainter *painter)
+* bool save(QString , const char *format)
+* void setBoundingRect(QRect)
+* int size(void)
+* void swap(QPicture)
+
+.. index::
+       pair: RingQt Classes Reference; QPixmap Class
+
+QPixmap Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpixmap.html
+
+
+Parameters : const char *
+
+* QPixmap copy(int x, int y, int width, int height)
+* QPixmap scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* int width(void)
+* int height(void)
+* QBitmap createMaskFromColor(QColor , Qt::MaskMode)
+* QBitmap mask(void)
+* void setMask(QBitmap)
+* void fill(QColor)
+* QPixmap fromImage(QImage,Qt::ImageConversionFlags)
+* bool load(QString, const char *, Qt::ImageConversionFlags )
+* qint64 cacheKey(void)
+* bool convertFromImage(QImage image, Qt::ImageConversionFlags flags)
+* QPixmap copy_2(QRect rectangle)
+* QBitmap createHeuristicMask(bool clipTight)
+* int depth(void)
+* void detach(void)
+* qreal devicePixelRatio(void)
+* bool hasAlpha(void)
+* bool hasAlphaChannel(void)
+* bool isNull(void)
+* bool isQBitmap(void)
+* bool loadFromData(uchar *data, uint len, char *format, Qt::ImageConversionFlags flags)
+* bool loadFromData_2(QByteArray data, char *format, Qt::ImageConversionFlags flags)
+* QRect rect(void)
+* bool save(QString fileName, char *format, int quality)
+* bool save_2(QIODevice *device, char *format, int quality)
+* QPixmap scaled_2(QSize size, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* QPixmap scaledToHeight(int height, Qt::TransformationMode mode)
+* QPixmap scaledToWidth(int width, Qt::TransformationMode mode)
+* void scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed)
+* void scroll_2(int dx, int dy, QRect rect, QRegion *exposed)
+* void setDevicePixelRatio(qreal scaleFactor)
+* QSize size(void)
+* void swap(QPixmap other)
+* QImage toImage(void)
+* QPixmap transformed(QTransform transform, Qt::TransformationMode mode)
+* QPixmap transformed_2(QMatrix matrix, Qt::TransformationMode mode)
+* int defaultDepth(void)
+* QPixmap fromImage_2(QImage image, Qt::ImageConversionFlags flags)
+* QPixmap fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags)
+* QTransform trueMatrix(QTransform matrix, int width, int height)
+* QMatrix trueMatrix_2(QMatrix m, int w, int h)
+
+.. index::
+       pair: RingQt Classes Reference; QPixmap2 Class
+
+QPixmap2 Class
+==============
+
+
+Parameters : int width, int height
+
+
+Parent Class : QPixmap
+
+
+.. index::
+       pair: RingQt Classes Reference; QPlainTextEdit Class
+
+QPlainTextEdit Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qplaintextedit.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* QString anchorAt(QPoint pos)
+* bool backgroundVisible(void)
+* int blockCount(void)
+* bool canPaste(void)
+* bool centerOnScroll(void)
+* QMenu * createStandardContextMenu(void)
+* QTextCharFormat currentCharFormat(void)
+* QTextCursor cursorForPosition(QPoint pos)
+* QRect cursorRect(QTextCursor cursor)
+* QRect cursorRect_2(void)
+* int cursorWidth(void)
+* QTextDocument * document(void)
+* QString documentTitle(void)
+* void ensureCursorVisible(void)
+* QList<QTextEdit::ExtraSelection> extraSelections(void)
+* bool find(QString exp, QTextDocument::FindFlags options)
+* bool isReadOnly(void)
+* bool isUndoRedoEnabled(void)
+* QPlainTextEdit::LineWrapMode lineWrapMode(void)
+* int maximumBlockCount(void)
+* void mergeCurrentCharFormat(QTextCharFormat modifier)
+* void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode)
+* bool overwriteMode(void)
+* void print(QPagedPaintDevice *printer)
+* void setBackgroundVisible(bool visible)
+* void setCenterOnScroll(bool enabled)
+* void setCurrentCharFormat(QTextCharFormat format)
+* void setCursorWidth(int width)
+* void setDocument(QTextDocument *document)
+* void setDocumentTitle(QString title)
+* void setExtraSelections(QList<QTextEdit::ExtraSelection> selections)
+* void setLineWrapMode(QPlainTextEdit::LineWrapMode mode)
+* void setMaximumBlockCount(int maximum)
+* void setOverwriteMode(bool overwrite)
+* void setReadOnly(bool ro)
+* void setTabChangesFocus(bool b)
+* void setTabStopWidth(int width)
+* void setTextCursor(QTextCursor cursor)
+* void setTextInteractionFlags(Qt::TextInteractionFlags flags)
+* void setUndoRedoEnabled(bool enable)
+* void setWordWrapMode(QTextOption::WrapMode policy)
+* bool tabChangesFocus(void)
+* int tabStopWidth(void)
+* QTextCursor textCursor(void)
+* Qt::TextInteractionFlags textInteractionFlags(void)
+* QString toPlainText(void)
+* QTextOption::WrapMode wordWrapMode(void)
+* void appendHtml(QString html)
+* void appendPlainText(QString text)
+* void centerCursor(void)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void insertPlainText(QString text)
+* void paste(void)
+* void redo(void)
+* void selectAll(void)
+* void setPlainText(QString text)
+* void undo(void)
+* void zoomIn(int range)
+* void zoomOut(int range)
+* void setblockCountChangedEvent(const char *cStr)
+* void setcopyAvailableEvent(const char *cStr)
+* void setcursorPositionChangedEvent(const char *cStr)
+* void setmodificationChangedEvent(const char *cStr)
+* void setredoAvailableEvent(const char *cStr)
+* void setselectionChangedEvent(const char *cStr)
+* void settextChangedEvent(const char *cStr)
+* void setundoAvailableEvent(const char *cStr)
+* void setupdateRequestEvent(const char *cStr)
+* const char *getblockCountChangedEvent(void)
+* const char *getcopyAvailableEvent(void)
+* const char *getcursorPositionChangedEvent(void)
+* const char *getmodificationChangedEvent(void)
+* const char *getredoAvailableEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettextChangedEvent(void)
+* const char *getundoAvailableEvent(void)
+* const char *getupdateRequestEvent(void)
+* void cyanline(void)
+* void setactivelinecolor(QColor)
+
+.. index::
+       pair: RingQt Classes Reference; QPlaneMesh Class
+
+QPlaneMesh Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qplanemesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float height(void)
+* QSize meshResolution(void)
+* bool mirrored(void)
+* float width(void)
+* void setHeight(float height)
+* void setMeshResolution(QSize resolution)
+* void setMirrored(bool mirrored)
+* void setWidth(float width)
+
+.. index::
+       pair: RingQt Classes Reference; QPoint Class
+
+QPoint Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpoint.html
+
+
+Parameters : void
+
+* bool isNull(void)
+* int manhattanLength(void)
+* int rx(void)
+* int ry(void)
+* void setX(int x)
+* void setY(int y)
+* int x(void)
+* int y(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPointF Class
+
+QPointF Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpointf.html
+
+
+Parameters : void
+
+* bool isNull(void)
+* qreal manhattanLength(void)
+* qreal rx(void)
+* qreal ry(void)
+* void setX(qreal x)
+* void setY(qreal y)
+* QPoint toPoint(void)
+* qreal x(void)
+* qreal y(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPointLight Class
+
+QPointLight Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qpointlight.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float constantAttenuation(void)
+* float linearAttenuation(void)
+* float quadraticAttenuation(void)
+* void setConstantAttenuation(float value)
+* void setLinearAttenuation(float value)
+* void setQuadraticAttenuation(float value)
+* void setColor(QColor)
+* void setIntensity(float intensity)
+
+.. index::
+       pair: RingQt Classes Reference; QPrintDialog Class
+
+QPrintDialog Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprintdialog.html
+
+
+Parameters : QPrinter *,QWidget *
+
+
+Parent Class : QAbstractPrintDialog
+
+* void open(QObject * receiver, char * member)
+* QAbstractPrintDialog::PrintDialogOptions options(void)
+* QPrinter * printer(void)
+* void setOption(QAbstractPrintDialog::PrintDialogOption option, bool on)
+* void setOptions(QAbstractPrintDialog::PrintDialogOptions options)
+* bool testOption(QAbstractPrintDialog::PrintDialogOption option)
+* void setacceptedEvent(const char *)
+* const char *getacceptedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPrintPreviewDialog Class
+
+QPrintPreviewDialog Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprintpreviewdialog.html
+
+
+Parameters : QPrinter *
+
+
+Parent Class : QDialog
+
+* void open(QObject * receiver, char * member)
+* QPrinter * printer(void)
+* void setpaintRequestedEvent(const char *)
+* const char *getpaintRequestedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPrintPreviewWidget Class
+
+QPrintPreviewWidget Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprintpreviewwidget.html
+
+
+Parameters : QPrinter *
+
+
+Parent Class : QWidget
+
+* int currentPage(void)
+* QPrinter::Orientation orientation(void)
+* int pageCount(void)
+* QPrintPreviewWidget::ViewMode viewMode(void)
+* qreal zoomFactor(void)
+* QPrintPreviewWidget::ZoomMode zoomMode(void)
+* void fitInView(void)
+* void fitToWidth(void)
+* void print(void)
+* void setAllPagesViewMode(void)
+* void setCurrentPage(int page)
+* void setFacingPagesViewMode(void)
+* void setLandscapeOrientation(void)
+* void setOrientation(QPrinter::Orientation orientation)
+* void setPortraitOrientation(void)
+* void setSinglePageViewMode(void)
+* void setViewMode(QPrintPreviewWidget::ViewMode mode)
+* void setZoomFactor(qreal factor)
+* void setZoomMode(QPrintPreviewWidget::ZoomMode zoomMode)
+* void updatePreview(void)
+* void zoomIn(qreal factor)
+* void zoomOut(qreal factor)
+* void setpaintRequestedEvent(const char *)
+* void setpreviewChangedEvent(const char *)
+* const char *getpaintRequestedEvent(void)
+* const char *getpreviewChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPrinter Class
+
+QPrinter Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprinter.html
+
+
+Parameters : QPrinter::PrinterMode
+
+* bool abort(void)
+* bool collateCopies(void)
+* int colorMode(void)
+* int copyCount(void)
+* QString creator(void)
+* QString docName(void)
+* int duplex(void)
+* bool fontEmbeddingEnabled(void)
+* int fromPage(void)
+* bool fullPage(void)
+* bool isValid(void)
+* QString outputFileName(void)
+* int outputFormat(void)
+* QRectF pageRect(QPrinter::Unit unit)
+* QRectF paperRect(QPrinter::Unit unit)
+* int paperSource(void)
+* QPrintEngine *printEngine(void)
+* QString printProgram(void)
+* int printRange(void)
+* QString printerName(void)
+* QString printerSelectionOption(void)
+* int printerState(void)
+* int resolution(void)
+* void setCollateCopies(bool collate)
+* void setColorMode(QPrinter::ColorMode newColorMode)
+* void setCopyCount(int count)
+* void setCreator(QString)
+* void setDocName(QString)
+* void setDuplex(QPrinter::DuplexMode duplex)
+* void setFontEmbeddingEnabled(bool enable)
+* void setFromTo(int from, int to)
+* void setFullPage(bool fp)
+* void setOutputFileName(QString)
+* void setOutputFormat(QPrinter::OutputFormat format)
+* void setPrintProgram(QString)
+* void setPrintRange(QPrinter::PrintRange)
+* void setPrinterName(QString)
+* void setPrinterSelectionOption(QString)
+* void setResolution(int dpi)
+* bool supportsMultipleCopies(void)
+* int toPage(void)
+* bool newPage(void)
+* QPaintEngine *paintEngine(void)
+* void setPageSizeMM(QSizeF)
+
+.. index::
+       pair: RingQt Classes Reference; QPrinterInfo Class
+
+QPrinterInfo Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprinterinfo.html
+
+
+Parameters : void
+
+* QString description(void)
+* bool isDefault(void)
+* bool isNull(void)
+* QString location(void)
+* QString makeAndModel(void)
+* QString printerName(void)
+* QPrinterInfo printerInfo(QString printerName
+
+.. index::
+       pair: RingQt Classes Reference; QProcess Class
+
+QProcess Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprocess.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QIODevice
+
+* QStringList arguments(void)
+* void closeReadChannel(QProcess::ProcessChannel channel)
+* void closeWriteChannel(void)
+* QProcess::ProcessError error(void)
+* int exitCode(void)
+* QProcess::ExitStatus exitStatus(void)
+* QProcess::InputChannelMode inputChannelMode(void)
+* QProcess::ProcessChannelMode processChannelMode(void)
+* QProcessEnvironment processEnvironment(void)
+* QString program(void)
+* QByteArray readAllStandardError(void)
+* QByteArray readAllStandardOutput(void)
+* QProcess::ProcessChannel readChannel(void)
+* void setArguments( QStringList  arguments)
+* void setInputChannelMode(QProcess::InputChannelMode mode)
+* void setProcessChannelMode(QProcess::ProcessChannelMode mode)
+* void setProcessEnvironment( QProcessEnvironment  environment)
+* void setProgram( QString  program)
+* void setReadChannel(QProcess::ProcessChannel channel)
+* void setStandardErrorFile( QString  fileName, QIODevice::OpenMode mode )
+* void setStandardInputFile( QString  fileName)
+* void setStandardOutputFile( QString  fileName, QIODevice::OpenMode mode )
+* void setStandardOutputProcess(QProcess *destination)
+* void setWorkingDirectory( QString  dir)
+* void start( QString  program,  QStringList  arguments, QIODevice::OpenMode mode )
+* void start_2( QString  command, QIODevice::OpenMode mode )
+* void start_3(QIODevice::OpenMode mode )
+* QProcess::ProcessState state(void)
+* bool waitForFinished(int msecs )
+* bool waitForStarted(int msecs )
+* QString workingDirectory(void)
+* void kill(void)
+* void terminate(void)
+* void setreadyReadStandardErrorEvent(const char *)
+* void setreadyReadStandardOutputEvent(const char *)
+* const char *getreadyReadStandardErrorEvent(void)
+* const char *getreadyReadStandardOutputEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QProgressBar Class
+
+QProgressBar Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprogressbar.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int alignment(void)
+* QString format(void)
+* bool invertedAppearance(void)
+* bool isTextVisible(void)
+* int maximum(void)
+* int minimum(void)
+* int orientation(void)
+* void resetFormat(void)
+* void setAlignment(Qt::AlignmentFlag alignment)
+* void setFormat(QString)
+* void setInvertedAppearance(bool invert)
+* void setTextDirection(QProgressBar::Direction textDirection)
+* void setTextVisible(bool visible)
+* QString text(void)
+* int textDirection(void)
+* int value(void)
+* void reset(void)
+* void setMaximum(int maximum)
+* void setMinimum(int minimum)
+* void setOrientation(Qt::Orientation)
+* void setRange(int minimum, int maximum)
+* void setValue(int value)
+* void setvalueChangedEvent(const char *)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPushButton Class
+
+QPushButton Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpushbutton.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractButton
+
+* void setText(const char *)
+* void setClickEvent(const char *)
+* void setIcon(QIcon)
+* void setIconSize(QSize)
+* const char *getClickEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QQmlEngine Class
+
+QQmlEngine Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qqmlengine.html
+
+
+Parameters : QObject *
+
+* void addImageProvider(QString providerId, QQmlImageProviderBase *provider)
+* void addImportPath(QString path)
+* void addPluginPath(QString path)
+* QUrl baseUrl(void)
+* void clearComponentCache(void)
+* QQmlImageProviderBase *imageProvider(QString providerId)
+* QStringList importPathList(void)
+* bool importPlugin(QString filePath, QString uri, QList<QQmlError> *errors)
+* QQmlIncubationController *incubationController(void)
+* QNetworkAccessManager *networkAccessManager(void)
+* QQmlNetworkAccessManagerFactory *networkAccessManagerFactory(void)
+* QString offlineStorageDatabaseFilePath(QString databaseName)
+* QString offlineStoragePath(void)
+* bool outputWarningsToStandardError(void)
+* QStringList pluginPathList(void)
+* void removeImageProvider(QString providerId)
+* QQmlContext *rootContext(void)
+* void setBaseUrl(QUrl url)
+* void setImportPathList(QStringList paths)
+* void setIncubationController(QQmlIncubationController *controller)
+* void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *factory)
+* void setOfflineStoragePath(QString dir)
+* void setOutputWarningsToStandardError(bool enabled)
+* void setPluginPathList(QStringList paths)
+* void trimComponentCache(void)
+* void retranslate(void)
+* QQmlContext * contextForObject(QObject *object)
+* QQmlEngine::ObjectOwnership objectOwnership(QObject *object)
+* void setContextForObject(QObject *object, QQmlContext *context)
+* void setObjectOwnership(QObject *object, QQmlEngine::ObjectOwnership ownership)
+
+.. index::
+       pair: RingQt Classes Reference; QQmlError Class
+
+QQmlError Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qqmlerror.html
+
+
+Parameters : void
+
+* int column(void)
+* QString description(void)
+* bool isValid(void)
+* int line(void)
+* QObject * object(void)
+* void setColumn(int column)
+* void setDescription(QString description)
+* void setLine(int line)
+* void setObject(QObject *object)
+* void setUrl(QUrl url)
+* QString toString(void)
+* QUrl url(void)
+
+.. index::
+       pair: RingQt Classes Reference; QQuaternion Class
+
+QQuaternion Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qquaternion.html
+
+
+Parameters : float,float,float,float
+
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QQuaternion normalized(void)
+* QVector3D rotatedVector(QVector3D vector)
+* float scalar(void)
+* void setScalar(float scalar)
+* void setVector(QVector3D vector)
+* void setVector_2(float x, float y, float z)
+* void setX(float x)
+* void setY(float y)
+* void setZ(float z)
+* QVector3D vector(void)
+* float x(void)
+* float y(void)
+* float z(void)
+* QQuaternion fromAxisAndAngle_2(float x, float y, float z, float angle)
+* QQuaternion nlerp(QQuaternion q1, QQuaternion q2, float t)
+* QQuaternion slerp(QQuaternion q1, QQuaternion q2, float t)
+
+.. index::
+       pair: RingQt Classes Reference; QQuickView Class
+
+QQuickView Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qquickview.html
+
+
+Parameters : void
+
+
+Parent Class : QWindow
+
+* QQmlEngine *engine(void)
+* QList<QQmlError> errors(void)
+* QSize initialSize(void)
+* QQuickWidget::ResizeMode resizeMode(void)
+* QQmlContext *rootContext(void)
+* QQuickItem *rootObject(void)
+* void setFormat(QSurfaceFormat format)
+* void setResizeMode(QQuickView::ResizeMode)
+* QUrl source(void)
+* QQuickWidget::Status status(void)
+* void setSource(QUrl url)
+
+.. index::
+       pair: RingQt Classes Reference; QQuickWidget Class
+
+QQuickWidget Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qquickwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QQmlEngine *engine(void)
+* QList<QQmlError> errors(void)
+* QSurfaceFormat format(void)
+* QImage grabFramebuffer(void)
+* QSize initialSize(void)
+* QQuickWindow *quickWindow(void)
+* QQuickWidget::ResizeMode resizeMode(void)
+* QQmlContext *rootContext(void)
+* QQuickItem *rootObject(void)
+* void setClearColor(QColor color)
+* void setFormat(QSurfaceFormat format)
+* void setResizeMode(QQuickWidget::ResizeMode)
+* QUrl source(void)
+* QQuickWidget::Status status(void)
+* void setSource(QUrl url)
+* void setsceneGraphErrorEvent(const char *)
+* void setstatusChangedEvent(const char *)
+* const char *getsceneGraphErrorEvent(void)
+* const char *getstatusChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QRadioButton Class
+
+QRadioButton Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qradiobutton.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractButton
+
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setclickedEvent(const char *)
+* void setpressedEvent(const char *)
+* void setreleasedEvent(const char *)
+* void settoggledEvent(const char *)
+* const char *getclickedEvent(void)
+* const char *getpressedEvent(void)
+* const char *getreleasedEvent(void)
+* const char *gettoggledEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QRect Class
+
+QRect Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qrect.html
+
+
+Parameters : void
+
+* void adjust(int dx1, int dy1, int dx2, int dy2)
+* QRect adjusted(int dx1, int dy1, int dx2, int dy2)
+* int bottom(void)
+* QPoint bottomLeft(void)
+* QPoint bottomRight(void)
+* QPoint center(void)
+* bool contains(int x, int y, bool proper)
+* void getCoords(int *x1, int *y1, int *x2, int *y2)
+* void getRect(int *x, int *y, int *width, int *height)
+* int  height(void)
+* QRect intersected(QRect)
+* bool intersects(QRect)
+* bool isEmpty(void)
+* bool isNull(void)
+* bool isValid(void)
+* int left(void)
+* void moveBottom(int y)
+* void moveBottomLeft(QPoint)
+* void moveBottomRight(QPoint)
+* void moveCenter(QPoint)
+* void moveLeft(int x)
+* void moveRight(int x)
+* void moveTo(int x, int y)
+* void moveTop(int y)
+* void moveTopLeft(QPoint)
+* void moveTopRight(QPoint)
+* QRect normalized(void)
+* int right(void)
+* void setBottom(int y)
+* void setBottomLeft(QPoint)
+* void setBottomRight(QPoint)
+* void setCoords(int x1, int y1, int x2, int y2)
+* void setHeight(int height)
+* void setLeft(int x)
+* void setRect(int x, int y, int width, int height)
+* void setRight(int x)
+* void setSize(QSize)
+* void setTop(int y)
+* void setTopLeft(QPoint)
+* void setTopRight(QPoint)
+* void setWidth(int width)
+* void setX(int x)
+* void setY(int y)
+* QSize size(void)
+* int top(void)
+* QPoint topLeft(void)
+* QPoint topRight(void)
+* void translate(int dx, int dy)
+* QRect translated(int dx, int dy)
+* QRect united(QRect)
+* int width(void)
+* int x(void)
+* int y(void)
+
+.. index::
+       pair: RingQt Classes Reference; QRegion Class
+
+QRegion Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregion.html
+
+
+Parameters : void
+
+* QRect boundingRect(void)
+* bool contains(QPoint p)
+* bool contains_2(QRect r)
+* QRegion intersected(QRegion r)
+* QRegion intersected_2(QRect rect)
+* bool intersects(QRegion region)
+* bool intersects_2(QRect rect)
+* bool isEmpty(void)
+* bool isNull(void)
+* int rectCount(void)
+* QVector<QRect> rects(void)
+* void setRects(QRect *rects, int number)
+* QRegion subtracted(QRegion r)
+* void swap(QRegion other)
+* void translate(int dx, int dy)
+* void translate_2(QPoint point)
+* QRegion translated(int dx, int dy)
+* QRegion translated_2(QPoint p)
+* QRegion united(QRegion r)
+* QRegion united_2(QRect rect)
+* QRegion xored(QRegion r)
+
+.. index::
+       pair: RingQt Classes Reference; QRegularExpression Class
+
+QRegularExpression Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregularexpression.html
+
+
+Parameters : void
+
+* int captureCount(void)
+* QString errorString(void)
+* QRegularExpressionMatchIterator globalMatch(QString  subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions)
+* bool isValid(void)
+* QRegularExpressionMatch match(QString  subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions)
+* QStringList namedCaptureGroups(void)
+* QString pattern(void)
+* int patternErrorOffset(void)
+* QRegularExpression::PatternOptions patternOptions(void)
+* void setPattern(QString  pattern)
+* void setPatternOptions(QRegularExpression::PatternOptions options)
+* void swap(QRegularExpression  other)
+
+.. index::
+       pair: RingQt Classes Reference; QRegularExpressionMatch Class
+
+QRegularExpressionMatch Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregularexpressionmatch.html
+
+
+Parameters : void
+
+* QString captured(int nth)
+* QString captured_2(const QString  name)
+* int capturedEnd(int nth)
+* int capturedEnd_2(const QString  name)
+* int capturedLength(int nth)
+* int capturedLength_2(const QString  name)
+* QStringRef capturedRef(int nth)
+* QStringRef capturedRef_2(const QString  name)
+* int capturedStart(int nth)
+* int capturedStart_2(const QString  name)
+* QStringList capturedTexts(void)
+* bool hasMatch(void)
+* bool hasPartialMatch(void)
+* bool isValid(void)
+* int lastCapturedIndex(void)
+* QRegularExpression::MatchOptions matchOptions(void)
+* QRegularExpression::MatchType matchType(void)
+* QRegularExpression regularExpression(void)
+* void swap(QRegularExpressionMatch  other)
+
+.. index::
+       pair: RingQt Classes Reference; QRegularExpressionMatchIterator Class
+
+QRegularExpressionMatchIterator Class
+=====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregularexpressionmatchiterator.html
+
+
+Parameters : void
+
+* bool hasNext(void)
+* bool isValid(void)
+* QRegularExpression::MatchOptions matchOptions(void)
+* QRegularExpression::MatchType matchType(void)
+* QRegularExpressionMatch next(void) # In RingQt use : QRegularExpressionMatch nextitem(void)
+* QRegularExpressionMatch peekNext(void)
+* QRegularExpression regularExpression(void)
+* void swap(QRegularExpressionMatchIterator other)
+
+.. index::
+       pair: RingQt Classes Reference; QRenderAspect Class
+
+QRenderAspect Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qrenderaspect.html
+
+
+Parameters : QObject *
+
+
+.. index::
+       pair: RingQt Classes Reference; QRenderPass Class
+
+QRenderPass Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qrenderpass.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void addFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void addParameter(Qt3DRender::QParameter *parameter)
+* void addRenderState(Qt3DRender::QRenderState *state)
+* QVector<Qt3DRender::QFilterKey *> filterKeys(void)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void removeRenderState(Qt3DRender::QRenderState *state)
+* QVector<Qt3DRender::QRenderState *> renderStates(void)
+* Qt3DRender::QShaderProgram * shaderProgram(void)
+* void setShaderProgram(Qt3DRender::QShaderProgram *shaderProgram)
+
+.. index::
+       pair: RingQt Classes Reference; QSceneLoader Class
+
+QSceneLoader Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qsceneloader.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QComponent
+
+* Qt3DCore::QComponent * component(QString entityName, Qt3DRender::QSceneLoader::ComponentType componentType)
+* Qt3DCore::QEntity * entity(QString entityName)
+* QStringList entityNames(void)
+* QUrl source(void)
+* Qt3DRender::QSceneLoader::Status status(void)
+* void setSource(QUrl arg)
+
+.. index::
+       pair: RingQt Classes Reference; QScreen Class
+
+QScreen Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qscreen.html
+
+* int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
+* QRect availableGeometry(void)
+* QSize availableSize(void)
+* QRect availableVirtualGeometry(void)
+* QSize availableVirtualSize(void)
+* int depth(void)
+* qreal devicePixelRatio(void)
+* QRect geometry(void)
+* QPixmap grabWindow(int window, int x, int y, int width, int height)
+* QPixmap grabWindow_2(int window)
+* QPlatformScreen * handle(void)
+* bool isLandscape(Qt::ScreenOrientation o)
+* bool isPortrait(Qt::ScreenOrientation o)
+* qreal logicalDotsPerInch(void)
+* qreal logicalDotsPerInchX(void)
+* qreal logicalDotsPerInchY(void)
+* QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, QRect rect)
+* QString name(void)
+* Qt::ScreenOrientation nativeOrientation(void)
+* Qt::ScreenOrientation orientation(void)
+* Qt::ScreenOrientations orientationUpdateMask(void)
+* qreal physicalDotsPerInch(void)
+* qreal physicalDotsPerInchX(void)
+* qreal physicalDotsPerInchY(void)
+* QSizeF physicalSize(void)
+* Qt::ScreenOrientation primaryOrientation(void)
+* qreal refreshRate(void)
+* void setOrientationUpdateMask(Qt::ScreenOrientations mask)
+* QSize size(void)
+* QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, QRect target)
+
+.. index::
+       pair: RingQt Classes Reference; QScrollArea Class
+
+QScrollArea Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qscrollarea.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractScrollArea
+
+* Qt::Alignment alignment(void)
+* void ensureVisible(int x, int y, int xmargin , int ymargin )
+* void ensureWidgetVisible(QWidget *childWidget, int xmargin , int ymargin )
+* void setAlignment(Qt::Alignment)
+* void setWidget(QWidget *widget)
+* void setWidgetResizable(bool resizable)
+* QWidget *takeWidget(void)
+* QWidget *widget(void)
+* bool widgetResizable(void)
+
+.. index::
+       pair: RingQt Classes Reference; QScrollBar Class
+
+QScrollBar Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qscrollbar.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSlider
+
+
+.. index::
+       pair: RingQt Classes Reference; QSerialPort Class
+
+QSerialPort Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qserialport.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QIODevice
+
+* qint32 baudRate(QSerialPort::Directions directions)
+* bool clear(QSerialPort::Directions directions)
+* void clearError(void)
+* QSerialPort::DataBits dataBits(void)
+* QSerialPort::SerialPortError error(void)
+* QSerialPort::FlowControl flowControl(void)
+* bool flush(void)
+* void *handle(void)
+* bool isDataTerminalReady(void)
+* bool isRequestToSend(void)
+* QSerialPort::Parity parity(void)
+* QSerialPort::PinoutSignals pinoutSignals(void)
+* QString portName(void)
+* qint64 readBufferSize(void)
+* bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions)
+* bool setBreakEnabled(bool set)
+* bool setDataBits(QSerialPort::DataBits dataBits)
+* bool setDataTerminalReady(bool set)
+* bool setFlowControl(QSerialPort::FlowControl flowControl)
+* bool setParity(QSerialPort::Parity parity)
+* void setPort(QSerialPortInfo serialPortInfo)
+* void setPortName(QString name)
+* void setReadBufferSize(qint64 size)
+* bool setRequestToSend(bool set)
+* bool setStopBits(QSerialPort::StopBits stopBits)
+* QSerialPort::StopBits stopBits(void)
+* void setbaudRateChangedEvent(const char *)
+* void setbreakEnabledChangedEvent(const char *)
+* void setdataBitsChangedEvent(const char *)
+* void setdataTerminalReadyChangedEvent(const char *)
+* void seterrorEvent(const char *)
+* void setflowControlChangedEvent(const char *)
+* void setparityChangedEvent(const char *)
+* void setrequestToSendChangedEvent(const char *)
+* void setstopBitsChangedEvent(const char *)
+* const char *getbaudRateChangedEvent(void)
+* const char *getbreakEnabledChangedEvent(void)
+* const char *getdataBitsChangedEvent(void)
+* const char *getdataTerminalReadyChangedEvent(void)
+* const char *geterrorEvent(void)
+* const char *getflowControlChangedEvent(void)
+* const char *getparityChangedEvent(void)
+* const char *getrequestToSendChangedEvent(void)
+* const char *getstopBitsChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSerialPortInfo Class
+
+QSerialPortInfo Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qserialportinfo.html
+
+
+Parameters : void
+
+* QString description(void)
+* bool hasProductIdentifier(void)
+* bool hasVendorIdentifier(void)
+* bool isBusy(void)
+* bool isNull(void)
+* QString manufacturer(void)
+* QString portName(void)
+* quint16 productIdentifier(void)
+* void swap(QSerialPortInfo other)
+* QString systemLocation(void)
+* quint16 vendorIdentifier(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSize Class
+
+QSize Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsize.html
+
+
+Parameters : int width, int height
+
+
+.. index::
+       pair: RingQt Classes Reference; QSkyboxEntity Class
+
+QSkyboxEntity Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qskyboxentity.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QEntity
+
+* QString baseName(void)
+* QString extension(void)
+* bool isGammaCorrectEnabled(void)
+* void setBaseName(QString baseName)
+* void setExtension(QString extension)
+* void setGammaCorrectEnabled(bool enabled)
+
+.. index::
+       pair: RingQt Classes Reference; QSlider Class
+
+QSlider Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qslider.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSlider
+
+* void setTickInterval(int ti)
+* void setTickPosition(QSlider::TickPosition position)
+* int tickInterval(void)
+* int tickPosition(void)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setactionTriggeredEvent(const char *)
+* void setrangeChangedEvent(const char *)
+* void setsliderMovedEvent(const char *)
+* void setsliderPressedEvent(const char *)
+* void setsliderReleasedEvent(const char *)
+* void setvalueChangedEvent(const char *)
+* const char *getactionTriggeredEvent(void)
+* const char *getrangeChangedEvent(void)
+* const char *getsliderMovedEvent(void)
+* const char *getsliderPressedEvent(void)
+* const char *getsliderReleasedEvent(void)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSphereMesh Class
+
+QSphereMesh Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qspheremesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool generateTangents(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setGenerateTangents(bool gen)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt Classes Reference; QSpinBox Class
+
+QSpinBox Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qspinbox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* QString cleanText(void)
+* int displayIntegerBase(void)
+* int maximum(void)
+* int minimum(void)
+* QString prefix(void)
+* void setDisplayIntegerBase(int base)
+* void setMaximum(int max)
+* void setMinimum(int min)
+* void setPrefix(QString)
+* void setRange(int minimum, int maximum)
+* void setSingleStep(int val)
+* void setSuffix(QString)
+* int singleStep(void)
+* QString suffix(void)
+* int value(void)
+* void setValue(int val)
+* void setvalueChangedEvent(const char *)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSplashScreen Class
+
+QSplashScreen Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsplashscreen.html
+
+
+Parameters : QPixmap
+
+
+Parent Class : QWidget
+
+* void  finish(QWidget *mainWin)
+* QPixmap pixmap(void)
+* void repaint(void)
+* void setPixmap(QPixmap pixmap)
+* void clearMessage(void)
+* void showMessage(QString message, int alignment ,QColor color)
+
+.. index::
+       pair: RingQt Classes Reference; QSplitter Class
+
+QSplitter Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsplitter.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QFrame
+
+* void addWidget(QWidget *widget)
+* bool childrenCollapsible(void)
+* int count(void)
+* void getRange(int index, int *min, int *max)
+* QSplitterHandle * handle(int index)
+* int handleWidth(void)
+* int indexOf(QWidget *widget)
+* void insertWidget(int index, QWidget *widget)
+* bool isCollapsible(int index)
+* bool opaqueResize(void)
+* Qt::Orientation orientation(void)
+* void refresh(void)
+* bool restoreState( QByteArray  state)
+* QByteArray saveState(void)
+* void setChildrenCollapsible(bool)
+* void setCollapsible(int index, bool collapse)
+* void setHandleWidth(int)
+* void setOpaqueResize(bool opaque )
+* void setOrientation(Qt::Orientation)
+* void setSizes( QList<int>  list)
+* void setStretchFactor(int index, int stretch)
+* QList<int> sizes(void)
+* QWidget * widget(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlDatabase Class
+
+QSqlDatabase Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqldatabase.html
+
+
+Parameters : void
+
+* void close(void)
+* bool commit(void)
+* QString connectOptions(void)
+* QString connectionName(void)
+* QString databaseName(void)
+* QSqlDriver *driver(void)
+* QString driverName(void)
+* QSqlQuery exec(QString)
+* QString hostName(void)
+* bool isOpen(void)
+* bool isOpenError(void)
+* bool isValid(void)
+* QSqlError lastError(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* bool open(void)
+* QString password(void)
+* int port(void)
+* QSqlIndex primaryIndex(QString)
+* QSqlRecord record(QString)
+* bool rollback(void)
+* void setConnectOptions(QString)
+* void setDatabaseName(QString)
+* void setHostName(QString)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
+* void setPassword(QString)
+* void setPort(int port)
+* void setUserName(QString)
+* QStringList tables(QSql::TableType type)
+* bool transaction(void)
+* QString userName(void)
+* QSqlDatabase addDatabase(QString)
+* QSqlDatabase cloneDatabase(QSqlDatabase, QString)
+* QStringList connectionNames(void)
+* bool contains(QString)
+* QSqlDatabase database(QString , bool)
+* QStringList drivers(void)
+* bool isDriverAvailable(QString)
+* void registerSqlDriver(QString, QSqlDriverCreatorBase *)
+* void removeDatabase(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlDriver Class
+
+QSqlDriver Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqldriver.html
+
+
+Parameters : void
+
+* QSqlError lastError(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlDriverCreatorBase Class
+
+QSqlDriverCreatorBase Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqldrivercreatorbase.html
+
+
+Parameters : void
+
+
+.. index::
+       pair: RingQt Classes Reference; QSqlError Class
+
+QSqlError Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlerror.html
+
+
+Parameters : QString, QString, QSqlError::ErrorType
+
+* QString databaseText(void)
+* QString driverText(void)
+* bool isValid(void)
+* int number(void)
+* void setDatabaseText(QString)
+* void setDriverText(QString)
+* void setNumber(int number)
+* void setType(QSqlError::ErrorType type)
+* QString text(void)
+* QSqlError::ErrorType type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlField Class
+
+QSqlField Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlfield.html
+
+
+Parameters : QString,QVariant::Type
+
+* void clear(void)
+* QVariant defaultValue(void)
+* bool isAutoValue(void)
+* bool isGenerated(void)
+* bool isNull(void)
+* bool isReadOnly(void)
+* bool isValid(void)
+* int length(void)
+* QString name(void)
+* int precision(void)
+* RequiredStatus requiredStatus(void)
+* void setAutoValue(bool autoVal)
+* void setDefaultValue(QVariant)
+* void setGenerated(bool gen)
+* void setLength(int fieldLength)
+* void setName(QString)
+* void setPrecision(int precision)
+* void setReadOnly(bool readOnly)
+* void setRequired(bool required)
+* void setRequiredStatus(QSqlField::RequiredStatus required)
+* void setType(QVariant::Type type)
+* void setValue(QVariant)
+* QVariant::Type type(void)
+* QVariant value(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlIndex Class
+
+QSqlIndex Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlindex.html
+
+
+Parameters : QString, QString
+
+
+Parent Class : QSqlRecord
+
+* void append(QSqlField, bool)
+* QString cursorName(void)
+* bool isDescending(int i)
+* QString name(void)
+* void setCursorName(QString)
+* void setDescending(int i, bool desc)
+* void setName(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlQuery Class
+
+QSqlQuery Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlquery.html
+
+
+Parameters : void
+
+* void addBindValue(QVariant, QSql::ParamType paramType)
+* int at(void)
+* void bindValue(QString, QVariant, QSql::ParamType paramType)
+* QVariant boundValue(QString)
+* void clear(void)
+* QSqlDriver * driver(void)
+* bool exec(QString)
+* bool exec_2(void)
+* bool execBatch(QSqlQuery::BatchExecutionMode mode)
+* QString executedQuery(void)
+* void finish(void)
+* bool first(void)
+* bool isActive(void)
+* bool isForwardOnly(void)
+* bool isNull(int field)
+* bool isSelect(void)
+* bool isValid(void)
+* bool last(void)
+* QSqlError lastError(void)
+* QVariant lastInsertId(void)
+* QString lastQuery(void)
+* bool next(void) # In RingQt use : bool movenext(void)
+* bool nextResult(void)
+* int numRowsAffected(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* bool prepare(QString)
+* bool previous(void)
+* QSqlRecord record(void)
+* QSqlResult *result(void)
+* bool seek(int index, bool relative)
+* void setForwardOnly(bool forward)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
+* int size(void)
+* QVariant value(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlRecord Class
+
+QSqlRecord Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlrecord.html
+
+
+Parameters : void
+
+* void append(QSqlField)
+* void clear(void)
+* void clearValues(void)
+* bool contains(QString)
+* int count(void)
+* QSqlField field(int index)
+* QString fieldName(int index)
+* int indexOf(QString)
+* void insert(int pos, QSqlField)
+* bool isEmpty(void)
+* bool isGenerated(QString)
+* bool isNull(QString)
+* void remove(int pos)
+* void replace(int pos, QSqlField)
+* void setGenerated(QString, bool generated)
+* void setNull(int index)
+* void setValue(int index, QVariant)
+* QVariant value(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QStackedWidget Class
+
+QStackedWidget Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstackedwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QFrame
+
+* int addWidget(QWidget *widget)
+* int count(void)
+* int currentIndex(void)
+* QWidget * currentWidget(void)
+* int indexOf(QWidget *widget)
+* int insertWidget(int index, QWidget *widget)
+* void removeWidget(QWidget *widget)
+* QWidget * widget(int index)
+* void setCurrentIndex(int index)
+* void setCurrentWidget(QWidget *widget)
+* void setcurrentChangedEvent(const char *)
+* void setwidgetRemovedEvent(const char *)
+* const char *getcurrentChangedEvent(void)
+* const char *getwidgetRemovedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QStandardPaths Class
+
+QStandardPaths Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstandardpaths.html
+
+
+Parameters : void
+
+* QString displayName(QStandardPaths::StandardLocation type)
+* QString findExecutable(QString executableName, QStringList paths))
+* QString locate(QStandardPaths::StandardLocation type, QString fileName, QStandardPaths::LocateOptions options)
+* QStringList locateAll(QStandardPaths::StandardLocation type, QString fileName, QStandardPaths::LocateOptions options)
+* void setTestModeEnabled(bool testMode)
+* QStringList standardLocations(QStandardPaths::StandardLocation type)
+* QString writableLocation(QStandardPaths::StandardLocation type)
+
+.. index::
+       pair: RingQt Classes Reference; QStatusBar Class
+
+QStatusBar Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstatusbar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void addPermanentWidget(QWidget * widget, int stretch)
+* void addWidget(QWidget * widget, int stretch)
+* QString currentMessage(void)
+* int insertPermanentWidget(int index, QWidget * widget, int stretch)
+* int insertWidget(int index, QWidget * widget, int stretch)
+* bool isSizeGripEnabled(void)
+* void removeWidget(QWidget *widget)
+* void setSizeGripEnabled(bool)
+* void clearMessage(void)
+* void showMessage(QString , int timeout)
+
+.. index::
+       pair: RingQt Classes Reference; QString2 Class
+
+QString2 Class
+==============
+
+
+Parameters : void
+
+* QString append( QString  str)
+* QByteArray toUtf8(void)
+* QByteArray toLatin1(void)
+* QByteArray toLocal8Bit(void)
+* QStringList split( QString  sep, QString::SplitBehavior behavior , Qt::CaseSensitivity cs )
+* QStringList split_2(QChar sep, QString::SplitBehavior behavior , Qt::CaseSensitivity cs )
+* QStringList split_3( QRegExp  rx, QString::SplitBehavior behavior )
+* QStringList split_4( QRegularExpression  re, QString::SplitBehavior behavior )
+* QChar * unicode(void)
+* QString number(ulong n, int base)
+* int count(void)
+* QString left(int n)
+* QString mid(int position, int n)
+* QString right(int n)
+* int compare(QString  other, Qt::CaseSensitivity cs )
+* bool contains(QString  str, Qt::CaseSensitivity cs )
+* int indexOf(QString str,int from,Qt::CaseSensitivity cs )
+* QString insert(int position,  QString  str)
+* bool isRightToLeft(void)
+* QString repeated(int times)
+* QString replace(int position, int n,  QString  after)
+* bool startsWith( QString  s, Qt::CaseSensitivity cs )
+* bool endsWith( QString  s, Qt::CaseSensitivity cs )
+* QString toHtmlEscaped(void)
+* void clear(void)
+* bool isNull(void)
+* void resize(int size)
+* QString fill(QChar ch, int size)
+
+.. index::
+       pair: RingQt Classes Reference; QStringList Class
+
+QStringList Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstringlist.html
+
+
+Parameters : void
+
+* QString join(QString)
+* void sort(void)
+* int removeDuplicates(void)
+* QStringList filter(QString, Qt::CaseSensitivity)
+* QStringList replaceInStrings(QString,QString, Qt::CaseSensitivity)
+* void append(QString)
+* QString at(int)
+* QString back(void)
+* void clear(void)
+* bool contains(QString)
+* int count(void)
+* bool empty(void)
+* bool endsWith(QString)
+* QString first(void)
+* QString front(void)
+* int indexOf(QString, int)
+* void insert(int, QString)
+* bool isEmpty(void)
+* QString last(void)
+* int lastIndexOf(QString,int)
+* int length(void)
+* void move(int,int)
+* void pop_back(void)
+* void pop_front(void)
+* void prepend(QString)
+* void push_back(QString)
+* void push_front(QString)
+* int removeAll(QString)
+* void removeAt(int)
+* void removeFirst(void)
+* void removeLast(void)
+* bool removeOne(QString)
+* void replace(int,QString)
+* void reserve(int)
+* int size(void)
+* bool startsWith(QString)
+* void swap(int,int)
+* QString takeAt(int)
+* QString takeFirst(void)
+* QString takeLast(void)
+* QString value(int)
+
+.. index::
+       pair: RingQt Classes Reference; QStringRef Class
+
+QStringRef Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstringref.html
+
+
+Parameters : void
+
+* QStringRef appendTo(QString * string)
+* QChar at(int position)
+* void clear(void)
+* int compare_3(QLatin1String other, Qt::CaseSensitivity cs)
+* QChar * constData(void)
+* bool contains(QString str, Qt::CaseSensitivity cs)
+* bool contains_2(QChar ch, Qt::CaseSensitivity cs)
+* bool contains_3(QStringRef str, Qt::CaseSensitivity cs)
+* bool contains_4(QLatin1String str, Qt::CaseSensitivity cs)
+* int count(void)
+* int count_2(QString str, Qt::CaseSensitivity cs)
+* int count_3(QChar ch, Qt::CaseSensitivity cs)
+* int count_4(QStringRef str, Qt::CaseSensitivity cs)
+* QChar * data(void)
+* bool endsWith(QString str, Qt::CaseSensitivity cs)
+* bool endsWith_2(QChar ch, Qt::CaseSensitivity cs)
+* bool endsWith_3(QLatin1String str, Qt::CaseSensitivity cs)
+* bool endsWith_4(QStringRef str, Qt::CaseSensitivity cs)
+* int indexOf(QString str, int from, Qt::CaseSensitivity cs)
+* int indexOf_2(QLatin1String str, int from, Qt::CaseSensitivity cs)
+* int indexOf_3(QChar ch, int from, Qt::CaseSensitivity cs)
+* int indexOf_4(QStringRef str, int from, Qt::CaseSensitivity cs)
+* bool isEmpty(void)
+* bool isNull(void)
+* int lastIndexOf(QString str, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_2(QChar ch, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_3(QLatin1String str, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_4(QStringRef str, int from, Qt::CaseSensitivity cs)
+* int length(void)
+* int localeAwareCompare(QString other)
+* int localeAwareCompare_2(QStringRef other)
+* int position(void)
+* int size(void)
+* bool startsWith(QString str, Qt::CaseSensitivity cs)
+* bool startsWith_2(QLatin1String str, Qt::CaseSensitivity cs)
+* bool startsWith_3(QStringRef str, Qt::CaseSensitivity cs)
+* bool startsWith_4(QChar ch, Qt::CaseSensitivity cs)
+* QString * string(void)
+* QByteArray toLatin1(void)
+* QByteArray toLocal8Bit(void)
+* QString toString(void)
+* QVector<uint> toUcs4(void)
+* QByteArray toUtf8(void)
+* QChar * unicode(void)
+* int compare_4(QStringRef s1, QString s2, Qt::CaseSensitivity cs)
+* int compare_5(QStringRef s1, QStringRef s2, Qt::CaseSensitivity cs)
+* int compare_6(QStringRef s1, QLatin1String s2, Qt::CaseSensitivity cs)
+* int localeAwareCompare_3(QStringRef s1, QString s2)
+* int localeAwareCompare_4(QStringRef s1, QStringRef s2)
+
+.. index::
+       pair: RingQt Classes Reference; QSurfaceFormat Class
+
+QSurfaceFormat Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsurfaceformat.html
+
+
+Parameters : void
+
+* int alphaBufferSize(void)
+* int blueBufferSize(void)
+* int greenBufferSize(void)
+* bool hasAlpha(void)
+* int majorVersion(void)
+* int minorVersion(void)
+* QSurfaceFormat::FormatOptions options(void)
+* QSurfaceFormat::OpenGLContextProfile profile(void)
+* int redBufferSize(void)
+* QSurfaceFormat::RenderableType renderableType(void)
+* int samples(void)
+* void setAlphaBufferSize(int size)
+* void setBlueBufferSize(int size)
+* void setGreenBufferSize(int size)
+* void setMajorVersion(int major)
+* void setMinorVersion(int minor)
+* void setOption(QSurfaceFormat::FormatOption option, bool on)
+* void setOptions(QSurfaceFormat::FormatOptions options)
+* void setProfile(QSurfaceFormat::OpenGLContextProfile profile)
+* void setRedBufferSize(int size)
+* void setRenderableType(QSurfaceFormat::RenderableType type)
+* void setSamples(int numSamples)
+* void setStencilBufferSize(int size)
+* void setStereo(bool enable)
+* void setSwapBehavior(QSurfaceFormat::SwapBehavior behavior)
+* void setSwapInterval(int interval)
+* void setVersion(int major, int minor)
+* int stencilBufferSize(void)
+* bool stereo(void)
+* QSurfaceFormat::SwapBehavior swapBehavior(void)
+* int swapInterval(void)
+* bool testOption(QSurfaceFormat::FormatOption option)
+* QSurfaceFormat defaultFormat(void)
+* void setDefaultFormat(QSurfaceFormat format)
+
+.. index::
+       pair: RingQt Classes Reference; QSystemTrayIcon Class
+
+QSystemTrayIcon Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsystemtrayicon.html
+
+
+Parameters : void
+
+* QMenu *contextMenu(void)
+* QRect geometry(void)
+* QIcon icon(void)
+* bool isVisible(void)
+* void setContextMenu(QMenu *menu)
+* void setIcon(QIcon)
+* void setToolTip(QString)
+* QString toolTip(void)
+* void hide(void)
+* void setVisible(bool visible)
+* void show(void)
+* void showMessage(QString, QString, QSystemTrayIcon::MessageIcon, int millisecondsTimeoutHint)
+* bool isSystemTrayAvailable(void)
+* bool supportsMessages(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTabBar Class
+
+QTabBar Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtabbar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* int addTab(QString text)
+* int addTab_2(QIcon icon, QString text)
+* int count(void)
+* int currentIndex(void)
+* bool documentMode(void)
+* bool drawBase(void)
+* Qt::TextElideMode elideMode(void)
+* bool expanding(void)
+* QSize iconSize(void)
+* int insertTab(int index, QString text)
+* int insertTab_2(int index, QIcon icon, QString text)
+* bool isMovable(void)
+* bool isTabEnabled(int index)
+* void moveTab(int from, int to)
+* void removeTab(int index)
+* QTabBar::SelectionBehavior selectionBehaviorOnRemove(void)
+* void setDocumentMode(bool set)
+* void setDrawBase(bool drawTheBase)
+* void setElideMode(Qt::TextElideMode)
+* void setExpanding(bool enabled)
+* void setIconSize(QSize size)
+* void setMovable(bool movable)
+* void setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior behavior)
+* void setShape(QTabBar::Shape shape)
+* void setTabButton(int index, QTabBar::ButtonPosition position, QWidget * widget)
+* void setTabData(int index, QVariant data)
+* void setTabEnabled(int index, bool enabled)
+* void setTabIcon(int index, QIcon icon)
+* void setTabText(int index, QString text)
+* void setTabTextColor(int index, QColor color)
+* void setTabToolTip(int index, QString tip)
+* void setTabWhatsThis(int index, QString text)
+* void setTabsClosable(bool closable)
+* void setUsesScrollButtons(bool useButtons)
+* QTabBar::Shape shape(void)
+* int tabAt(QPoint position)
+* QWidget * tabButton(int index, QTabBar::ButtonPosition position)
+* QVariant tabData(int index)
+* QIcon tabIcon(int index)
+* QRect tabRect(int index)
+* QString tabText(int index)
+* QColor tabTextColor(int index)
+* QString tabToolTip(int index)
+* QString tabWhatsThis(int index)
+* bool tabsClosable(void)
+* bool usesScrollButtons(void)
+* void setCurrentIndex(int index)
+* void setcurrentChangedEvent(const char *)
+* void settabCloseRequestedEvent(const char *)
+* void settabMovedEvent(const char *)
+* const char *getcurrentChangedEvent(void)
+* const char *gettabCloseRequestedEvent(void)
+* const char *gettabMovedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTabWidget Class
+
+QTabWidget Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtabwidget.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int addTab(QWidget *page, QString)
+* void clear(void)
+* QWidget *cornerWidget(Qt::Corner corner)
+* int count(void)
+* int currentIndex(void)
+* QWidget *currentWidget(void)
+* bool documentMode(void)
+* int elideMode(void)
+* QSize iconSize(void)
+* int indexOf(QWidget *w)
+* int insertTab(int index, QWidget *page,QString)
+* bool isMovable(void)
+* bool isTabEnabled(int index)
+* void removeTab(int index)
+* void setCornerWidget(QWidget *widget, Qt::Corner corner)
+* void setDocumentMode(bool set)
+* void setElideMode(Qt::TextElideMode)
+* void setIconSize(QSize)
+* void setMovable(bool movable)
+* void setTabEnabled(int index, bool enable)
+* void setTabIcon(int index, QIcon)
+* void setTabText(int index,QString)
+* void setTabToolTip(int index, QString)
+* void setTabWhatsThis(int index, QString)
+* void setTabsClosable(bool closeable)
+* void setUsesScrollButtons(bool useButtons)
+* QIcon tabIcon(int index)
+* QString tabText(int index)
+* QString tabToolTip(int index)
+* QString tabWhatsThis(int index)
+* bool tabsClosable(void)
+* bool usesScrollButtons(void)
+* QWidget *widget(int index)
+* int heightForWidth(int width)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setCurrentIndex(int index)
+* void setCurrentWidget(QWidget *widget)
+* void setcurrentChangedEvent(const char *)
+* void settabCloseRequestedEvent(const char *)
+* const char *getcurrentChangedEvent(void)
+* const char *gettabCloseRequestedEvent(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTableView Class
+
+QTableView Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtableview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractItemView
+
+* void clearSpans(void)
+* int columnAt(int x)
+* int columnSpan(int row, int column)
+* int columnViewportPosition(int column)
+* int columnWidth(int column)
+* Qt::PenStyle gridStyle(void)
+* QHeaderView *horizontalHeader(void)
+* bool isColumnHidden(int column)
+* bool isCornerButtonEnabled(void)
+* bool isRowHidden(int row)
+* bool isSortingEnabled(void)
+* int rowAt(int y)
+* int rowHeight(int row)
+* int rowSpan(int row, int column)
+* int rowViewportPosition(int row)
+* void setColumnHidden(int column, bool hide)
+* void setColumnWidth(int column, int width)
+* void setCornerButtonEnabled(bool enable)
+* void setGridStyle(Qt::PenStyle style)
+* void setHorizontalHeader(QHeaderView *header)
+* void setRowHeight(int row, int height)
+* void setRowHidden(int row, bool hide)
+* void setSortingEnabled(bool enable)
+* void setSpan(int row, int column, int rowSpanCount, int columnSpanCount)
+* void setVerticalHeader(QHeaderView *header)
+* void setWordWrap(bool on)
+* bool showGrid(void)
+* void sortByColumn(int column, Qt::SortOrder order)
+* QHeaderView *verticalHeader(void)
+* bool wordWrap(void)
+* void hideColumn(int column)
+* void hideRow(int row)
+* void resizeColumnToContents(int column)
+* void resizeColumnsToContents(void)
+* void resizeRowToContents(int row)
+* void resizeRowsToContents(void)
+* void selectColumn(int column)
+* void selectRow(int row)
+* void setShowGrid(bool show)
+* void showColumn(int column)
+* void showRow(int row)
+
+.. index::
+       pair: RingQt Classes Reference; QTableWidget Class
+
+QTableWidget Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtablewidget.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QTableView
+
+* QWidget *cellWidget(int row, int column)
+* void closePersistentEditor(QTableWidgetItem *item)
+* int column(QTableWidgetItem *item)
+* int columnCount(void)
+* int currentColumn(void)
+* QTableWidgetItem *currentItem(void)
+* int currentRow(void)
+* void editItem(QTableWidgetItem *item)
+* QTableWidgetItem *horizontalHeaderItem(int column)
+* QTableWidgetItem *item(int row, int column)
+* QTableWidgetItem *itemAt(int ax, int ay)
+* QTableWidgetItem *itemPrototype(void)
+* void openPersistentEditor(QTableWidgetItem *item)
+* void removeCellWidget(int row, int column)
+* int row(const QTableWidgetItem *item)
+* int rowCount(void)
+* QList<QTableWidgetItem *> selectedItems(void)
+* QList<QTableWidgetSelectionRange> selectedRanges(void)
+* void setCellWidget(int row, int column, QWidget *widget)
+* void setColumnCount(int columns)
+* void setCurrentCell(int row, int column)
+* void setCurrentItem(QTableWidgetItem * item)
+* void setHorizontalHeaderItem(int column, QTableWidgetItem *item)
+* void setHorizontalHeaderLabels(QStringList)
+* void setItem(int row, int column, QTableWidgetItem *item)
+* void setItemPrototype(QTableWidgetItem *item)
+* void setRowCount(int rows)
+* void setVerticalHeaderItem(int row, QTableWidgetItem *item)
+* void sortItems(int column, Qt::SortOrder order)
+* QTableWidgetItem *takeHorizontalHeaderItem(int column)
+* QTableWidgetItem *takeItem(int row, int column)
+* QTableWidgetItem *takeVerticalHeaderItem(int row)
+* QTableWidgetItem *verticalHeaderItem(int row)
+* int visualColumn(int logicalColumn)
+* QRect visualItemRect(QTableWidgetItem *)
+* int visualRow(int logicalRow)
+* void clear(void)
+* void clearContents(void)
+* void insertColumn(int column)
+* void insertRow(int row)
+* void removeColumn(int column)
+* void removeRow(int row)
+* void scrollToItem(QTableWidgetItem *item, QAbstractItemView::ScrollHint hint)
+* void setcellActivatedEvent(const char *)
+* void setcellChangedEvent(const char *)
+* void setcellClickedEvent(const char *)
+* void setcellDoubleClickedEvent(const char *)
+* void setcellEnteredEvent(const char *)
+* void setcellPressedEvent(const char *)
+* void setcurrentCellChangedEvent(const char *)
+* void setcurrentItemChangedEvent(const char *)
+* void setitemActivatedEvent(const char *)
+* void setitemChangedEvent(const char *)
+* void setitemClickedEvent(const char *)
+* void setitemDoubleClickedEvent(const char *)
+* void setitemEnteredEvent(const char *)
+* void setitemPressedEvent(const char *)
+* void setitemSelectionChangedEvent(const char *)
+* const char *getcellActivatedEvent(void)
+* const char *getcellChangedEvent(void)
+* const char *getcellClickedEvent(void)
+* const char *getcellDoubleClickedEvent(void)
+* const char *getcellEnteredEvent(void)
+* const char *getcellPressedEvent(void)
+* const char *getcurrentCellChangedEvent(void)
+* const char *getcurrentItemChangedEvent(void)
+* const char *getitemActivatedEvent(void)
+* const char *getitemChangedEvent(void)
+* const char *getitemClickedEvent(void)
+* const char *getitemDoubleClickedEvent(void)
+* const char *getitemEnteredEvent(void)
+* const char *getitemPressedEvent(void)
+* const char *getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTableWidgetItem Class
+
+QTableWidgetItem Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtablewidgetitem.html
+
+
+Parameters : QString
+
+* QBrush background(void)
+* int checkState(void)
+* QTableWidgetItem *clone(void)
+* int column(void)
+* QVariant data(int role)
+* int flags(void)
+* QFont font(void)
+* QBrush foreground(void)
+* QIcon icon(void)
+* bool isSelected(void)
+* void read(QDataStream)
+* int row(void)
+* void setBackground(QBrush)
+* void setCheckState(Qt::CheckState state)
+* void setData(int role, QVariant)
+* void setFlags(Qt::ItemFlag flags)
+* void setFont(QFont)
+* void setForeground(QBrush)
+* void setIcon(QIcon)
+* void setSelected(bool select)
+* void setSizeHint(QSize)
+* void setStatusTip(QString)
+* void setText(QString)
+* void setTextAlignment(int alignment)
+* void setToolTip(QString)
+* void setWhatsThis(QString)
+* QSize sizeHint(void)
+* QString statusTip(void)
+* QTableWidget *tableWidget(void)
+* QString text(void)
+* int textAlignment(void)
+* QString toolTip(void)
+* int type(void)
+* QString whatsThis(void)
+* void write(QDataStream)
+
+.. index::
+       pair: RingQt Classes Reference; QTcpServer Class
+
+QTcpServer Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtcpserver.html
+
+
+Parameters : QWidget *
+
+* void close(void)
+* QString errorString(void)
+* bool hasPendingConnections(void)
+* bool isListening(void)
+* bool listen(QHostAddress, int port)
+* int maxPendingConnections(void)
+* QTcpSocket *nextPendingConnection(void)
+* void pauseAccepting(void)
+* QNetworkProxy proxy(void)
+* void resumeAccepting(void)
+* QHostAddress serverAddress(void)
+* int serverError(void)
+* int serverPort(void)
+* void setMaxPendingConnections(int numConnections)
+* void setProxy(QNetworkProxy)
+* bool setSocketDescriptor(qintptr socketDescriptor)
+* int *socketDescriptor(void)
+* bool waitForNewConnection(int msec, bool *timedOut)
+* void setacceptErrorEvent(const char *)
+* void setnewConnectionEvent(const char *)
+* const char *getacceptErrorEvent(void)
+* const char *getnewConnectionEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTcpSocket Class
+
+QTcpSocket Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtcpsocket.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QAbstractSocket
+
+* void setconnectedEvent(const char *)
+* void setdisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void sethostFoundEvent(const char *)
+* void setproxyAuthenticationRequiredEvent(const char *)
+* void setstateChangedEvent(const char *)
+* void setaboutToCloseEvent(const char *)
+* void setbytesWrittenEvent(const char *)
+* void setreadChannelFinishedEvent(const char *)
+* void setreadyReadEvent(const char *)
+* const char *getconnectedEvent(void)
+* const char *getdisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *gethostFoundEvent(void)
+* const char *getproxyAuthenticationRequiredEvent(void)
+* const char *getstateChangedEvent(void)
+* const char *getaboutToCloseEvent(void)
+* const char *getbytesWrittenEvent(void)
+* const char *getreadChannelFinishedEvent(void)
+* const char *getreadyReadEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTechnique Class
+
+QTechnique Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qtechnique.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void addFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void addParameter(Qt3DRender::QParameter *parameter)
+* void addRenderPass(Qt3DRender::QRenderPass *pass)
+* QVector<Qt3DRender::QFilterKey *> filterKeys(void)
+* Qt3DRender::QGraphicsApiFilter * graphicsApiFilter(void)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void removeRenderPass(Qt3DRender::QRenderPass *pass)
+* QVector<Qt3DRender::QRenderPass *> renderPasses(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTest Class
+
+QTest Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtest.html
+
+* void qsleep(int)
+
+.. index::
+       pair: RingQt Classes Reference; QText2DEntity Class
+
+QText2DEntity Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qtext2dentity.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QEntity
+
+* QColor color(void)
+* QFont font(void)
+* float height(void)
+* void setColor(QColor color)
+* void setFont(QFont font)
+* void setHeight(float height)
+* void setText(QString text)
+* void setWidth(float width)
+* QString text(void)
+* float width(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextBlock Class
+
+QTextBlock Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextblock.html
+
+
+Parameters : void
+
+* int blockFormatIndex(void)
+* int blockNumber(void)
+* QTextCharFormat charFormat(void)
+* int charFormatIndex(void)
+* void clearLayout(void)
+* bool contains(int position)
+* QTextDocument *document(void)
+* bool isValid(void)
+* bool isVisible(void)
+* QTextLayout * layout(void)
+* int length(void)
+* int lineCount(void)
+* QTextBlock next(void) # In RingQt use :  QTextBlock nextblock(void)
+* int position(void)
+* QTextBlock previous(void)
+* int revision(void)
+* void setLineCount(int count)
+* void setRevision(int rev)
+* void setUserData(QTextBlockUserData * data)
+* void setUserState(int state)
+* void setVisible(bool visible)
+* QString text(void)
+* int textDirection(void)
+* QTextList * textList(void)
+* QTextBlockUserData * userData(void)
+* int userState(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextBrowser Class
+
+QTextBrowser Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextbrowser.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QTextEdit
+
+* int backwardHistoryCount(void)
+* void clearHistory(void)
+* int forwardHistoryCount(void)
+* QString historyTitle(int i)
+* QUrl historyUrl(int i)
+* bool isBackwardAvailable(void)
+* bool isForwardAvailable(void)
+* bool openExternalLinks(void)
+* bool openLinks(void)
+* QStringList searchPaths(void)
+* void setOpenExternalLinks(bool open)
+* void setOpenLinks(bool open)
+* void setSearchPaths(QStringList paths)
+* QUrl source(void)
+* void setanchorClickedEvent(const char *)
+* void setbackwardAvailableEvent(const char *)
+* void setforwardAvailableEvent(const char *)
+* void sethighlightedEvent(const char *)
+* void sethistoryChangedEvent(const char *)
+* void setsourceChangedEvent(const char *)
+* const char *getanchorClickedEvent(void)
+* const char *getbackwardAvailableEvent(void)
+* const char *getforwardAvailableEvent(void)
+* const char *gethighlightedEvent(void)
+* const char *gethistoryChangedEvent(void)
+* const char *getsourceChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextCharFormat Class
+
+QTextCharFormat Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextcharformat.html
+
+
+Parameters : void
+
+* QString anchorHref(void)
+* QStringList anchorNames(void)
+* QFont font(void)
+* QFont::Capitalization fontCapitalization(void)
+* QString fontFamily(void)
+* bool fontFixedPitch(void)
+* QFont::HintingPreference fontHintingPreference(void)
+* bool fontItalic(void)
+* bool fontKerning(void)
+* qreal fontLetterSpacing(void)
+* QFont::SpacingType fontLetterSpacingType(void)
+* bool fontOverline(void)
+* qreal fontPointSize(void)
+* int fontStretch(void)
+* bool fontStrikeOut(void)
+* QFont::StyleHint fontStyleHint(void)
+* QFont::StyleStrategy fontStyleStrategy(void)
+* bool fontUnderline(void)
+* int fontWeight(void)
+* qreal fontWordSpacing(void)
+* bool isAnchor(void)
+* bool isValid(void)
+* void setAnchor(bool anchor)
+* void setAnchorHref( QString   value)
+* void setAnchorNames( QStringList   names)
+* void setFontCapitalization(QFont::Capitalization capitalization)
+* void setFontFamily( QString   family)
+* void setFontFixedPitch(bool fixedPitch)
+* void setFontHintingPreference(QFont::HintingPreference hintingPreference)
+* void setFontItalic(bool italic)
+* void setFontKerning(bool enable)
+* void setFontLetterSpacing(qreal spacing)
+* void setFontLetterSpacingType(QFont::SpacingType letterSpacingType)
+* void setFontOverline(bool overline)
+* void setFontPointSize(qreal size)
+* void setFontStretch(int factor)
+* void setFontStrikeOut(bool strikeOut)
+* void setFontStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy )
+* void setFontStyleStrategy(QFont::StyleStrategy strategy)
+* void setFontUnderline(bool underline)
+* void setFontWeight(int weight)
+* void setFontWordSpacing(qreal spacing)
+* void setTextOutline( QPen   pen)
+* void setToolTip( QString   text)
+* void setUnderlineColor( QColor   color)
+* void setUnderlineStyle(QTextCharFormat::UnderlineStyle style)
+* void setVerticalAlignment(QTextCharFormat::VerticalAlignment alignment)
+* QPen textOutline(void)
+* QString toolTip(void)
+* QColor underlineColor(void)
+* QTextCharFormat::UnderlineStyle underlineStyle(void)
+* QTextCharFormat::VerticalAlignment verticalAlignment(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextCodec Class
+
+QTextCodec Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextcodec.html
+
+* QTextCodec *codecForName(const char *name)
+* void setCodecForLocale(QTextCodec *c)
+
+.. index::
+       pair: RingQt Classes Reference; QTextCursor Class
+
+QTextCursor Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextcursor.html
+
+
+Parameters : void
+
+* int anchor(void)
+* bool atBlockEnd(void)
+* bool atBlockStart(void)
+* bool atEnd(void)
+* bool atStart(void)
+* void beginEditBlock(void)
+* QTextBlock block(void)
+* QTextCharFormat blockCharFormat(void)
+* QTextBlockFormat blockFormat(void)
+* int blockNumber(void)
+* QTextCharFormat charFormat(void)
+* void clearSelection(void)
+* int columnNumber(void)
+* QTextList *createList(QTextListFormat)
+* QTextFrame *currentFrame(void)
+* QTextList *currentList(void)
+* QTextTable *currentTable(void)
+* void deleteChar(void)
+* void deletePreviousChar(void)
+* QTextDocument *document(void)
+* void endEditBlock(void)
+* bool hasComplexSelection(void)
+* bool hasSelection(void)
+* void insertBlock(void)
+* void insertFragment(QTextDocumentFragment)
+* QTextFrame *insertFrame(QTextFrameFormat)
+* void insertHtml(QString)
+* void insertImage(QTextImageFormat)
+* QTextList *insertList(QTextListFormat)
+* QTextTable * insertTable(int rows, int columns, QTextTableFormat)
+* void insertText(QString)
+* void insertText_2(QString,QTextCharFormat)
+* bool isCopyOf(QTextCursor)
+* bool isNull(void)
+* void joinPreviousEditBlock(void)
+* bool keepPositionOnInsert(void)
+* void mergeBlockCharFormat(QTextCharFormat)
+* void mergeBlockFormat(QTextBlockFormat)
+* void mergeCharFormat(QTextCharFormat)
+* bool movePosition(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode, int n)
+* int position(void)
+* int positionInBlock(void)
+* void removeSelectedText(void)
+* void select(QTextCursor::SelectionType selection)
+* void selectedTableCells(int *firstRow, int *numRows, int *firstColumn, int *numColumns)
+* QString selectedText(void)
+* QTextDocumentFragment selection(void)
+* int selectionEnd(void)
+* int selectionStart(void)
+* void setBlockCharFormat(QTextCharFormat)
+* void setBlockFormat(QTextBlockFormat)
+* void setCharFormat(QTextCharFormat)
+* void setKeepPositionOnInsert(bool b)
+* void setPosition(int pos, QTextCursor::MoveMode m)
+* void setVerticalMovementX(int x)
+* void setVisualNavigation(bool b)
+* int verticalMovementX(void)
+* bool visualNavigation(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextDocument Class
+
+QTextDocument Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextdocument.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* void addResource(int type,QUrl name, QVariant resource)
+* void adjustSize(void)
+* QVector<QTextFormat> allFormats(void)
+* int availableRedoSteps(void)
+* int availableUndoSteps(void)
+* QTextBlock begin(void)
+* int blockCount(void)
+* QChar characterAt(int pos)
+* int characterCount(void)
+* void clearUndoRedoStacks(QTextDocument::Stacks stacksToClear )
+* QTextDocument *clone(QObject *parent )
+* int defaultCursorMoveStyle(void)
+* QFont defaultFont(void)
+* QString defaultStyleSheet(void)
+* QTextOption defaultTextOption(void)
+* QAbstractTextDocumentLayout *documentLayout(void)
+* double documentMargin(void)
+* void drawContents(QPainter *p, QRectF rect)
+* QTextBlock end(void) # In RingQt use : QTextBlock enddoc(void)
+* QTextCursor find(QString subString, QTextCursor cursor, QTextDocument::FindFlag options )
+* QTextBlock findBlock(int pos)
+* QTextBlock findBlockByLineNumber(int lineNumber)
+* QTextBlock findBlockByNumber(int blockNumber)
+* QTextBlock firstBlock(void)
+* double idealWidth(void)
+* double indentWidth(void)
+* bool isEmpty(void)
+* bool isModified(void)
+* bool isRedoAvailable(void)
+* bool isUndoAvailable(void)
+* bool isUndoRedoEnabled(void)
+* QTextBlock lastBlock(void)
+* int lineCount(void)
+* void markContentsDirty(int position, int length)
+* int maximumBlockCount(void)
+* QString metaInformation(QTextDocument::MetaInformation info)
+* QTextObject *object(int objectIndex)
+* QTextObject *objectForFormat(QTextFormat f)
+* int pageCount(void)
+* QSizeF pageSize(void)
+* void print(QPrinter *printer)
+* void redo(QTextCursor *cursor)
+* QVariant resource(int type, QUrl name)
+* int revision(void)
+* QTextFrame *rootFrame(void)
+* void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style)
+* void setDefaultFont(QFont font)
+* void setDefaultStyleSheet(QString sheet)
+* void setDefaultTextOption(QTextOption option)
+* void setDocumentLayout(QAbstractTextDocumentLayout * layout)
+* void setDocumentMargin(double margin)
+* void setHtml(QString html)
+* void setIndentWidth(double width)
+* void setMaximumBlockCount(int maximum)
+* void setMetaInformation(QTextDocument::MetaInformation info, QString string)
+* void setPageSize(QSizeF size)
+* void setPlainText(QString text)
+* void setTextWidth(double width)
+* void setUndoRedoEnabled(bool enable)
+* void setUseDesignMetrics(bool b)
+* QSizeF size(void)
+* qreal textWidth(void)
+* QString toHtml(QByteArray encoding)
+* QString toPlainText(void)
+* void undo(QTextCursor *cursor)
+* bool useDesignMetrics(void)
+* void setModified(bool m)
+
+.. index::
+       pair: RingQt Classes Reference; QTextEdit Class
+
+QTextEdit Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextedit.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* bool acceptRichText(void)
+* int alignment(void)
+* QString anchorAt(QPoint)
+* bool canPaste(void)
+* QTextCharFormat currentCharFormat(void)
+* QFont currentFont(void)
+* QTextCursor cursorForPosition(QPoint)
+* QRect cursorRect(void)
+* int cursorWidth(void)
+* QTextDocument *document(void)
+* QString documentTitle(void)
+* void ensureCursorVisible(void)
+* bool find(QString, QTextDocument::FindFlag)
+* QString fontFamily(void)
+* bool fontItalic(void)
+* double fontPointSize(void)
+* bool fontUnderline(void)
+* int fontWeight(void)
+* bool isReadOnly(void)
+* bool isUndoRedoEnabled(void)
+* int lineWrapColumnOrWidth(void)
+* QVariant loadResource(int, QUrl)
+* void mergeCurrentCharFormat(QTextCharFormat)
+* void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode)
+* bool overwriteMode(void)
+* void print(QPrinter * printer)
+* void setAcceptRichText(bool accept)
+* void setCurrentCharFormat(QTextCharFormat)
+* void setCursorWidth(int width)
+* void setDocument(QTextDocument *document)
+* void setDocumentTitle(QString)
+* void setLineWrapColumnOrWidth(int w)
+* void setLineWrapMode(QTextEdit::LineWrapMode)
+* void setOverwriteMode(bool overwrite)
+* void setReadOnly(bool)
+* void setTabChangesFocus(bool)
+* void setTabStopWidth(int width)
+* void setTextCursor(QTextCursor)
+* void setTextInteractionFlags(Qt::TextInteractionFlag flags)
+* void setUndoRedoEnabled(bool enable)
+* void setWordWrapMode(QTextOption::WrapMode policy)
+* bool tabChangesFocus(void)
+* int tabStopWidth(void)
+* QColor textBackgroundColor(void)
+* QColor textColor(void)
+* QTextCursor textCursor(void)
+* int textInteractionFlags(void)
+* QString toHtml(void)
+* QString toPlainText(void)
+* int wordWrapMode(void)
+* void append(QString)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void insertHtml(QString)
+* void insertPlainText(QString)
+* void paste(void)
+* void redo(void)
+* void scrollToAnchor(QString)
+* void selectAll(void)
+* void setAlignment(Qt::AlignmentFlag a)
+* void setCurrentFont(QFont)
+* void setFontFamily(QString)
+* void setFontItalic(bool italic)
+* void setFontPointSize(double s)
+* void setFontUnderline(bool underline)
+* void setFontWeight(int weight)
+* void setHtml(QString)
+* void setPlainText(QString)
+* void setText(QString)
+* void setTextBackgroundColor(QColor)
+* void setTextColor(QColor)
+* void undo(void)
+* void zoomIn(int range)
+* void zoomOut(int range)
+* void setcopyAvailableEvent(const char *)
+* void setcurrentCharFormatChangedEvent(const char *)
+* void setcursorPositionChangedEvent(const char *)
+* void setredoAvailableEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void settextChangedEvent(const char *)
+* void setundoAvailableEvent(const char *)
+* const char *getcopyAvailableEvent(void)
+* const char *getcurrentCharFormatChangedEvent(void)
+* const char *getcursorPositionChangedEvent(void)
+* const char *getredoAvailableEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettextChangedEvent(void)
+* const char *getundoAvailableEvent(void)
+* void cyanline(void)
+* void setactivelinecolor(QColor)
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream Class
+
+QTextStream Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextstream.html
+
+
+Parameters : void
+
+* bool atEnd(void)
+* bool autoDetectUnicode(void)
+* QTextCodec * codec(void)
+* QIODevice * device(void)
+* QTextStream::FieldAlignment fieldAlignment(void)
+* int fieldWidth(void)
+* void flush(void)
+* bool generateByteOrderMark(void)
+* int integerBase(void)
+* QLocale locale(void)
+* QTextStream::NumberFlags numberFlags(void)
+* QChar padChar(void)
+* qint64 pos(void)
+* QString read(qint64 maxlen)
+* QString readAll(void)
+* QString readLine(qint64 maxlen)
+* QTextStream::RealNumberNotation realNumberNotation(void)
+* int realNumberPrecision(void)
+* void reset(void)
+* void resetStatus(void)
+* bool seek(qint64 pos)
+* void setAutoDetectUnicode(bool enabled)
+* void setCodec(QTextCodec * codec)
+* void setCodec_2(char * codecName)
+* void setDevice(QIODevice * device)
+* void setFieldAlignment(QTextStream::FieldAlignment mode)
+* void setFieldWidth(int width)
+* void setGenerateByteOrderMark(bool generate)
+* void setIntegerBase(int base)
+* void setLocale(QLocale locale)
+* void setNumberFlags(QTextStream::NumberFlags flags)
+* void setPadChar(QChar ch)
+* void setRealNumberNotation(QTextStream::RealNumberNotation notation)
+* void setRealNumberPrecision(int precision)
+* void setStatus(QTextStream::Status status)
+* void setString(QString * string, QIODevice::OpenMode openMode)
+* void skipWhiteSpace(void)
+* QTextStream::Status status(void)
+* QString * string(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream2 Class
+
+QTextStream2 Class
+==================
+
+
+Parameters : QIODevice * device
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream3 Class
+
+QTextStream3 Class
+==================
+
+
+Parameters : FILE * fileHandle, QIODevice::OpenMode
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream4 Class
+
+QTextStream4 Class
+==================
+
+
+Parameters : QString *, QIODevice::OpenMode
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream5 Class
+
+QTextStream5 Class
+==================
+
+
+Parameters : QByteArray *, QIODevice::OpenMode
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextToSpeech Class
+
+QTextToSpeech Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtexttospeech.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QVector<QLocale> availableLocales(void)
+* QVector<QVoice> availableVoices(void)
+* QLocale locale(void)
+* double pitch(void)
+* double rate(void)
+* QTextToSpeech::State state(void)
+* QVoice voice(void)
+* double volume(void)
+* void pause(void)
+* void resume(void)
+* void say(QString text)
+* void setLocale(QLocale locale)
+* void setPitch(double pitch)
+* void setRate(double rate)
+* void setVoice(QVoice voice)
+* void setVolume(double volume)
+* void stop(void)
+* QStringList availableEngines(void)
+* void setlocaleChangedEvent(const char *)
+* void setpitchChangedEvent(const char *)
+* void setrateChangedEvent(const char *)
+* void setstateChangedEvent(const char *)
+* void setvoiceChangedEvent(const char *)
+* void setvolumeChangedEvent(const char *)
+* const char *getlocaleChangedEvent(void)
+* const char *getpitchChangedEvent(void)
+* const char *getrateChangedEvent(void)
+* const char *getstateChangedEvent(void)
+* const char *getvoiceChangedEvent(void)
+* const char *getvolumeChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextureLoader Class
+
+QTextureLoader Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qtextureloader.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool isMirrored(void)
+* QUrl source(void)
+* void setMirrored(bool mirrored)
+* void setSource(QUrl source)
+
+.. index::
+       pair: RingQt Classes Reference; QTextureMaterial Class
+
+QTextureMaterial Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qtexturematerial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool isAlphaBlendingEnabled(void)
+* Qt3DRender::QAbstractTexture *texture(void)
+* QVector2D textureOffset(void)
+* QMatrix3x3 textureTransform(void)
+* void setAlphaBlendingEnabled(bool enabled)
+* void setTexture(Qt3DRender::QAbstractTexture *texture)
+* void setTextureOffset(QVector2D textureOffset)
+* void setTextureTransform(QMatrix3x3 matrix)
+
+.. index::
+       pair: RingQt Classes Reference; QThread Class
+
+QThread Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qthread.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QAbstractEventDispatcher *eventDispatcher(void)
+* void exit(int returnCode) # In RingQt use : void exitfromthread(int returnCode)
+* bool isFinished(void)
+* bool isInterruptionRequested(void)
+* bool isRunning(void)
+* QThread::Priority priority(void)
+* void requestInterruption(void)
+* void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
+* void setPriority(QThread::Priority priority)
+* void setStackSize(uint stackSize)
+* uint stackSize(void)
+* bool wait(unsigned long time)
+* void quit(void)
+* void start(QThread::Priority priority)
+* void terminate(void)
+* QThread *currentThread(void)
+* Qt::HANDLE currentThreadId(void)
+* int idealThreadCount(void)
+* void msleep(unsigned long msecs)
+* void sleep(unsigned long secs)
+* void usleep(unsigned long usecs)
+* void yieldCurrentThread(void)
+* void setStartedEvent(const char *)
+* void setFinishedEvent(const char *)
+* const char *getStartedEvent(void)
+* const char *getFinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QThreadPool Class
+
+QThreadPool Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qthreadpool.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* int activeThreadCount(void)
+* void clear(void)
+* int expiryTimeout(void)
+* int maxThreadCount(void)
+* void releaseThread(void)
+* void reserveThread(void)
+* void setExpiryTimeout(int expiryTimeout)
+* void setMaxThreadCount(int maxThreadCount)
+* void start(QRunnable * runnable, int priority)
+* bool tryStart(QRunnable * runnable)
+* bool waitForDone(int msecs)
+* QThreadPool *globalInstance(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTime Class
+
+QTime Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtime.html
+
+
+Parameters : void
+
+* QTime addMSecs(int ms)
+* QTime addSecs(int s)
+* int elapsed(void)
+* int hour(void)
+* bool isNull(void)
+* bool isValid(void)
+* int minute(void)
+* int msec(void)
+* int msecsSinceStartOfDay(void)
+* int msecsTo(QTime)
+* int restart(void)
+* int second(void)
+* int secsTo(QTime)
+* bool setHMS(int h, int m, int s, int ms)
+* void start(void)
+* QString toString(QString)
+* QTime currentTime(void)
+* QTime fromMSecsSinceStartOfDay(int msecs)
+* QTime fromString(QString,QString)
+
+.. index::
+       pair: RingQt Classes Reference; QTimer Class
+
+QTimer Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtimer.html
+
+
+Parameters : QObject *parent
+
+* int interval(void)
+* bool isActive(void)
+* bool isSingleShot(void)
+* void setInterval(int msec)
+* void setSingleShot(bool singleShot)
+* int timerId(void)
+* void start(void)
+* void stop(void)
+* void settimeoutEvent(const char *)
+* const char *gettimeoutEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QToolBar Class
+
+QToolBar Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtoolbar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QAction *actionAt(int x, int y)
+* QAction *addAction(QString)
+* QAction *addSeparator(void)
+* QAction *addWidget(QWidget *widget)
+* int allowedAreas(void)
+* void clear(void)
+* QSize iconSize(void)
+* QAction *insertSeparator(QAction *before)
+* QAction *insertWidget(QAction *before, QWidget *widget)
+* bool isAreaAllowed(Qt::ToolBarArea area)
+* bool isFloatable(void)
+* bool isFloating(void)
+* bool isMovable(void)
+* int orientation(void)
+* void setAllowedAreas(Qt::ToolBarArea areas)
+* void setFloatable(bool floatable)
+* void setMovable(bool movable)
+* void setOrientation(Qt::Orientation orientation)
+* QAction *toggleViewAction(void)
+* int toolButtonStyle(void)
+* QWidget *widgetForAction(QAction *action)
+* void setIconSize(QSize)
+* void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
+
+.. index::
+       pair: RingQt Classes Reference; QToolButton Class
+
+QToolButton Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtoolbutton.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractButton
+
+* Qt::ArrowType arrowType(void)
+* bool autoRaise(void)
+* QAction * defaultAction(void)
+* QMenu * menu(void)
+* QToolButton::ToolButtonPopupMode popupMode(void)
+* void setArrowType(Qt::ArrowType type)
+* void setAutoRaise(bool enable)
+* void setMenu(QMenu * menu)
+* void setPopupMode(QToolButton::ToolButtonPopupMode mode)
+* Qt::ToolButtonStyle toolButtonStyle(void)
+* void setDefaultAction(QAction * action)
+* void setToolButtonStyle(Qt::ToolButtonStyle style)
+* void showMenu(void)
+* void settriggeredEvent(const char *)
+* const char *gettriggeredEvent(void)
+* void setClickEvent(const char *)
+* const char *getClickEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTorusMesh Class
+
+QTorusMesh Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qtorusmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float minorRadius(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setMinorRadius(float minorRadius)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt Classes Reference; QTransform Class
+
+QTransform Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qtransform.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QMatrix4x4 matrix(void)
+* QQuaternion rotation(void)
+* float rotationX(void)
+* float rotationY(void)
+* float rotationZ(void)
+* float scale(void)
+* QVector3D scale3D(void)
+* QVector3D translation(void)
+* void setMatrix(QMatrix4x4 matrix)
+* void setRotation(QQuaternion rotation)
+* void setRotationX(float rotationX)
+* void setRotationY(float rotationY)
+* void setRotationZ(float rotationZ)
+* void setScale(float scale)
+* void setScale3D(QVector3D scale)
+* void setTranslation(QVector3D translation)
+* QQuaternion fromAxes(QVector3D xAxis, QVector3D yAxis, QVector3D zAxis)
+* QQuaternion fromAxesAndAngles(QVector3D axis1, float angle1, QVector3D axis2, float angle2)
+* QQuaternion fromAxesAndAngles_2(QVector3D axis1, float angle1, QVector3D axis2, float angle2, QVector3D axis3, float angle3)
+* QQuaternion fromAxisAndAngle(QVector3D axis, float angle)
+* QQuaternion fromAxisAndAngle_2(float x, float y, float z, float angle)
+* QQuaternion fromEulerAngles(QVector3D eulerAngles)
+* QQuaternion fromEulerAngles_2(float pitch, float yaw, float roll)
+* QMatrix4x4 rotateAround(QVector3D point, float angle, QVector3D axis)
+* QMatrix4x4 rotateFromAxes(QVector3D xAxis, QVector3D yAxis, QVector3D zAxis)
+
+.. index::
+       pair: RingQt Classes Reference; QTreeView Class
+
+QTreeView Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtreeview.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractItemView
+
+* bool allColumnsShowFocus(void)
+* int autoExpandDelay(void)
+* int columnAt(int x)
+* int columnViewportPosition(int column)
+* int columnWidth(int column)
+* bool expandsOnDoubleClick(void)
+* QHeaderView *header(void)
+* int indentation(void)
+* QModelIndex indexAbove(QModelIndex)
+* QModelIndex indexBelow(QModelIndex)
+* bool isAnimated(void)
+* bool isColumnHidden(int column)
+* bool isExpanded(QModelIndex)
+* bool isFirstColumnSpanned(int row, QModelIndex)
+* bool isHeaderHidden(void)
+* bool isRowHidden(int row,QModelIndex)
+* bool isSortingEnabled(void)
+* bool itemsExpandable(void)
+* bool rootIsDecorated(void)
+* void setAllColumnsShowFocus(bool enable)
+* void setAnimated(bool enable)
+* void setAutoExpandDelay(int delay)
+* void setColumnHidden(int column, bool hide)
+* void setColumnWidth(int column, int width)
+* void setExpanded(QModelIndex, bool expanded)
+* void setExpandsOnDoubleClick(bool enable)
+* void setFirstColumnSpanned(int row, QModelIndex, bool span)
+* void setHeader(QHeaderView * header)
+* void setHeaderHidden(bool hide)
+* void setIndentation(int i)
+* void setItemsExpandable(bool enable)
+* void setRootIsDecorated(bool show)
+* void setRowHidden(int row,QModelIndex, bool hide)
+* void setSortingEnabled(bool enable)
+* void setUniformRowHeights(bool uniform)
+* void setWordWrap(bool on)
+* void sortByColumn(int column,Qt::SortOrder order)
+* bool uniformRowHeights(void)
+* bool wordWrap(void)
+* void dataChanged(QModelIndex,QModelIndex)
+* QModelIndex indexAt(QPoint)
+* void keyboardSearch(QString)
+* void reset(void)
+* void scrollTo(QModelIndex, QAbstractItemView::ScrollHint)
+* void selectAll(void)
+* void setModel(QAbstractItemModel *model)
+* void setRootIndex(QModelIndex)
+* void setSelectionModel(QItemSelectionModel *selectionModel)
+* QRect visualRect(QModelIndex)
+* void collapse(QModelIndex)
+* void collapseAll(void)
+* void expand(QModelIndex)
+* void expandAll(void)
+* void expandToDepth(int depth)
+* void hideColumn(int column)
+* void resizeColumnToContents(int column)
+* void showColumn(int column)
+* void setcollapsedEvent(const char *)
+* void setexpandedEvent(const char *)
+* void setactivatedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setdoubleClickedEvent(const char *)
+* void setenteredEvent(const char *)
+* void setpressedEvent(const char *)
+* void setviewportEnteredEvent(const char *)
+* const char *getcollapsedEvent(void)
+* const char *getexpandedEvent(void)
+* const char *getactivatedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getdoubleClickedEvent(void)
+* const char *getenteredEvent(void)
+* const char *getpressedEvent(void)
+* const char *getviewportEnteredEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTreeWidget Class
+
+QTreeWidget Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtreewidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QTreeView
+
+* void addTopLevelItem(QTreeWidgetItem *item)
+* void closePersistentEditor(QTreeWidgetItem *item, int column)
+* int columnCount(void)
+* int currentColumn(void)
+* QTreeWidgetItem *currentItem(void)
+* void editItem(QTreeWidgetItem *item, int column)
+* QTreeWidgetItem *headerItem(void)
+* int indexOfTopLevelItem(QTreeWidgetItem *item)
+* void insertTopLevelItem(int index, QTreeWidgetItem *item)
+* QTreeWidgetItem *invisibleRootItem(void)
+* bool isFirstItemColumnSpanned( QTreeWidgetItem *item)
+* QTreeWidgetItem *itemAbove(QTreeWidgetItem *item)
+* QTreeWidgetItem *itemAt(int x, int y)
+* QTreeWidgetItem *itemBelow(QTreeWidgetItem *item)
+* QWidget *itemWidget(QTreeWidgetItem *item, int column)
+* void openPersistentEditor(QTreeWidgetItem *item, int column)
+* void removeItemWidget(QTreeWidgetItem *item, int column)
+* void setColumnCount(int columns)
+* void setCurrentItem(QTreeWidgetItem * item, QItemSelectionModel::SelectionFlag column)
+* void setFirstItemColumnSpanned(QTreeWidgetItem *item, bool span)
+* void setHeaderItem(QTreeWidgetItem *item)
+* void setHeaderLabel(QString)
+* void setHeaderLabels(QStringList)
+* void setItemWidget(QTreeWidgetItem *item, int column, QWidget * widget)
+* int sortColumn(void)
+* void sortItems(int column, Qt::SortOrder order)
+* QTreeWidgetItem *takeTopLevelItem(int index)
+* QTreeWidgetItem *topLevelItem(int index)
+* int topLevelItemCount(void)
+* QRect visualItemRect(QTreeWidgetItem *item)
+* void setSelectionModel(QItemSelectionModel *selectionModel)
+* void clear(void)
+* void collapseItem(QTreeWidgetItem *item)
+* void expandItem(QTreeWidgetItem *item)
+* void scrollToItem(QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint)
+* void setcollapsedEvent(const char *)
+* void setexpandedEvent(const char *)
+* void setactivatedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setdoubleClickedEvent(const char *)
+* void setenteredEvent(const char *)
+* void setpressedEvent(const char *)
+* void setviewportEnteredEvent(const char *)
+* void setcurrentItemChangedEvent(const char *)
+* void setitemActivatedEvent(const char *)
+* void setitemChangedEvent(const char *)
+* void setitemClickedEvent(const char *)
+* void setitemCollapsedEvent(const char *)
+* void setitemDoubleClickedEvent(const char *)
+* void setitemEnteredEvent(const char *)
+* void setitemExpandedEvent(const char *)
+* void setitemPressedEvent(const char *)
+* void setitemSelectionChangedEvent(const char *)
+* const char *getcollapsedEvent(void)
+* const char *getexpandedEvent(void)
+* const char *getactivatedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getdoubleClickedEvent(void)
+* const char *getenteredEvent(void)
+* const char *getpressedEvent(void)
+* const char *getviewportEnteredEvent(void)
+* const char *getcurrentItemChangedEvent(void)
+* const char *getitemActivatedEvent(void)
+* const char *getitemChangedEvent(void)
+* const char *getitemClickedEvent(void)
+* const char *getitemCollapsedEvent(void)
+* const char *getitemDoubleClickedEvent(void)
+* const char *getitemEnteredEvent(void)
+* const char *getitemExpandedEvent(void)
+* const char *getitemPressedEvent(void)
+* const char *getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTreeWidgetItem Class
+
+QTreeWidgetItem Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtreewidgetitem.html
+
+
+Parameters : void
+
+* void addChild(QTreeWidgetItem *child)
+* QBrush background(int column)
+* int checkState(int column)
+* QTreeWidgetItem *child(int index)
+* int childCount(void)
+* int childIndicatorPolicy(void)
+* QTreeWidgetItem *clone(void)
+* int columnCount(void)
+* QVariant data(int column, int role)
+* int flags(void)
+* QFont font(int column)
+* QBrush foreground(int column)
+* QIcon icon(int column)
+* int indexOfChild(QTreeWidgetItem *child)
+* void insertChild(int index, QTreeWidgetItem *child)
+* bool isDisabled(void)
+* bool isExpanded(void)
+* bool isFirstColumnSpanned(void)
+* bool isHidden(void)
+* bool isSelected(void)
+* QTreeWidgetItem *parent(void)
+* void read(QDataStream)
+* void removeChild(QTreeWidgetItem *child)
+* void setBackground(int column,QBrush)
+* void setCheckState(int column, Qt::CheckState state)
+* void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy)
+* void setData(int column, int role,QVariant)
+* void setDisabled(bool disabled)
+* void setExpanded(bool expand)
+* void setFirstColumnSpanned(bool span)
+* void setFlags(Qt::ItemFlag flags)
+* void setFont(int column, QFont)
+* void setForeground(int column, QBrush)
+* void setHidden(bool hide)
+* void setIcon(int column, QIcon)
+* void setSelected(bool select)
+* void setSizeHint(int column, QSize)
+* void setStatusTip(int column, QString)
+* void setText(int column, QString)
+* void setTextAlignment(int column, int alignment)
+* void setToolTip(int column, QString)
+* void setWhatsThis(int column, QString)
+* QSize sizeHint(int column)
+* void sortChildren(int column, Qt::SortOrder order)
+* QString statusTip(int column)
+* QTreeWidgetItem *takeChild(int index)
+* QString text(int column)
+* int textAlignment(int column)
+* QString toolTip(int column)
+* QTreeWidget *treeWidget(void)
+* int type(void)
+* QString whatsThis(int column)
+* void write(QDataStream)
+
+.. index::
+       pair: RingQt Classes Reference; QUrl Class
+
+QUrl Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qurl.html
+
+
+Parameters : QString
+
+* void clear(void)
+* QString errorString(void)
+* QString fileName(QUrl::ComponentFormattingOption options)
+* QString fragment(QUrl::ComponentFormattingOption options)
+* bool hasFragment(void)
+* bool hasQuery(void)
+* QString host(QUrl::ComponentFormattingOption options)
+* bool isEmpty(void)
+* bool isLocalFile(void)
+* bool isParentOf(QUrl)
+* bool isRelative(void)
+* bool isValid(void)
+* QString path(QUrl::ComponentFormattingOption options)
+* int port(int defaultPort)
+* QString query(QUrl::ComponentFormattingOption options)
+* QUrl resolved(QUrl)
+* QString scheme(void)
+* void setAuthority(QString, QUrl::ParsingMode mode)
+* void setFragment(QString, QUrl::ParsingMode mode)
+* void setHost(QString, QUrl::ParsingMode mode)
+* void setPassword(QString, QUrl::ParsingMode mode)
+* void setPath(QString, QUrl::ParsingMode mode)
+* void setPort(int port)
+* void setQuery(QString, QUrl::ParsingMode mode)
+* void setScheme(QString)
+* void setUrl(QString, QUrl::ParsingMode parsingMode)
+* void setUserInfo(QString, QUrl::ParsingMode mode)
+* void setUserName(QString, QUrl::ParsingMode mode)
+* void swap(QUrl)
+* QString topLevelDomain(QUrl::ComponentFormattingOption options)
+* QString userInfo(QUrl::ComponentFormattingOption options)
+* QString userName(QUrl::ComponentFormattingOption options)
+* QUrl fromLocalFile(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QUuid Class
+
+QUuid Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/quuid.html
+
+
+Parameters : void
+
+* QString toString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QVBoxLayout Class
+
+QVBoxLayout Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvboxlayout.html
+
+
+Parameters : void
+
+
+Parent Class : QBoxLayout
+
+* void addWidget(QWidget *)
+* void addLayout(QLayout *)
+
+.. index::
+       pair: RingQt Classes Reference; QVariant Class
+
+QVariant Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariant.html
+
+
+Parameters : void
+
+* bool canConvert(int targetTypeId)
+* void clear(void)
+* bool convert(int targetTypeId)
+* bool isNull(void)
+* bool isValid(void)
+* void swap(QVariant)
+* QBitArray toBitArray(void)
+* bool toBool(void)
+* QByteArray toByteArray(void)
+* QChar toChar(void)
+* QDate toDate(void)
+* QDateTime toDateTime(void)
+* double toDouble(bool *ok)
+* QEasingCurve toEasingCurve(void)
+* float toFloat(bool *ok)
+* int toInt(bool *ok)
+* QJsonArray toJsonArray(void)
+* QJsonDocument toJsonDocument(void)
+* QJsonObject toJsonObject(void)
+* QJsonValue toJsonValue(void)
+* QLine toLine(void)
+* QLineF toLineF(void)
+* QLocale toLocale(void)
+* qlonglong toLongLong(bool *ok)
+* QModelIndex toModelIndex(void)
+* QPointF toPointF(void)
+* qreal toReal(bool *ok)
+* QRect toRect(void)
+* QRectF toRectF(void)
+* QRegExp toRegExp(void)
+* QRegularExpression toRegularExpression(void)
+* QSize toSize(void)
+* QSizeF toSizeF(void)
+* QStringList toStringList(void)
+* QTime toTime(void)
+* uint toUInt(bool *ok)
+* qulonglong toULongLong(bool *ok)
+* QUrl toUrl(void)
+* QUuid toUuid(void)
+* QVariant::Type type(void)
+* const char *typeName(void)
+* int userType(void)
+* QString toString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QVariant2 Class
+
+QVariant2 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : int
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariant3 Class
+
+QVariant3 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : float
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariant4 Class
+
+QVariant4 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : double
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariant5 Class
+
+QVariant5 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : QString
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantDouble Class
+
+QVariantDouble Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantdouble.html
+
+
+Parent Class : QVariant
+
+
+Parameters : double
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantFloat Class
+
+QVariantFloat Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantfloat.html
+
+
+Parent Class : QVariant
+
+
+Parameters : float
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantInt Class
+
+QVariantInt Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantint.html
+
+
+Parent Class : QVariant
+
+
+Parameters : int
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantString Class
+
+QVariantString Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantstring.html
+
+
+Parent Class : QVariant
+
+
+Parameters : QString
+
+
+.. index::
+       pair: RingQt Classes Reference; QVector2D Class
+
+QVector2D Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvector2d.html
+
+
+Parameters : float,float
+
+* float distanceToLine(QVector2D point, QVector2D direction)
+* float distanceToPoint(QVector2D point)
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector2D normalized(void)
+* void setX(float x)
+* void setY(float y)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector3D toVector3D(void)
+* QVector4D toVector4D(void)
+* float x(void)
+* float y(void)
+* float dotProduct(QVector2D v1, QVector2D v2)
+
+.. index::
+       pair: RingQt Classes Reference; QVector3D Class
+
+QVector3D Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvector3d.html
+
+
+Parameters : float,float,float
+
+* float distanceToLine(QVector3D point, QVector3D direction)
+* float distanceToPlane(QVector3D plane, QVector3D normal)
+* float distanceToPlane_2(QVector3D plane1, QVector3D plane2, QVector3D plane3)
+* float distanceToPoint(QVector3D point)
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector3D normalized(void)
+* void setY(float y)
+* void setZ(float z)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector2D toVector2D(void)
+* QVector4D toVector4D(void)
+* float y(void)
+* float z(void)
+* QVector3D crossProduct(QVector3D v1, QVector3D v2)
+* float dotProduct(QVector3D v1, QVector3D v2)
+* QVector3D normal(QVector3D v1, QVector3D v2)
+* QVector3D normal_2(QVector3D v1, QVector3D v2, QVector3D v3)
+
+.. index::
+       pair: RingQt Classes Reference; QVector4D Class
+
+QVector4D Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvector4d.html
+
+
+Parameters : float,float,float,float
+
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector4D normalized(void)
+* void setW(float w)
+* void setX(float x)
+* void setY(float y)
+* void setZ(float z)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector2D toVector2D(void)
+* QVector2D toVector2DAffine(void)
+* QVector3D toVector3D(void)
+* QVector3D toVector3DAffine(void)
+* float w(void)
+* float x(void)
+* float y(void)
+* float z(void)
+* float dotProduct(QVector4D v1, QVector4D v2)
+
+.. index::
+       pair: RingQt Classes Reference; QVectorQVoice Class
+
+QVectorQVoice Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvectorqvoice.html
+
+
+Parameters : void
+
+* int count(void)
+* QVoice value(int i)
+
+.. index::
+       pair: RingQt Classes Reference; QVideoWidget Class
+
+QVideoWidget Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvideowidget.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int aspectRatioMode(void)
+* int brightness(void)
+* int contrast(void)
+* int hue(void)
+* bool isFullScreen(void)
+* int saturation(void)
+* void setAspectRatioMode(Qt::AspectRatioMode mode)
+* void setBrightness(int brightness)
+* void setContrast(int contrast)
+* void setFullScreen(bool fullScreen)
+* void setHue(int hue)
+* void setSaturation(int saturation)
+* void setbrightnessChangedEvent(const char *)
+* void setcontrastChangedEvent(const char *)
+* void setfullScreenChangedEvent(const char *)
+* void sethueChangedEvent(const char *)
+* void setsaturationChangedEvent(const char *)
+* const char *getbrightnessChangedEvent(void)
+* const char *getcontrastChangedEvent(void)
+* const char *getfullScreenChangedEvent(void)
+* const char *gethueChangedEvent(void)
+* const char *getsaturationChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QVideoWidgetControl Class
+
+QVideoWidgetControl Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvideowidgetcontrol.html
+
+
+Parent Class : QMediaControl
+
+
+.. index::
+       pair: RingQt Classes Reference; QViewport Class
+
+QViewport Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qviewport.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float gamma(void)
+* QRectF normalizedRect(void)
+* void setGamma(float gamma)
+* void setNormalizedRect(QRectF normalizedRect)
+
+.. index::
+       pair: RingQt Classes Reference; QVoice Class
+
+QVoice Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvoice.html
+
+
+Parameters : void
+
+* QVoice::Age age(void)
+* QVoice::Gender gender(void)
+* QString name(void)
+* QString ageName(QVoice::Age age)
+* QString genderName(QVoice::Gender gender)
+
+.. index::
+       pair: RingQt Classes Reference; QWebEngineView Class
+
+QWebEngineView Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwebengineview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool hasSelection(void)
+* QWebEngineHistory *history(void)
+* void load(QUrl) # In RingQt use : void loadpage(QUrl)
+* QWebEnginePage *page(void)
+* QAction *pageAction(QWebEnginePage::WebAction action)
+* QString selectedText(void)
+* void setContent(QByteArray,QString,QUrl)
+* void setHtml(QString,QUrl)
+* void setPage(QWebEnginePage *page)
+* void setUrl(QUrl)
+* void setZoomFactor(qreal factor)
+* QWebSettings *settings(void)
+* QString title(void)
+* void triggerPageAction(QWebEnginePage::WebAction action, bool checked)
+* QUrl url(void)
+* qreal zoomFactor(void)
+* void back(void)
+* void forward(void)
+* void reload(void)
+* void stop(void)
+* void setloadFinishedEvent(const char *)
+* void setloadProgressEvent(const char *)
+* void setloadStartedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void settitleChangedEvent(const char *)
+* void seturlChangedEvent(const char *)
+* const char *getloadFinishedEvent(void)
+* const char *getloadProgressEvent(void)
+* const char *getloadStartedEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettitleChangedEvent(void)
+* const char *geturlChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QWebView Class
+
+QWebView Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwebview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWebEngineView
+
+
+.. index::
+       pair: RingQt Classes Reference; QWebView Class
+
+QWebView Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwebview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* QWebHistory *history(void)
+* QAction *pageAction(QWebPage::WebAction action)
+* void setContent(QByteArray,QString,QUrl)
+* void setHtml(QString,QUrl)
+* void setPage(QWebPage *page)
+* void setZoomFactor(qreal factor)
+* QWebSettings *settings(void)
+* void triggerPageAction(QWebPage::WebAction action, bool checked)
+* QUrl url(void)
+* qreal zoomFactor(void)
+* void back(void)
+* void forward(void)
+* void print(QPrinter *printer)
+* void reload(void)
+* void stop(void)
+* void setloadProgressEvent(const char *)
+* void setloadStartedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void seturlChangedEvent(const char *)
+* const char *getloadFinishedEvent(void)
+* const char *getloadProgressEvent(void)
+* const char *getloadStartedEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettitleChangedEvent(void)
+* const char *geturlChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QWidget Class
+
+QWidget Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwidget.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* 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)
+* int foregroundRole(void)
+* QRect frameGeometry(void)
+* QSize frameSize(void)
+* QRect geometry(void)
+* void getContentsMargins(int *left, int *top, int *right, int *bottom)
+* QPixmap grab(QRect)
+* void grabGesture(Qt::GestureType gesture, Qt::GestureFlag flags)
+* void grabKeyboard(void)
+* void grabMouse(void)
+* int grabShortcut(QKeySequence , Qt::ShortcutContext context)
+* QGraphicsEffect *graphicsEffect(void)
+* QGraphicsProxyWidget *graphicsProxyWidget(void)
+* bool hasFocus(void)
+* bool hasMouseTracking(void)
+* int height(void)
+* int heightForWidth(int w)
+* int inputMethodHints(void)
+* QVariant inputMethodQuery(Qt::InputMethodQuery 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(Qt::WindowType 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, QWidget::RenderFlag)
+* void repaint(void)
+* 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(Qt::WidgetAttribute attribute, bool on)
+* void setAutoFillBackground(bool enabled)
+* void setBackgroundRole(QPalette::ColorRole role)
+* void setBaseSize(int basew, int baseh)
+* void setContentsMargins(int left, int top, int right, int bottom)
+* void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
+* void setCursor(QCursor)
+* void setFixedHeight(int h)
+* void setFixedSize(int w, int h)
+* void setFixedWidth(int w)
+* void setFocus(Qt::FocusReason reason)
+* void setFocusPolicy(Qt::FocusPolicy policy)
+* void setFocusProxy(QWidget *w)
+* void setFont(QFont)
+* void setForegroundRole(QPalette::ColorRole role)
+* void setGeometry(int x, int y, int w, int h)
+* void setGraphicsEffect(QGraphicsEffect *effect)
+* void setInputMethodHints(Qt::InputMethodHint hints)
+* void setLayout(QLayout *layout)
+* void setLayoutDirection(Qt::LayoutDirection 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(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
+* void setStatusTip(QString)
+* void setStyle(QStyle *style)
+* void setToolTip(QString)
+* void setUpdatesEnabled(bool enable)
+* void setWhatsThis(QString)
+* void setWindowFilePath(QString)
+* void setWindowFlags(Qt::WindowType type)
+* void setWindowIcon(QIcon)
+* void setWindowIconText(QString)
+* void setWindowModality(Qt::WindowModality windowModality)
+* void setWindowOpacity(double level)
+* void setWindowRole(QString)
+* void setWindowState(Qt::WindowState 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(Qt::WidgetAttribute attribute)
+* QString toolTip(void)
+* bool underMouse(void)
+* void ungrabGesture(Qt::GestureType gesture)
+* void unsetCursor(void)
+* 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)
+* QWindow *windowHandle(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)
+* QWidget *createWindowContainer(QWindow *window, QWidget *parent, Qt::WindowFlags flags)
+
+.. index::
+       pair: RingQt Classes Reference; QWindow Class
+
+QWindow Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwindow.html
+
+
+Parameters : QScreen *
+
+
+Parent Class : QObject
+
+* QSize baseSize(void)
+* Qt::ScreenOrientation contentOrientation(void)
+* void create(void)
+* QCursor cursor(void)
+* void destroy(void)
+* qreal devicePixelRatio(void)
+* QString filePath(void)
+* Qt::WindowFlags flags(void)
+* QObject * focusObject(void)
+* QRect frameGeometry(void)
+* QMargins frameMargins(void)
+* QPoint framePosition(void)
+* QRect geometry(void)
+* int height(void)
+* QIcon icon(void)
+* bool isActive(void)
+* bool isAncestorOf(QWindow *child, QWindow::AncestorMode mode)
+* bool isExposed(void)
+* bool isModal(void)
+* bool isTopLevel(void)
+* bool isVisible(void)
+* QPoint mapFromGlobal(QPoint pos)
+* QPoint mapToGlobal(QPoint pos)
+* QRegion mask(void)
+* int maximumHeight(void)
+* QSize maximumSize(void)
+* int maximumWidth(void)
+* int minimumHeight(void)
+* QSize minimumSize(void)
+* int minimumWidth(void)
+* Qt::WindowModality modality(void)
+* qreal opacity(void)
+* QPoint position(void)
+* void reportContentOrientationChange(Qt::ScreenOrientation orientation)
+* QSurfaceFormat requestedFormat(void)
+* void resize(QSize newSize)
+* void resize_2(int w, int h)
+* QScreen * screen(void)
+* void setBaseSize(QSize size)
+* void setCursor(QCursor cursor)
+* void setFilePath(QString filePath)
+* void setFlags(Qt::WindowFlags flags)
+* void setFormat(QSurfaceFormat format)
+* void setFramePosition(QPoint point)
+* void setGeometry(int posx, int posy, int w, int h)
+* void setGeometry_2(QRect rect)
+* void setIcon(QIcon icon)
+* bool setKeyboardGrabEnabled(bool grab)
+* void setMask(QRegion region)
+* void setMaximumSize(QSize size)
+* void setMinimumSize(QSize size)
+* void setModality(Qt::WindowModality modality)
+* bool setMouseGrabEnabled(bool grab)
+* void setOpacity(qreal level)
+* void setParent(QWindow *parent)
+* void setPosition(QPoint pt)
+* void setPosition_2(int posx, int posy)
+* void setScreen(QScreen *newScreen)
+* void setSizeIncrement(QSize size)
+* void setTransientParent(QWindow *parent)
+* void setVisibility(QWindow::Visibility v)
+* void setWindowState(Qt::WindowState state)
+* QSize sizeIncrement(void)
+* QString title(void)
+* QWindow * transientParent(void)
+* Qt::WindowType type(void)
+* void unsetCursor(void)
+* QWindow::Visibility visibility(void)
+* int width(void)
+* WId winId(void)
+* Qt::WindowState windowState(void)
+* int x(void)
+* int y(void)
+* void alert(int msec)
+* bool close(void)
+* void hide(void)
+* void lower(void)
+* void raise(void)
+* void requestActivate(void)
+* void setHeight(int arg)
+* void setMaximumHeight(int h)
+* void setMaximumWidth(int w)
+* void setMinimumHeight(int h)
+* void setMinimumWidth(int w)
+* void setTitle(QString )
+* void setVisible(bool visible)
+* void setWidth(int arg)
+* void setX(int arg)
+* void setY(int arg)
+* void show(void)
+* void showFullScreen(void)
+* void showMaximized(void)
+* void showMinimized(void)
+* void showNormal(void)
+* QWindow * fromWinId(WId id)
+* void setactiveChangedEvent(const char *)
+* void setcontentOrientationChangedEvent(const char *)
+* void setfocusObjectChangedEvent(const char *)
+* void setheightChangedEvent(const char *)
+* void setmaximumHeightChangedEvent(const char *)
+* void setmaximumWidthChangedEvent(const char *)
+* void setminimumHeightChangedEvent(const char *)
+* void setminimumWidthChangedEvent(const char *)
+* void setmodalityChangedEvent(const char *)
+* void setopacityChangedEvent(const char *)
+* void setscreenChangedEvent(const char *)
+* void setvisibilityChangedEvent(const char *)
+* void setvisibleChangedEvent(const char *)
+* void setwidthChangedEvent(const char *)
+* void setwindowStateChangedEvent(const char *)
+* void setwindowTitleChangedEvent(const char *)
+* void setxChangedEvent(const char *)
+* void setyChangedEvent(const char *)
+* const char *getactiveChangedEvent(void)
+* const char *getcontentOrientationChangedEvent(void)
+* const char *getfocusObjectChangedEvent(void)
+* const char *getheightChangedEvent(void)
+* const char *getmaximumHeightChangedEvent(void)
+* const char *getmaximumWidthChangedEvent(void)
+* const char *getminimumHeightChangedEvent(void)
+* const char *getminimumWidthChangedEvent(void)
+* const char *getmodalityChangedEvent(void)
+* const char *getopacityChangedEvent(void)
+* const char *getscreenChangedEvent(void)
+* const char *getvisibilityChangedEvent(void)
+* const char *getvisibleChangedEvent(void)
+* const char *getwidthChangedEvent(void)
+* const char *getwindowStateChangedEvent(void)
+* const char *getwindowTitleChangedEvent(void)
+* const char *getxChangedEvent(void)
+* const char *getyChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamAttribute Class
+
+QXmlStreamAttribute Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamattribute.html
+
+
+Parameters : void
+
+* bool isDefault(void)
+* QStringRef name(void)
+* QStringRef namespaceUri(void)
+* QStringRef prefix(void)
+* QStringRef qualifiedName(void)
+* QStringRef value(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamAttributes Class
+
+QXmlStreamAttributes Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamattributes.html
+
+
+Parameters : void
+
+* void append(QString  namespaceUri, QString  name, QString  value)
+* void append_2(QString  qualifiedName, QString  value)
+* bool hasAttribute(QString  qualifiedName)
+* bool hasAttribute_2(QLatin1String qualifiedName)
+* bool hasAttribute_3(QString  namespaceUri, QString  name)
+* QStringRef value(QString  namespaceUri, QString  name)
+* QStringRef value_2(QString  namespaceUri, QLatin1String name)
+* QStringRef value_3(QLatin1String namespaceUri, QLatin1String name)
+* QStringRef value_4(QString  qualifiedName)
+* QStringRef value_5(QLatin1String qualifiedName)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamEntityDeclaration Class
+
+QXmlStreamEntityDeclaration Class
+=================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamentitydeclaration.html
+
+
+Parameters : void
+
+* QStringRef name(void)
+* QStringRef notationName(void)
+* QStringRef publicId(void)
+* QStringRef systemId(void)
+* QStringRef value(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamEntityResolver Class
+
+QXmlStreamEntityResolver Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamentityresolver.html
+
+
+Parameters : void
+
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamNamespaceDeclaration Class
+
+QXmlStreamNamespaceDeclaration Class
+====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamnamespacedeclaration.html
+
+
+Parameters : void
+
+* QStringRef namespaceUri(void)
+* QStringRef prefix(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamNotationDeclaration Class
+
+QXmlStreamNotationDeclaration Class
+===================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamnotationdeclaration.html
+
+
+Parameters : void
+
+* QStringRef name(void)
+* QStringRef publicId(void)
+* QStringRef systemId(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamReader Class
+
+QXmlStreamReader Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamreader.html
+
+
+Parameters : void
+
+* void addData(QByteArray)
+* void addData_2(QString)
+* void addData_3(const char * data)
+* void addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration)
+* void addExtraNamespaceDeclarations(QXmlStreamNamespaceDeclarations)
+* bool atEnd(void)
+* QXmlStreamAttributes attributes(void)
+* qint64 characterOffset(void)
+* void clear(void)
+* qint64 columnNumber(void)
+* QIODevice *device(void)
+* QStringRef documentEncoding(void)
+* QStringRef documentVersion(void)
+* QStringRef dtdName(void)
+* QStringRef dtdPublicId(void)
+* QStringRef dtdSystemId(void)
+* QXmlStreamEntityDeclarations entityDeclarations(void)
+* QXmlStreamEntityResolver *entityResolver(void)
+* Error error(void)
+* QString errorString(void)
+* bool hasError(void)
+* bool isCDATA(void)
+* bool isCharacters(void)
+* bool isComment(void)
+* bool isDTD(void)
+* bool isEndDocument(void)
+* bool isEndElement(void)
+* bool isEntityReference(void)
+* bool isProcessingInstruction(void)
+* bool isStandaloneDocument(void)
+* bool isStartDocument(void)
+* bool isStartElement(void)
+* bool isWhitespace(void)
+* qint64 lineNumber(void)
+* QStringRef name(void)
+* QXmlStreamNamespaceDeclarations namespaceDeclarations(void)
+* bool namespaceProcessing(void)
+* QStringRef namespaceUri(void)
+* QXmlStreamNotationDeclarations notationDeclarations(void)
+* QStringRef prefix(void)
+* QStringRef processingInstructionData(void)
+* QStringRef processingInstructionTarget(void)
+* QStringRef qualifiedName(void)
+* void raiseError(QString)
+* QString readElementText(QXmlStreamReader::ReadElementTextBehaviour)
+* TokenType readNext(void)
+* bool readNextStartElement(void)
+* void setDevice(QIODevice *device)
+* void setEntityResolver(QXmlStreamEntityResolver *resolver)
+* void setNamespaceProcessing(bool)
+* void skipCurrentElement(void)
+* QStringRef text(void)
+* QString tokenString(void)
+* TokenType tokenType(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamWriter Class
+
+QXmlStreamWriter Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamwriter.html
+
+
+Parameters : void
+
+* bool autoFormatting(void)
+* int autoFormattingIndent(void)
+* QTextCodec *codec(void)
+* QIODevice *device(void)
+* bool hasError(void)
+* void setAutoFormatting(bool enable)
+* void setAutoFormattingIndent(int spacesOrTabs)
+* void setCodec(QTextCodec *codec)
+* void setCodec_2(const char *codecName)
+* void setDevice(QIODevice *device)
+* void writeAttribute(QString, QString,QString)
+* void writeAttribute_2(QString, QString)
+* void writeAttribute_3(QXmlStreamAttribute)
+* void writeAttributes(QXmlStreamAttributes)
+* void writeCDATA(QString text)
+* void writeCharacters(QString text)
+* void writeComment(QString text)
+* void writeCurrentToken(QXmlStreamReader reader)
+* void writeDTD(QString dtd)
+* void writeDefaultNamespace(QString namespaceUri)
+* void writeEmptyElement(QString namespaceUri, QString name)
+* void writeEmptyElement_2(QString qualifiedName)
+* void writeEndDocument(void)
+* void writeEndElement(void)
+* void writeEntityReference(QString name)
+* void writeNamespace(QString namespaceUri, QString prefix)
+* void writeProcessingInstruction(QString target, QString data)
+* void writeStartDocument(QString version)
+* void writeStartDocument_2(QString version, bool standalone)
+* void writeStartDocument_3(void)
+* void writeStartElement(QString namespaceUri, QString name)
+* void writeStartElement_2(QString qualifiedName)
+* void writeTextElement(QString namespaceUri, QString name, QString text)
+* void writeTextElement_2(QString qualifiedName, QString text)
+
+.. index::
+       pair: RingQt Classes Reference; Qt3DCamera Class
+
+Qt3DCamera Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcamera.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QEntity
+
+* float aspectRatio(void)
+* float bottom(void)
+* float exposure(void)
+* float farPlane(void)
+* float fieldOfView(void)
+* float left(void)
+* QCameraLens *lens(void)
+* float nearPlane(void)
+* void pan(float angle)
+* void pan_2(float angle, QVector3D axis)
+* void panAboutViewCenter(float angle)
+* void panAboutViewCenter_2(float angle, QVector3D axis)
+* QQuaternion panRotation(float angle)
+* QVector3D position(void)
+* QMatrix4x4 projectionMatrix(void)
+* Qt3DRender::QCameraLens::ProjectionType projectionType(void)
+* float right(void)
+* void roll(float angle)
+* void rollAboutViewCenter(float angle)
+* QQuaternion rollRotation(float angle)
+* void rotate(QQuaternion q)
+* void rotateAboutViewCenter(QQuaternion q)
+* QQuaternion rotation(float angle, QVector3D axis)
+* void tilt(float angle)
+* void tiltAboutViewCenter(float angle)
+* QQuaternion tiltRotation(float angle)
+* float top(void)
+* Qt3DCore::QTransform * transform(void)
+* void translate(QVector3D vLocal, Qt3DRender::QCamera::CameraTranslationOption option)
+* void translateWorld(QVector3D vWorld, Qt3DRender::QCamera::CameraTranslationOption option)
+* QVector3D upVector(void)
+* QVector3D viewCenter(void)
+* QVector3D viewVector(void)
+* void setAspectRatio(float aspectRatio)
+* void setBottom(float bottom)
+* void setExposure(float exposure)
+* void setFarPlane(float farPlane)
+* void setFieldOfView(float fieldOfView)
+* void setLeft(float left)
+* void setNearPlane(float nearPlane)
+* void setPosition(QVector3D position)
+* void setProjectionMatrix(QMatrix4x4 projectionMatrix)
+* void setProjectionType(Qt3DRender::QCameraLens::ProjectionType type)
+* void setRight(float right)
+* void setTop(float top)
+* void setUpVector(QVector3D upVector)
+* void setViewCenter(QVector3D viewCenter)
+* void viewAll(void)
+* void viewEntity(Qt3DCore::QEntity *entity)
+* void viewSphere(QVector3D center, float radius)
+
+.. index::
+       pair: RingQt Classes Reference; Qt3DWindow Class
+
+Qt3DWindow Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qt3dwindow.html
+
+
+Parameters : void
+
+
+Parent Class : QWindow
+
+* Qt3DRender::QFrameGraphNode * activeFrameGraph(void)
+* QForwardRenderer * defaultFrameGraph(void)
+* void registerAspect(Qt3DCore::QAbstractAspect *aspect)
+* void registerAspect_2(QString name)
+* Qt3DRender::QRenderSettings * renderSettings(void)
+* void setActiveFrameGraph(Qt3DRender::QFrameGraphNode *activeFrameGraph)
+* void setRootEntity(Qt3DCore::QEntity *root)
+* Qt3DCamera *camera(void)
+
+.. index::
+       pair: RingQt Classes Reference; RingCodeHighlighter Class
+
+RingCodeHighlighter Class
+=========================
+
+
+Parameters : QTextDocument *parent
+
+* void setColors(QColor c1,QColor c2,QColor c3,QColor c4,QColor c5)
+* void setKeywordsBold(int nStatus)
+
diff --git a/docs/en/source/qtmobile.txt b/docs/en/source/qtmobile.txt
new file mode 100644 (file)
index 0000000..3ceda8a
--- /dev/null
@@ -0,0 +1,227 @@
+.. index:: 
+       single: Building RingQt Applications for Mobile; Introduction
+
+=======================================
+Building RingQt Applications for Mobile
+=======================================
+
+In this chapter we will learn about Building RingQt Applications for Mobile.
+
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Download Requirements
+
+Download Requirements
+=====================
+
+Check the next link : http://doc.qt.io/qt-5/androidgs.html
+
+Download 
+
+* The Android SDK Tools
+
+       https://developer.android.com/sdk/index.html
+
+* The Android NDK (Tested using android-ndk-r21)
+
+       http://developer.android.com/tools/sdk/ndk/index.html
+
+* Java SE Development Kit (JDK) v6 or later
+
+       https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Update the Android SDK
+
+Update the Android SDK
+======================
+
+Update the Android SDK to get the API and tools packages required for development
+
+       Tested using Android 4.4.2 (API 19)
+
+* In Windows - Define the next Environment Variables based on your system.
+
+(1) JAVA_HOME
+
+.. code-block:: ring
+       
+       For Example : C:\Program Files (x86)\Java\jdk1.8.0_05 
+
+(2) ANDROID_HOME       
+
+.. code-block:: ring
+
+       For Example : C:\JavaAndroid\AndroidSDK
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Install Qt for Android
+
+Install Qt for Android
+======================
+
+* You can install Qt for Android from the next link
+
+               https://download.qt.io/archive/qt/5.12/5.12.6/
+
+* Run Qt Creator, Select Tools > Options > Android to add the 
+    Android NDK and SDK paths. 
+
+               http://doc.qt.io/qtcreator/creator-developing-android.html
+
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Using Ring2EXE
+
+Using Ring2EXE
+==============
+
+We can use Ring2EXE to quickly prepare Qt project for our application
+
+Example:
+
+.. code-block:: none
+
+       ring2exe myapp.ring -dist -mobileqt
+
+
+.. note:: We can use the Distribute Menu in Ring Notepad
+
+.. tip:: The option ( Prepare Qt project for Mobile devices ) in the Distribute Menu
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; The Qt project for your Ring application
+
+The Qt project for your Ring application
+========================================
+
+After using Ring2EXE or the Distribute Menu in Ring Notepad 
+
+*  Using the Qt Creator Open the generated Qt project 
+
+       Folder : target/mobile/qtproject
+
+       Project file : project.pro
+
+* Using Qt Creator, You will find the compiled Ring application in the resources (YourAppName.ringo)
+
+       This file (Ring Object File) is generated by the Ring compiler using
+
+.. code-block:: none
+
+       ring YourAppName.ring -go -norun
+
+* You can build your application using Qt Creator
+
+(1) You can add your application images to the resources
+
+       Or You can use any text editor (Notepad) and modify : project.qrc
+
+(2) To find images from your Ring application, You need to use the file name in resources
+
+       Example 
+
+.. code-block:: ring
+
+       if isandroid()
+               mypic = new QPixmap(":/cards.jpg")
+       else
+               mypic = new QPixmap("cards.jpg")
+       ok
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Comments about developing for Android using RingQt
+
+Comments about developing for Android using RingQt
+==================================================
+
+(1) The main project file is main.cpp 
+
+       This file load Ring Compiler/Virtual Machine and RingQt 
+
+       Then get the Ring Object File during the runtime from the resources
+
+       Then run the Ring Object File (ringapp.ringo) using the Ring VM 
+
+       Through main.cpp you can extract more files from the resources to temp. folder once you
+       add them (create projects with many files).
+
+(2) The next functions are missing from this Ring edition
+
+       * Database (ODBC, SQLite & MySQL)
+
+       * Security and Internet functions (LibCurl & OpenSSL)
+
+       * RingAllegro (Allegro Library)
+
+       * RingLibSDL (LibSDL Library)
+
+       Just use Qt Classes through RingQt.
+
+       For database access use the QSqlDatabase Class
+
+.. note:: All of the missing libraries ((LibCurl, OpenSSL & Allegro) can be compiled for Android, but they are not included in this Qt project.
+
+(3) use if isandroid() when you want to modify the code just for android
+
+Example:
+
+.. code-block:: ring
+
+       if isandroid()
+               // Android code
+       else
+               // other platforms
+       ok
+
+(4) Sometimes you will find that the button text/image is repeated in drawing !
+it's Qt problem that you can avoid using the next code.
+
+.. code-block:: ring
+
+       if isandroid()
+               setStyleSheet("
+                       border-style: outset;
+                       border-width: 2px;
+                       border-radius: 4px;
+                       border-color: black;
+                       padding: 6px;")
+        ok
+
+(5)  Always use Layouts instead of manual setting of controls position and size. 
+
+This is the best way to get the expected user interface to avoid problems like (controls with small/extra size)
+
+(6) When you deal with Qt Classes you can determine the images from resources (you don't need to copy them using main.cpp)
+
+
+Example: 
+
+.. code-block:: ring
+
+       if isandroid()
+           mypic = new QPixmap(":/cards.jpg")
+       else
+           mypic = new QPixmap("cards.jpg")
+       ok
+
+Now RingQt comes with the AppFile() function to determine the file name 
+
+Example:
+
+.. code-block:: ring
+
+       mypic = new QPixmap(AppFile("cards.jpg"))  # Desktop or Android
+
+(7) When you update your project code, You don't have to use Ring2EXE to generate the Qt project again
+
+Just use the Distribute Menu in Ring Notepad and select (Generate Ring Object File)
+
+Then copy the YourAppName.ringo file to target/mobile/qtproject folder and accept replacing files.
+
+(8) If your application folder contains a Qt resource file (project.qrc)
+
+Then when you use Ring2EXE or Ring Notepad (Distribute - Prepare Qt project for Mobile devices) the 
+resource file will be used 
+
+See ring/applications/cards game as an example.
diff --git a/docs/en/source/raylib_3dcamera.png b/docs/en/source/raylib_3dcamera.png
new file mode 100644 (file)
index 0000000..10028ce
Binary files /dev/null and b/docs/en/source/raylib_3dcamera.png differ
diff --git a/docs/en/source/raylib_3dcamerafree.png b/docs/en/source/raylib_3dcamerafree.png
new file mode 100644 (file)
index 0000000..d976202
Binary files /dev/null and b/docs/en/source/raylib_3dcamerafree.png differ
diff --git a/docs/en/source/raylib_3dpicking.png b/docs/en/source/raylib_3dpicking.png
new file mode 100644 (file)
index 0000000..e9e2b64
Binary files /dev/null and b/docs/en/source/raylib_3dpicking.png differ
diff --git a/docs/en/source/raylib_basicshapes.png b/docs/en/source/raylib_basicshapes.png
new file mode 100644 (file)
index 0000000..459e0f7
Binary files /dev/null and b/docs/en/source/raylib_basicshapes.png differ
diff --git a/docs/en/source/raylib_basicwindow.png b/docs/en/source/raylib_basicwindow.png
new file mode 100644 (file)
index 0000000..d35e1fb
Binary files /dev/null and b/docs/en/source/raylib_basicwindow.png differ
diff --git a/docs/en/source/raylib_bezierlines.png b/docs/en/source/raylib_bezierlines.png
new file mode 100644 (file)
index 0000000..82cc471
Binary files /dev/null and b/docs/en/source/raylib_bezierlines.png differ
diff --git a/docs/en/source/raylib_camerafirstperson.png b/docs/en/source/raylib_camerafirstperson.png
new file mode 100644 (file)
index 0000000..ba0b88a
Binary files /dev/null and b/docs/en/source/raylib_camerafirstperson.png differ
diff --git a/docs/en/source/raylib_collisionarea.png b/docs/en/source/raylib_collisionarea.png
new file mode 100644 (file)
index 0000000..b362dde
Binary files /dev/null and b/docs/en/source/raylib_collisionarea.png differ
diff --git a/docs/en/source/raylib_colorspalette.png b/docs/en/source/raylib_colorspalette.png
new file mode 100644 (file)
index 0000000..3e610ce
Binary files /dev/null and b/docs/en/source/raylib_colorspalette.png differ
diff --git a/docs/en/source/raylib_cubicmap.png b/docs/en/source/raylib_cubicmap.png
new file mode 100644 (file)
index 0000000..6552ede
Binary files /dev/null and b/docs/en/source/raylib_cubicmap.png differ
diff --git a/docs/en/source/raylib_drawring.png b/docs/en/source/raylib_drawring.png
new file mode 100644 (file)
index 0000000..83ee118
Binary files /dev/null and b/docs/en/source/raylib_drawring.png differ
diff --git a/docs/en/source/raylib_drawring2.png b/docs/en/source/raylib_drawring2.png
new file mode 100644 (file)
index 0000000..31bbee1
Binary files /dev/null and b/docs/en/source/raylib_drawring2.png differ
diff --git a/docs/en/source/raylib_ex1.png b/docs/en/source/raylib_ex1.png
new file mode 100644 (file)
index 0000000..6c424dd
Binary files /dev/null and b/docs/en/source/raylib_ex1.png differ
diff --git a/docs/en/source/raylib_followingeyes.png b/docs/en/source/raylib_followingeyes.png
new file mode 100644 (file)
index 0000000..2736564
Binary files /dev/null and b/docs/en/source/raylib_followingeyes.png differ
diff --git a/docs/en/source/raylib_fullscreen.png b/docs/en/source/raylib_fullscreen.png
new file mode 100644 (file)
index 0000000..0675f7b
Binary files /dev/null and b/docs/en/source/raylib_fullscreen.png differ
diff --git a/docs/en/source/raylib_geometricshapes.png b/docs/en/source/raylib_geometricshapes.png
new file mode 100644 (file)
index 0000000..4a578e7
Binary files /dev/null and b/docs/en/source/raylib_geometricshapes.png differ
diff --git a/docs/en/source/raylib_imagedrawing.png b/docs/en/source/raylib_imagedrawing.png
new file mode 100644 (file)
index 0000000..9b1fda2
Binary files /dev/null and b/docs/en/source/raylib_imagedrawing.png differ
diff --git a/docs/en/source/raylib_imagegeneration.png b/docs/en/source/raylib_imagegeneration.png
new file mode 100644 (file)
index 0000000..c63310a
Binary files /dev/null and b/docs/en/source/raylib_imagegeneration.png differ
diff --git a/docs/en/source/raylib_inputkeys.png b/docs/en/source/raylib_inputkeys.png
new file mode 100644 (file)
index 0000000..01aad88
Binary files /dev/null and b/docs/en/source/raylib_inputkeys.png differ
diff --git a/docs/en/source/raylib_inputmouse.png b/docs/en/source/raylib_inputmouse.png
new file mode 100644 (file)
index 0000000..faad0eb
Binary files /dev/null and b/docs/en/source/raylib_inputmouse.png differ
diff --git a/docs/en/source/raylib_inputmt.png b/docs/en/source/raylib_inputmt.png
new file mode 100644 (file)
index 0000000..e232968
Binary files /dev/null and b/docs/en/source/raylib_inputmt.png differ
diff --git a/docs/en/source/raylib_mousewheel.png b/docs/en/source/raylib_mousewheel.png
new file mode 100644 (file)
index 0000000..5a77321
Binary files /dev/null and b/docs/en/source/raylib_mousewheel.png differ
diff --git a/docs/en/source/raylib_musicplaying.png b/docs/en/source/raylib_musicplaying.png
new file mode 100644 (file)
index 0000000..183e5ff
Binary files /dev/null and b/docs/en/source/raylib_musicplaying.png differ
diff --git a/docs/en/source/raylib_rectanglescaling.png b/docs/en/source/raylib_rectanglescaling.png
new file mode 100644 (file)
index 0000000..0ce9fd5
Binary files /dev/null and b/docs/en/source/raylib_rectanglescaling.png differ
diff --git a/docs/en/source/raylib_soundloading.png b/docs/en/source/raylib_soundloading.png
new file mode 100644 (file)
index 0000000..ca3e9aa
Binary files /dev/null and b/docs/en/source/raylib_soundloading.png differ
diff --git a/docs/en/source/raylib_texturesource.png b/docs/en/source/raylib_texturesource.png
new file mode 100644 (file)
index 0000000..35ca6ff
Binary files /dev/null and b/docs/en/source/raylib_texturesource.png differ
diff --git a/docs/en/source/raylib_twocubes.png b/docs/en/source/raylib_twocubes.png
new file mode 100644 (file)
index 0000000..05bd368
Binary files /dev/null and b/docs/en/source/raylib_twocubes.png differ
diff --git a/docs/en/source/reference.txt b/docs/en/source/reference.txt
new file mode 100644 (file)
index 0000000..200b05f
--- /dev/null
@@ -0,0 +1,592 @@
+.. index:: 
+       single: Reference; Introduction
+
+==================
+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
+
+.. index:: 
+       pair: Reference; Language Keywords
+
+Language Keywords
+=================
+
+Keywords Count : 49
+
+* again
+* and
+* but
+* bye
+* call
+* case
+* catch
+* changeringkeyword
+* changeringoperator
+* class
+* def
+* do
+* done
+* else
+* elseif
+* end
+* 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
+
+.. index:: 
+       pair: Reference; Language Functions
+
+Language Functions
+==================
+
+Functions Count : 210
+
+.. code-block:: ring
+
+       acos()                      add()                       addattribute()              adddays()
+       addmethod()                 ascii()                     asin()                      assert()
+       atan()                      atan2()                     attributes()                binarysearch()
+       bytes2double()              bytes2float()               bytes2int()                 callgc()
+       ceil()                      cfunctions()                char()                      chdir()
+       classes()                   classname()                 clearerr()                  clock()
+       clockspersecond()           closelib()                  copy()                      cos()
+       cosh()                      currentdir()                date()                      dec()
+       decimals()                  del()                       diffdays()                  dir()
+       double2bytes()              eval()                      exefilename()               exefolder()
+       exp()                       fabs()                      fclose()                    feof()
+       ferror()                    fexists()                   fflush()                    fgetc()
+       fgetpos()                   fgets()                     filename()                  find()
+       float2bytes()               floor()                     fopen()                     fputc()
+       fputs()                     fread()                     freopen()                   fseek()
+       fsetpos()                   ftell()                     functions()                 fwrite()
+       getattribute()              getchar()                   globals()                   hex()
+       hex2str()                   input()                     insert()                    int2bytes()
+       intvalue()                  isalnum()                   isalpha()                   isandroid()
+       isattribute()               iscfunction()               isclass()                   iscntrl()
+       isdigit()                   isfreebsd()                 isfunction()                isglobal()
+       isgraph()                   islinux()                   islist()                    islocal()
+       islower()                   ismacosx()                  ismethod()                  ismsdos()
+       isnull()                    isnumber()                  isobject()                  ispackage()
+       ispackageclass()            ispointer()                 isprint()                   isprivateattribute()
+       isprivatemethod()           ispunct()                   isspace()                   isstring()
+       isunix()                    isupper()                   iswindows()                 iswindows64()
+       isxdigit()                  left()                      len()                       lines()
+       list()                      list2str()                  loadlib()                   locals()
+       log()                       log10()                     lower()                     max()
+       mergemethods()              methods()                   min()                       murmur3hash()
+       nullpointer()               number()                    object2pointer()            objectid()
+       packageclasses()            packagename()               packages()                  perror()
+       pointer2object()            pow()                       prevfilename()              ptrcmp()
+       raise()                     random()                    read()                      remove()
+       rename()                    reverse()                   rewind()                    right()
+       ring_give()                 ring_see()                  
+       ring_state_delete()         ring_state_filetokens()        
+       ring_state_findvar()        ring_state_init()           ring_state_main()           
+       ring_state_mainfile()       ring_state_new()            ring_state_newvar()         
+       ring_state_runcode()        ring_state_runfile()        ring_state_runobjectfile()
+       ring_state_setvar()         ringvm_callfunc()           ringvm_calllist()           
+       ringvm_cfunctionslist()     ringvm_classeslist()        ringvm_evalinscope()        
+       ringvm_fileslist()          ringvm_functionslist()      ringvm_genarray()           
+       ringvm_give()               ringvm_hideerrormsg()       ringvm_info()               
+       ringvm_memorylist()         ringvm_packageslist()       ringvm_passerror()          
+       ringvm_scopescount()        ringvm_see()                ringvm_settrace()           
+       ringvm_tracedata()          ringvm_traceevent()         ringvm_tracefunc()
+       setattribute()              shutdown()                  sin()                       sinh()
+       sort()                      space()                     sqrt()                      srandom()
+       str2hex()                   str2hexcstyle()             str2list()                  strcmp()
+       string()                    substr()                    swap()                      sysget()
+       system()                    tan()                       tanh()                      tempfile()
+       tempname()                  time()                      timelist()                  trim()
+       type()                      ungetc()                    unsigned()                  upper()
+       varptr()                    version()                   windowsnl()                 write()
+
+.. index:: 
+       pair: Reference; Compiler Errors
+
+Compiler Errors
+===============
+
+* Error (C1)  : Error in parameters list, expected identifier
+* 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!
+
+* Warning (W1) : Duplication in file name
+* Warning (W2) : The Compiler command ChangeRingKeyword requires two words as parameters
+* Warning (W3) : Compiler command ChangeRingKeyword - Keyword not found !
+* Warning (W4) : The Compiler command  ChangeRingOperator requires two words as parameters
+* Warning (W5) : Compiler command ChangeRingOperator - Operator not found !
+* Warning (W6) : Using the EXIT command outside loop!"
+* Warning (W7) : Using the LOOP command outside loop!"
+
+.. index:: 
+       pair: Reference; Runtime Errors
+
+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 
+* 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
+
+.. index:: 
+       pair: Reference; Environment Errors
+
+Environment Errors
+==================
+
+* Error (E1) : Caught SegFault
+* Error (E2) : Out of Memory
+* Error (E3) : Deleting scope while no scope!
+* Error (E4) : Long VM Instruction!
+* Error (E5) : The file type is not correct - the VM expect a ring object file
+* Error (E6) : The Ring Object File version is not correct!
+* Error (E7) : Internal error in using sscanf() function!
+* Error (E8) : Internal error in using fscanf() function!
+
+.. index:: 
+       pair: Reference; Language Grammar
+
+Language Grammar
+================
+
+Program ---> {statement}
+
+Statement ---> 'package' <Identifier> { '.' <Identifier> } ['{' {statement} '}'] ['end'|'endpackage']
+
+Statement ---> 'class' <Identifier> [ 'from'|':'|'<' <Identifier> ] ['{' {statement} '}']['end'|'endclass']
+
+Statement ---> 'func'|'def' <Identifier> [ParaList] ['{' {statement} '}']['end'|'endfunc']
+
+Statement ---> 'import' <Identifier> { '.' <Identifier> }
+
+Statement ---> 'private'
+
+Statement ---> 'load' ['package'|'again'] <Literal>
+
+Statement ---> 'loadsyntax' <Literal>
+
+Statement ---> 'changeringkeyword' <OldKeyword> <NewKeyword>
+
+Statement ---> 'changeringoperator' <OldOperator> <NewOperator>
+
+Statement ---> 'see'|'put' <Expr>
+
+Statement ---> 'give'|'get' <Identifier>
+
+Statement ---> 'if' <Expr> ['{'] {statement} [ {'but'|'elseif' <Expr> {Statement} } ] ['else' {Statement} ] 'ok'|'end'|'}'
+
+Statement ---> 'Switch' <Expr> ['{'] { 'on'|'case' <Expr> {statement} } ['other' {Statement} ]  'off'|'end'|'}'
+
+Statement ---> 'for' <Identifier> '=' <Expr> 'to' <Expr> [ 'step' <Expr> ] ['{'] {Statement} 'next'|'end'|'}'
+
+Statement ---> 'for' <Identifier> 'in' <Expr>  [ 'step' <Expr> ] ['{'] {statement} 'next'|'end'|'}'
+
+Statement ---> 'while' <Expr> ['{'] {statement} 'end'|'}'
+
+Statement ---> 'do' {statement} 'again' <Expr> 
+
+Statement ---> 'try' {statement} ['{'] 'catch' {statement} 'done'|'end'|'}'
+
+Statement ---> 'return' <Expr>
+
+Statement ---> 'bye'
+
+Statement ---> 'exit'
+
+Statement ---> 'loop'
+
+Statement ---> <Expr>
+
+Statement ---> epslion
+
+ParaList ---> epslion
+
+ParaList ---> ['('] <Identifier> [{ ',' <Identifier> }] [')']
+
+Expr ---> <LogicNot> [{ 'and'|'or' <LogicNot> }]
+
+LogicNot --> ['not'] <EqualOrNot> 
+
+EqualOrNot --> [ '='|'!=' ] <Compare>
+
+Compare ---> <BitOrXor> [ { '<' | '>' | '<=' | '>=' <BitOrXor> } ]
+
+BitOrXor ---> <BitAnd> [ { '|' | '^' <BitAnd> } ]
+
+BitAnd ---> <BitShift> [ { '&' <BitShift> } ]
+
+BitShift ---> <Arithmetic> [ { '<<' | '>>' <Arithmetic> } ]
+
+Arithmetic ---> <Term> [ { '+' | '-'  <Term>  } ]
+
+Term ---> <Range> [ { '*' | '/' | '%' <Range> } ]
+
+Range ---> <Factor> [ ':' <Factor> ]
+
+Factor ---> <Identifier> [ {Mixer} ] [ '=' <Expr> ]
+
+Factor ---> <Number>
+
+Factor ---> <Literal>
+
+Factor ---> ':' <Identifier>
+
+Factor ---> '-' <Factor>
+
+Factor ---> '(' <Expr> ')'
+
+Factor ---> <List>
+
+Factor ---> 'new' <Identifier>
+
+Factor ---> <AnonymousFunction>
+
+Factor ---> 'call' <identifier> { '.' <Identifier> } '(' <Parameters> ')'
+
+List ---> '[' [ <Expr> { ',' <Expr> } ] ']'
+
+Mixer ---> { '.' <Identifier> }
+
+Mixer ---> '[' <Expr> ']'
+
+Mixer ---> '(' [ <Expr> [ { ',' <Expr> }] ]  ')'
+
+Mixer ---> '{' {Statement} '}'
+
+AnonymousFunction ---> 'func'|'def'| [<ParaList>] '{' {Statement} '}'
+
+.. index:: 
+       pair: Reference; Virtual Machine Instructions
+
+Virtual Machine (VM) Instructions
+=================================
+
+Definitions :-
+
+* VM : Virtual Machine
+* Stack : VM Stack
+* IR : Instruction Register
+* PC : Program Counter
+* VP : Variable Pointer
+* Stack[nSize] : Last Item in the Stack (Last In - First Out)
+* VV : Variable Value (We have a Pointer to a variable, And we access this variable value)
+(Stack and Variables)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_PUSHC            Add string from the IR to the stack
+* ICO_PUSHN            Add number from the IR to the stack
+* ICO_PUSHV            Replace VP in the stack[nSize] with the variable value 
+* ICO_LOADADDRESS      Read variable name from the IR, push VP to the stack
+* ICO_ASSIGNMENT       Stack[nSize-1] VV = Stack[nSize] VV , POP Stack[nSize]
+* ICO_INC              Increment Number in Stack[nSize] by 1
+* ICO_LOADAPUSHV       The same as ICO_LOADADDRESS then ICO_PUSHV
+* ICO_NEWLINE          Store new line number (debug info)
+* ICO_FREESTACK                Remove all items from the stack , nSize = 0
+* ICO_FILENAME         Store the source code file name (debug info)
+* ICO_FREELOADASCOPE   Free the Scope List of the current Expression
+=======================        ============================================================================
+
+(Jump)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_JUMP             Set PC to new value from the IR 
+* ICO_JUMPZERO         If Stack[nSize] is a number = 0 then Set PC to new value from the IR 
+* ICO_JUMPFOR          End of for loop
+* ICO_JUMPONE          If Stack[nSize] is a number = 1 then Set PC to new value from the IR 
+* ICO_JUMPZERO2                As ICO_JUMPZERO but add 1 to the stack (required for many 'AND' conditions)
+* ICO_JUMPONE2         As ICO_JUMPONE but add 1 to the stack (required for many 'OR' conditions)
+=======================        ============================================================================
+
+(Compare)
+
+=======================        ==========================================================================================================
+Operation                      Description
+=======================        ==========================================================================================================
+* ICO_LESSEQUAL                If stack[nSize-1] <= stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_EQUAL            If stack[nSize-1] = stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_LESS             If stack[nSize-1] < stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_GREATER          If stack[nSize-1] > stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_GREATEREQUAL     If stack[nSize-1] >= stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_NOTEQUAL         If stack[nSize-1] != stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+=======================        ==========================================================================================================
+
+(Math)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_SUM              Stack[nSize-1] = Stack[nSize-1] + Stack[nSize] , POP stack[nSize]
+* ICO_SUB              Stack[nSize-1] = Stack[nSize-1] - Stack[nSize] , POP stack[nSize]
+* ICO_MUL              Stack[nSize-1] = Stack[nSize-1] * Stack[nSize] , POP stack[nSize]
+* ICO_DIV              Stack[nSize-1] = Stack[nSize-1] / Stack[nSize] , POP stack[nSize]
+* ICO_MOD              Stack[nSize-1] = Stack[nSize-1] % Stack[nSize] , POP stack[nSize]
+* ICO_NEG              Stack[nSize] = - Stack[nSize-1]
+* ICO_PLUSPLUS         Stack[nSize] = Stack[nSize] + 1
+* ICO_MINUSMINUS       Stack[nSize] = Stack[nSize] - 1
+=======================        ============================================================================
+
+(Logic)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_AND              Stack[nSize-1] = Stack[nSize-1] && Stack[nSize] , POP stack[nSize]
+* ICO_OR               Stack[nSize-1] = Stack[nSize-1] || Stack[nSize] , POP stack[nSize]
+* ICO_NOT              Stack[nSize]   = ! Stack[nSize]  
+=======================        ============================================================================
+
+(Lists)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_LISTSTART                Start New List in Temp. Memory
+* ICO_LISTITEM         Add List Item
+* ICO_LISTEND          End List
+* ICO_LOADINDEXADDRESS Stack[nSize-1] = Stack[nSize-1] VV [ Stack[nSize] ] , POP stack[nSize]
+=======================        ============================================================================
+
+(Functions)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_LOADFUNC         Find function
+* ICO_CALL             Call function
+* ICO_RETURN           Return from function
+* ICO_RETNULL          Return NULl from function
+* ICO_RETFROMEVAL      Return after eval() 
+* ICO_RETITEMREF       Return the list item reference - not the value
+* ICO_NEWFUNC          Start new function
+* ICO_BLOCKFLAG                Flag to determine where to jump later (after ICO_RETURN)
+* ICO_FUNCEXE          Start executing function
+* ICO_ENDFUNCEXE       End function execution
+* ICO_ANONYMOUS                Anonymous function
+=======================        ============================================================================
+
+(User Interface)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_PRINT            Print value to the standard output
+* ICO_GIVE             Get input from the keyboard
+=======================        ============================================================================
+
+(End Program/Loop)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_BYE              End execution of VM
+* ICO_EXITMARK         Place to exit to from a loop    
+* ICO_POPEXITMARK      Remove exit mark
+* ICO_EXIT             Break from one loop or more 
+* ICO_LOOP             Continue to next loop 
+=======================        ============================================================================
+
+(For Better Performance)
+
+========================       ============================================================================
+Operation                      Description
+========================       ============================================================================
+* ICO_PUSHP                    Push pointer to the stack
+* ICO_INCP                     Increment variable value using pointer
+* ICO_PUSHPV                   Push value of variable using variable pointer
+* ICO_INCJUMP                  Increment then jump
+* ICO_INCPJUMP                 Increment using pointer then jump
+* ICO_JUMPVARLENUM             Jump if variable value is <= numeric value
+* ICO_JUMPVARPLENUM            Jump if variable value (using pointer) <= numeric value 
+* ICO_LOADFUNCP                        Push function pointer
+* ICO_PUSHPLOCAL               Push pointer to local variable
+* ICO_INCLPJUMP                        Increment value using pointer to local variable then jump
+* ICO_JUMPVARLPLENUM           Jump if the variable value (using pointer) <= numeric value
+* ICO_INCPJUMPSTEP1            Increment value using variable pointer then jump (for loop step = 1)
+* ICO_JUMPVARPLENUMSTEP1       Increment value using variable pointer then jump (for loop step = 1)
+========================       ============================================================================
+
+(Try-Catch-Done)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_TRY              Start try region
+* ICO_DONE             End try region
+=======================        ============================================================================
+
+(Duplicate and Range)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_DUPLICATE                Duplicate stack value
+* ICO_RANGE            Create list from value to value
+=======================        ============================================================================
+
+(OOP)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_NEWOBJ           Create new object, get class name from the IR, push object pointer to the stack.
+* ICO_SETSCOPE         Called after creating new object, set the active scope to be the object scope.
+* ICO_LOADSUBADDRESS   Get object attribute, push the pointer to the stack.
+* ICO_LOADMETHOD       Find object method 
+* ICO_AFTERCALLMETHOD  Used after calling a method - normal case
+* ICO_AFTERCALLMETHOD2  Used after calling a method - second case
+* ICO_NEWCLASS         Start new class region
+* ICO_BRACESTART       Open brace
+* ICO_BRACEEND         End brace
+* ICO_IMPORT           Import package
+* ICO_PRIVATE          start private attributes region
+* ICO_SETPROPERTY      set attribute value - check for setter. 
+* ICO_CALLCLASSINIT    call class init() method.
+=======================        ============================================================================
+
+(Other)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_SETREFERENCE     Copy by reference
+* ICO_KILLREFERENCE    Remove reference
+* ICO_ASSIGNMENTPOINTER Determine the left side variable
+* ICO_BEFOREEQUAL      Determine operators like += , -= , ... etc
+=======================        ============================================================================
+
+(Bitwise Operators)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_BITAND           Stack[nSize-1] = Stack[nSize-1] & Stack[nSize] , POP stack[nSize]
+* ICO_BITOR            Stack[nSize-1] = Stack[nSize-1] | Stack[nSize] , POP stack[nSize]
+* ICO_BITXOR           Stack[nSize-1] = Stack[nSize-1] ^ Stack[nSize] , POP stack[nSize]
+* ICO_BITNOT           Stack[nSize] = ! Stack[nSize] 
+* ICO_BITSHL           Stack[nSize-1] = Stack[nSize-1] << Stack[nSize] , POP stack[nSize]
+* ICO_BITSHR           Stack[nSize-1] = Stack[nSize-1] >> Stack[nSize] , POP stack[nSize]
+=======================        ============================================================================
+
+(For Step)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_STEPNUMBER       Determine step number in for loop
+* ICO_POPSTEP          POP step number from steps stack
+* ICO_LOADAFIRST       Load the first address of variable name 
+=======================        ============================================================================
+
+(Custom Global Scope)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_NEWGLOBALSCOPE   Start new custom global scope - used by 'load package' command
+* ICO_ENDGLOBALSCOPE   End of custom global scope - used by 'load package' command
+* ICO_SETGLOBALSCOPE   Set the current global scope 
+=======================        ============================================================================
+
diff --git a/docs/en/source/resources.txt b/docs/en/source/resources.txt
new file mode 100644 (file)
index 0000000..2cfd34c
--- /dev/null
@@ -0,0 +1,71 @@
+.. index:: 
+       single: Resources; Introduction
+
+=========
+Resources
+=========
+
+In this section you will find resources about the language
+
+.. index:: 
+       pair: Resources; Ring Language Website
+
+Ring Language Website 
+=====================
+
+For news about the language check the website
+
+        http://ring-lang.net
+
+        http://ring-lang.sf.net
+
+.. index:: 
+       pair: Resources; Ring Group
+
+Ring Group
+==========
+
+For questions use the Ring Group (English)
+
+       https://groups.google.com/forum/#!forum/ring-lang
+
+
+.. index:: 
+       pair: Resources; Source Code
+
+Source Code
+===========
+
+Ring is Free-Open Source (MIT License)
+
+Source Code : https://github.com/ring-lang/ring
+
+.. index:: 
+       pair: Resources; Contact the Authors
+
+.. index:: 
+       pair: Resources; Arabic Resources
+
+Arabic Resources
+================
+
+* Arabic Tutorials by Sara Hamdy
+
+URL : https://ringprogramming4arab.wordpress.com/%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%8A-2/
+
+* Arabic Tutorials by Ahmed Hassouna (YouTube) 
+
+URL : https://www.youtube.com/watch?v=6VIHMyrEilw&list=PLHIfW1KZRIfl6KzfLziFl650MmThnQ0jT
+
+* Arabic Tutorials by Alaa Mohamed (YouTube)
+
+URL : https://www.youtube.com/watch?v=uSv5rJp6snw&list=PLgc0fyJgivssosIJu4kJGk5avIjaMzYHK
+
+* Arabic Tutorials by Mahmoud Fayed (Facebook (Live) + YouTube)
+
+URL : https://github.com/ring-lang/ring/blob/master/developers/Arabic/README.md
+
+Contact the Authors
+===================
+
+Ring Team  : http://ring-lang.sourceforge.net/team.html
\ No newline at end of file
diff --git a/docs/en/source/ring15freeglut.png b/docs/en/source/ring15freeglut.png
new file mode 100644 (file)
index 0000000..75fa0d6
Binary files /dev/null and b/docs/en/source/ring15freeglut.png differ
diff --git a/docs/en/source/ring15freeglut2.png b/docs/en/source/ring15freeglut2.png
new file mode 100644 (file)
index 0000000..0a40367
Binary files /dev/null and b/docs/en/source/ring15freeglut2.png differ
diff --git a/docs/en/source/ring15opengl.png b/docs/en/source/ring15opengl.png
new file mode 100644 (file)
index 0000000..01c18c8
Binary files /dev/null and b/docs/en/source/ring15opengl.png differ
diff --git a/docs/en/source/ring15reportshot.png b/docs/en/source/ring15reportshot.png
new file mode 100644 (file)
index 0000000..b7cacf3
Binary files /dev/null and b/docs/en/source/ring15reportshot.png differ
diff --git a/docs/en/source/ringalleg_shot1.jpg b/docs/en/source/ringalleg_shot1.jpg
new file mode 100644 (file)
index 0000000..6a301ae
Binary files /dev/null and b/docs/en/source/ringalleg_shot1.jpg differ
diff --git a/docs/en/source/ringalleg_shot2.jpg b/docs/en/source/ringalleg_shot2.jpg
new file mode 100644 (file)
index 0000000..811bc31
Binary files /dev/null and b/docs/en/source/ringalleg_shot2.jpg differ
diff --git a/docs/en/source/ringalleg_shot3.jpg b/docs/en/source/ringalleg_shot3.jpg
new file mode 100644 (file)
index 0000000..6d20f06
Binary files /dev/null and b/docs/en/source/ringalleg_shot3.jpg differ
diff --git a/docs/en/source/ringalleg_shot4.jpg b/docs/en/source/ringalleg_shot4.jpg
new file mode 100644 (file)
index 0000000..9787f3c
Binary files /dev/null and b/docs/en/source/ringalleg_shot4.jpg differ
diff --git a/docs/en/source/ringalleg_shot5.jpg b/docs/en/source/ringalleg_shot5.jpg
new file mode 100644 (file)
index 0000000..cd1588d
Binary files /dev/null and b/docs/en/source/ringalleg_shot5.jpg differ
diff --git a/docs/en/source/ringalleg_shot6.jpg b/docs/en/source/ringalleg_shot6.jpg
new file mode 100644 (file)
index 0000000..cb24fa4
Binary files /dev/null and b/docs/en/source/ringalleg_shot6.jpg differ
diff --git a/docs/en/source/ringalleg_shot7.jpg b/docs/en/source/ringalleg_shot7.jpg
new file mode 100644 (file)
index 0000000..88d24a0
Binary files /dev/null and b/docs/en/source/ringalleg_shot7.jpg differ
diff --git a/docs/en/source/ringallegrofuncsdoc.txt b/docs/en/source/ringallegrofuncsdoc.txt
new file mode 100644 (file)
index 0000000..e0d1cbf
--- /dev/null
@@ -0,0 +1,636 @@
+.. index:: 
+     single: RingAllegro Functions Reference; Introduction
+
+===============================
+RingAllegro Functions Reference
+===============================
+
+* void al_exit(void)
+* void al_run_main(void)
+* int al_init(void)
+* ALLEGRO_CONFIG *al_create_config(void)
+* void al_destroy_config(ALLEGRO_CONFIG *config)
+* ALLEGRO_CONFIG *al_load_config_file(const char *filename)
+* ALLEGRO_CONFIG *al_load_config_file_f(ALLEGRO_FILE *file)
+* bool al_save_config_file(const char *filename, const ALLEGRO_CONFIG *config)
+* bool al_save_config_file_f(ALLEGRO_FILE *file, const ALLEGRO_CONFIG *config)
+* void al_add_config_section(ALLEGRO_CONFIG *config, const char *name)
+* void al_add_config_comment(ALLEGRO_CONFIG *config, const char *section, const char *comment)
+* const char *al_get_config_value(const ALLEGRO_CONFIG *config,const char *section, const char *key)
+* void al_set_config_value(ALLEGRO_CONFIG *config,const char *section, const char *key, const char *value)
+* char const *al_get_first_config_section(ALLEGRO_CONFIG const *config,ALLEGRO_CONFIG_SECTION **iterator)
+* char const *al_get_next_config_section(ALLEGRO_CONFIG_SECTION **iterator)
+* char const *al_get_first_config_entry(ALLEGRO_CONFIG const *config,char const *section, ALLEGRO_CONFIG_ENTRY **iterator)
+* char const *al_get_next_config_entry(ALLEGRO_CONFIG_ENTRY **iterator)
+* ALLEGRO_CONFIG *al_merge_config(const ALLEGRO_CONFIG *cfg1,const ALLEGRO_CONFIG *cfg2)
+* void al_merge_config_into(ALLEGRO_CONFIG *master, const ALLEGRO_CONFIG *add)
+* ALLEGRO_DISPLAY *al_create_display(int w, int h)
+* void al_destroy_display(ALLEGRO_DISPLAY *display)
+* int al_get_new_display_flags(void)
+* void al_set_new_display_flags(int flags)
+* int al_get_new_display_option(int option, int *importance)
+* void al_set_new_display_option(int option, int value, int importance)
+* void al_reset_new_display_options(void)
+* void al_get_new_window_position(int *x, int *y)
+* void al_set_new_window_position(int x, int y)
+* int al_get_new_display_refresh_rate(void)
+* void al_set_new_display_refresh_rate(int refresh_rate)
+* ALLEGRO_EVENT_SOURCE *al_get_display_event_source(ALLEGRO_DISPLAY *display)
+* ALLEGRO_BITMAP *al_get_backbuffer(ALLEGRO_DISPLAY *display)
+* void al_flip_display(void)
+* void al_update_display_region(int x, int y, int width, int height)
+* bool al_wait_for_vsync(void)
+* int al_get_display_width(ALLEGRO_DISPLAY *display)
+* int al_get_display_height(ALLEGRO_DISPLAY *display)
+* bool al_resize_display(ALLEGRO_DISPLAY *display, int width, int height)
+* bool al_acknowledge_resize(ALLEGRO_DISPLAY *display)
+* void al_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y)
+* void al_set_window_position(ALLEGRO_DISPLAY *display, int x, int y)
+* int al_get_display_flags(ALLEGRO_DISPLAY *display)
+* bool al_set_display_flag(ALLEGRO_DISPLAY *display, int flag, bool onoff)
+* int al_get_display_option(ALLEGRO_DISPLAY *display, int option)
+* int al_get_display_format(ALLEGRO_DISPLAY *display)
+* int al_get_display_refresh_rate(ALLEGRO_DISPLAY *display)
+* void al_set_window_title(ALLEGRO_DISPLAY *display, const char *title)
+* void al_set_display_icon(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *icon)
+* void al_set_display_icons(ALLEGRO_DISPLAY *display,int num_icons, ALLEGRO_BITMAP *icons[])
+* bool al_inhibit_screensaver(bool inhibit)
+* void al_acknowledge_drawing_halt(ALLEGRO_DISPLAY *display)
+* void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY *display)
+* int al_get_display_orientation(ALLEGRO_DISPLAY* display)
+* void al_set_display_option(ALLEGRO_DISPLAY *display, int option, int value)
+* bool al_get_window_constraints(ALLEGRO_DISPLAY *display,int *min_w, int *min_h, int *max_w, int *max_h)
+* bool al_set_window_constraints(ALLEGRO_DISPLAY *display,int min_w, int min_h, int max_w, int max_h)
+* ALLEGRO_EVENT_QUEUE *al_create_event_queue(void)
+* void al_destroy_event_queue(ALLEGRO_EVENT_QUEUE *queue)
+* void al_register_event_source(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT_SOURCE *source)
+* void al_unregister_event_source(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT_SOURCE *source)
+* bool al_is_event_queue_empty(ALLEGRO_EVENT_QUEUE *queue)
+* bool al_get_next_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)
+* bool al_peek_next_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)
+* bool al_drop_next_event(ALLEGRO_EVENT_QUEUE *queue)
+* void al_flush_event_queue(ALLEGRO_EVENT_QUEUE *queue)
+* void al_wait_for_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)
+* bool al_wait_for_event_timed(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT *ret_event, float secs)
+* bool al_wait_for_event_until(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT *ret_event, ALLEGRO_TIMEOUT *timeout)
+* void al_init_user_event_source(ALLEGRO_EVENT_SOURCE *src)
+* void al_destroy_user_event_source(ALLEGRO_EVENT_SOURCE *src)
+* intptr_t al_get_event_source_data(const ALLEGRO_EVENT_SOURCE *source)
+* void al_set_event_source_data(ALLEGRO_EVENT_SOURCE *source, intptr_t data)
+* ALLEGRO_FILE *al_fopen(const char *path, const char *mode)
+* ALLEGRO_FILE *al_fopen_interface(const ALLEGRO_FILE_INTERFACE *drv,const char *path, const char *mode)
+* ALLEGRO_FILE *al_fopen_slice(ALLEGRO_FILE *fp, size_t initial_size, const char *mode)
+* void al_fclose(ALLEGRO_FILE *f)
+* size_t al_fread(ALLEGRO_FILE *f, void *ptr, size_t size)
+* size_t al_fwrite(ALLEGRO_FILE *f, const void *ptr, size_t size)
+* bool al_fflush(ALLEGRO_FILE *f)
+* int64_t al_ftell(ALLEGRO_FILE *f)
+* bool al_fseek(ALLEGRO_FILE *f, int64_t offset, int whence)
+* bool al_feof(ALLEGRO_FILE *f)
+* bool al_ferror(ALLEGRO_FILE *f)
+* void al_fclearerr(ALLEGRO_FILE *f)
+* int al_fungetc(ALLEGRO_FILE *f, int c)
+* int64_t al_fsize(ALLEGRO_FILE *f)
+* int al_fgetc(ALLEGRO_FILE *f)
+* int al_fputc(ALLEGRO_FILE *f, int c)
+* int16_t al_fread16le(ALLEGRO_FILE *f)
+* int16_t al_fread16be(ALLEGRO_FILE *f)
+* size_t al_fwrite16le(ALLEGRO_FILE *f, int16_t w)
+* size_t al_fwrite16be(ALLEGRO_FILE *f, int16_t w)
+* int32_t al_fread32le(ALLEGRO_FILE *f)
+* int32_t al_fread32be(ALLEGRO_FILE *f)
+* size_t al_fwrite32le(ALLEGRO_FILE *f, int32_t l)
+* size_t al_fwrite32be(ALLEGRO_FILE *f, int32_t l)
+* char *al_fgets(ALLEGRO_FILE *f, char * const buf, size_t max)
+* ALLEGRO_USTR *al_fget_ustr(ALLEGRO_FILE *f)
+* int al_fputs(ALLEGRO_FILE *f, char const *p)
+* ALLEGRO_FILE *al_fopen_fd(int fd, const char *mode)
+* ALLEGRO_FILE *al_make_temp_file(const char *template, ALLEGRO_PATH **ret_path)
+* void al_set_new_file_interface(const ALLEGRO_FILE_INTERFACE *file_interface
+* void al_set_standard_file_interface(void)
+* const ALLEGRO_FILE_INTERFACE *al_get_new_file_interface(void)
+* ALLEGRO_FILE *al_create_file_handle(const ALLEGRO_FILE_INTERFACE *drv,void *userdata)
+* void *al_get_file_userdata(ALLEGRO_FILE *f)
+* ALLEGRO_FS_ENTRY *al_create_fs_entry(const char *path)
+* void al_destroy_fs_entry(ALLEGRO_FS_ENTRY *fh)
+* const char *al_get_fs_entry_name(ALLEGRO_FS_ENTRY *e)
+* bool al_update_fs_entry(ALLEGRO_FS_ENTRY *e)
+* uint32_t al_get_fs_entry_mode(ALLEGRO_FS_ENTRY *e)
+* time_t al_get_fs_entry_atime(ALLEGRO_FS_ENTRY *e)
+* time_t al_get_fs_entry_ctime(ALLEGRO_FS_ENTRY *e)
+* time_t al_get_fs_entry_mtime(ALLEGRO_FS_ENTRY *e)
+* off_t al_get_fs_entry_size(ALLEGRO_FS_ENTRY *e)
+* bool al_fs_entry_exists(ALLEGRO_FS_ENTRY *e)
+* bool al_remove_fs_entry(ALLEGRO_FS_ENTRY *e)
+* bool al_filename_exists(const char *path)
+* bool al_remove_filename(const char *path)
+* bool al_open_directory(ALLEGRO_FS_ENTRY *e)
+* ALLEGRO_FS_ENTRY *al_read_directory(ALLEGRO_FS_ENTRY *e)
+* bool al_close_directory(ALLEGRO_FS_ENTRY *e)
+* char *al_get_current_directory(void)
+* bool al_change_directory(const char *path)
+* bool al_make_directory(const char *path)
+* ALLEGRO_FILE *al_open_fs_entry(ALLEGRO_FS_ENTRY *e, const char *mode)
+* void al_set_fs_interface(const ALLEGRO_FS_INTERFACE *fs_interface)
+* void al_set_standard_fs_interface(void)
+* const ALLEGRO_FS_INTERFACE *al_get_fs_interface(void)
+* al_fixed al_itofix(int x);
+* int al_fixtoi(al_fixed x);
+* int al_fixfloor(al_fixed x);
+* int al_fixceil(al_fixed x);
+* al_fixed al_ftofix(double x);
+* double al_fixtof(al_fixed x);
+* al_fixed al_fixmul(al_fixed x, al_fixed y);
+* al_fixed al_fixdiv(al_fixed x, al_fixed y);
+* al_fixed al_fixadd(al_fixed x, al_fixed y);
+* al_fixed al_fixsub(al_fixed x, al_fixed y);
+* al_fixed al_fixsin(al_fixed x);
+* al_fixed al_fixcos(al_fixed x);
+* al_fixed al_fixtan(al_fixed x);
+* al_fixed al_fixasin(al_fixed x);
+* al_fixed al_fixacos(al_fixed x);
+* al_fixed al_fixatan(al_fixed x)
+* al_fixed al_fixatan2(al_fixed y, al_fixed x)
+* al_fixed al_fixsqrt(al_fixed x)
+* al_fixed al_fixhypot(al_fixed x, al_fixed y)
+* ALLEGRO_DISPLAY_MODE *al_get_display_mode(int index, ALLEGRO_DISPLAY_MODE *mode)
+* int al_get_num_display_modes(void)
+* ALLEGRO_COLOR al_map_rgb(unsigned char r, unsigned char g, unsigned char b)
+* ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
+* ALLEGRO_COLOR al_map_rgba(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+* ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)
+* void al_unmap_rgb(ALLEGRO_COLOR color,unsigned char *r, unsigned char *g, unsigned char *b)
+* void al_unmap_rgb_f(ALLEGRO_COLOR color, float *r, float *g, float *b)
+* void al_unmap_rgba(ALLEGRO_COLOR color,unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a)
+* void al_unmap_rgba_f(ALLEGRO_COLOR color,float *r, float *g, float *b, float *a)
+* int al_get_pixel_size(int format)
+* int al_get_pixel_format_bits(int format)
+* ALLEGRO_LOCKED_REGION *al_lock_bitmap(ALLEGRO_BITMAP *bitmap,int format, int flags)
+* ALLEGRO_LOCKED_REGION *al_lock_bitmap_region(ALLEGRO_BITMAP *bitmap,int x, int y, int width, int height, int format, int flags)
+* void al_unlock_bitmap(ALLEGRO_BITMAP *bitmap)
+* ALLEGRO_BITMAP *al_create_bitmap(int w, int h)
+* ALLEGRO_BITMAP *al_create_sub_bitmap(ALLEGRO_BITMAP *parent,int x, int y, int w, int h)
+* ALLEGRO_BITMAP *al_clone_bitmap(ALLEGRO_BITMAP *bitmap)
+* void al_destroy_bitmap(ALLEGRO_BITMAP *bitmap)
+* int al_get_new_bitmap_flags(void)
+* int al_get_new_bitmap_format(void)
+* void al_set_new_bitmap_flags(int flags)
+* void al_add_new_bitmap_flag(int flag)
+* void al_set_new_bitmap_format(int format)
+* int al_get_bitmap_flags(ALLEGRO_BITMAP *bitmap)
+* int al_get_bitmap_format(ALLEGRO_BITMAP *bitmap)
+* int al_get_bitmap_height(ALLEGRO_BITMAP *bitmap)
+* int al_get_bitmap_width(ALLEGRO_BITMAP *bitmap)
+* ALLEGRO_COLOR al_get_pixel(ALLEGRO_BITMAP *bitmap, int x, int y)
+* bool al_is_bitmap_locked(ALLEGRO_BITMAP *bitmap)
+* bool al_is_compatible_bitmap(ALLEGRO_BITMAP *bitmap)
+* bool al_is_sub_bitmap(ALLEGRO_BITMAP *bitmap)
+* ALLEGRO_BITMAP *al_get_parent_bitmap(ALLEGRO_BITMAP *bitmap)
+* void al_clear_to_color(ALLEGRO_COLOR color)
+* void al_draw_bitmap(ALLEGRO_BITMAP *bitmap, float dx, float dy, int flags)
+* void al_draw_tinted_bitmap(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR tint,float dx, float dy, int flags)
+* void al_draw_bitmap_region(ALLEGRO_BITMAP *bitmap,float sx, float sy, float sw, float sh, float dx, float dy, int flags)
+* void al_draw_tinted_bitmap_region(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float sx, float sy, float sw, float sh, float dx, float dy,int flags)
+* void al_draw_pixel(float x, float y, ALLEGRO_COLOR color)
+* void al_draw_rotated_bitmap(ALLEGRO_BITMAP *bitmap,float cx, float cy, float dx, float dy, float angle, int flags)
+* void al_draw_tinted_rotated_bitmap(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float angle, int flags)
+* void al_draw_scaled_rotated_bitmap(ALLEGRO_BITMAP *bitmap,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_tinted_scaled_rotated_bitmap(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_tinted_scaled_rotated_bitmap_region(ALLEGRO_BITMAP *bitmap,float sx, float sy, float sw, float sh,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_scaled_bitmap(ALLEGRO_BITMAP *bitmap,float sx, float sy, float sw, float sh,float dx, float dy, float dw, float dh, int flags)
+* void al_draw_tinted_scaled_bitmap(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float sx, float sy, float sw, float sh,float dx, float dy, float dw, float dh, int flags)
+* ALLEGRO_BITMAP *al_get_target_bitmap(void)
+* void al_put_pixel(int x, int y, ALLEGRO_COLOR color)
+* void al_put_blended_pixel(int x, int y, ALLEGRO_COLOR color)
+* void al_set_target_bitmap(ALLEGRO_BITMAP *bitmap)
+* void al_set_target_backbuffer(ALLEGRO_DISPLAY *display)
+* ALLEGRO_DISPLAY *al_get_current_display(void)
+* void al_get_blender(int *op, int *src, int *dst)
+* void al_get_separate_blender(int *op, int *src, int *dst,int *alpha_op, int *alpha_src, int *alpha_dst)
+* void al_set_blender(int op, int src, int dst)
+* void al_set_separate_blender(int op, int src, int dst,int alpha_op, int alpha_src, int alpha_dst)
+* void al_get_clipping_rectangle(int *x, int *y, int *w, int *h)
+* void al_set_clipping_rectangle(int x, int y, int width, int height)
+* void al_reset_clipping_rectangle(void)
+* void al_convert_mask_to_alpha(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR mask_color)
+* void al_hold_bitmap_drawing(bool hold)
+* bool al_is_bitmap_drawing_held(void)
+* ALLEGRO_BITMAP *al_load_bitmap_f(ALLEGRO_FILE *fp, const char *ident)
+* bool al_save_bitmap(const char *filename, ALLEGRO_BITMAP *bitmap)
+* bool al_save_bitmap_f(ALLEGRO_FILE *fp, const char *ident,ALLEGRO_BITMAP *bitmap)
+* bool al_install_joystick(void)
+* void al_uninstall_joystick(void)
+* bool al_is_joystick_installed(void)
+* bool al_reconfigure_joysticks(void)
+* int al_get_num_joysticks(void)
+* ALLEGRO_JOYSTICK * al_get_joystick(int num)
+* void al_release_joystick(ALLEGRO_JOYSTICK *joy)
+* bool al_get_joystick_active(ALLEGRO_JOYSTICK *joy)
+* const char *al_get_joystick_name(ALLEGRO_JOYSTICK *joy)
+* const char *al_get_joystick_stick_name(ALLEGRO_JOYSTICK *joy, int stick)
+* const char *al_get_joystick_axis_name(ALLEGRO_JOYSTICK *joy, int stick, int axis)
+* const char *al_get_joystick_button_name(ALLEGRO_JOYSTICK *joy, int button)
+* int al_get_joystick_stick_flags(ALLEGRO_JOYSTICK *joy, int stick)
+* int al_get_joystick_num_sticks(ALLEGRO_JOYSTICK *joy)
+* int al_get_joystick_num_axes(ALLEGRO_JOYSTICK *joy, int stick)
+* int al_get_joystick_num_buttons(ALLEGRO_JOYSTICK *joy)
+* void al_get_joystick_state(ALLEGRO_JOYSTICK *joy, ALLEGRO_JOYSTICK_STATE *ret_state)
+* ALLEGRO_EVENT_SOURCE *al_get_joystick_event_source(void)
+* bool al_install_keyboard(void)
+* bool al_is_keyboard_installed(void)
+* void al_uninstall_keyboard(void)
+* void al_get_keyboard_state(ALLEGRO_KEYBOARD_STATE *ret_state)
+* bool al_key_down(const ALLEGRO_KEYBOARD_STATE *state, int keycode)
+* const char *al_keycode_to_name(int keycode)
+* bool al_set_keyboard_leds(int leds)
+* ALLEGRO_EVENT_SOURCE *al_get_keyboard_event_source(void)
+* void *al_malloc_with_context(size_t n,int line, const char *file, const char *func)
+* void al_free_with_context(void *ptr, int line, const char *file, const char *func)
+* void *al_realloc_with_context(void *ptr, size_t n,int line, const char *file, const char *func)
+* void *al_calloc_with_context(size_t count, size_t n,int line, const char *file, const char *func)
+* void al_set_memory_interface(ALLEGRO_MEMORY_INTERFACE *memory_interface)
+* int al_get_new_display_adapter(void)
+* void al_set_new_display_adapter(int adapter)
+* bool al_get_monitor_info(int adapter, ALLEGRO_MONITOR_INFO *info)
+* int al_get_num_video_adapters(void)
+* bool al_install_mouse(void)
+* bool al_is_mouse_installed(void)
+* void al_uninstall_mouse(void)
+* unsigned int al_get_mouse_num_axes(void)
+* unsigned int al_get_mouse_num_buttons(void)
+* void al_get_mouse_state(ALLEGRO_MOUSE_STATE *ret_state)
+* int al_get_mouse_state_axis(const ALLEGRO_MOUSE_STATE *state, int axis)
+* bool al_mouse_button_down(const ALLEGRO_MOUSE_STATE *state, int button)
+* bool al_set_mouse_xy(ALLEGRO_DISPLAY *display, int x, int y)
+* bool al_set_mouse_z(int z)
+* bool al_set_mouse_w(int w)
+* bool al_set_mouse_axis(int which, int value)
+* ALLEGRO_EVENT_SOURCE *al_get_mouse_event_source(void)
+* ALLEGRO_MOUSE_CURSOR *al_create_mouse_cursor(ALLEGRO_BITMAP *bmp,int x_focus, int y_focus)
+* void al_destroy_mouse_cursor(ALLEGRO_MOUSE_CURSOR *cursor)
+* bool al_set_mouse_cursor(ALLEGRO_DISPLAY *display, ALLEGRO_MOUSE_CURSOR *cursor)
+* bool al_set_system_mouse_cursor(ALLEGRO_DISPLAY *display,ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id)
+* bool al_get_mouse_cursor_position(int *ret_x, int *ret_y)
+* bool al_hide_mouse_cursor(ALLEGRO_DISPLAY *display)
+* bool al_show_mouse_cursor(ALLEGRO_DISPLAY *display)
+* bool al_grab_mouse(ALLEGRO_DISPLAY *display)
+* bool al_ungrab_mouse(void)
+* ALLEGRO_PATH *al_create_path(const char *str)
+* ALLEGRO_PATH *al_create_path_for_directory(const char *str)
+* void al_destroy_path(ALLEGRO_PATH *path)
+* ALLEGRO_PATH *al_clone_path(const ALLEGRO_PATH *path)
+* bool al_join_paths(ALLEGRO_PATH *path, const ALLEGRO_PATH *tail)
+* bool al_rebase_path(const ALLEGRO_PATH *head, ALLEGRO_PATH *tail)
+* const char *al_get_path_drive(const ALLEGRO_PATH *path)
+* int al_get_path_num_components(const ALLEGRO_PATH *path)
+* const char *al_get_path_component(const ALLEGRO_PATH *path, int i)
+* const char *al_get_path_tail(const ALLEGRO_PATH *path)
+* const char *al_get_path_filename(const ALLEGRO_PATH *path)
+* const char *al_get_path_basename(const ALLEGRO_PATH *path)
+* const char *al_get_path_extension(const ALLEGRO_PATH *path)
+* void al_set_path_drive(ALLEGRO_PATH *path, const char *drive)
+* void al_append_path_component(ALLEGRO_PATH *path, const char *s)
+* void al_insert_path_component(ALLEGRO_PATH *path, int i, const char *s)
+* void al_replace_path_component(ALLEGRO_PATH *path, int i, const char *s)
+* void al_remove_path_component(ALLEGRO_PATH *path, int i)
+* void al_drop_path_tail(ALLEGRO_PATH *path)
+* void al_set_path_filename(ALLEGRO_PATH *path, const char *filename)
+* bool al_set_path_extension(ALLEGRO_PATH *path, char const *extension)
+* const char *al_path_cstr(const ALLEGRO_PATH *path, char delim)
+* bool al_make_path_canonical(ALLEGRO_PATH *path)
+* void al_restore_state(ALLEGRO_STATE const *state)
+* void al_store_state(ALLEGRO_STATE *state, int flags
+* int al_get_errno(void)
+* void al_set_errno(int errnum)
+* void al_uninstall_system(void)
+* bool al_is_system_installed(void)
+* uint32_t al_get_allegro_version(void)
+* ALLEGRO_PATH *al_get_standard_path(int id)
+* void al_set_exe_name(char const *path)
+* void al_set_app_name(const char *app_name)
+* void al_set_org_name(const char *org_name)
+* const char *al_get_app_name(void)
+* const char *al_get_org_name(void)
+* ALLEGRO_CONFIG *al_get_system_config(void)
+* ALLEGRO_THREAD *al_create_thread(void)
+* void al_run_detached_thread(void)
+* 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)
+* int al_wait_cond_until(ALLEGRO_COND *cond, ALLEGRO_MUTEX *mutex,const ALLEGRO_TIMEOUT *timeout)
+* void al_broadcast_cond(ALLEGRO_COND *cond)
+* void al_signal_cond(ALLEGRO_COND *cond)
+* double al_get_time(void)
+* void al_init_timeout(ALLEGRO_TIMEOUT *timeout, double seconds)
+* void al_rest(double seconds)
+* ALLEGRO_TIMER *al_create_timer(double speed_secs)
+* void al_start_timer(ALLEGRO_TIMER *timer)
+* void al_stop_timer(ALLEGRO_TIMER *timer)
+* bool al_get_timer_started(const ALLEGRO_TIMER *timer)
+* void al_destroy_timer(ALLEGRO_TIMER *timer)
+* int64_t al_get_timer_count(const ALLEGRO_TIMER *timer)
+* void al_set_timer_count(ALLEGRO_TIMER *timer, int64_t new_count)
+* void al_add_timer_count(ALLEGRO_TIMER *timer, int64_t diff)
+* double al_get_timer_speed(const ALLEGRO_TIMER *timer)
+* void al_set_timer_speed(ALLEGRO_TIMER *timer, double new_speed_secs)
+* ALLEGRO_EVENT_SOURCE *al_get_timer_event_source(ALLEGRO_TIMER *timer)
+* void al_copy_transform(ALLEGRO_TRANSFORM *dest, const ALLEGRO_TRANSFORM *src)
+* void al_use_transform(const ALLEGRO_TRANSFORM *trans)
+* const ALLEGRO_TRANSFORM *al_get_current_transform(void)
+* void al_invert_transform(ALLEGRO_TRANSFORM *trans)
+* int al_check_inverse(const ALLEGRO_TRANSFORM *trans, float tol)
+* void al_identity_transform(ALLEGRO_TRANSFORM *trans)
+* void al_build_transform(ALLEGRO_TRANSFORM *trans, float x, float y,float sx, float sy, float theta)
+* void al_translate_transform(ALLEGRO_TRANSFORM *trans, float x, float y)
+* void al_rotate_transform(ALLEGRO_TRANSFORM *trans, float theta)
+* void al_scale_transform(ALLEGRO_TRANSFORM *trans, float sx, float sy)
+* void al_transform_coordinates(const ALLEGRO_TRANSFORM *trans, float *x, float *y)
+* void al_compose_transform(ALLEGRO_TRANSFORM *trans, const ALLEGRO_TRANSFORM *other)
+* ALLEGRO_USTR *al_ustr_new(const char *s)
+* ALLEGRO_USTR *al_ustr_new_from_buffer(const char *s, size_t size)
+* void al_ustr_free(ALLEGRO_USTR *us)
+* const char *al_cstr(const ALLEGRO_USTR *us)
+* void al_ustr_to_buffer(const ALLEGRO_USTR *us, char *buffer, int size)
+* char *al_cstr_dup(const ALLEGRO_USTR *us)
+* ALLEGRO_USTR *al_ustr_dup(const ALLEGRO_USTR *us)
+* ALLEGRO_USTR *al_ustr_dup_substr(const ALLEGRO_USTR *us, int start_pos,int end_pos)
+* const ALLEGRO_USTR *al_ustr_empty_string(void)
+* const ALLEGRO_USTR *al_ref_cstr(ALLEGRO_USTR_INFO *info, const char *s)
+* const ALLEGRO_USTR *al_ref_buffer(ALLEGRO_USTR_INFO *info, const char *s, size_t size)
+* const ALLEGRO_USTR *al_ref_ustr(ALLEGRO_USTR_INFO *info, const ALLEGRO_USTR *us,int start_pos, int end_pos)
+* size_t al_ustr_size(const ALLEGRO_USTR *us)
+* size_t al_ustr_length(const ALLEGRO_USTR *us)
+* int al_ustr_offset(const ALLEGRO_USTR *us, int index)
+* bool al_ustr_next(const ALLEGRO_USTR *us, int *pos)
+* bool al_ustr_prev(const ALLEGRO_USTR *us, int *pos)
+* int32_t al_ustr_get(const ALLEGRO_USTR *ub, int pos)
+* int32_t al_ustr_get_next(const ALLEGRO_USTR *us, int *pos)
+* int32_t al_ustr_prev_get(const ALLEGRO_USTR *us, int *pos)
+* bool al_ustr_insert(ALLEGRO_USTR *us1, int pos, const ALLEGRO_USTR *us2)
+* bool al_ustr_insert_cstr(ALLEGRO_USTR *us, int pos, const char *s)
+* size_t al_ustr_insert_chr(ALLEGRO_USTR *us, int pos, int32_t c)
+* bool al_ustr_append(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_append_cstr(ALLEGRO_USTR *us, const char *s)
+* size_t al_ustr_append_chr(ALLEGRO_USTR *us, int32_t c)
+* bool al_ustr_remove_chr(ALLEGRO_USTR *us, int pos)
+* bool al_ustr_remove_range(ALLEGRO_USTR *us, int start_pos, int end_pos)
+* bool al_ustr_truncate(ALLEGRO_USTR *us, int start_pos)
+* bool al_ustr_ltrim_ws(ALLEGRO_USTR *us)
+* bool al_ustr_rtrim_ws(ALLEGRO_USTR *us)
+* bool al_ustr_trim_ws(ALLEGRO_USTR *us)
+* bool al_ustr_assign(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_assign_substr(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2,int start_pos, int end_pos)
+* bool al_ustr_assign_cstr(ALLEGRO_USTR *us1, const char *s)
+* size_t al_ustr_set_chr(ALLEGRO_USTR *us, int start_pos, int32_t c)
+* bool al_ustr_replace_range(ALLEGRO_USTR *us1, int start_pos1, int end_pos1,const ALLEGRO_USTR *us2)
+* int al_ustr_find_chr(const ALLEGRO_USTR *us, int start_pos, int32_t c)
+* int al_ustr_rfind_chr(const ALLEGRO_USTR *us, int end_pos, int32_t c)
+* int al_ustr_find_set(const ALLEGRO_USTR *us, int start_pos,const ALLEGRO_USTR *accept)
+* int al_ustr_find_set_cstr(const ALLEGRO_USTR *us, int start_pos,const char *accept)
+* int al_ustr_find_cset(const ALLEGRO_USTR *us, int start_pos,const ALLEGRO_USTR *reject)
+* int al_ustr_find_cset_cstr(const ALLEGRO_USTR *us, int start_pos,const char *reject)
+* int al_ustr_find_str(const ALLEGRO_USTR *haystack, int start_pos,const ALLEGRO_USTR *needle)
+* int al_ustr_find_cstr(const ALLEGRO_USTR *haystack, int start_pos,const char *needle)
+* int al_ustr_rfind_str(const ALLEGRO_USTR *haystack, int end_pos,const ALLEGRO_USTR *needle)
+* int al_ustr_rfind_cstr(const ALLEGRO_USTR *haystack, int end_pos,const char *needle)
+* bool al_ustr_find_replace(ALLEGRO_USTR *us, int start_pos,const ALLEGRO_USTR *find, const ALLEGRO_USTR *replace)
+* bool al_ustr_find_replace_cstr(ALLEGRO_USTR *us, int start_pos,const char *find, const char *replace)
+* int al_ustr_compare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* int al_ustr_ncompare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2, int n)
+* bool al_ustr_equal(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_has_prefix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_has_prefix_cstr(const ALLEGRO_USTR *us1, const char *s2)
+* bool al_ustr_has_suffix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_has_suffix_cstr(const ALLEGRO_USTR *us1, const char *s2)
+* ALLEGRO_USTR *al_ustr_new_from_utf16(uint16_t const *s)
+* size_t al_ustr_size_utf16(const ALLEGRO_USTR *us)
+* size_t al_ustr_encode_utf16(const ALLEGRO_USTR *us, uint16_t *s,size_t n)
+* size_t al_utf8_width(int c)
+* size_t al_utf8_encode(char s[], int32_t c)
+* size_t al_utf16_width(int c)
+* LPDIRECT3DDEVICE9 al_get_d3d_device(ALLEGRO_DISPLAY *display)
+* LPDIRECT3DTEXTURE9 al_get_d3d_system_texture(ALLEGRO_BITMAP *bitmap)
+* LPDIRECT3DTEXTURE9 al_get_d3d_video_texture(ALLEGRO_BITMAP *bitmap)
+* bool al_have_d3d_non_pow2_texture_support(void)
+* bool al_have_d3d_non_square_texture_support(void)
+* void al_get_d3d_texture_position(ALLEGRO_BITMAP *bitmap, int *u, int *v)
+* bool al_is_d3d_device_lost(ALLEGRO_DISPLAY *display)
+* ALLEGRO_OGL_EXT_LIST *al_get_opengl_extension_list(void)
+* void *al_get_opengl_proc_address(const char *name)
+* GLuint al_get_opengl_texture(ALLEGRO_BITMAP *bitmap)
+* void al_get_opengl_texture_size(ALLEGRO_BITMAP *bitmap, int *w, int *h)
+* void al_get_opengl_texture_position(ALLEGRO_BITMAP *bitmap, int *u, int *v)
+* GLuint al_get_opengl_fbo(ALLEGRO_BITMAP *bitmap)
+* void al_remove_opengl_fbo(ALLEGRO_BITMAP *bitmap)
+* bool al_have_opengl_extension(const char *extension);
+* uint32_t al_get_opengl_version(void)
+* int al_get_opengl_variant(void)
+* void al_set_current_opengl_context(ALLEGRO_DISPLAY *display)
+* bool al_install_audio(void)
+* void al_uninstall_audio(void)
+* bool al_is_audio_installed(void)
+* bool al_reserve_samples(int reserve_samples)
+* uint32_t al_get_allegro_audio_version(void)
+* size_t al_get_audio_depth_size(ALLEGRO_AUDIO_DEPTH depth)
+* size_t al_get_channel_count(ALLEGRO_CHANNEL_CONF conf)
+* ALLEGRO_VOICE *al_create_voice(unsigned int freq,ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
+* void al_destroy_voice(ALLEGRO_VOICE *voice)
+* void al_detach_voice(ALLEGRO_VOICE *voice)
+* bool al_attach_audio_stream_to_voice(ALLEGRO_AUDIO_STREAM *stream,ALLEGRO_VOICE *voice)
+* bool al_attach_mixer_to_voice(ALLEGRO_MIXER *mixer, ALLEGRO_VOICE *voice)
+* bool al_attach_sample_instance_to_voice(ALLEGRO_SAMPLE_INSTANCE *spl,ALLEGRO_VOICE *voice)
+* unsigned int al_get_voice_frequency(const ALLEGRO_VOICE *voice)
+* ALLEGRO_CHANNEL_CONF al_get_voice_channels(const ALLEGRO_VOICE *voice)
+* ALLEGRO_AUDIO_DEPTH al_get_voice_depth(const ALLEGRO_VOICE *voice)
+* bool al_get_voice_playing(const ALLEGRO_VOICE *voice)
+* bool al_set_voice_playing(ALLEGRO_VOICE *voice, bool val)
+* unsigned int al_get_voice_position(const ALLEGRO_VOICE *voice)
+* bool al_set_voice_position(ALLEGRO_VOICE *voice, unsigned int val)
+* ALLEGRO_SAMPLE *al_create_sample(void *buf, unsigned int samples,unsigned int freq, ALLEGRO_AUDIO_DEPTH depth,ALLEGRO_CHANNEL_CONF chan_conf, bool free_buf)
+* void al_destroy_sample(ALLEGRO_SAMPLE *spl)
+* bool al_play_sample(ALLEGRO_SAMPLE *spl, float gain, float pan, float speed,int loop, ALLEGRO_SAMPLE_ID *ret_id)
+* void al_stop_sample(ALLEGRO_SAMPLE_ID *spl_id)
+* void al_stop_samples(void)
+* ALLEGRO_CHANNEL_CONF al_get_sample_channels(const ALLEGRO_SAMPLE *spl)
+* ALLEGRO_AUDIO_DEPTH al_get_sample_depth(const ALLEGRO_SAMPLE *spl)
+* unsigned int al_get_sample_frequency(const ALLEGRO_SAMPLE *spl)
+* unsigned int al_get_sample_length(const ALLEGRO_SAMPLE *spl)
+* void *al_get_sample_data(const ALLEGRO_SAMPLE *spl)
+* ALLEGRO_SAMPLE_INSTANCE *al_create_sample_instance(ALLEGRO_SAMPLE *sample_data)
+* void al_destroy_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_play_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_stop_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_CHANNEL_CONF al_get_sample_instance_channels(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_AUDIO_DEPTH al_get_sample_instance_depth(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* unsigned int al_get_sample_instance_frequency(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* unsigned int al_get_sample_instance_length(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_length(ALLEGRO_SAMPLE_INSTANCE *spl,unsigned int val)
+* unsigned int al_get_sample_instance_position(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_position(ALLEGRO_SAMPLE_INSTANCE *spl,unsigned int val)
+* float al_get_sample_instance_speed(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_speed(ALLEGRO_SAMPLE_INSTANCE *spl, float val)
+* float al_get_sample_instance_gain(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_gain(ALLEGRO_SAMPLE_INSTANCE *spl, float val)
+* float al_get_sample_instance_pan(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_pan(ALLEGRO_SAMPLE_INSTANCE *spl, float val)
+* float al_get_sample_instance_time(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_PLAYMODE al_get_sample_instance_playmode(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_playmode(ALLEGRO_SAMPLE_INSTANCE *spl,ALLEGRO_PLAYMODE val)
+* bool al_get_sample_instance_playing(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_playing(ALLEGRO_SAMPLE_INSTANCE *spl, bool val)
+* bool al_get_sample_instance_attached(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_detach_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_SAMPLE *al_get_sample(ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample(ALLEGRO_SAMPLE_INSTANCE *spl, ALLEGRO_SAMPLE *data)
+* ALLEGRO_MIXER *al_create_mixer(unsigned int freq,ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
+* void al_destroy_mixer(ALLEGRO_MIXER *mixer)
+* ALLEGRO_MIXER *al_get_default_mixer(void)
+* bool al_set_default_mixer(ALLEGRO_MIXER *mixer)
+* bool al_restore_default_mixer(void)
+* bool al_attach_mixer_to_mixer(ALLEGRO_MIXER *stream, ALLEGRO_MIXER *mixer)
+* bool al_attach_sample_instance_to_mixer(ALLEGRO_SAMPLE_INSTANCE *spl,ALLEGRO_MIXER *mixer)
+* bool al_attach_audio_stream_to_mixer(ALLEGRO_AUDIO_STREAM *stream, ALLEGRO_MIXER *mixer)
+* unsigned int al_get_mixer_frequency(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_frequency(ALLEGRO_MIXER *mixer, unsigned int val)
+* ALLEGRO_CHANNEL_CONF al_get_mixer_channels(const ALLEGRO_MIXER *mixer)
+* ALLEGRO_AUDIO_DEPTH al_get_mixer_depth(const ALLEGRO_MIXER *mixer)
+* float al_get_mixer_gain(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_gain(ALLEGRO_MIXER *mixer, float new_gain)
+* ALLEGRO_MIXER_QUALITY al_get_mixer_quality(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_quality(ALLEGRO_MIXER *mixer, ALLEGRO_MIXER_QUALITY new_quality)
+* bool al_get_mixer_playing(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_playing(ALLEGRO_MIXER *mixer, bool val)
+* bool al_get_mixer_attached(const ALLEGRO_MIXER *mixer)
+* bool al_detach_mixer(ALLEGRO_MIXER *mixer)
+* void al_destroy_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* ALLEGRO_EVENT_SOURCE *al_get_audio_stream_event_source(ALLEGRO_AUDIO_STREAM *stream)
+* void al_drain_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* bool al_rewind_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* unsigned int al_get_audio_stream_frequency(const ALLEGRO_AUDIO_STREAM *stream)
+* ALLEGRO_CHANNEL_CONF al_get_audio_stream_channels(const ALLEGRO_AUDIO_STREAM *stream)
+* ALLEGRO_AUDIO_DEPTH al_get_audio_stream_depth(const ALLEGRO_AUDIO_STREAM *stream)
+* unsigned int al_get_audio_stream_length(const ALLEGRO_AUDIO_STREAM *stream)
+* float al_get_audio_stream_speed(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_speed(ALLEGRO_AUDIO_STREAM *stream, float val)
+* float al_get_audio_stream_gain(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_gain(ALLEGRO_AUDIO_STREAM *stream, float val)
+* float al_get_audio_stream_pan(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_pan(ALLEGRO_AUDIO_STREAM *stream, float val)
+* bool al_get_audio_stream_playing(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_playing(ALLEGRO_AUDIO_STREAM *stream, bool val)
+* ALLEGRO_PLAYMODE al_get_audio_stream_playmode(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_playmode(ALLEGRO_AUDIO_STREAM *stream,ALLEGRO_PLAYMODE val)
+* bool al_get_audio_stream_attached(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_detach_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* void *al_get_audio_stream_fragment(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_fragment(ALLEGRO_AUDIO_STREAM *stream, void *val)
+* unsigned int al_get_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM *stream)
+* unsigned int al_get_available_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_seek_audio_stream_secs(ALLEGRO_AUDIO_STREAM *stream, double time)
+* double al_get_audio_stream_position_secs(ALLEGRO_AUDIO_STREAM *stream)
+* double al_get_audio_stream_length_secs(ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_loop_secs(ALLEGRO_AUDIO_STREAM *stream,double start, double end)
+* ALLEGRO_SAMPLE *al_load_sample(const char *filename)
+* ALLEGRO_SAMPLE *al_load_sample_f(ALLEGRO_FILE* fp, const char *ident)
+* ALLEGRO_AUDIO_STREAM *al_load_audio_stream(const char *filename,size_t buffer_count, unsigned int samples)
+* ALLEGRO_AUDIO_STREAM *al_load_audio_stream_f(ALLEGRO_FILE* fp, const char *ident,size_t buffer_count, unsigned int samples)
+* bool al_save_sample(const char *filename, ALLEGRO_SAMPLE *spl)
+* bool al_save_sample_f(ALLEGRO_FILE *fp, const char *ident, ALLEGRO_SAMPLE *spl)
+* bool al_init_acodec_addon(void)
+* uint32_t al_get_allegro_acodec_version(void)
+* ALLEGRO_COLOR al_color_cmyk(float c, float m, float y, float k)
+* void al_color_cmyk_to_rgb(float cyan, float magenta, float yellow,float key, float *red, float *green, float *blue)
+* ALLEGRO_COLOR al_color_hsl(float h, float s, float l)
+* void al_color_hsl_to_rgb(float hue, float saturation, float lightness,float *red, float *green, float *blue)
+* ALLEGRO_COLOR al_color_hsv(float h, float s, float v)
+* void al_color_hsv_to_rgb(float hue, float saturation, float value,float *red, float *green, float *blue)
+* ALLEGRO_COLOR al_color_html(char const *string)
+* void al_color_html_to_rgb(char const *string,float *red, float *green, float *blue)
+* void al_color_rgb_to_html(float red, float green, float blue,char *string)
+* ALLEGRO_COLOR al_color_name(char const *name)
+* bool al_color_name_to_rgb(char const *name, float *r, float *g, float *b)
+* void al_color_rgb_to_cmyk(float red, float green, float blue,float *cyan, float *magenta, float *yellow, float *key)
+* void al_color_rgb_to_hsl(float red, float green, float blue,float *hue, float *saturation, float *lightness)
+* void al_color_rgb_to_hsv(float red, float green, float blue,float *hue, float *saturation, float *value)
+* char const *al_color_rgb_to_name(float r, float g, float b)
+* void al_color_rgb_to_yuv(float red, float green, float blue,float *y, float *u, float *v)
+* ALLEGRO_COLOR al_color_yuv(float y, float u, float v)
+* void al_color_yuv_to_rgb(float y, float u, float v,float *red, float *green, float *blue)
+* uint32_t al_get_allegro_color_version(void)
+* void al_init_font_addon(void)
+* void al_shutdown_font_addon(void)
+* ALLEGRO_FONT *al_load_font(char const *filename, int size, int flags)
+* void al_destroy_font(ALLEGRO_FONT *f)
+* int al_get_font_ascent(const ALLEGRO_FONT *f)
+* int al_get_font_descent(const ALLEGRO_FONT *f)
+* int al_get_text_width(const ALLEGRO_FONT *f, const char *str)
+* int al_get_ustr_width(const ALLEGRO_FONT *f, ALLEGRO_USTR const *ustr)
+* void al_draw_text(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x, float y, int flags,char const *text)
+* void al_draw_ustr(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x, float y, int flags,const ALLEGRO_USTR *ustr)
+* void al_draw_justified_text(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x1, float x2,float y, float diff, int flags, const char *text)
+* void al_draw_justified_ustr(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x1, float x2,float y, float diff, int flags, const ALLEGRO_USTR *ustr)
+* void al_get_text_dimensions(const ALLEGRO_FONT *f,char const *text,int *bbx, int *bby, int *bbw, int *bbh)
+* void al_get_ustr_dimensions(const ALLEGRO_FONT *f,ALLEGRO_USTR const *ustr,int *bbx, int *bby, int *bbw, int *bbh)
+* uint32_t al_get_allegro_font_version(void)
+* ALLEGRO_FONT *al_grab_font_from_bitmap(ALLEGRO_BITMAP *bmp,int ranges_n, const int ranges[])
+* ALLEGRO_FONT *al_load_bitmap_font(const char *fname)
+* ALLEGRO_FONT *al_create_builtin_font(void)
+* bool al_init_ttf_addon(void)
+* void al_shutdown_ttf_addon(void)
+* ALLEGRO_FONT *al_load_ttf_font(char const *filename, int size, int flags)
+* ALLEGRO_FONT *al_load_ttf_font_f(ALLEGRO_FILE *file,char const *filename, int size, int flags)
+* ALLEGRO_FONT *al_load_ttf_font_stretch(char const *filename, int w, int h,int flags)
+* ALLEGRO_FONT *al_load_ttf_font_stretch_f(ALLEGRO_FILE *file,char const *filename, int w, int h, int flags)
+* uint32_t al_get_allegro_ttf_version(void)
+* bool al_init_image_addon(void)
+* void al_shutdown_image_addon(void)
+* uint32_t al_get_allegro_image_version(void)
+* ALLEGRO_FILE *al_open_memfile(void *mem, int64_t size, const char *mode)
+* uint32_t al_get_allegro_memfile_version(void)
+* bool al_init_native_dialog_addon(void)
+* void al_shutdown_native_dialog_addon(void)
+* ALLEGRO_FILECHOOSER *al_create_native_file_dialog(char const *initial_path,char const *title,char const *patterns,int mode)
+* bool al_show_native_file_dialog(ALLEGRO_DISPLAY *display,ALLEGRO_FILECHOOSER *dialog)
+* int al_get_native_file_dialog_count(const ALLEGRO_FILECHOOSER *dialog)
+* const char *al_get_native_file_dialog_path(const ALLEGRO_FILECHOOSER *dialog, size_t i)
+* void al_destroy_native_file_dialog(ALLEGRO_FILECHOOSER *dialog)
+* int al_show_native_message_box(ALLEGRO_DISPLAY *display,char const *title, char const *heading, char const *text,char const *buttons, int flags)
+* ALLEGRO_TEXTLOG *al_open_native_text_log(char const *title, int flags)
+* void al_close_native_text_log(ALLEGRO_TEXTLOG *textlog)
+* uint32_t al_get_allegro_native_dialog_version(void)
+* void al_set_physfs_file_interface(void)
+* uint32_t al_get_allegro_physfs_version(void)
+* uint32_t al_get_allegro_primitives_version(void)
+* bool al_init_primitives_addon(void)
+* void al_shutdown_primitives_addon(void)
+* void al_draw_line(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color, float thickness)
+* void al_draw_triangle(float x1, float y1, float x2, float y2,float x3, float y3, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_triangle(float x1, float y1, float x2, float y2,float x3, float y3, ALLEGRO_COLOR color)
+* void al_draw_rectangle(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_rectangle(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color)
+* void al_draw_rounded_rectangle(float x1, float y1, float x2, float y2,float rx, float ry, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_rounded_rectangle(float x1, float y1, float x2, float y2,float rx, float ry, ALLEGRO_COLOR color)
+* void al_calculate_arc(float* dest, int stride, float cx, float cy,float rx, float ry, float start_theta, float delta_theta, float thickness,int num_points)
+* void al_draw_pieslice(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_pieslice(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color)
+* void al_draw_ellipse(float cx, float cy, float rx, float ry,ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_ellipse(float cx, float cy, float rx, float ry,ALLEGRO_COLOR color)
+* void al_draw_circle(float cx, float cy, float r, ALLEGRO_COLOR color,float thickness)
+* void al_draw_filled_circle(float cx, float cy, float r, ALLEGRO_COLOR color)
+* void al_draw_arc(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_elliptical_arc(float cx, float cy, float rx, float ry, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_ribbon(const float *points, int points_stride, ALLEGRO_COLOR color,float thickness, int num_segments)
+* int al_draw_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,ALLEGRO_BITMAP* texture, int start, int end, int type)
+* int al_draw_indexed_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,ALLEGRO_BITMAP* texture, const int* indices, int num_vtx, int type)
+* ALLEGRO_VERTEX_DECL* al_create_vertex_decl(const ALLEGRO_VERTEX_ELEMENT* elements, int stride)
+* void al_destroy_vertex_decl(ALLEGRO_VERTEX_DECL* decl)
diff --git a/docs/en/source/ringapps.txt b/docs/en/source/ringapps.txt
new file mode 100644 (file)
index 0000000..7772225
--- /dev/null
@@ -0,0 +1,590 @@
+.. index:: 
+       single: Applications developed in little hours; Introduction
+
+=================================================
+Applications developed in little hours
+=================================================
+
+Ring is a new programming language that focuses on the Natural Language Programming and Declarative Programming paradigms 
+and will let you think different about programming and how to solve your problems in a better way. It's just released in 2016.01.25!  
+In little days we got thousands of downloads and many developers started learning and 
+using the language. Their feedback are the secret behind the language progress and success. 
+They said that Ring is powerful, beautiful and easy to learn, Some of them provided good examples about what can be done using Ring in little hours. 
+They are very happy with the language productivity.
+
+.. index:: 
+       pair: Applications developed in little hours; Quotes about Ring
+
+Quotes about Ring
+=================
+
+"I like Smalltalk very much but now I like Ring better!"
+       , Gal Zsolt (Hungary)
+
+"I find the language and its syntax very natural and easy to follow."
+       , Bhudda (United States)
+
+"Very nice approach for a new language."
+       , Matth Moestl (Austria)
+
+"Very interesting! I will keep an eye on it.!"
+       , Eslipak (Argentina)
+
+"I'd like to see some benchmarks. Otherwise, at first glance, it looks really promising."
+       , Alex Deva (Sweden)
+
+"Excellent"
+       , Liju Sankar (United States)
+
+"I wish you the best with this project."
+       , David O'Neil (United States)
+
+"Just fantastic."
+       , Jose Antonio (Mexico)
+
+"This looks like it was developed by some very competent people."
+       , Jim Clack (United States)
+
+"The Ring programming language seems pretty interesting so far."
+       , Eric Johnson (United States)
+
+"Thank you for this awesome language and wonderful ready to use Qt binding."
+       , Martial FAESSEL
+
+"I think it's great what he does for the community of developers and novice programming."
+       , Marino Esteban 
+
+"Ring is just awesome. The language is so cool and fluent. I am sure it's going to be BIG."
+       , Ahmed Zain
+
+"What a proud, really wish you Eng. Mahmoud Samir and Your Team  moving forward  ^_^
+ and from now , considered me a big  fan of the Ring programming language."
+       , Zainab Mahmoud
+
+"Well guys I love this language and it appears that you have created perfect language."
+       , Moemen Ghulmi
+
+"Good work Mahmoud, I've installed ring pl, and it's very perfect language."
+       , Ahmed Omar (Egypt)
+
+"Thanks for this great startup programming language. I wish you best of luck."
+       , Elkhouaja Khalid
+
+"Congratulations! I am very happy and I wish you Success and good luck."
+       , Abobasmla Hassan
+
+"Good Features of multi-use language on the Web, Mobile and Desktop."
+       , Abdelrhman Haider
+
+"Very interesting effort."
+       , Giannakakis Kostas (Greece)
+
+"I am too lazy to open comment window and write message.
+But in your case I must say "Perfect"
+Really, create new remarkable language like your Ring is
+really perfect job. Even create editor for your language
+in your language with only few rows...
+Even noticed in rosettacode.org !
+
+I read your previous articles and I tried these examples
+a few days ago and I will continue. I love Ring.
+
+P.S.: Anders Hejlsberg, Niklaus Wirth, Bjarne Stroustrup, Ada Lovelace
+Hall of fame is waiting...."
+       , Martin Nedopil (Czech Republic )
+
+"Ring seems very attractive to me through its very easy design and the Qt bindings. 
+I like its declarative approach and the generous documentation."
+       , Shalok Shalom (Austria)
+
+"Ring (and plenty of extension library + Qt) is wonderful."
+       , Kovacs Attila (Hungary)
+
+"Since two days I'm trying Ring and I'm really impressed, in add to power
+commands and easy use, it's really very efficient and very fast.
+
+Each day I hope to find the couple of the year PWCT+RING ... Maybe for my
+Christmas gift!!!!  HO HO HO HO
+
+Continue your fantastic job and congratulations."
+       , Jose Le Roux (France)
+
+"There are 3 different styles, it looks like Python and C"
+       , 64remy
+
+"I was taking a tour around Rosettacode and have found Ring. 
+I like the syntax a lot. It's clean and easy to understand.
+It looks like a very clean BASIC dialect without sigils.
+I can say that this is the easiest and the most BASIC-like language I've ever tried."
+       , Tomaaz 
+
+"Thanks for your effort. I took a quick look and found it interesting. 
+ You are trying to follow more or less like Clipper with simple command and no rigid declaration rules. Good."
+       , Anand Gupta 
+
+"Thanks for this wonderful language"
+       , Vinod kc (India)
+
+"Very enlightening. good job!"
+       , Southmountain (United States)
+
+"The thing I liked was the loop exiting"
+       , Leon de boer (Australia)
+
+"An outstanding and easy language to program with."
+       , Kenneth Burgo (Philippines)
+
+"I chose your language as I feel I can understand it better than other languages"
+       , Harry Singh
+
+"I like the totality of the language, far more features than expected and the freedom of expressiveness is unique."
+       , Evikone
+
+"Thank you very much Mahmoud! I am using ring for many experiments and so far I love it.  
+ I really want to continue using ring and contribute what I can."
+       , John (SienSystem)
+
+"Sir, Very Good"
+       , Kamlesh Patel
+
+"That's more than a "cool" syntax, the example of writing free-form text between
+ curly-brackets such that each word calls a function. Which could be interesting 
+ (A syntax like that would be nice for declaring text styles)"
+       , LaurieCheers
+
+"If you browse around you see they have listed 160 contributors. 
+ This year they have entered Top 100 in the TIOBE index. Lot of effort 
+ seem to have been made to make this language pop out and
+ catch the attention of masses."
+       , Htuhola
+
+"I like the idea of The Ring being in ANSI C
+ it's an impressive creation, and a lot of skill went into it"
+       , Garry Taylor
+
+"Very innovative language! Syntactically clean"
+       , CodeProject Member
+
+"The author must be commended for the readily-obvious hard work and effort that has gone into creating a rich ecosystem for his language.
+It seems that the language is quite extensive as well. I would find it useful to see a BNF grammar and concise coverage of its semantics."
+       , Xx-Leninist-1917-Xx (Reddit)
+
+"I can see the AI of the future using this technology to solve computational problems for..... the humans."
+       , Cryptonite (United States)
+
+"I like your programming language, I like you are going to develop mobile app using RingQt and also 
+I appreciate your web library."
+       , Domenico D'Oria (Italy)       
+
+"Congratulations for the great work with this new programming language."
+       , Kenny Silva (Venezuela)
+
+"Ring is an amazingly full-featured language and so well documented (the bane of most newer languages out there!)"
+       , Alex McCullie
+
+" I found the language yesterday, and liked the Qt bindings, as they give a declarative way to create a QtWidgets GUI."
+       , Cochise Cesar
+
+"Ring does look intriguing, and I'll be reading more of the documentation soon"
+       , Jamie Cooper
+
+"I was recently considering designing my own dynamically-typed, prototypical language and then developing a means to compile it into C/C++. However, last night I was surfing the web and noticed a little-known language called "Ring" which you've recently created. I began reading the Motivation section in Wikibooks to see why the language was designed and implemented, and I was shocked to see that someone else had created a language with the same intention and need as myself. I mean, it's mind-blowing that someone would have addressed every issue I have with the currently accepted languages. Why bother with C/C++ when the syntax can be cryptic and they are largely antiquated - why should we still be dealing with header files, etc? Moreover, your comments on Java and C# being too verbose and forcing OOP onto the user is spot on as well - yet these languages are still primarily used by millions of programmers for the most mundane tasks. At this point, I'm led to believe that it's simply a matter of legacy applications that still haven't made the transition, as well as the ever-popular "Appeal to Popularity" fallacy shared by many in academia and enterprise. Then we come to languages, that are easier and much more modern, and yet even now, are being to show their age. Languages like Python which stresses whitespace and indentation, as well as (just like the formerly mentioned languages) irrelevant tokens for the conditional statements. Granted, it's not as bad as tracking down various curly braces or semi-colons, but one misstep in indentation might as well be as frustrating to track down. The same could be true of Ruby, except with Ruby, we have even odder conventions embedded into the design of the language, which I don't feel the need to address and moreover, we're left with something like Lua which is missing a great many features that the previously mentioned languages include. There are many more languages and faults with them, we could claim that PHP is nothing more than a glue for web pages and backends but with so many frameworks available now, it's falling by the wayside fast. Javascript is constantly being cloned. So, each of these general purpose languages, which we all know are mostly domain-specific and in some cases, also oriented at certain OS(C# was before 2016 and Obj-C/Swift will likely always be primarily for MacOS apps). So, then we're left with several additional options, involving everything from hybrids to other imperative-based languages like D, GoLang, Scala, Julia, etc. But finally, there's a new language called Ring - and yes, it may just end up ruling them all. It's the unicorn we've finally been waiting to arrive, that can handle multiple domains, tasks, and paradigms. I honestly can't wait to jump in and when I do I probably won't come back up anytime soon. My only apprehension is that the language may not include a library or primitive functions for math as Python and Julia do. Aside from that, if so, hopefully, I won't be having to use linear expressions as arrays (considering how intellectually lazy it is to do) and that there will be more support/tools as the community continues to grow. It's crazy to think it's only been around for a year and yet, it's already, practically a batteries-included language."
+
+       , Gedalya (YouTube)
+
+"Thank you Mr. Mahmoud for all the wonderful work, whenever I dive in the Source code I see the great effort, further development more excellence, God will reward you with what you wish"
+
+       , Azzedine Ramal
+
+"What a great joy to find this surprisingly genius language !!!. It was a total joy to go through the documentation and look at the samples in Rosetta code.
+Marvelous work. I would even leave my fortune to the development of this language. Keep the good work going and wishing this language will go viral.
+
+ps: Thanks for keeping array index to start with 1. It means a lot."
+
+       , Nehemiah Jacob (Sydney, Australia)
+
+"I find it very interesting. Especially the fact that it is cross platform makes it something to keep an eye on."
+
+       , Boudewijn Lutgerink 
+
+"The language I like the most. Efficient, simple, easy, flexible and wonderful language."
+       , Roshan Ali
+
+"I like variety. The richer the toolbox, the more appropriate the tool."
+       , Jonathan Day (Quora)
+
+"I greatly appreciated your work and congratulations on what has been achieved."
+       , Umberto Meglio (Italy)
+
+"Thanks a lot I just found Ring two days ago and I decided to learn it, it is amazing, the samples are helping a lot."
+       , Zaraki Ken
+
+"Extraordinary. well done sir"
+       , RugbyLeague (CodeProject Member - United Kingdom)
+
+"The Ring language is pleasant. You get ahead very quickly."
+       , Neskuk (CodeProject Member - Switzerland)
+
+"I'm happy to use your language."
+       , Akhil Reddy
+
+"I am enjoying using the Ring Programming language."
+       , Gabriel Wendt
+
+"I'm loving this language!"
+       , Pablo Prieto
+
+"Ring Notepad is a an example of the power of Ring.
+It is like NotePad++ with built in form design capability, drag and drop, object attributes etc.
+It is a marvelous application"
+       ,  Bert Mariani (Italy)
+
+"Ring is the language that offers the greatest potential for converting programmers frustrated with the amount of time it takes to develop apps in C/C++, C#  and other OOP-based languages.
+Considering the extent to which Ring has evolved since the first release in 2016, the Ring team has proven itself worthy of a very high achievement award in the world of programming languages.
+The extent to which Ring has simplified the development database apps, web apps and GUI apps is a great credit to the Ring team.
+Ring's implementation of OOP and GUI based apps is far superior to C++ and C#. 
+Another major achievement of the Ring team is the ease at which programmers can get on-line access to Ring documentation, compared to on-line C++ and C# documentation.
+The Ring Game Engine is truly elegant and it's designer (s)  deserve lots of credit for such an impressive bit of software."
+       , L Godioleskky
+
+"Strongly speaking, it is a strong and new game programming language."
+       , IsVowel (Japan)
+
+"The language seems to have some interesting features, specially the use of braces to access object fields and methods."
+       , Nuaua (Reddit)
+
+"The code that implements the Ring VM actually looks quite nice. There is a bunch of test code -- great!"
+       , Peterfirefly (Reddit)
+
+"Ring seems promising. It first appeared in 2016 although it's concept is older. It is meant to be portable and can be embedded in C/C++ projects"
+       , Wim ten Brink (Quora - Top Writer (2018))
+
+"Interesting alternative to Lua."
+       , djxtc (Sourceforge)
+
+"Ring is a serious thing in the programming language landscape. One shoud understand its foundation before she can shape an opinion worth considering. There are several innovations outthere with a clear commitment from its designer to simplicity, flexibility and learnability.
+Natural language as its imagined by Ring opens a window for an unlimited set of applications otherwise impossible to think about. One can built an interactive chatbot based on a rich domain specific language in a matter of hours not months.
+Combined with a smart yet effective implementation of a declarative programming paradigm, Ring empowers the creation of any kind of programming language on top of it, with any set of syntax. Even the language keywords can be overwritten to serve one's own keywords in any human language not only english.
+Ring is a distruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others. Those ideas are a humanity heritage that new visionaries like Mahmoud S. Fayed, the Ring designer, but also Rick Hickey, the Clojure designer, are trying to callback in todays world of complex programmability.
+An other dimension of Ring, which formed one of its basic motivations, relates to visual programming. Software is a fluid and evolutionary creature and textual code is not accessible to the most of common humans. The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intutively. Ring was made by design with an objective of having a programming language capable of better supporting the visual paradigm.
+Gamification is a first-class citizen in the language. This is a tremendous advantage compared to other general-purpose programming languages. Ring supports a large number of gaming libraries and open a large window of capabilities to use, not only in gaming but also in business and education applications.
+The best way to assesing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."
+       , Mansour Ayouni (Tunisia)
+
+"I have only known ring-lang for few weeks, really love features and visions of ring: bracket access, class region, declarative and natural programming.
+It's simple and beautiful the way ring deal with these paradigms. I think it's really great work what you're done, and doing.
+I want to develop ethereum client in ring language, not only but it's style. It'll have natural and declarative code on it's main part.
+Furthermore, It will be fantastic if there is "natural language -> evm bytecode" compiler, maybe ring have the solution"
+       , Asta 
+
+"The language looks great!"
+       , Eric Hawk
+
+"You put a lot of work in the Ring and you're a great programmer
+I saw your examples in 3D I've looked at part of your project, it's really great"
+       , Rafal Jopek
+
+"Looks like a big project and an impressive piece of work"
+       , Rochus Keller (PhD From ETH Zurich, Switzerland)
+
+.. index:: 
+       pair: Applications developed in little hours; FetchStockData Application
+
+FetchStockData Application
+==========================
+
+URL : https://groups.google.com/forum/#!topic/ring-lang/-fa1U_SXSjo
+
+Author : Bert Mariani
+
+This App is written in Ring. 
+
+It will fetch stock data from Yahoo and draw various types of charts.
+Any valid stock ticker can be entered, or selected from the drop down list - Select Symbol.
+
+It will not guarantee that you make money in the stock market.
+But it will visualize the history of the stock.
+
+.. image:: getquotesmac.png
+       :alt: GetQuotesHistory on MacOS X
+
+.. index:: 
+       pair: Applications developed in little hours; Fifteen Puzzle Game 2
+
+Fifteen Puzzle Game 2
+=====================
+
+URL : https://github.com/ring-lang/ring/blob/master/applications/fifteenpuzzle/CalmoSoftFifteenPuzzleGame.ring
+
+Author : Gal Zsolt (CalmoSoft)
+
+.. image:: fifteen2.png
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; Google API Shortener Application
+
+Google API Shortener Application
+================================
+
+Author : John Storm (SienSystem)
+
+Hi everyone,
+
+Wanted to (finally) share a first release version of a small but very nice tool 
+to shorten urls using the Google shortener API.   The code is fully documented, 
+maybe too documented, but, provides a good reference as to what is going on. 
+
+You can obtain your own API key, or you can use my key to test and use the tool.  
+
+Hope you enjoy the application.  Please feel free to test at your convenience.  
+
+Ring is FUN!!
+
+.. image:: urlappmacshot3.png
+       :alt: URLShortener - shot 3
+
+
+
+.. image:: urlappmacshot4.png
+       :alt: URLShortener - shot 4
+
+.. index:: 
+       pair: Applications developed in little hours; Analog Clock
+
+Analog Clock
+============
+
+URL : https://github.com/ring-lang/ring/blob/master/applications/analogclock/AnalogClock-Image.ring
+
+Author : Bert Mariani
+
+.. image:: analogclock.png
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; TicTacToe Game
+
+TicTacToe Game
+==============
+
+URL : https://github.com/AbdelrahmanGIT/RingSamples/blob/master/src/TecTacToe.ring
+
+Author : Abdelrahman Mohammed
+
+.. image:: tictactoe.jpg
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; Squares Puzzle Game
+
+Squares Puzzle Game
+===================
+
+URL : https://github.com/MajdiSobain/RingAllegro_SquaresPuzzle
+
+Author : Majdi Sobain
+
+This project is about (Squares Puzzle) popular game that I have programmed using
+ring language with its RingAllegro Library. The principle of this game is very known to all of us, 
+which is moving squares to get the real full shape of the original picture.
+
+This game could be played using mouse and keyboard as well, showing a message of congratulations at the successful solving.
+
+.. image:: ringapps_shot2.png
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; Video-Music-Player Application
+
+Video-Music-Player Application
+==============================
+
+Author : Bert Mariani
+
+Screen Shot:
+
+.. image:: videomusicplayer.jpg
+       :alt: Video Music Player
+
+
+.. index:: 
+       pair: Applications developed in little hours; Calculator Application
+
+Calculator Application
+======================
+
+Author : Magdy Ragab
+
+Updated Version by Gal Zsolt and Bert Mariani
+
+Screen Shot:
+
+.. image:: newcalc2.png
+       :alt: Ring Calculator
+
+
+.. index:: 
+       pair:  Applications developed in little hours; Windows StartUp Manager Application
+
+Windows StartUp Manager Application
+===================================
+
+URL : https://github.com/ring-lang/WinStartupManager
+
+Author : Majdi Sobain
+
+Windows Startup Manager is an application that has the ability to let 
+the user control what programs should start at Windows booting time. 
+It gives you the ability to show, edit, delete, or even add new programs
+entries to be lunched at Windows booting time.
+
+It is specialized at managing Windows startup entries that are stored in
+Windows Registry only, but provides a quick option to edit programs 
+shortcuts type entries.
+
+Screen Shot:
+
+.. image:: winstartupman.jpg
+       :alt: Windows Startup Manager
+
+.. index:: 
+       pair: Applications developed in little hours; Werdy Application
+
+Werdy Application
+=================
+
+URL : https://github.com/ring-lang/werdy
+
+Author : Magdy Ragab
+
+Quran application includes reading suras, searching and bookmarking.
+
+The applcation is provided for Windows, Linux and Android.
+
+.. image:: ringapps_shot1.png
+       :width: 300pt
+       :height: 300pt
+       :alt: Ring Application
+
+
+.. index:: 
+       pair: Applications developed in little hours; Samples in this book
+
+Samples in this book
+====================
+
+The next samples are developed in little hours and we will introduce them through this book.
+
+The next screen shot for he Ring Notepad application
+
+.. image:: ringnotepad_screenshot.png
+       :alt: Ring Application
+
+The next screen shot for the Cards Game
+
+.. image:: ringapps_shot4.png
+       :alt: Ring Application
+
+The next screen shot for the Cards Game (Android)
+
+.. image:: ringqt_shot52.jpg
+       :alt: Ring Application
+
+The next screen shot from the Web Development chapter
+
+.. image:: ex24_2.jpg
+       :alt: Ring Application
+
+The next screen shots for simple 2D Games that we will present in the Game Engine Chapter.
+
+Stars Fighter Game
+
+.. image:: starsfighter.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring Application
+
+Flappy Bird 3000 Game
+
+.. image:: flappybird.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring Application
+
+Super Man 2016 Game
+
+.. image:: superman.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring Application
+
+The next screen shot for the TicTacToe 3D Game
+
+Screen Shot:
+
+.. image:: tictactoe3d.png
+       :width: 450pt
+       :height: 350pt
+       :alt: TicTacToe 3D Game
+
+The next screen shot for the Gold Magic 800 Game
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 
+
+
+.. index:: 
+       pair: Applications developed in little hours; Innovative
+
+Innovative
+==========
+
+The language comes with better support for Natural Language Programming and 
+Declarative Programming. The innovation comes in supporting these paradigms 
+with new practical techniques on the top of Object-Oriented Programming and 
+Functional Programming. No need to know anything about (Compilers and Parsing). 
+You get the language constructs ready for use to create domain-specific languages 
+in a fraction of time. 
+
+Articles:-
+
+* Natural Language Programming Library : 
+https://www.codeproject.com/Articles/1200766/Using-the-Natural-Language-Programming-Library-NLP
+
+* Natural Language Programming : 
+https://www.codeproject.com/Articles/1138605/Natural-Language-Programming-in-the-Ring-Programmi
+
+* The Declarative Approach :
+https://www.codeproject.com/Articles/1222105/The-declarative-approach-of-the-Ring-programming-l
+
+* Syntax Flexibility : 
+https://www.codeproject.com/Articles/1137388/Syntax-Flexibility-in-the-Ring-Programming-Languag
+
+* The Ring Programming Language : 
+https://www.codeproject.com/Articles/1089887/The-Ring-Programming-Language
+
+
+.. image:: ringnatural.png
+       :alt: NLP in Ring
+
+.. index:: 
+       pair: Applications developed in little hours; Practical
+
+Practical
+=========
+
+Many of the Ring libraries (StdLib, WebLib, Natural Library, Games Engine, etc.) and 
+the Ring IDE (Ring Notepad, Form Designer, etc.) are written in the Ring language 
+itself. Ring is ready for use in production and increase the developers productivity. 
+
+Check the Form Designer source code : 
+https://github.com/ring-lang/ring/tree/master/applications/formdesigner
+
+.. image:: ringformdesigner.png
+       :alt: Ring Form Designer
+
+We can run the Form Designer as Android application!
+
+.. image:: formdesignerandroid.png
+       :alt: Form Designer - Android
\ No newline at end of file
diff --git a/docs/en/source/ringapps_shot1.png b/docs/en/source/ringapps_shot1.png
new file mode 100644 (file)
index 0000000..1b8a0f1
Binary files /dev/null and b/docs/en/source/ringapps_shot1.png differ
diff --git a/docs/en/source/ringapps_shot2.png b/docs/en/source/ringapps_shot2.png
new file mode 100644 (file)
index 0000000..7dec247
Binary files /dev/null and b/docs/en/source/ringapps_shot2.png differ
diff --git a/docs/en/source/ringapps_shot3.png b/docs/en/source/ringapps_shot3.png
new file mode 100644 (file)
index 0000000..f4dd5cc
Binary files /dev/null and b/docs/en/source/ringapps_shot3.png differ
diff --git a/docs/en/source/ringapps_shot4.png b/docs/en/source/ringapps_shot4.png
new file mode 100644 (file)
index 0000000..02b2a4e
Binary files /dev/null and b/docs/en/source/ringapps_shot4.png differ
diff --git a/docs/en/source/ringapps_shot5.jpg b/docs/en/source/ringapps_shot5.jpg
new file mode 100644 (file)
index 0000000..fc3be94
Binary files /dev/null and b/docs/en/source/ringapps_shot5.jpg differ
diff --git a/docs/en/source/ringapps_shot6.jpg b/docs/en/source/ringapps_shot6.jpg
new file mode 100644 (file)
index 0000000..786bf3c
Binary files /dev/null and b/docs/en/source/ringapps_shot6.jpg differ
diff --git a/docs/en/source/ringbeep.txt b/docs/en/source/ringbeep.txt
new file mode 100644 (file)
index 0000000..145c6a9
--- /dev/null
@@ -0,0 +1,94 @@
+.. index:: 
+     single: Create your first extension; Introduction
+
+===========================
+Create your first extension
+===========================
+
+In this chapter we will create RingBeep
+
+RingBeep is a simple extension for the beep() function in Windows API
+
+Just a simple example about creating extensions
+
+.. index:: 
+     pair: Create your first extension; Location
+
+Location
+========
+
+You will find this extension in the ring/extensions/ringbeep folder
+
+.. index:: 
+     pair: Create your first extension; Steps to create the extension
+
+Steps to create the extension
+=============================
+
+At first we write the configuration file in : ringbeep.cf
+
+.. code-block:: none
+
+       notepad ringbeep.cf
+
+The file ringbeep.cf contains
+
+.. code-block:: none
+
+       <code>
+       #include "windows.h"
+       </code>
+
+       int Beep(int dwFreq,int dwDuration)
+
+Then we run : gencode.bat to generate ringbeep.c
+
+.. code-block:: none
+
+       gencode.bat
+
+The gencode.bat contains the next command to call Ring Extensions Generator
+
+.. code-block:: none
+
+       ring ..\codegen\parsec.ring ringbeep.cf ringbeep.c
+
+Then we build the extension using :
+
+.. code-block:: none
+
+       buildvc.bat
+
+The file buildvc.bat contains the next commands to build the extension using Visual C/C++
+
+.. code-block:: none
+
+       cls
+       call ../../src/locatevc.bat
+       cl /c /DEBUG ringbeep.c -I"..\..\include"
+       link /DEBUG ringbeep.obj  ..\..\lib\ring.lib kernel32.lib /DLL /OUT:ringbeep.dll ^
+                                                               /SUBSYSTEM:CONSOLE,"5.01" 
+       del ringbeep.obj
+
+.. index:: 
+     pair: Create your first extension; Testing the extension
+
+Testing the extension
+=====================
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       loadlib("ringbeep.dll")
+
+       for f = 750 to 1000 step 50
+               beep(f,300)
+       next
+
diff --git a/docs/en/source/ringconsolecolorsfuncsdoc.txt b/docs/en/source/ringconsolecolorsfuncsdoc.txt
new file mode 100644 (file)
index 0000000..2045337
--- /dev/null
@@ -0,0 +1,42 @@
+.. index:: 
+     single: RingConsoleColors Functions Reference; Introduction
+
+=====================================
+RingConsoleColors Functions Reference
+=====================================
+
+* CC_FG_NONE
+* CC_FG_BLACK
+* CC_FG_DARK_RED
+* CC_FG_DARK_GREEN
+* CC_FG_DARK_YELLOW
+* CC_FG_DARK_BLUE
+* CC_FG_DARK_MAGENTA
+* CC_FG_DARK_CYAN
+* CC_FG_GRAY
+* CC_FG_DARK_GRAY
+* CC_FG_RED
+* CC_FG_GREEN
+* CC_FG_YELLOW
+* CC_FG_BLUE
+* CC_FG_MAGENTA
+* CC_FG_CYAN
+* CC_FG_WHITE
+* CC_BG_NONE
+* CC_BG_BLACK
+* CC_BG_DARK_RED
+* CC_BG_DARK_GREEN
+* CC_BG_DARK_YELLOW
+* CC_BG_DARK_BLUE
+* CC_BG_DARK_MAGENTA
+* CC_BG_DARK_CYAN
+* CC_BG_GRAY
+* CC_BG_DARK_GRAY
+* CC_BG_RED
+* CC_BG_GREEN
+* CC_BG_YELLOW
+* CC_BG_BLUE
+* CC_BG_MAGENTA
+* CC_BG_CYAN
+* CC_BG_WHITE
+* void cc_print(int color,const char *string)
diff --git a/docs/en/source/ringcube3d.png b/docs/en/source/ringcube3d.png
new file mode 100644 (file)
index 0000000..fec6ef3
Binary files /dev/null and b/docs/en/source/ringcube3d.png differ
diff --git a/docs/en/source/ringemacs.png b/docs/en/source/ringemacs.png
new file mode 100644 (file)
index 0000000..7ea4569
Binary files /dev/null and b/docs/en/source/ringemacs.png differ
diff --git a/docs/en/source/ringemb.txt b/docs/en/source/ringemb.txt
new file mode 100644 (file)
index 0000000..cd6736f
--- /dev/null
@@ -0,0 +1,335 @@
+.. index:: 
+       single: Embedding Ring in Ring; Embedding Ring in Ring
+
+======================
+Embedding Ring in Ring
+======================
+
+In this chapter we will learn about embedding Ring in Ring programs and applications.
+
+.. index:: 
+       pair: Embedding Ring in Ring; Embedding Ring in Ring without sharing the State
+
+Embedding Ring in Ring without sharing the State
+================================================
+
+From Ring 1.0 we already have functions for embedding Ring in the C language. Also we
+can execute Ring code inside Ring programs using the eval() function. In this release
+we provide functions for embedding Ring in Ring programs without sharing the state.
+
+Advantages:
+
+(1) Quick integration for Ring programs and applications together without conflicts.
+
+(2) Execute and run Ring code in safe environments that we can trace.
+
+Example:
+
+.. code-block:: ring
+
+       pState = ring_state_init()
+       ring_state_runcode(pState,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState,"x = 10")
+
+       pState2 = ring_state_init()
+       ring_state_runcode(pState2,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState2,"x = 20")
+
+       ring_state_runcode(pState,"see x +nl")
+       ring_state_runcode(pState2,"see x +nl")
+
+       v1 = ring_state_findvar(pState,"x")
+       v2 = ring_state_findvar(pState2,"x")
+
+       see v1[3] + nl
+       see V2[3] + nl
+
+       ring_state_delete(pState)
+       ring_state_delete(pState2)
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       Hello, World!
+       10
+       20
+       10
+       20
+
+.. index:: 
+       pair: Embedding Ring in Ring; Serial Execution of Programs
+
+Serial Execution of Programs
+============================
+
+We can execute application after another application using ring_state_main()
+
+Example:
+
+.. code-block:: ring
+
+       chdir(exefolder()+"/../applications/formdesigner")
+       ring_state_main('formdesigner.ring')
+       chdir(exefolder()+"/../applications/cards")
+       ring_state_main('cards.ring')
+
+.. index:: 
+       pair: Embedding Ring in Ring; ring_state_setvar()
+
+ring_state_setvar()
+===================
+
+Using ring_state_setvar() we can set variables value
+
+The value could be (String, Number, List or C Pointer)
+
+We need this function to quickly pass lists and C pointers to the Sub Ring Environment
+
+Syntax:
+
+.. code-block:: none
+
+       ring_state_setvar(oState,cVariableName,Value)
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       myapp   = null
+       win     = null
+
+       func main
+               myapp = new qApp {
+                       win = new qWidget() {
+                               setWindowTitle("Advanced Example on using ring_state_setvar()")
+                               move(100,100)
+                               resize(600,400)
+                               new qPushButton(win) {
+                                       setText("Test")
+                                       setClickEvent("Test()")
+                               }
+                               # We need this because using load 'guilib.ring' in
+                               # the sub environment
+                               # Will create timers by Qt and closing the window 
+                               # will not be enough to close the application
+                               oFilter = new qAllEvents(win)
+                               oFilter.setCloseEvent("myapp.quit()")
+                               win.installeventfilter(oFilter)
+                               show()
+                       }
+                       exec()
+               }
+
+       func test
+               pState = ring_state_init()
+               ring_state_runcode(pstate,"load 'guilib.ring'")
+               ring_state_runcode(pState,"x = NULL")
+               # Pass String
+                       ring_state_setvar(pState,"x","hello")
+                       ring_state_runcode(pState,"? x")
+               # Pass Number
+                       ring_state_setvar(pState,"x",100)
+                       ring_state_runcode(pState,"? x")
+               # Pass List
+                       ring_state_setvar(pState,"x",["one","two","three"])
+                       ring_state_runcode(pState,"? x")
+               # Pass Object
+               # We can't pass the Ring Object (win)
+               # Because Objects store pointers to the Class Information
+               # And the class is related to the Parent Ring Environment
+               # And the sub Ring environment can't access it
+               # But we can pass C pointers like win.pObject
+                       ring_state_setvar(pState,"x",win.pObject)
+               # Now we create the object again but using the same C pointer
+               # So we have access to the Same window in the parent Ring enviroment
+                       ring_state_runcode(pState,"
+                               new qWidget {
+                                       pObject = x
+                                       setwindowtitle('Message from the Sub Ring Environment')
+                               }
+                       ")
+               ring_state_delete(pState)
+
+
+.. index:: 
+       pair: Embedding Ring in Ring; ring_state_new() and ring_state_mainfile()
+
+ring_state_new() and ring_state_mainfile()
+==========================================
+
+Using ring_state_new() and ring_state_mainfile() we can run Ring programs from Ring programs
+
+But unlike ring_state_main(), Here we can control when to delete the Ring state!
+
+This is important when we run GUI programs from GUI programs
+
+Because they will share the GUI Library (RingQt), And In this case the caller will call
+
+qApp.Exec()
+
+So the sub program, will not stop and will return to the Main program
+
+Here deleting the State of the sub programs will lead to a problem when we run the sub program events
+
+So keeping the state is important for sub GUI programs hosted in GUI programs.
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       func main
+               new qApp {
+                       win = new qWidget() {
+                               setWindowTitle("Test ring_state_mainfile()")
+                               resize(400,400) move(100,100)
+                               btn = new qPushButton(Win) {
+                                       settext("test")
+                                       setclickevent("mytest()")
+                               }
+                               show()
+                       }
+                       exec()
+               }
+
+       func mytest
+               pState = ring_state_new()
+               ring_state_mainfile(pState,"runprogram.ring")
+               # Here we don't delete the state if we will run GUI application
+               # So we can run the GUI application events 
+                       // ring_state_delete(pState)
+
+If you will use this feature, remember to update the previous example based on your application needs
+
+So you can call ring_state_delete() at some point to avoid the memory leak!
+
+.. index:: 
+       pair: Embedding Ring in Ring; Runtime Errors when Embedding Ring in Ring
+
+Runtime Errors when Embedding Ring in Ring
+==========================================
+
+Starting from Ring 1.8 
+
+When embedding Ring in Ring, the error in the hosted environment will not close the host
+
+Example:
+
+.. code-block:: ring
+
+       ? "Start the test!" 
+
+       pState = ring_state_init()
+
+       ring_state_runcode(pState," ? 'Let us try having an error' ? x")
+
+       ring_state_delete(pState)
+
+       ? ""
+       ? "End of test!"
+
+Output:
+
+.. code-block:: none
+
+       Start the test!
+       Let us try having an error
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file Ring_EmbeddedCode
+       End of test!
+
+.. index:: 
+       pair: Embedding Ring in Ring; ring_state_filetokens() function
+
+ring_state_filetokens() function
+================================
+
+Starting from Ring 1.12 we have the ring_state_filetokens() function
+
+Using this function we can get all the tokens in the ring source code file.
+
+.. code-block:: ring
+
+       C_FILENAME      = "test_tokens.ring"
+       C_WIDTH         = 12
+
+       # write the file
+               write(C_FILENAME,'
+                               see "Hello, World!"
+                               ? 3*2+3
+                               Name = "Ring"
+                               ? Name
+       ')
+
+       # Token Type
+               C_KEYWORD       = 0
+               C_OPERATOR      = 1
+               C_LITERAL       = 2
+               C_NUMBER        = 3
+               C_IDENTIFIER    = 4
+               C_ENDLINE       = 5
+
+       # Keywords List
+       aKEYWORDS = ["IF","TO","OR","AND","NOT","FOR","NEW","FUNC", 
+       "FROM","NEXT","LOAD","ELSE","SEE","WHILE","OK","CLASS","RETURN","BUT", 
+       "END","GIVE","BYE","EXIT","TRY","CATCH","DONE","SWITCH","ON","OTHER","OFF", 
+       "IN","LOOP","PACKAGE","IMPORT","PRIVATE","STEP","DO","AGAIN","CALL","ELSEIF", 
+       "PUT","GET","CASE","DEF","ENDFUNC","ENDCLASS","ENDPACKAGE", 
+       "CHANGERINGKEYWORD","CHANGERINGOPERATOR","LOADSYNTAX"]
+
+       pState = ring_state_new()
+       aList = ring_state_filetokens(pState,C_FILENAME)
+       PrintTokens(aList)
+       ring_state_delete(pState)
+
+       func PrintTokens aList
+               for aToken in aList
+                       switch aToken[1]
+                       on C_KEYWORD 
+                               ? Width("Keyword",C_WIDTH) + ": "  + aKeywords[0+aToken[2]]
+                       on C_OPERATOR 
+                               ? Width("Operator",C_WIDTH)  + ": " + aToken[2]
+                       on C_LITERAL 
+                               ? Width("Literal",C_WIDTH)  + ": " + aToken[2]
+                       on C_NUMBER 
+                               ? Width("Number",C_WIDTH)  + ": " + aToken[2]
+                       on C_IDENTIFIER 
+                               ? Width("Identifier",C_WIDTH)  + ": " + aToken[2]
+                       on C_ENDLINE 
+                               ? "EndLine"
+                       other
+                               
+                       off
+               next
+
+       func Width cText,nWidth
+               return cText+copy(" ",nWidth-len(cText))
+
+Output:
+
+.. code-block:: none
+
+       EndLine
+       Keyword     : SEE
+       Literal     : Hello, World!
+       EndLine
+       Operator    : ?
+       Number      : 3
+       Operator    : *
+       Number      : 2
+       Operator    : +
+       Number      : 3
+       EndLine
+       Identifier  : name
+       Operator    : =
+       Literal     : Ring
+       EndLine
+       Operator    : ?
+       Identifier  : name
+       EndLine
diff --git a/docs/en/source/ringformdesigner.png b/docs/en/source/ringformdesigner.png
new file mode 100644 (file)
index 0000000..47bd6bb
Binary files /dev/null and b/docs/en/source/ringformdesigner.png differ
diff --git a/docs/en/source/ringfreeglutfuncsdoc.txt b/docs/en/source/ringfreeglutfuncsdoc.txt
new file mode 100644 (file)
index 0000000..f6e164c
--- /dev/null
@@ -0,0 +1,288 @@
+.. index:: 
+     single: RingFreeGLUT Functions Reference; Introduction
+
+================================
+RingFreeGLUT Functions Reference
+================================
+
+* GLUT_RGB
+* GLUT_RGBA
+* GLUT_INDEX
+* GLUT_SINGLE
+* GLUT_DOUBLE
+* GLUT_ACCUM
+* GLUT_ALPHA
+* GLUT_DEPTH
+* GLUT_STENCIL
+* GLUT_MULTISAMPLE
+* GLUT_STEREO
+* GLUT_LUMINANCE
+* GLUT_KEY_F1
+* GLUT_KEY_F2
+* GLUT_KEY_F3
+* GLUT_KEY_F4
+* GLUT_KEY_F5
+* GLUT_KEY_F6
+* GLUT_KEY_F7
+* GLUT_KEY_F8
+* GLUT_KEY_F9
+* GLUT_KEY_F10
+* GLUT_KEY_F11
+* GLUT_KEY_F12
+* GLUT_KEY_LEFT
+* GLUT_KEY_UP
+* GLUT_KEY_RIGHT
+* GLUT_KEY_DOWN
+* GLUT_KEY_PAGE_UP
+* GLUT_KEY_PAGE_DOWN
+* GLUT_KEY_HOME
+* GLUT_KEY_END
+* GLUT_KEY_INSERT
+* GLUT_LEFT_BUTTON
+* GLUT_MIDDLE_BUTTON
+* GLUT_RIGHT_BUTTON
+* GLUT_DOWN
+* GLUT_UP
+* GLUT_LEFT
+* GLUT_ENTERED
+* GLUT_MENU_NOT_IN_USE
+* GLUT_MENU_IN_USE
+* GLUT_NOT_VISIBLE
+* GLUT_VISIBLE
+* GLUT_HIDDEN
+* GLUT_FULLY_RETAINED
+* GLUT_PARTIALLY_RETAINED
+* GLUT_FULLY_COVERED
+* GLUT_WINDOW_X
+* GLUT_WINDOW_Y
+* GLUT_WINDOW_WIDTH
+* GLUT_WINDOW_HEIGHT
+* GLUT_WINDOW_BUFFER_SIZE
+* GLUT_WINDOW_STENCIL_SIZE
+* GLUT_WINDOW_DEPTH_SIZE
+* GLUT_WINDOW_RED_SIZE
+* GLUT_WINDOW_GREEN_SIZE
+* GLUT_WINDOW_BLUE_SIZE
+* GLUT_WINDOW_ALPHA_SIZE
+* GLUT_WINDOW_ACCUM_RED_SIZE
+* GLUT_WINDOW_ACCUM_GREEN_SIZE
+* GLUT_WINDOW_ACCUM_BLUE_SIZE
+* GLUT_WINDOW_ACCUM_ALPHA_SIZE
+* GLUT_WINDOW_DOUBLEBUFFER
+* GLUT_WINDOW_RGBA
+* GLUT_WINDOW_PARENT
+* GLUT_WINDOW_NUM_CHILDREN
+* GLUT_WINDOW_COLORMAP_SIZE
+* GLUT_WINDOW_NUM_SAMPLES
+* GLUT_WINDOW_STEREO
+* GLUT_WINDOW_CURSOR
+* GLUT_SCREEN_WIDTH
+* GLUT_SCREEN_HEIGHT
+* GLUT_SCREEN_WIDTH_MM
+* GLUT_SCREEN_HEIGHT_MM
+* GLUT_MENU_NUM_ITEMS
+* GLUT_DISPLAY_MODE_POSSIBLE
+* GLUT_INIT_WINDOW_X
+* GLUT_INIT_WINDOW_Y
+* GLUT_INIT_WINDOW_WIDTH
+* GLUT_INIT_WINDOW_HEIGHT
+* GLUT_INIT_DISPLAY_MODE
+* GLUT_ELAPSED_TIME
+* GLUT_WINDOW_FORMAT_ID
+* GLUT_HAS_KEYBOARD
+* GLUT_HAS_MOUSE
+* GLUT_HAS_SPACEBALL
+* GLUT_HAS_DIAL_AND_BUTTON_BOX
+* GLUT_HAS_TABLET
+* GLUT_NUM_MOUSE_BUTTONS
+* GLUT_NUM_SPACEBALL_BUTTONS
+* GLUT_NUM_BUTTON_BOX_BUTTONS
+* GLUT_NUM_DIALS
+* GLUT_NUM_TABLET_BUTTONS
+* GLUT_DEVICE_IGNORE_KEY_REPEAT
+* GLUT_DEVICE_KEY_REPEAT
+* GLUT_HAS_JOYSTICK
+* GLUT_OWNS_JOYSTICK
+* GLUT_JOYSTICK_BUTTONS
+* GLUT_JOYSTICK_AXES
+* GLUT_JOYSTICK_POLL_RATE
+* GLUT_OVERLAY_POSSIBLE
+* GLUT_LAYER_IN_USE
+* GLUT_HAS_OVERLAY
+* GLUT_TRANSPARENT_INDEX
+* GLUT_NORMAL_DAMAGED
+* GLUT_OVERLAY_DAMAGED
+* GLUT_VIDEO_RESIZE_POSSIBLE
+* GLUT_VIDEO_RESIZE_IN_USE
+* GLUT_VIDEO_RESIZE_X_DELTA
+* GLUT_VIDEO_RESIZE_Y_DELTA
+* GLUT_VIDEO_RESIZE_WIDTH_DELTA
+* GLUT_VIDEO_RESIZE_HEIGHT_DELTA
+* GLUT_VIDEO_RESIZE_X
+* GLUT_VIDEO_RESIZE_Y
+* GLUT_VIDEO_RESIZE_WIDTH
+* GLUT_VIDEO_RESIZE_HEIGHT
+* GLUT_NORMAL
+* GLUT_OVERLAY
+* GLUT_ACTIVE_SHIFT
+* GLUT_ACTIVE_CTRL
+* GLUT_ACTIVE_ALT
+* GLUT_CURSOR_RIGHT_ARROW
+* GLUT_CURSOR_LEFT_ARROW
+* GLUT_CURSOR_INFO
+* GLUT_CURSOR_DESTROY
+* GLUT_CURSOR_HELP
+* GLUT_CURSOR_CYCLE
+* GLUT_CURSOR_SPRAY
+* GLUT_CURSOR_WAIT
+* GLUT_CURSOR_TEXT
+* GLUT_CURSOR_CROSSHAIR
+* GLUT_CURSOR_UP_DOWN
+* GLUT_CURSOR_LEFT_RIGHT
+* GLUT_CURSOR_TOP_SIDE
+* GLUT_CURSOR_BOTTOM_SIDE
+* GLUT_CURSOR_LEFT_SIDE
+* GLUT_CURSOR_RIGHT_SIDE
+* GLUT_CURSOR_TOP_LEFT_CORNER
+* GLUT_CURSOR_TOP_RIGHT_CORNER
+* GLUT_CURSOR_BOTTOM_RIGHT_CORNER
+* GLUT_CURSOR_BOTTOM_LEFT_CORNER
+* GLUT_CURSOR_INHERIT
+* GLUT_CURSOR_NONE
+* GLUT_CURSOR_FULL_CROSSHAIR
+* GLUT_RED
+* GLUT_GREEN
+* GLUT_BLUE
+* GLUT_KEY_REPEAT_OFF
+* GLUT_KEY_REPEAT_ON
+* GLUT_KEY_REPEAT_DEFAULT
+* GLUT_JOYSTICK_BUTTON_A
+* GLUT_JOYSTICK_BUTTON_B
+* GLUT_JOYSTICK_BUTTON_C
+* GLUT_JOYSTICK_BUTTON_D
+* GLUT_GAME_MODE_ACTIVE
+* GLUT_GAME_MODE_POSSIBLE
+* GLUT_GAME_MODE_WIDTH
+* GLUT_GAME_MODE_HEIGHT
+* GLUT_GAME_MODE_PIXEL_DEPTH
+* GLUT_GAME_MODE_REFRESH_RATE
+* GLUT_GAME_MODE_DISPLAY_CHANGED
+* GLUT_STROKE_ROMAN
+* GLUT_STROKE_MONO_ROMAN
+* GLUT_BITMAP_9_BY_15
+* GLUT_BITMAP_8_BY_13
+* GLUT_BITMAP_TIMES_ROMAN_10
+* GLUT_BITMAP_TIMES_ROMAN_24
+* GLUT_BITMAP_HELVETICA_10
+* GLUT_BITMAP_HELVETICA_12
+* GLUT_BITMAP_HELVETICA_18
+* void glutInit(void)
+* void glutDisplayFunc(const char *)
+* void glutReshapeFunc(const char *)
+* int glutEventWidth(void)
+* int glutEventHeight(void)
+* void glutIdleFunc(const char *)
+* void glutKeyboardFunc(const char *)
+* void glutSpecialFunc(const char *)
+* void glutSpecialUpFunc(const char *)
+* void glutMouseFunc(const char *)
+* void glutMotionFunc(const char *)
+* int glutCreateMenu(const char *)
+* void glutMenuStatusFunc(const char *)
+* int glutEventKey(void)
+* int glutEventX(void)
+* int glutEventY(void)
+* int glutEventButton(void)
+* int glutEventState(void)
+* int glutEventValue(void)
+* int glutEventStatus(void)
+* void test_draw(void)
+* void glutInitWindowPosition(int x, int y)
+* void glutInitWindowSize(int width, int height)
+* void glutInitDisplayMode(unsigned displayMode)
+* void glutInitDisplayString(const char * displayMode)
+* int glutCreateWindow(const char * title)
+* int glutCreateSubWindow(int window, int x, int y, int width, int height)
+* void glutDestroyWindow(int window)
+* void glutSetWindow(int window)
+* int glutGetWindow(void)
+* void glutSetWindowTitle(const char * title)
+* void glutSetIconTitle(const char * title)
+* void glutReshapeWindow(int width, int height)
+* void glutPositionWindow(int x, int y)
+* void glutShowWindow(void)
+* void glutHideWindow(void)
+* void glutIconifyWindow(void)
+* void glutPushWindow(void)
+* void glutPopWindow(void)
+* void glutFullScreen(void)
+* void glutPostWindowRedisplay(int window)
+* void glutPostRedisplay(void)
+* void glutSwapBuffers(void)
+* void glutWarpPointer(int x, int y)
+* void glutSetCursor(int cursor)
+* void glutEstablishOverlay(void)
+* void glutRemoveOverlay(void)
+* void glutUseLayer(GLenum layer)
+* void glutPostOverlayRedisplay(void)
+* void glutPostWindowOverlayRedisplay(int window)
+* void glutShowOverlay(void)
+* void glutHideOverlay(void)
+* void glutDestroyMenu(int menu)
+* int glutGetMenu(void)
+* void glutSetMenu(int menu)
+* void glutAddMenuEntry(const char * label, int value)
+* void glutAddSubMenu(const char * label, int subMenu)
+* void glutChangeToMenuEntry(int item, const char * label, int value)
+* void glutChangeToSubMenu(int item, const char * label, int value)
+* void glutRemoveMenuItem(int item)
+* void glutAttachMenu(int button)
+* void glutDetachMenu(int button)
+* int glutGet(GLenum query)
+* int glutDeviceGet(GLenum query)
+* int glutGetModifiers(void)
+* int glutLayerGet(GLenum query)
+* void glutBitmapCharacter(void *font, int character)
+* int glutBitmapWidth(void *font, int character)
+* void glutStrokeCharacter(void *font, int character)
+* int glutStrokeWidth(void *font, int character)
+* GLfloat glutStrokeWidthf(void *font, int character)
+* int glutBitmapLength(void *font, char * string)
+* int glutStrokeLength(void *font, char * string)
+* GLfloat glutStrokeLengthf(void *font, char *string)
+* void glutWireCube(double size)
+* void glutSolidCube(double size)
+* void glutWireSphere(double radius, GLint slices, GLint stacks)
+* void glutSolidSphere(double radius, GLint slices, GLint stacks)
+* void glutWireCone(double base, double height, GLint slices, GLint stacks)
+* void glutSolidCone(double base, double height, GLint slices, GLint stacks)
+* void glutWireTorus(double innerRadius, double outerRadius, GLint sides, GLint rings)
+* void glutSolidTorus(double innerRadius, double outerRadius, GLint sides, GLint rings)
+* void glutWireDodecahedron(void)
+* void glutSolidDodecahedron(void)
+* void glutWireOctahedron(void)
+* void glutSolidOctahedron(void)
+* void glutWireTetrahedron(void)
+* void glutSolidTetrahedron(void)
+* void glutWireIcosahedron(void)
+* void glutSolidIcosahedron(void)
+* void glutWireTeapot(double size)
+* void glutSolidTeapot(double size)
+* void glutGameModeString(const char * string)
+* int glutEnterGameMode(void)
+* void glutLeaveGameMode(void)
+* int glutGameModeGet(GLenum query)
+* int glutVideoResizeGet(GLenum query)
+* void glutSetupVideoResizing(void)
+* void glutStopVideoResizing(void)
+* void glutVideoResize(int x, int y, int width, int height)
+* void glutVideoPan(int x, int y, int width, int height)
+* void glutSetColor(int color, GLfloat red, GLfloat green, GLfloat blue)
+* GLfloat glutGetColor(int color, int component)
+* void glutCopyColormap(int window)
+* void glutIgnoreKeyRepeat(int ignore)
+* void glutSetKeyRepeat(int repeatMode)
+* void glutForceJoystickFunc(void)
+* int glutExtensionSupported(const char * extension)
+* void glutReportErrors(void)
+* void glutMainLoop(void)
diff --git a/docs/en/source/ringincloud.png b/docs/en/source/ringincloud.png
new file mode 100644 (file)
index 0000000..7e37d21
Binary files /dev/null and b/docs/en/source/ringincloud.png differ
diff --git a/docs/en/source/ringinvscode.png b/docs/en/source/ringinvscode.png
new file mode 100644 (file)
index 0000000..f12d24d
Binary files /dev/null and b/docs/en/source/ringinvscode.png differ
diff --git a/docs/en/source/ringlibcurlfuncsdoc.txt b/docs/en/source/ringlibcurlfuncsdoc.txt
new file mode 100644 (file)
index 0000000..400ca4b
--- /dev/null
@@ -0,0 +1,285 @@
+.. index:: 
+     single: RingLibCurl Functions Reference; Introduction
+
+===============================
+RingLibCurl Functions Reference
+===============================
+
+* CURLOPT_VERBOSE
+* CURLOPT_HEADER
+* CURLOPT_NOPROGRESS
+* CURLOPT_NOSIGNAL
+* CURLOPT_WILDCARDMATCH
+* CURLOPT_WRITEFUNCTION
+* CURLOPT_WRITEDATA
+* CURLOPT_READFUNCTION
+* CURLOPT_READDATA
+* CURLOPT_IOCTLFUNCTION
+* CURLOPT_IOCTLDATA
+* CURLOPT_SEEKFUNCTION
+* CURLOPT_SEEKDATA
+* CURLOPT_SOCKOPTFUNCTION
+* CURLOPT_SOCKOPTDATA
+* CURLOPT_OPENSOCKETFUNCTION
+* CURLOPT_OPENSOCKETDATA
+* CURLOPT_CLOSESOCKETFUNCTION
+* CURLOPT_CLOSESOCKETDATA
+* CURLOPT_PROGRESSFUNCTION
+* CURLOPT_PROGRESSDATA
+* CURLOPT_HEADERFUNCTION
+* CURLOPT_HEADERDATA
+* CURLOPT_DEBUGFUNCTION
+* CURLOPT_DEBUGDATA
+* CURLOPT_SSL_CTX_FUNCTION
+* CURLOPT_SSL_CTX_DATA
+* CURLOPT_CONV_TO_NETWORK_FUNCTION
+* CURLOPT_CONV_FROM_NETWORK_FUNCTION
+* CURLOPT_CONV_FROM_UTF8_FUNCTION
+* CURLOPT_INTERLEAVEFUNCTION
+* CURLOPT_INTERLEAVEDATA
+* CURLOPT_CHUNK_BGN_FUNCTION
+* CURLOPT_CHUNK_END_FUNCTION
+* CURLOPT_CHUNK_DATA
+* CURLOPT_FNMATCH_FUNCTION
+* CURLOPT_FNMATCH_DATA
+* CURLOPT_ERRORBUFFER
+* CURLOPT_STDERR
+* CURLOPT_FAILONERROR
+* CURLOPT_URL
+* CURLOPT_PROTOCOLS
+* CURLOPT_REDIR_PROTOCOLS
+* CURLOPT_PROXY
+* CURLOPT_PROXYPORT
+* CURLOPT_PROXYTYPE
+* CURLOPT_NOPROXY
+* CURLOPT_HTTPPROXYTUNNEL
+* CURLOPT_SOCKS5_GSSAPI_SERVICE
+* CURLOPT_SOCKS5_GSSAPI_NEC
+* CURLOPT_INTERFACE
+* CURLOPT_LOCALPORT
+* CURLOPT_LOCALPORTRANGE
+* CURLOPT_DNS_CACHE_TIMEOUT
+* CURLOPT_DNS_USE_GLOBAL_CACHE
+* CURLOPT_BUFFERSIZE
+* CURLOPT_PORT
+* CURLOPT_TCP_NODELAY
+* CURLOPT_ADDRESS_SCOPE
+* CURLOPT_NETRC
+* CURLOPT_NETRC_FILE
+* CURLOPT_USERPWD
+* CURLOPT_PROXYUSERPWD
+* CURLOPT_USERNAME
+* CURLOPT_PASSWORD
+* CURLOPT_PROXYUSERNAME
+* CURLOPT_PROXYPASSWORD
+* CURLOPT_HTTPAUTH
+* CURLOPT_TLSAUTH_USERNAME
+* CURLOPT_TLSAUTH_PASSWORD
+* CURLOPT_TLSAUTH_TYPE
+* CURLOPT_PROXYAUTH
+* CURLOPT_AUTOREFERER
+* CURLOPT_ACCEPT_ENCODING
+* CURLOPT_TRANSFER_ENCODING
+* CURLOPT_FOLLOWLOCATION
+* CURLOPT_UNRESTRICTED_AUTH
+* CURLOPT_MAXREDIRS
+* CURLOPT_POSTREDIR
+* CURLOPT_PUT
+* CURLOPT_POST
+* CURLOPT_POSTFIELDS
+* CURLOPT_POSTFIELDSIZE
+* CURLOPT_POSTFIELDSIZE_LARGE
+* CURLOPT_COPYPOSTFIELDS
+* CURLOPT_HTTPPOST
+* CURLOPT_REFERER
+* CURLOPT_USERAGENT
+* CURLOPT_HTTPHEADER
+* CURLOPT_HTTP200ALIASES
+* CURLOPT_COOKIE
+* CURLOPT_COOKIEFILE
+* CURLOPT_COOKIEJAR
+* CURLOPT_COOKIESESSION
+* CURLOPT_COOKIELIST
+* CURLOPT_HTTPGET
+* CURLOPT_HTTP_VERSION
+* CURLOPT_IGNORE_CONTENT_LENGTH
+* CURLOPT_HTTP_CONTENT_DECODING
+* CURLOPT_HTTP_TRANSFER_DECODING
+* CURLOPT_MAIL_FROM
+* CURLOPT_MAIL_RCPT
+* CURLOPT_TFTP_BLKSIZE
+* CURLOPT_FTPPORT
+* CURLOPT_QUOTE
+* CURLOPT_POSTQUOTE
+* CURLOPT_PREQUOTE
+* CURLOPT_APPEND
+* CURLOPT_FTP_USE_EPRT
+* CURLOPT_FTP_USE_EPSV
+* CURLOPT_FTP_USE_PRET
+* CURLOPT_FTP_CREATE_MISSING_DIRS
+* CURLOPT_FTP_RESPONSE_TIMEOUT
+* CURLOPT_FTP_ALTERNATIVE_TO_USER
+* CURLOPT_FTP_SKIP_PASV_IP
+* CURLOPT_FTPSSLAUTH
+* CURLOPT_FTP_SSL_CCC
+* CURLOPT_FTP_ACCOUNT
+* CURLOPT_FTP_FILEMETHOD
+* CURLOPT_RTSP_REQUEST
+* CURLOPT_RTSP_SESSION_ID
+* CURLOPT_RTSP_STREAM_URI
+* CURLOPT_RTSP_TRANSPORT
+* CURLOPT_RTSP_CLIENT_CSEQ
+* CURLOPT_RTSP_SERVER_CSEQ
+* CURLOPT_TRANSFERTEXT
+* CURLOPT_PROXY_TRANSFER_MODE
+* CURLOPT_CRLF
+* CURLOPT_RANGE
+* CURLOPT_RESUME_FROM
+* CURLOPT_RESUME_FROM_LARGE
+* CURLOPT_CUSTOMREQUEST
+* CURLOPT_FILETIME
+* CURLOPT_DIRLISTONLY
+* CURLOPT_NOBODY
+* CURLOPT_INFILESIZE
+* CURLOPT_INFILESIZE_LARGE
+* CURLOPT_UPLOAD
+* CURLOPT_MAXFILESIZE
+* CURLOPT_MAXFILESIZE_LARGE
+* CURLOPT_TIMECONDITION
+* CURLOPT_TIMEVALUE
+* CURLOPT_TIMEOUT
+* CURLOPT_TIMEOUT_MS
+* CURLOPT_LOW_SPEED_LIMIT
+* CURLOPT_LOW_SPEED_TIME
+* CURLOPT_MAX_SEND_SPEED_LARGE
+* CURLOPT_MAX_RECV_SPEED_LARGE
+* CURLOPT_MAXCONNECTS
+* CURLOPT_FRESH_CONNECT
+* CURLOPT_FORBID_REUSE
+* CURLOPT_CONNECTTIMEOUT
+* CURLOPT_CONNECTTIMEOUT_MS
+* CURLOPT_IPRESOLVE
+* CURLOPT_CONNECT_ONLY
+* CURLOPT_USE_SSL
+* CURLOPT_RESOLVE
+* CURLOPT_SSLCERT
+* CURLOPT_SSLCERTTYPE
+* CURLOPT_SSLKEY
+* CURLOPT_SSLKEYTYPE
+* CURLOPT_KEYPASSWD
+* CURLOPT_SSLENGINE
+* CURLOPT_SSLENGINE_DEFAULT
+* CURLOPT_SSLVERSION
+* CURLOPT_SSL_VERIFYHOST
+* CURLOPT_SSL_VERIFYPEER
+* CURLOPT_CAINFO
+* CURLOPT_ISSUERCERT
+* CURLOPT_CAPATH
+* CURLOPT_CRLFILE
+* CURLOPT_CERTINFO
+* CURLOPT_RANDOM_FILE
+* CURLOPT_EGDSOCKET
+* CURLOPT_SSL_CIPHER_LIST
+* CURLOPT_SSL_SESSIONID_CACHE
+* CURLOPT_KRBLEVEL
+* CURLOPT_GSSAPI_DELEGATION
+* CURLOPT_SSH_AUTH_TYPES
+* CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+* CURLOPT_SSH_PUBLIC_KEYFILE
+* CURLOPT_SSH_PRIVATE_KEYFILE
+* CURLOPT_SSH_KNOWNHOSTS
+* CURLOPT_SSH_KEYFUNCTION
+* CURLOPT_SSH_KEYDATA
+* CURLOPT_PRIVATE
+* CURLOPT_SHARE
+* CURLOPT_NEW_FILE_PERMS
+* CURLOPT_NEW_DIRECTORY_PERMS
+* CURLOPT_TELNETOPTIONS
+* CURLE_OK
+* CURLE_UNKNOWN_OPTION
+* CURLE_NOT_BUILT_IN
+* CURLINFO_EFFECTIVE_URL
+* CURLINFO_RESPONSE_CODE
+* CURLINFO_HTTP_CONNECTCODE
+* CURLINFO_FILETIME
+* CURLINFO_TOTAL_TIME
+* CURLINFO_NAMELOOKUP_TIME
+* CURLINFO_CONNECT_TIME
+* CURLINFO_APPCONNECT_TIME
+* CURLINFO_PRETRANSFER_TIME
+* CURLINFO_STARTTRANSFER_TIME
+* CURLINFO_REDIRECT_TIME
+* CURLINFO_REDIRECT_COUNT
+* CURLINFO_REDIRECT_URL
+* CURLINFO_SIZE_UPLOAD
+* CURLINFO_SIZE_DOWNLOAD
+* CURLINFO_SPEED_DOWNLOAD
+* CURLINFO_SPEED_UPLOAD
+* CURLINFO_HEADER_SIZE
+* CURLINFO_REQUEST_SIZE
+* CURLINFO_SSL_VERIFYRESULT
+* CURLINFO_SSL_ENGINES
+* CURLINFO_CONTENT_LENGTH_DOWNLOAD
+* CURLINFO_CONTENT_LENGTH_UPLOAD
+* CURLINFO_CONTENT_TYPE
+* CURLINFO_PRIVATE
+* CURLINFO_HTTPAUTH_AVAIL
+* CURLINFO_PROXYAUTH_AVAIL
+* CURLINFO_OS_ERRNO
+* CURLINFO_NUM_CONNECTS
+* CURLINFO_PRIMARY_IP
+* CURLINFO_PRIMARY_PORT
+* CURLINFO_LOCAL_IP
+* CURLINFO_LOCAL_PORT
+* CURLINFO_COOKIELIST
+* CURLINFO_LASTSOCKET
+* CURLINFO_FTP_ENTRY_PATH
+* CURLINFO_CERTINFO
+* CURLINFO_CONDITION_UNMET
+* CURLINFO_RTSP_SESSION_ID
+* CURLINFO_RTSP_CLIENT_CSEQ
+* CURLINFO_RTSP_SERVER_CSEQ
+* CURLINFO_RTSP_CSEQ_RECV
+* CURLFORM_COPYNAME
+* CURLFORM_PTRNAME
+* CURLFORM_COPYCONTENTS
+* CURLFORM_PTRCONTENTS
+* CURLFORM_CONTENTSLENGTH
+* CURLFORM_FILECONTENT
+* CURLFORM_FILE
+* CURLFORM_CONTENTTYPE
+* CURLFORM_FILENAME
+* CURLFORM_BUFFER
+* CURLFORM_BUFFERPTR
+* CURLFORM_BUFFERLENGTH
+* CURLFORM_STREAM
+* CURLFORM_ARRAY
+* CURLFORM_CONTENTHEADER
+* CURL *curl_easy_init(void)
+* void curl_easy_cleanup(CURL * handle )
+* CURLcode curl_easy_setopt_1(CURL *handle, CURLoption option, int)
+* CURLcode curl_easy_setopt_2(CURL *handle, CURLoption option, const char *)
+* CURLcode curl_easy_setopt_3(CURL *handle, CURLoption option, void *)
+* CURLcode curl_easy_setopt_4(CURL *handle, CURLoption option, CURLLIST *)
+* CURLcode curl_easy_perform(CURL * easy_handle )
+* String *curl_easy_perform_silent(CURL * easy_handle )
+* CURLcode curl_easy_getinfo_1(CURL *handle, CURLINFO info, char **urlp)
+* CURLcode curl_easy_getinfo_2(CURL *handle, CURLINFO info, long *codep)
+* CURLcode curl_easy_getinfo_3(CURL *handle, CURLINFO info, double *timep)
+* CURLcode curl_easy_getinfo_4(CURL *handle, CURLINFO info, CURLLIST **engine_list)
+* CURLcode curl_easy_getinfo_5(CURL *handle, CURLINFO info, struct curl_certinfo *chainp)
+* CURLcode curl_easy_getinfo_6(CURL *handle, CURLINFO info, struct curl_tlssessioninfo **session)
+* char *curl_version(void)
+* time_t curl_getdate(char * datestring , time_t *now )
+* CURLFORMcode curl_formadd_1(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, const char *, CURLformoption)
+* CURLFORMcode curl_formadd_2(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, const char *,CURLformoption, const char *, CURLformoption)
+* CURLFORMcode curl_formadd_3(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, void *, CURLformoption)
+* CURLFORMcode curl_formadd_4(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, void *,CURLformoption, long , CURLformoption)
+* CURLFORMcode curl_formadd_5(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, void *,CURLformoption, long , CURLformoption, const char* , CURLformoption)
+* CURLFORMcode curl_formadd_6(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, const char *,CURLformoption, void * , CURLformoption, long , CURLformoption)
+* CURLFORMcode curl_formadd_7(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption,  struct curl_forms [], CURLformoption)
+* void curl_formfree(struct curl_httppost * form)
+* CURLLIST *curl_slist_append(CURLLIST * list, const char * string )
+* void curl_slist_free_all(CURLLIST * list)
+* char *curl_easy_escape( CURL * curl , const char * string , int length )
+* char *curl_easy_unescape( CURL * curl , const char * url , int inlength , int * outlength )
diff --git a/docs/en/source/ringlibsdlandroid_shot1.png b/docs/en/source/ringlibsdlandroid_shot1.png
new file mode 100644 (file)
index 0000000..d1b733f
Binary files /dev/null and b/docs/en/source/ringlibsdlandroid_shot1.png differ
diff --git a/docs/en/source/ringlibsdlandroid_shot2.png b/docs/en/source/ringlibsdlandroid_shot2.png
new file mode 100644 (file)
index 0000000..8439b7a
Binary files /dev/null and b/docs/en/source/ringlibsdlandroid_shot2.png differ
diff --git a/docs/en/source/ringlibsdlfuncsdoc.txt b/docs/en/source/ringlibsdlfuncsdoc.txt
new file mode 100644 (file)
index 0000000..04d5a3f
--- /dev/null
@@ -0,0 +1,875 @@
+.. index:: \r
+     single: RingLibSDL Functions Reference; Introduction\r
+\r
+==============================\r
+RingLibSDL Functions Reference\r
+==============================\r
+\r
+* MIX_DEFAULT_FORMAT\r
+* SDL_QUIT\r
+* SDL_BUTTON_LEFT\r
+* SDL_BUTTON_MIDDLE\r
+* SDL_BUTTON_RIGHT\r
+* SDL_PRESSED\r
+* SDL_RELEASED\r
+* SDL_APP_TERMINATING\r
+* SDL_APP_LOWMEMORY\r
+* SDL_APP_WILLENTERBACKGROUND\r
+* SDL_APP_DIDENTERBACKGROUND\r
+* SDL_APP_WILLENTERFOREGROUND\r
+* SDL_APP_DIDENTERFOREGROUND\r
+* SDL_WINDOWEVENT\r
+* SDL_SYSWMEVENT\r
+* SDL_KEYDOWN\r
+* SDL_KEYUP\r
+* SDL_TEXTEDITING\r
+* SDL_TEXTINPUT\r
+* SDL_MOUSEMOTION\r
+* SDL_MOUSEBUTTONDOWN\r
+* SDL_MOUSEBUTTONUP\r
+* SDL_MOUSEWHEEL\r
+* SDL_JOYAXISMOTION\r
+* SDL_JOYBALLMOTION\r
+* SDL_JOYHATMOTION\r
+* SDL_JOYBUTTONDOWN\r
+* SDL_JOYBUTTONUP\r
+* SDL_JOYDEVICEADDED\r
+* SDL_JOYDEVICEREMOVED\r
+* SDL_CONTROLLERAXISMOTION\r
+* SDL_CONTROLLERBUTTONDOWN\r
+* SDL_CONTROLLERBUTTONUP\r
+* SDL_CONTROLLERDEVICEADDED\r
+* SDL_CONTROLLERDEVICEREMOVED\r
+* SDL_CONTROLLERDEVICEREMAPPED\r
+* SDL_FINGERDOWN\r
+* SDL_FINGERUP\r
+* SDL_FINGERMOTION\r
+* SDL_DOLLARGESTURE\r
+* SDL_DOLLARRECORD\r
+* SDL_MULTIGESTURE\r
+* SDL_CLIPBOARDUPDATE\r
+* SDL_DROPFILE\r
+* SDL_RENDER_TARGETS_RESET\r
+* SDL_USEREVENT\r
+* SDL_LASTEVENT\r
+* SDL_NET_MAJOR_VERSION\r
+* SDL_NET_MINOR_VERSION\r
+* SDL_NET_PATCHLEVEL\r
+* INADDR_ANY\r
+* INADDR_NONE\r
+* INADDR_BROADCAST\r
+* SDLNET_MAX_UDPCHANNELS\r
+* SDLNET_MAX_UDPADDRESSES\r
+* SDLK_0\r
+* SDLK_1\r
+* SDLK_2\r
+* SDLK_3\r
+* SDLK_4\r
+* SDLK_5\r
+* SDLK_6\r
+* SDLK_7\r
+* SDLK_8\r
+* SDLK_9\r
+* SDLK_a\r
+* SDLK_AC_BACK\r
+* SDLK_AC_BOOKMARKS\r
+* SDLK_AC_FORWARD\r
+* SDLK_AC_HOME\r
+* SDLK_AC_REFRESH\r
+* SDLK_AC_SEARCH\r
+* SDLK_AC_STOP\r
+* SDLK_AGAIN\r
+* SDLK_ALTERASE\r
+* SDLK_QUOTE\r
+* SDLK_APPLICATION\r
+* SDLK_AUDIOMUTE\r
+* SDLK_AUDIONEXT\r
+* SDLK_AUDIOPLAY\r
+* SDLK_AUDIOPREV\r
+* SDLK_BRIGHTNESSDOWN\r
+* SDLK_BRIGHTNESSUP\r
+* SDLK_c\r
+* SDLK_CALCULATOR\r
+* SDLK_CANCEL\r
+* SDLK_CAPSLOCK\r
+* SDLK_CLEAR\r
+* SDLK_CLEARAGAIN\r
+* SDLK_COMMA\r
+* SDLK_COMPUTER\r
+* SDLK_COPY\r
+* SDLK_CRSEL\r
+* SDLK_CURRENCYSUBUNIT\r
+* SDLK_CURRENCYUNIT\r
+* SDLK_CUT\r
+* SDLK_d\r
+* SDLK_DECIMALSEPARATOR\r
+* SDLK_DELETE\r
+* SDLK_DISPLAYSWITCH\r
+* SDLK_DOWN\r
+* SDLK_e\r
+* SDLK_EJECT\r
+* SDLK_END\r
+* SDLK_EQUALS\r
+* SDLK_ESCAPE\r
+* SDLK_EXECUTE\r
+* SDLK_EXSEL\r
+* SDLK_f\r
+* SDLK_F1\r
+* SDLK_F10\r
+* SDLK_F11\r
+* SDLK_F12\r
+* SDLK_F13\r
+* SDLK_F14\r
+* SDLK_F15\r
+* SDLK_F16\r
+* SDLK_F17\r
+* SDLK_F18\r
+* SDLK_F19\r
+* SDLK_F2\r
+* SDLK_F20\r
+* SDLK_F21\r
+* SDLK_F22\r
+* SDLK_F23\r
+* SDLK_F24\r
+* SDLK_F3\r
+* SDLK_F4\r
+* SDLK_F5\r
+* SDLK_F6\r
+* SDLK_F7\r
+* SDLK_F8\r
+* SDLK_F9\r
+* SDLK_FIND\r
+* SDLK_g\r
+* SDLK_BACKQUOTE\r
+* SDLK_h\r
+* SDLK_HELP\r
+* SDLK_HOME\r
+* SDLK_i\r
+* SDLK_INSERT\r
+* SDLK_j\r
+* SDLK_k\r
+* SDLK_KBDILLUMDOWN\r
+* SDLK_KBDILLUMTOGGLE\r
+* SDLK_KBDILLUMUP\r
+* SDLK_KP_0\r
+* SDLK_KP_00\r
+* SDLK_KP_000\r
+* SDLK_KP_1\r
+* SDLK_KP_2\r
+* SDLK_KP_3\r
+* SDLK_KP_4\r
+* SDLK_KP_5\r
+* SDLK_KP_6\r
+* SDLK_KP_7\r
+* SDLK_KP_8\r
+* SDLK_KP_9\r
+* SDLK_KP_A\r
+* SDLK_KP_AMPERSAND\r
+* SDLK_KP_AT\r
+* SDLK_KP_B\r
+* SDLK_KP_BACKSPACE\r
+* SDLK_KP_BINARY\r
+* SDLK_KP_C\r
+* SDLK_KP_CLEAR\r
+* SDLK_KP_CLEARENTRY\r
+* SDLK_KP_COLON\r
+* SDLK_KP_COMMA\r
+* SDLK_KP_D\r
+* SDLK_KP_DBLAMPERSAND\r
+* SDLK_KP_DBLVERTICALBAR\r
+* SDLK_KP_DECIMAL\r
+* SDLK_KP_DIVIDE\r
+* SDLK_KP_E\r
+* SDLK_KP_ENTER\r
+* SDLK_KP_EQUALS\r
+* SDLK_KP_EQUALSAS400\r
+* SDLK_KP_EXCLAM\r
+* SDLK_KP_F\r
+* SDLK_KP_GREATER\r
+* SDLK_KP_HASH\r
+* SDLK_KP_HEXADECIMAL\r
+* SDLK_KP_LEFTBRACE\r
+* SDLK_KP_LEFTPAREN\r
+* SDLK_KP_LESS\r
+* SDLK_KP_MEMADD\r
+* SDLK_KP_MEMCLEAR\r
+* SDLK_KP_MEMDIVIDE\r
+* SDLK_KP_MEMMULTIPLY\r
+* SDLK_KP_MEMRECALL\r
+* SDLK_KP_MEMSTORE\r
+* SDLK_KP_MEMSUBTRACT\r
+* SDLK_KP_MINUS\r
+* SDLK_KP_MULTIPLY\r
+* SDLK_KP_OCTAL\r
+* SDLK_KP_PERCENT\r
+* SDLK_KP_PERIOD\r
+* SDLK_KP_PLUS\r
+* SDLK_KP_PLUSMINUS\r
+* SDLK_KP_POWER\r
+* SDLK_KP_RIGHTBRACE\r
+* SDLK_KP_RIGHTPAREN\r
+* SDLK_KP_SPACE\r
+* SDLK_KP_TAB\r
+* SDLK_KP_VERTICALBAR\r
+* SDLK_KP_XOR\r
+* SDLK_l\r
+* SDLK_LALT\r
+* SDLK_LCTRL\r
+* SDLK_LEFT\r
+* SDLK_LEFTBRACKET\r
+* SDLK_LGUI\r
+* SDLK_LSHIFT\r
+* SDLK_m\r
+* SDLK_MAIL\r
+* SDLK_MEDIASELECT\r
+* SDLK_MENU\r
+* SDLK_MINUS\r
+* SDLK_MODE\r
+* SDLK_MUTE\r
+* SDLK_n\r
+* SDLK_NUMLOCKCLEAR\r
+* SDLK_o\r
+* SDLK_OPER\r
+* SDLK_OUT\r
+* SDLK_p\r
+* SDLK_PAGEDOWN\r
+* SDLK_PAGEUP\r
+* SDLK_PASTE\r
+* SDLK_PAUSE\r
+* SDLK_PERIOD\r
+* SDLK_POWER\r
+* SDLK_PRINTSCREEN\r
+* SDLK_PRIOR\r
+* SDLK_q\r
+* SDLK_r\r
+* SDLK_RALT\r
+* SDLK_RCTRL\r
+* SDLK_RETURN\r
+* SDLK_RETURN2\r
+* SDLK_RGUI\r
+* SDLK_RIGHT\r
+* SDLK_RIGHTBRACKET\r
+* SDLK_RSHIFT\r
+* SDLK_s\r
+* SDLK_SCROLLLOCK\r
+* SDLK_SELECT\r
+* SDLK_SEMICOLON\r
+* SDLK_SEPARATOR\r
+* SDLK_SLASH\r
+* SDLK_SLEEP\r
+* SDLK_SPACE\r
+* SDLK_STOP\r
+* SDLK_SYSREQ\r
+* SDLK_t\r
+* SDLK_TAB\r
+* SDLK_THOUSANDSSEPARATOR\r
+* SDLK_u\r
+* SDLK_UNDO\r
+* SDLK_UNKNOWN\r
+* SDLK_UP\r
+* SDLK_v\r
+* SDLK_VOLUMEDOWN\r
+* SDLK_VOLUMEUP\r
+* SDLK_w\r
+* SDLK_WWW\r
+* SDLK_x\r
+* SDLK_y\r
+* SDLK_z\r
+* SDLK_AMPERSAND\r
+* SDLK_ASTERISK\r
+* SDLK_AT\r
+* SDLK_CARET\r
+* SDLK_COLON\r
+* SDLK_DOLLAR\r
+* SDLK_EXCLAIM\r
+* SDLK_GREATER\r
+* SDLK_HASH\r
+* SDLK_LEFTPAREN\r
+* SDLK_LESS\r
+* SDLK_PERCENT\r
+* SDLK_PLUS\r
+* SDLK_QUESTION\r
+* SDLK_QUOTEDBL\r
+* SDLK_RIGHTPAREN\r
+* SDLK_UNDERSCORE\r
+* SDL_THREAD_PRIORITY_LOW\r
+* SDL_THREAD_PRIORITY_NORMAL\r
+* SDL_THREAD_PRIORITY_HIGH\r
+* void SDL_RenderCopy2(SDL_Renderer *,SDL_Texture *)\r
+* void SDL_Delay(int)\r
+* void SDL_Init(int)\r
+* int SDL_InitSubSystem(Uint32 flags)\r
+* void SDL_Quit(void)\r
+* void SDL_QuitSubSystem(Uint32 flags)\r
+* void SDL_SetMainReady(void)\r
+* Uint32 SDL_WasInit(Uint32 flags)\r
+* SDL_bool SDL_SetHint(const char *name,const char *value)\r
+* SDL_bool SDL_SetHintWithPriority(const char *name,const char *value,SDL_HintPriority priority)\r
+* void SDL_ClearError(void)\r
+* const char *SDL_GetError(void)\r
+* SDL_LogPriority SDL_LogGetPriority(int category)\r
+* void SDL_LogResetPriorities(void)\r
+* void SDL_LogSetAllPriority(SDL_LogPriority priority)\r
+* SDL_AssertionHandler SDL_GetDefaultAssertionHandler(void)\r
+* void SDL_ResetAssertionReport(void)\r
+* void SDL_SetAssertionHandler(SDL_AssertionHandler handler,void *userdata)\r
+* void SDL_TriggerBreakpoint(void)\r
+* void SDL_assert(int)\r
+* void SDL_assert_paranoid(int)\r
+* void SDL_assert_release(int)\r
+* const char * SDL_GetRevision(void)\r
+* int SDL_GetRevisionNumber(void)\r
+* void SDL_GetVersion(SDL_version *ver)\r
+* SDL_Window *SDL_CreateWindow(const char * title,int x, int y,int w,int h,Uint32 flags)\r
+* void SDL_DestroyWindow(SDL_Window *window)\r
+* void SDL_DisableScreenSaver(void)\r
+* void SDL_EnableScreenSaver(void)\r
+* SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)\r
+* void SDL_GL_DeleteContext(SDL_GLContext context)\r
+* SDL_bool SDL_GL_ExtensionSupported(const char *extension)\r
+* int SDL_GL_GetAttribute(SDL_GLattr attr,int *value)\r
+* SDL_GLContext SDL_GL_GetCurrentContext(void)\r
+* SDL_Window *SDL_GL_GetCurrentWindow(void)\r
+* void SDL_GL_GetDrawableSize(SDL_Window *window,int *w,int *h)\r
+* void *SDL_GL_GetProcAddress(const char *proc)\r
+* int SDL_GL_GetSwapInterval(void)\r
+* int SDL_GL_LoadLibrary(const char *path)\r
+* int SDL_GL_MakeCurrent(SDL_Window *window,SDL_GLContext context)\r
+* void SDL_GL_ResetAttributes(void)\r
+* int SDL_GL_SetAttribute(SDL_GLattr attr,int value)\r
+* int SDL_GL_SetSwapInterval(int interval)\r
+* void SDL_GL_SwapWindow(SDL_Window *window)\r
+* void SDL_GL_UnloadLibrary(void)\r
+* SDL_DisplayMode *SDL_GetClosestDisplayMode(int displayIndex,SDL_DisplayMode *mode,SDL_DisplayMode *closest)\r
+* int SDL_GetCurrentDisplayMode(int displayIndex,SDL_DisplayMode *mode)\r
+* const char *SDL_GetCurrentVideoDriver(void)\r
+* int SDL_GetDesktopDisplayMode(int displayIndex,SDL_DisplayMode *mode)\r
+* int SDL_GetDisplayBounds(int displayIndex,SDL_Rect *rect)\r
+* int SDL_GetNumVideoDisplays(void)\r
+* int SDL_GetNumVideoDrivers(void)\r
+* const char * SDL_GetVideoDriver(int index)\r
+* void *SDL_GetWindowData(SDL_Window *window,const char *name)\r
+* int SDL_GetWindowDisplayIndex(SDL_Window *window)\r
+* int SDL_GetWindowDisplayMode(SDL_Window *window,SDL_DisplayMode *mode)\r
+* Uint32 SDL_GetWindowFlags(SDL_Window *window)\r
+* SDL_Window *SDL_GetWindowFromID(Uint32 id)\r
+* int SDL_GetWindowGammaRamp(SDL_Window *window,Uint16 *red,Uint16 *green,Uint16 *blue)\r
+* SDL_bool SDL_GetWindowGrab(SDL_Window *window)\r
+* Uint32 SDL_GetWindowID(SDL_Window* window)\r
+* void SDL_GetWindowMaximumSize(SDL_Window *window,int *w,int *h)\r
+* void SDL_GetWindowMinimumSize(SDL_Window *window,int *w,int *h)\r
+* void SDL_GetWindowPosition(SDL_Window *window,int *x,int *y)\r
+* void SDL_GetWindowSize(SDL_Window *window,int *w,int *h)\r
+* SDL_Surface *SDL_GetWindowSurface(SDL_Window *window)\r
+* const char *SDL_GetWindowTitle(SDL_Window *window)\r
+* SDL_bool SDL_IsScreenSaverEnabled(void)\r
+* void SDL_MaximizeWindow(SDL_Window *window)\r
+* void SDL_MinimizeWindow(SDL_Window *window)\r
+* void SDL_RaiseWindow(SDL_Window *window)\r
+* void SDL_RestoreWindow(SDL_Window *window)\r
+* void SDL_SetWindowBordered(SDL_Window *window,SDL_bool bordered)\r
+* int SDL_SetWindowBrightness(SDL_Window *window,float brightness)\r
+* void *SDL_SetWindowData(SDL_Window *window,const char *name,void *userdata)\r
+* int SDL_SetWindowDisplayMode(SDL_Window *window,const SDL_DisplayMode *mode)\r
+* int SDL_SetWindowFullscreen(SDL_Window *window,Uint32 flags)\r
+* int SDL_SetWindowGammaRamp(SDL_Window *window,const Uint16 *red,const Uint16 *green,const Uint16* blue)\r
+* void SDL_SetWindowGrab(SDL_Window *window,SDL_bool grabbed)\r
+* void SDL_SetWindowMinimumSize(SDL_Window* window,int min_w,int min_h)\r
+* void SDL_SetWindowSize(SDL_Window *window,int w,int h)\r
+* void SDL_SetWindowTitle(SDL_Window *window,const char *title)\r
+* int SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata,int *buttonid)\r
+* int SDL_ShowSimpleMessageBox(Uint32 flags,const char *title,const char *message,SDL_Window *window)\r
+* void SDL_ShowWindow(SDL_Window *window)\r
+* int SDL_UpdateWindowSurface(SDL_Window *window)\r
+* int SDL_UpdateWindowSurfaceRects(SDL_Window *window,const SDL_Rect *rects,int numrects)\r
+* int SDL_VideoInit(const char *driver_name)\r
+* void SDL_VideoQuit(void)\r
+* SDL_Renderer *SDL_CreateRenderer(SDL_Window *window,int index,Uint32 flags)\r
+* SDL_Renderer *SDL_CreateSoftwareRenderer(SDL_Surface *surface)\r
+* SDL_Texture *SDL_CreateTexture(SDL_Renderer *renderer,Uint32 format,int access,int w,int h)\r
+* SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer,SDL_Surface *surface)\r
+* void SDL_DestroyTexture(SDL_Texture *texture)\r
+* int SDL_GL_BindTexture(SDL_Texture *texture,float *texw,float *texh)\r
+* int SDL_GL_UnbindTexture(SDL_Texture *texture)\r
+* int SDL_GetNumRenderDrivers(void)\r
+* int SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer,SDL_BlendMode *blendMode)\r
+* int SDL_GetRenderDrawColor(SDL_Renderer *renderer,Uint8 *r,Uint8 *g,Uint8 *b,Uint8 *a)\r
+* int SDL_GetRenderDriverInfo(int index,SDL_RendererInfo *info)\r
+* SDL_Texture *SDL_GetRenderTarget(SDL_Renderer *renderer)\r
+* SDL_Renderer *SDL_GetRenderer(SDL_Window *window)\r
+* int SDL_GetRendererInfo(SDL_Renderer *renderer,SDL_RendererInfo *info)\r
+* int SDL_GetRendererOutputSize(SDL_Renderer *renderer,int *w,int *h)\r
+* int SDL_GetTextureAlphaMod(SDL_Texture *texture,Uint8 *alpha)\r
+* int SDL_GetTextureBlendMode(SDL_Texture *texture,SDL_BlendMode *blendMode)\r
+* int SDL_GetTextureColorMod(SDL_Texture *texture,Uint8 *r,Uint8 *g,Uint8 *b)\r
+* int SDL_LockTexture(SDL_Texture *texture,const SDL_Rect *rect,void **pixels,int *pitch)\r
+* int SDL_QueryTexture(SDL_Texture *texture,int *format,int *access,int *w,int *h)\r
+* int SDL_RenderClear(SDL_Renderer *renderer)\r
+* int SDL_RenderCopy(SDL_Renderer *renderer,SDL_Texture *texture,const SDL_Rect *srcrect,const SDL_Rect *dstrect)\r
+* int SDL_RenderCopyEx(SDL_Renderer *renderer,SDL_Texture *texture,const SDL_Rect *srcrect,const SDL_Rect *dstrect,const double angle,const SDL_Point *center,const SDL_RendererFlip flip)\r
+* int SDL_RenderDrawLine(SDL_Renderer *renderer,int x1,int y1,int x2,int y2)\r
+* int SDL_RenderDrawLines(SDL_Renderer *renderer,const SDL_Point *points,int count)\r
+* int SDL_RenderDrawPoint(SDL_Renderer *renderer,int x, int y)\r
+* int SDL_RenderDrawPoints(SDL_Renderer *renderer,const SDL_Point *points,int count)\r
+* int SDL_RenderDrawRect(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* int SDL_RenderDrawRects(SDL_Renderer *renderer,const SDL_Rect *rects,int count)\r
+* int SDL_RenderFillRect(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* int SDL_RenderFillRects(SDL_Renderer *renderer,const SDL_Rect* rects,int count)\r
+* void SDL_RenderGetClipRect(SDL_Renderer *renderer,SDL_Rect *rect)\r
+* void SDL_RenderGetScale(SDL_Renderer *renderer,float *scaleX,float *scaleY)\r
+* void SDL_RenderGetViewport(SDL_Renderer *renderer,SDL_Rect *rect)\r
+* int SDL_RenderReadPixels(SDL_Renderer *renderer,const SDL_Rect *rect,Uint32 format,void *pixels,int pitch)\r
+* int SDL_RenderSetClipRect(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* int SDL_RenderSetScale(SDL_Renderer *renderer,float scaleX,float scaleY)\r
+* int SDL_RenderSetViewport(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* SDL_bool SDL_RenderTargetSupported(SDL_Renderer *renderer)\r
+* int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer,SDL_BlendMode blendMode)\r
+* int SDL_SetRenderDrawColor(SDL_Renderer *renderer,Uint8 r,Uint8 g,Uint8 b,Uint8 a)\r
+* int SDL_SetRenderTarget(SDL_Renderer *renderer,SDL_Texture *texture)\r
+* int SDL_SetTextureAlphaMod(SDL_Texture *texture,Uint8 alpha)\r
+* int SDL_SetTextureBlendMode(SDL_Texture *texture,SDL_BlendMode blendMode)\r
+* int SDL_SetTextureColorMod(SDL_Texture *texture,Uint8 r,Uint8 g,Uint8 b)\r
+* void SDL_UnlockTexture(SDL_Texture *texture)\r
+* int SDL_UpdateTexture(SDL_Texture *texture,const SDL_Rect *rect,const void*pixels,int pitch)\r
+* int SDL_UpdateYUVTexture(SDL_Texture *texture,const SDL_Rect *rect,const Uint8 *Yplane,int Ypitch,const Uint8 *Uplane,int Upitch,const Uint8 *Vplane,int Vpitch)\r
+* SDL_PixelFormat *SDL_AllocFormat(Uint32 pixel_format)\r
+* SDL_Palette *SDL_AllocPalette(int ncolors)\r
+* void SDL_CalculateGammaRamp(float gamma,Uint16 *ramp)\r
+* void SDL_FreeFormat(SDL_PixelFormat *format)\r
+* void SDL_FreePalette(SDL_Palette *palette)\r
+* const char *SDL_GetPixelFormatName(Uint32 format)\r
+* void SDL_GetRGB(Uint32 pixel,const SDL_PixelFormat* format,Uint8 *r,Uint8 *g,Uint8 *b)\r
+* void SDL_GetRGBA(Uint32 pixel,const SDL_PixelFormat* format,Uint8 *r,Uint8 *g,Uint8 *b,Uint8 *a)\r
+* Uint32 SDL_MapRGB(const SDL_PixelFormat* format,Uint8 r,Uint8 g, Uint8 b)\r
+* Uint32 SDL_MapRGBA(const SDL_PixelFormat* format,Uint8 r,Uint8 g, Uint8 b, Uint8 a)\r
+* Uint32 SDL_MasksToPixelFormatEnum(int bpp,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)\r
+* SDL_bool SDL_PixelFormatEnumToMasks(Uint32 format,int *bpp,Uint32 *Rmask,Uint32 *Gmask,Uint32 *Bmask,Uint32 *Amask)\r
+* int SDL_SetPaletteColors(SDL_Palette *palette,const SDL_Color *colors,int firstcolor,int ncolors)\r
+* int SDL_SetPixelFormatPalette(SDL_PixelFormat *format,SDL_Palette *palette)\r
+* SDL_bool SDL_EnclosePoints(const SDL_Point* points,int count,const SDL_Rect *clip,SDL_Rect *result)\r
+* SDL_bool SDL_HasIntersection(const SDL_Rect *A,const SDL_Rect *B)\r
+* SDL_bool SDL_IntersectRect(const SDL_Rect *A,const SDL_Rect *B,SDL_Rect *result)\r
+* SDL_bool SDL_IntersectRectAndLine(const SDL_Rect *rect,int *X1,int *Y1,int *X2,int *Y2)\r
+* SDL_bool SDL_RectEquals(const SDL_Rect *a,const SDL_Rect *b)\r
+* void SDL_UnionRect(const SDL_Rect *A,const SDL_Rect *B,SDL_Rect *result)\r
+* int SDL_BlitScaled(SDL_Surface *src,const SDL_Rect *srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* int SDL_BlitSurface(SDL_Surface *src,const SDL_Rect* srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* int SDL_ConvertPixels(int width,int height,Uint32 src_format,const void *src,int src_pitch,Uint32 dst_format,void *dst,int dst_pitch)\r
+* SDL_Surface *SDL_ConvertSurface(SDL_Surface *src,const SDL_PixelFormat *fmt,Uint32 flags)\r
+* SDL_Surface *SDL_ConvertSurfaceFormat(SDL_Surface *src,Uint32 pixel_format,Uint32 flags)\r
+* SDL_Surface *SDL_CreateRGBSurface(Uint32 flags,int width,int height,int depth,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)\r
+* SDL_Surface* SDL_CreateRGBSurfaceFrom(void *pixels,int width,int height,int depth,int pitch,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)\r
+* int SDL_FillRect(SDL_Surface *dst,const SDL_Rect *rect,Uint32 color)\r
+* int SDL_FillRects(SDL_Surface *dst,const SDL_Rect *rects,int count,Uint32 color)\r
+* void SDL_FreeSurface(SDL_Surface *surface)\r
+* void SDL_GetClipRect(SDL_Surface *surface,SDL_Rect *rect)\r
+* int SDL_GetColorKey(SDL_Surface *surface,Uint32 *key)\r
+* int SDL_GetSurfaceAlphaMod(SDL_Surface *surface,Uint8 *alpha)\r
+* int SDL_GetSurfaceBlendMode(SDL_Surface *surface,SDL_BlendMode *blendMode)\r
+* int SDL_GetSurfaceColorMod(SDL_Surface *surface,Uint8 *r,Uint8 *g,Uint8 *b)\r
+* SDL_Surface *SDL_LoadBMP(const char *file)\r
+* SDL_Surface *SDL_LoadBMP_RW(SDL_RWops *src,int freesrc)\r
+* int SDL_LockSurface(SDL_Surface *surface)\r
+* int SDL_LowerBlit(SDL_Surface *src,SDL_Rect *srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* int SDL_LowerBlitScaled(SDL_Surface *src,SDL_Rect *srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* SDL_bool SDL_MUSTLOCK(SDL_Surface *surface)\r
+* int SDL_SaveBMP(SDL_Surface *surface,const char *file)\r
+* int SDL_SaveBMP_RW(SDL_Surface *surface,SDL_RWops *dst,int freedst)\r
+* SDL_bool SDL_SetClipRect(SDL_Surface *surface,const SDL_Rect *rect)\r
+* int SDL_SetColorKey(SDL_Surface *surface,int flag,Uint32 key)\r
+* int SDL_SetSurfaceAlphaMod(SDL_Surface *surface,Uint8 alpha)\r
+* int SDL_SetSurfaceBlendMode(SDL_Surface *surface,SDL_BlendMode blendMode)\r
+* int SDL_SetSurfaceColorMod(SDL_Surface *surface,Uint8 r,Uint8 g,Uint8 b)\r
+* int SDL_SetSurfacePalette(SDL_Surface *surface,SDL_Palette *palette)\r
+* int SDL_SetSurfaceRLE(SDL_Surface *surface,int flag)\r
+* void SDL_UnlockSurface(SDL_Surface* surface)\r
+* SDL_bool SDL_GetWindowWMInfo(SDL_Window *window,SDL_SysWMinfo *info)\r
+* char *SDL_GetClipboardText(void)\r
+* SDL_bool SDL_HasClipboardText(void)\r
+* int SDL_SetClipboardText(const char *text)\r
+* void SDL_AddEventWatch(SDL_EventFilter filter,void *userdata)\r
+* void SDL_DelEventWatch(SDL_EventFilter filter,void *userdata)\r
+* Uint8 SDL_EventState(Uint32 type,int state)\r
+* void SDL_FilterEvents(SDL_EventFilter filter,void *userdata)\r
+* void SDL_FlushEvent(Uint32 type)\r
+* void SDL_FlushEvents(Uint32 minType,Uint32 maxType)\r
+* SDL_bool SDL_GetEventFilter(SDL_EventFilter *filter,void **userdata)\r
+* Uint8 SDL_GetEventState(Uint32 type)\r
+* int SDL_GetNumTouchDevices(void)\r
+* int SDL_GetNumTouchFingers(SDL_TouchID touchID)\r
+* SDL_TouchID SDL_GetTouchDevice(int index)\r
+* SDL_Finger* SDL_GetTouchFinger(SDL_TouchID touchID,int index)\r
+* SDL_bool SDL_HasEvent(Uint32 type)\r
+* SDL_bool SDL_HasEvents(Uint32 minType,Uint32 maxType)\r
+* int SDL_LoadDollarTemplates(SDL_TouchID touchId,SDL_RWops *src)\r
+* int SDL_PeepEvents(SDL_Event *events,int numevents,SDL_eventaction action,Uint32 minType,Uint32 maxType)\r
+* int SDL_PollEvent(SDL_Event *event)\r
+* void SDL_PumpEvents(void)\r
+* int SDL_PushEvent(SDL_Event *event)\r
+* SDL_bool SDL_QuitRequested(void)\r
+* int SDL_RecordGesture(SDL_TouchID touchId)\r
+* Uint32 SDL_RegisterEvents(int numevents)\r
+* int SDL_SaveAllDollarTemplates(SDL_RWops *dst)\r
+* int SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst)\r
+* void SDL_SetEventFilter(SDL_EventFilter filter,void *userdata)\r
+* int SDL_WaitEvent(SDL_Event *event)\r
+* int SDL_WaitEventTimeout(SDL_Event *event,int timeout)\r
+* SDL_Keycode SDL_GetKeyFromName(const char * name)\r
+* SDL_Keycode SDL_GetKeyFromScancode(SDL_Scancode scancode)\r
+* const char * SDL_GetKeyName(SDL_Keycode key)\r
+* SDL_Window* SDL_GetKeyboardFocus(void)\r
+* const Uint8* SDL_GetKeyboardState(int* numkeys)\r
+* SDL_Keymod SDL_GetModState(void)\r
+* SDL_Scancode SDL_GetScancodeFromKey(SDL_Keycode key)\r
+* SDL_Scancode SDL_GetScancodeFromName(const char * name)\r
+* const char * SDL_GetScancodeName(SDL_Scancode scancode)\r
+* SDL_bool SDL_HasScreenKeyboardSupport(void)\r
+* SDL_bool SDL_IsScreenKeyboardShown(SDL_Window* window)\r
+* SDL_bool SDL_IsTextInputActive(void)\r
+* void SDL_SetModState(SDL_Keymod modstate)\r
+* void SDL_SetTextInputRect(SDL_Rect* rect)\r
+* void SDL_StartTextInput(void)\r
+* void SDL_StopTextInput(void)\r
+* SDL_Cursor *SDL_CreateCursor(const Uint8 *data,const Uint8 *mask,int w,int h,int hot_x,int hot_y)\r
+* void SDL_FreeCursor(SDL_Cursor *cursor)\r
+* SDL_Cursor *SDL_GetCursor(void)\r
+* SDL_Cursor *SDL_GetDefaultCursor(void)\r
+* Uint32 SDL_GetMouseState(int *x,int * y)\r
+* SDL_bool SDL_GetRelativeMouseMode(void)\r
+* Uint32 SDL_GetRelativeMouseState(int *x,int *y)\r
+* void SDL_SetCursor(SDL_Cursor *cursor)\r
+* int SDL_SetRelativeMouseMode(SDL_bool enabled)\r
+* int SDL_ShowCursor(int toggle)\r
+* void SDL_JoystickClose(SDL_Joystick *joystick)\r
+* SDL_bool SDL_JoystickGetAttached(SDL_Joystick *joystick)\r
+* Sint16 SDL_JoystickGetAxis(SDL_Joystick *joystick,int axis)\r
+* int SDL_JoystickGetBall(SDL_Joystick *joystick,int ball,int *dx,int *dy)\r
+* Uint8 SDL_JoystickGetButton(SDL_Joystick *joystick,int button)\r
+* SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)\r
+* SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick *joystick)\r
+* SDL_JoystickGUID SDL_JoystickGetGUIDFromString(const char *pchGUID)\r
+* void SDL_JoystickGetGUIDString(SDL_JoystickGUID guid,char *pszGUID,int cbGUID)\r
+* Uint8 SDL_JoystickGetHat(SDL_Joystick *joystick,int hat)\r
+* SDL_JoystickID SDL_JoystickInstanceID(SDL_Joystick *joystick)\r
+* const char *SDL_JoystickName(SDL_Joystick *joystick)\r
+* const char *SDL_JoystickNameForIndex(int device_index)\r
+* int SDL_JoystickNumAxes(SDL_Joystick *joystick)\r
+* int SDL_JoystickNumBalls(SDL_Joystick *joystick)\r
+* int SDL_JoystickNumButtons(SDL_Joystick *joystick)\r
+* int SDL_JoystickNumHats(SDL_Joystick *joystick)\r
+* SDL_Joystick *SDL_JoystickOpen(int device_index)\r
+* void SDL_JoystickUpdate(void)\r
+* int SDL_NumJoysticks(void)\r
+* int SDL_GameControllerAddMapping(const char *mappingString)\r
+* int SDL_GameControllerAddMappingsFromFile(const char *filename)\r
+* int SDL_GameControllerAddMappingsFromRW(SDL_RWops *rw,int freerw)\r
+* void SDL_GameControllerClose(SDL_GameController *gamecontroller)\r
+* int SDL_GameControllerEventState(int state)\r
+* Sint16 SDL_GameControllerGetAxis(SDL_GameController *gamecontroller,SDL_GameControllerAxis axis)\r
+* SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const char *pchString)\r
+* SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller,SDL_GameControllerAxis axis)\r
+* SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller,SDL_GameControllerButton button)\r
+* Uint8 SDL_GameControllerGetButton(SDL_GameController *gamecontroller,SDL_GameControllerButton button)\r
+* SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const char *pchString)\r
+* SDL_Joystick *SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller)\r
+* const char *SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis)\r
+* const char *SDL_GameControllerGetStringForButton(SDL_GameControllerButton button)\r
+* char *SDL_GameControllerMapping(SDL_GameController *gamecontroller)\r
+* char *SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid)\r
+* const char *SDL_GameControllerName(SDL_GameController *gamecontroller)\r
+* const char *SDL_GameControllerNameForIndex(int joystick_index)\r
+* SDL_GameController* SDL_GameControllerOpen(int joystick_index)\r
+* void SDL_GameControllerUpdate(void)\r
+* SDL_bool SDL_IsGameController(int joystick_index)\r
+* void SDL_HapticClose(SDL_Haptic* haptic)\r
+* void SDL_HapticDestroyEffect(SDL_Haptic *haptic,int effect)\r
+* int SDL_HapticEffectSupported(SDL_Haptic *haptic,SDL_HapticEffect *effect)\r
+* int SDL_HapticGetEffectStatus(SDL_Haptic *haptic,int effect)\r
+* int SDL_HapticIndex(SDL_Haptic *haptic)\r
+* const char *SDL_HapticName(int device_index)\r
+* int SDL_HapticNewEffect(SDL_Haptic *haptic,SDL_HapticEffect *effect)\r
+* int SDL_HapticNumAxes(SDL_Haptic *haptic)\r
+* int SDL_HapticNumEffects(SDL_Haptic *haptic)\r
+* int SDL_HapticNumEffectsPlaying(SDL_Haptic *haptic)\r
+* SDL_Haptic *SDL_HapticOpen(int device_index)\r
+* SDL_Haptic *SDL_HapticOpenFromJoystick(SDL_Joystick *joystick)\r
+* SDL_Haptic *SDL_HapticOpenFromMouse(void)\r
+* int SDL_HapticOpened(int device_index)\r
+* int SDL_HapticPause(SDL_Haptic *haptic)\r
+* unsigned int SDL_HapticQuery(SDL_Haptic *haptic)\r
+* int SDL_HapticRumbleInit(SDL_Haptic *haptic)\r
+* int SDL_HapticRumblePlay(SDL_Haptic *haptic,float strength,Uint32 length)\r
+* int SDL_HapticRumbleStop(SDL_Haptic *haptic)\r
+* int SDL_HapticRumbleSupported(SDL_Haptic *haptic)\r
+* int SDL_HapticRunEffect(SDL_Haptic *haptic,int effect,Uint32 iterations)\r
+* int SDL_HapticSetAutocenter(SDL_Haptic *haptic,int autocenter)\r
+* int SDL_HapticSetGain(SDL_Haptic *haptic,int gain)\r
+* int SDL_HapticStopAll(SDL_Haptic *haptic)\r
+* int SDL_HapticStopEffect(SDL_Haptic *haptic,int effect)\r
+* int SDL_HapticUnpause(SDL_Haptic *haptic)\r
+* int SDL_HapticUpdateEffect(SDL_Haptic *haptic,int effect,SDL_HapticEffect *data)\r
+* int SDL_JoystickIsHaptic(SDL_Joystick *joystick)\r
+* int SDL_MouseIsHaptic(void)\r
+* int SDL_NumHaptics(void)\r
+* int SDL_AudioInit(const char * driver_name)\r
+* void SDL_AudioQuit(void)\r
+* int SDL_BuildAudioCVT(SDL_AudioCVT *cvt,SDL_AudioFormat src_format,Uint8 src_channels,int src_rate,SDL_AudioFormat dst_format,Uint8 dst_channels,int dst_rate)\r
+* void SDL_CloseAudioDevice(SDL_AudioDeviceID dev)\r
+* int SDL_ConvertAudio(SDL_AudioCVT *cvt)\r
+* void SDL_FreeWAV(Uint8 *audio_buf)\r
+* const char * SDL_GetAudioDeviceName(int index,int iscapture)\r
+* SDL_AudioStatus SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev)\r
+* const char * SDL_GetAudioDriver(int index)\r
+* SDL_AudioStatus SDL_GetAudioStatus(void)\r
+* const char * SDL_GetCurrentAudioDriver(void)\r
+* int SDL_GetNumAudioDevices(int iscapture)\r
+* int SDL_GetNumAudioDrivers(void)\r
+* SDL_AudioSpec *SDL_LoadWAV_RW(SDL_RWops *src,int freesrc,SDL_AudioSpec *spec,Uint8 **audio_buf,Uint32 *audio_len)\r
+* void SDL_LockAudio(void)\r
+* void SDL_LockAudioDevice(SDL_AudioDeviceID dev)\r
+* void SDL_MixAudio(Uint8 *dst,const Uint8* src,Uint32 len,int volume)\r
+* void SDL_MixAudioFormat(Uint8 *dst,const Uint8 *src,SDL_AudioFormat format,Uint32 len,int volume)\r
+* int SDL_OpenAudio(SDL_AudioSpec *desired,SDL_AudioSpec *obtained)\r
+* SDL_AudioDeviceID SDL_OpenAudioDevice(const char *device,int iscapture,const SDL_AudioSpec *desired,SDL_AudioSpec *obtained,int allowed_changes)\r
+* void SDL_PauseAudio(int pause_on)\r
+* void SDL_PauseAudioDevice(SDL_AudioDeviceID dev,int pause_on)\r
+* void SDL_UnlockAudio(void)\r
+* void SDL_UnlockAudioDevice(SDL_AudioDeviceID dev)\r
+* char *SDL_GetBasePath(void)\r
+* char *SDL_GetPrefPath(const char *org,const char *app)\r
+* SDL_RWops *SDL_AllocRW(void)\r
+* void SDL_FreeRW(SDL_RWops *area)\r
+* SDL_RWops *SDL_RWFromConstMem(const void* mem,int size)\r
+* SDL_RWops *SDL_RWFromFP(void *fp,SDL_bool autoclose)\r
+* SDL_RWops *SDL_RWFromFile(const char *file,const char *mode)\r
+* SDL_RWops *SDL_RWFromMem(void *mem,int   size)\r
+* int SDL_RWclose(struct SDL_RWops *context)\r
+* size_t SDL_RWread(struct SDL_RWops *context,void *ptr,size_t size,size_t maxnum)\r
+* Sint64 SDL_RWseek(SDL_RWops *context,Sint64 offset,int whence)\r
+* Sint64 SDL_RWsize(SDL_RWops *context)\r
+* Sint64 SDL_RWtell(struct SDL_RWops *context)\r
+* size_t SDL_RWwrite(struct SDL_RWops *context,const void *ptr,size_t size,size_t num)\r
+* Uint16 SDL_ReadBE16(SDL_RWops *src)\r
+* Uint32 SDL_ReadBE32(SDL_RWops *src)\r
+* Uint64 SDL_ReadBE64(SDL_RWops *src)\r
+* Uint16 SDL_ReadLE16(SDL_RWops *src)\r
+* Uint32 SDL_ReadLE32(SDL_RWops *src)\r
+* Uint64 SDL_ReadLE64(SDL_RWops *src)\r
+* Uint8 SDL_ReadU8(SDL_RWops *src)\r
+* size_t SDL_WriteBE16(SDL_RWops *dst,Uint16 value)\r
+* size_t SDL_WriteBE32(SDL_RWops *dst,Uint32 value)\r
+* size_t SDL_WriteBE64(SDL_RWops *dst,Uint64 value)\r
+* size_t SDL_WriteLE16(SDL_RWops *dst,Uint16 value)\r
+* size_t SDL_WriteLE32(SDL_RWops *dst,Uint32 value)\r
+* size_t SDL_WriteLE64(SDL_RWops *dst,Uint64 value)\r
+* size_t SDL_WriteU8(SDL_RWops *dst,Uint8 value)\r
+* void *SDL_LoadFunction(void *handle,const char *name)\r
+* void *SDL_LoadObject(const char *sofile)\r
+* void SDL_UnloadObject(void *handle)\r
+* const char *SDL_GetPlatform(void)\r
+* int SDL_GetCPUCacheLineSize(void)\r
+* int SDL_GetCPUCount(void)\r
+* int SDL_GetSystemRAM(void)\r
+* SDL_bool SDL_Has3DNow(void)\r
+* SDL_bool SDL_HasAVX(void)\r
+* SDL_bool SDL_HasMMX(void)\r
+* SDL_bool SDL_HasRDTSC(void)\r
+* SDL_bool SDL_HasSSE(void)\r
+* SDL_bool SDL_HasSSE2(void)\r
+* SDL_bool SDL_HasSSE3(void)\r
+* SDL_bool SDL_HasSSE41(void)\r
+* SDL_bool SDL_HasSSE42(void)\r
+* SDL_PowerState SDL_GetPowerInfo(int *secs,int *pct)\r
+* double SDL_acos(double x)\r
+* int IMG_Init(int flags)\r\r
+* void IMG_Quit(void)\r
+* SDL_Surface *IMG_Load(const char *file)\r
+* SDL_Surface *IMG_Load_RW(SDL_RWops *src, int freesrc)\r
+* SDL_Surface *IMG_LoadTyped_RW(SDL_RWops *src, int freesrc, char *type)\r
+* SDL_Surface *IMG_LoadCUR_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadBMP_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadPNM_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src)\r\r
+* SDL_Surface *IMG_LoadXCF_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadPCX_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadGIF_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadJPG_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadTIF_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadTGA_RW(SDL_RWops *src)\r\r
+* SDL_Surface *IMG_LoadLBM_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadXV_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_ReadXPMFromArray(char **xpm)\r
+* int IMG_isCUR(SDL_RWops *src)\r
+* int IMG_isICO(SDL_RWops *src)\r
+* int IMG_isBMP(SDL_RWops *src)\r\r
+* int IMG_isPNM(SDL_RWops *src)\r
+* int IMG_isXPM(SDL_RWops *src)\r
+* int IMG_isXCF(SDL_RWops *src)\r\r
+* int IMG_isPCX(SDL_RWops *src)\r\r
+* int IMG_isGIF(SDL_RWops *src)\r
+* int IMG_isJPG(SDL_RWops *src)\r\r
+* int IMG_isTIF(SDL_RWops *src)\r\r
+* int IMG_isPNG(SDL_RWops *src)\r
+* int IMG_isLBM(SDL_RWops *src)\r
+* int IMG_isXV(SDL_RWops *src)\r
+* int TTF_Init(void)\r
+* int TTF_WasInit(void)\r
+* void TTF_Quit(void)\r
+* TTF_Font *TTF_OpenFont(const char *file, int ptsize)\r
+* TTF_Font *TTF_OpenFontRW(SDL_RWops *src, int freesrc, int ptsize)\r
+* TTF_Font *TTF_OpenFontIndex(const char *file, int ptsize, long index)\r\r
+* TTF_Font *TTF_OpenFontIndexRW(SDL_RWops *src, int freesrc, int ptsize, long index)\r
+* void TTF_CloseFont(TTF_Font *font)\r
+* void TTF_ByteSwappedUNICODE(int swapped)\r
+* int TTF_GetFontStyle(TTF_Font *font)\r
+* void TTF_SetFontStyle(TTF_Font *font, int style)\r\r
+* int TTF_GetFontOutline(TTF_Font *font)\r
+* void TTF_SetFontOutline(TTF_Font *font, int outline)\r\r
+* int TTF_GetFontHinting(TTF_Font *font)\r
+* void TTF_SetFontHinting(TTF_Font *font, int hinting)\r
+* int TTF_GetFontKerning(TTF_Font *font)\r\r
+* void TTF_SetFontKerning(TTF_Font *font, int allowed)\r
+* int TTF_FontHeight(const TTF_Font *font)\r
+* int TTF_FontAscent(const TTF_Font *font)\r\r
+* int TTF_FontDescent(const TTF_Font *font)\r\r
+* int TTF_FontLineSkip(const TTF_Font *font)\r
+* long TTF_FontFaces(const TTF_Font *font)\r\r
+* int TTF_FontFaceIsFixedWidth(const TTF_Font *font)\r
+* char *TTF_FontFaceFamilyName(const TTF_Font *font)\r
+* char *TTF_FontFaceStyleName(const TTF_Font *font)\r
+* int TTF_GlyphIsProvided(const TTF_Font *font, Uint16 ch)\r\r
+* int TTF_GlyphMetrics(TTF_Font *font, Uint16 ch, int *minx, int *maxx, int *miny, int *maxy, int *advance)\r
+* int TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h)\r
+* int TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h)\r\r
+* int TTF_SizeUNICODE(TTF_Font *font, const Uint16 *text, int *w, int *h)\r\r
+* SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg)\r
+* SDL_Surface *TTF_RenderUTF8_Solid(TTF_Font *font, const char *text,SDL_Color fg)\r
+* SDL_Surface *TTF_RenderUNICODE_Solid(TTF_Font *font, const Uint16 *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderGlyph_Solid(TTF_Font *font, Uint16 ch, SDL_Color fg)\r
+* SDL_Surface *TTF_RenderText_Shaded(TTF_Font *font, const char *text,SDL_Color fg, SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderUTF8_Shaded(TTF_Font *font, const char *text,SDL_Color fg, SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderUNICODE_Shaded(TTF_Font *font, const Uint16 *text,SDL_Color fg, SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderGlyph_Shaded(TTF_Font *font, Uint16 ch, SDL_Color fg,SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderText_Blended(TTF_Font *font, const char *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderUTF8_Blended(TTF_Font *font, const char *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderUNICODE_Blended(TTF_Font *font, const Uint16 *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderGlyph_Blended(TTF_Font *font, Uint16 ch, SDL_Color fg)\r
+* int Mix_Init(int flags)\r
+* void Mix_Quit(void)\r
+* int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize)\r
+* void Mix_CloseAudio(void)\r
+* int Mix_QuerySpec(int *frequency, Uint16 *format, int *channels)\r
+* int Mix_GetNumChunkDecoders(void)\r
+* const char *Mix_GetChunkDecoder(int index)\r
+* Mix_Chunk *Mix_LoadWAV(char *file)\r
+* Mix_Chunk *Mix_LoadWAV_RW(SDL_RWops *src, int freesrc)\r
+* Mix_Chunk *Mix_QuickLoad_WAV(Uint8 *mem)\r
+* void Mix_FreeChunk(Mix_Chunk *chunk)\r
+* int Mix_AllocateChannels(int numchans)\r
+* int Mix_Volume(int channel, int volume)\r
+* int Mix_PlayChannel(int channel, Mix_Chunk *chunk, int loops)\r
+* int Mix_PlayChannelTimed(int channel, Mix_Chunk *chunk, int loops, int ticks)\r
+* int Mix_FadeInChannel(int channel, Mix_Chunk *chunk, int loops, int ms)\r
+* int Mix_FadeInChannelTimed(int channel, Mix_Chunk *chunk,int loops, int ms, int ticks)\r
+* void Mix_Pause(int channel)\r
+* void Mix_Resume(int channel)\r
+* int Mix_HaltChannel(int channel)\r
+* int Mix_ExpireChannel(int channel, int ticks)\r
+* int Mix_FadeOutChannel(int channel, int ms)\r
+* int Mix_Paused(int channel)\r
+* Mix_Fading Mix_FadingChannel(int which)\r
+* Mix_Chunk *Mix_GetChunk(int channel)\r
+* int Mix_ReserveChannels(int num)\r
+* int Mix_GroupChannel(int which, int tag)\r
+* int Mix_GroupChannels(int from, int to, int tag)\r
+* int Mix_GroupCount(int tag)\r
+* int Mix_GroupAvailable(int tag)\r
+* int Mix_GroupOldest(int tag)\r
+* int Mix_GroupNewer(int tag)\r
+* int Mix_FadeOutGroup(int tag, int ms)\r
+* int Mix_HaltGroup(int tag)\r
+* int Mix_GetNumMusicDecoders(void)\r
+* const char *Mix_GetMusicDecoder(int index)\r
+* Mix_Music *Mix_LoadMUS(const char *file)\r
+* void Mix_FreeMusic(Mix_Music *music)\r
+* int Mix_PlayMusic(Mix_Music *music, int loops)\r
+* int Mix_FadeInMusic(Mix_Music *music, int loops, int ms)\r
+* int Mix_FadeInMusicPos(Mix_Music *music, int loops, int ms, double position)\r
+* int Mix_PlayingMusic(void)\r
+* int Mix_PausedMusic(void)\r
+* Mix_Fading Mix_FadingMusic(void)\r
+* void *Mix_GetMusicHookData(void)\r
+* int Mix_RegisterEffect(int chan, Mix_EffectFunc_t f, Mix_EffectDone_t d,void *arg)\r
+* int Mix_UnregisterEffect(int channel, Mix_EffectFunc_t f)\r
+* int Mix_UnregisterAllEffects(int channel)\r
+* int Mix_SetDistance(int channel, Uint8 distance)\r
+* int Mix_SetPosition(int channel, Sint16 angle, Uint8 distance)\r
+* int Mix_SetReverseStereo(int channel, int flip)\r
+* int SDLNet_Init(void)\r
+* void SDLNet_Quit(void)\r
+* char *SDLNet_GetError(void)\r
+* void SDLNet_Write16(Uint16 value, void *area)\r
+* void SDLNet_Write32(Uint32 value, void *area)\r
+* Uint16 SDLNet_Read16(void *area)\r
+* Uint32 SDLNet_Read32(void *area)\r
+* int SDLNet_ResolveHost(IPaddress *address, const char *host, Uint16 port)\r
+* const char *SDLNet_ResolveIP(IPaddress *address)\r
+* TCPsocket SDLNet_TCP_Open(IPaddress *ip)\r
+* void SDLNet_TCP_Close(TCPsocket sock)\r
+* TCPsocket SDLNet_TCP_Accept(TCPsocket server)\r
+* int SDLNet_TCP_Send(TCPsocket sock, const void *data, int len)\r
+* int SDLNet_TCP_Recv(TCPsocket sock, void *data, int maxlen)\r
+* UDPsocket SDLNet_UDP_Open(Uint16 port)\r
+* void SDLNet_UDP_Close(UDPsocket sock)\r
+* int SDLNet_UDP_Bind(UDPsocket sock, int channel, IPaddress *address)\r
+* void SDLNet_UDP_Unbind(UDPsocket sock, int channel)\r
+* IPaddress *SDLNet_UDP_GetPeerAddress(UDPsocket sock, int channel)\r
+* int SDLNet_UDP_Send(UDPsocket sock, int channel, UDPpacket *packet)\r
+* int SDLNet_UDP_Recv(UDPsocket sock, UDPpacket *packet)\r
+* int SDLNet_UDP_SendV(UDPsocket sock, UDPpacket **packetV, int npackets)\r
+* int SDLNet_UDP_RecvV(UDPsocket sock, UDPpacket **packetV)\r
+* UDPpacket *SDLNet_AllocPacket(int size)\r
+* int SDLNet_ResizePacket(UDPpacket *packet, int size)\r
+* void SDLNet_FreePacket(UDPpacket *packet)\r
+* UDPpacket **SDLNet_AllocPacketV(int howmany, int size)\r
+* void SDLNet_FreePacketV(UDPpacket **packetV)\r
+* SDLNet_SocketSet SDLNet_AllocSocketSet(int maxsockets)\r
+* void SDLNet_FreeSocketSet(SDLNet_SocketSet set)\r
+* int SDLNet_AddSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock)\r
+* int SDLNet_TCP_AddSocket(SDLNet_SocketSet set, TCPsocket sock)\r
+* int SDLNet_UDP_AddSocket(SDLNet_SocketSet set, UDPsocket sock)\r
+* int SDLNet_DelSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock)\r
+* int SDLNet_TCP_DelSocket(SDLNet_SocketSet set, TCPsocket sock)\r
+* int SDLNet_UDP_DelSocket(SDLNet_SocketSet set, UDPsocket sock)\r
+* int SDLNet_CheckSockets(SDLNet_SocketSet set, Uint32 timeout)\r
+* int SDLNet_SocketReady(TCPsocket sock)\r
+* int circleRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a)\r
+* SDL_Thread *SDL_CreateThread(SDL_ThreadFunction fn,const char *name,void *data)\r
+* void SDL_DetachThread(SDL_Thread *thread)\r
+* SDL_threadID SDL_GetThreadID(SDL_Thread *thread)\r
+* const char *SDL_GetThreadName(SDL_Thread* thread)\r
+* int SDL_SetThreadPriority(SDL_ThreadPriority priority)\r
+* SDL_TLSID SDL_TLSCreate(void)\r
+* void *SDL_TLSGet(SDL_TLSID id)\r
+* int SDL_TLSSet(SDL_TLSID   id,const void *value,void *)\r
+* SDL_threadID SDL_ThreadID(void)\r
+* void SDL_WaitThread(SDL_Thread *thread,int *status)\r
+* int SDL_CondBroadcast(SDL_cond *cond)\r
+* int SDL_CondSignal(SDL_cond *cond)\r
+* int SDL_CondWait(SDL_cond *cond,SDL_mutex *mutex)\r
+* int SDL_CondWaitTimeout(SDL_cond *cond,SDL_mutex *mutex,Uint32 ms)\r
+* SDL_cond *SDL_CreateCond(void)\r
+* SDL_mutex *SDL_CreateMutex(void)\r
+* SDL_sem *SDL_CreateSemaphore(Uint32 initial_value)\r
+* void SDL_DestroyCond(SDL_cond *cond)\r
+* void SDL_DestroyMutex(SDL_mutex *mutex)\r
+* void SDL_DestroySemaphore(SDL_sem *sem)\r
+* int SDL_LockMutex(SDL_mutex *mutex)\r
+* int SDL_SemPost(SDL_sem *sem)\r
+* int SDL_SemTryWait(SDL_sem *sem)\r
+* Uint32 SDL_SemValue(SDL_sem *sem)\r
+* int SDL_SemWait(SDL_sem *sem)\r
+* int SDL_SemWaitTimeout(SDL_sem *sem,Uint32   ms)\r
+* int SDL_TryLockMutex(SDL_mutex *mutex)\r
+* int SDL_UnlockMutex(SDL_mutex *mutex)\r
diff --git a/docs/en/source/ringlibuvfuncsdoc.txt b/docs/en/source/ringlibuvfuncsdoc.txt
new file mode 100644 (file)
index 0000000..b59e57b
--- /dev/null
@@ -0,0 +1,286 @@
+.. index:: 
+     single: RingLibuv Functions Reference; Introduction
+
+=============================
+RingLibuv Functions Reference
+=============================
+
+* int uv_loop_init(uv_loop_t* loop)
+* int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, int)
+* int uv_loop_close(uv_loop_t* loop)
+* uv_loop_t* uv_default_loop(void)
+* int uv_run(uv_loop_t* loop, uv_run_mode mode)
+* int uv_loop_alive(const uv_loop_t* loop)
+* void uv_stop(uv_loop_t* loop)
+* size_t uv_loop_size(void)
+* int uv_backend_fd(const uv_loop_t* loop)
+* int uv_backend_timeout(const uv_loop_t* loop)
+* uint64_t uv_now(const uv_loop_t* loop)
+* void uv_update_time(uv_loop_t* loop)
+* void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg)
+* void uv_walk_2(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg)
+* int uv_loop_fork(uv_loop_t* loop)
+* int uv_is_active(const uv_handle_t* handle)
+* int uv_is_closing(const uv_handle_t* handle)
+* void uv_close(uv_handle_t* handle, uv_close_cb close_cb)
+* void uv_close_2(uv_handle_t* handle, uv_close_cb close_cb)
+* void uv_ref(uv_handle_t* handle)
+* void uv_unref(uv_handle_t* handle)
+* int uv_has_ref(const uv_handle_t* handle)
+* size_t uv_handle_size(uv_handle_type type)
+* int uv_send_buffer_size(uv_handle_t* handle, int* value)
+* int uv_recv_buffer_size(uv_handle_t* handle, int* value)
+* int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd)
+* int uv_cancel(uv_req_t* req)
+* size_t uv_req_size(uv_req_type type)
+* int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle)
+* int uv_timer_start(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)
+* int uv_timer_start_2(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)
+* int uv_timer_stop(uv_timer_t* handle)
+* int uv_timer_again(uv_timer_t* handle)
+* void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat)
+* uint64_t uv_timer_get_repeat(const uv_timer_t* handle)
+* int uv_prepare_init(uv_loop_t* loop, uv_prepare_t* prepare)
+* int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb)
+* int uv_prepare_start_2(uv_prepare_t* prepare, uv_prepare_cb cb)
+* int uv_prepare_stop(uv_prepare_t* prepare)
+* int uv_check_init(uv_loop_t* loop, uv_check_t* check)
+* int uv_check_start(uv_check_t* check, uv_check_cb cb)
+* int uv_check_start_2(uv_check_t* check, uv_check_cb cb)
+* int uv_check_stop(uv_check_t* check)
+* int uv_idle_init(uv_loop_t* loop, uv_idle_t* idle)
+* int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb)
+* int uv_idle_start_2(uv_idle_t* idle, uv_idle_cb cb)
+* int uv_idle_stop(uv_idle_t* idle)
+* int uv_async_init(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb)
+* int uv_async_init_2(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb)
+* int uv_async_send(uv_async_t* async)
+* int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd)
+* int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, uv_os_sock_t socket)
+* int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb)
+* int uv_poll_start_2(uv_poll_t* handle, int events, uv_poll_cb cb)
+* int uv_poll_stop(uv_poll_t* poll)
+* int uv_signal_init(uv_loop_t* loop, uv_signal_t* signal)
+* int uv_signal_start(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_2(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_oneshot(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_oneshot_2(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_stop(uv_signal_t* signal)
+* void uv_disable_stdio_inheritance(void)
+* int uv_spawn(uv_loop_t* loop, uv_process_t* handle, const uv_process_options_t* options)
+* int uv_process_kill(uv_process_t* handle, int signum)
+* int uv_kill(int pid, int signum)
+* int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb)
+* int uv_shutdown_2(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb)
+* int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb)
+* int uv_listen_2(uv_stream_t* stream, int backlog, uv_connection_cb cb)
+* int uv_accept(uv_stream_t* server, uv_stream_t* client)
+* int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
+* int uv_read_start_2(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
+* int uv_read_stop(uv_stream_t*)
+* int uv_write(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_write_cb cb)
+* int uv_write_2(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_write_cb cb)
+* int uv_write2(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_stream_t* send_handle, uv_write_cb cb)
+* int uv_write2_2(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_stream_t* send_handle, uv_write_cb cb)
+* int uv_try_write(uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs)
+* int uv_is_readable(const uv_stream_t* handle)
+* int uv_is_writable(const uv_stream_t* handle)
+* int uv_stream_set_blocking(uv_stream_t* handle, int blocking)
+* int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle)
+* int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags)
+* int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock)
+* int uv_tcp_nodelay(uv_tcp_t* handle, int enable)
+* int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay)
+* int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable)
+* int uv_tcp_bind(uv_tcp_t *handle,sockaddr *addr,unsigned int flags)
+* int uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_tcp_getpeername(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, sockaddr * addr, uv_connect_cb cb)
+* int uv_tcp_connect_2(uv_connect_t* req, uv_tcp_t* handle, sockaddr * addr, uv_connect_cb cb)
+* int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc)
+* int uv_pipe_open(uv_pipe_t* handle, uv_file file)
+* int uv_pipe_bind(uv_pipe_t* handle, const char * name)
+* void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, const char * name, uv_connect_cb cb)
+* void uv_pipe_connect_2(uv_connect_t* req, uv_pipe_t* handle, const char * name, uv_connect_cb cb)
+* int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size)
+* int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size)
+* void uv_pipe_pending_instances(uv_pipe_t* handle, int count)
+* int uv_pipe_pending_count(uv_pipe_t* handle)
+* uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle)
+* int uv_pipe_chmod(uv_pipe_t* handle, int flags)
+* int uv_tty_init(uv_loop_t* loop, uv_tty_t* handle, uv_file fd, int readable)
+* int uv_tty_set_mode(uv_tty_t* handle, uv_tty_mode_t mode)
+* int uv_tty_reset_mode(void)
+* int uv_tty_get_winsize(uv_tty_t* handle, int* width, int* height)
+* int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle)
+* int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned int flags)
+* int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock)
+* int uv_udp_bind(uv_udp_t* handle, sockaddr * addr, unsigned int flags)
+* int uv_udp_getsockname(const uv_udp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_udp_set_membership(uv_udp_t* handle, const char * multicast_addr, const char * interface_addr, uv_membership membership)
+* int uv_udp_set_multicast_loop(uv_udp_t* handle, int on)
+* int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl)
+* int uv_udp_set_multicast_interface(uv_udp_t* handle, const char * interface_addr)
+* int uv_udp_set_broadcast(uv_udp_t* handle, int on)
+* int uv_udp_set_ttl(uv_udp_t* handle, int ttl)
+* int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t *bufs, unsigned int nbufs, sockaddr * addr, uv_udp_send_cb send_cb)
+* int uv_udp_send_2(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t *bufs, unsigned int nbufs, sockaddr * addr, uv_udp_send_cb send_cb)
+* int uv_udp_try_send(uv_udp_t* handle, uv_buf_t *bufs, unsigned int nbufs, sockaddr * addr)
+* int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb)
+* int uv_udp_recv_start_2(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb)
+* int uv_udp_recv_stop(uv_udp_t* handle)
+* int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle)
+* int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, const char * path, unsigned int flags)
+* int uv_fs_event_start_2(uv_fs_event_t* handle, uv_fs_event_cb cb, const char * path, unsigned int flags)
+* int uv_fs_event_stop(uv_fs_event_t* handle)
+* int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* size)
+* int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle)
+* int uv_fs_poll_start(uv_fs_poll_t* handle, uv_fs_poll_cb poll_cb, const char * path, unsigned int interval)
+* int uv_fs_poll_start_2(uv_fs_poll_t* handle, uv_fs_poll_cb poll_cb, const char * path, unsigned int interval)
+* int uv_fs_poll_stop(uv_fs_poll_t* handle)
+* int uv_fs_poll_getpath(uv_fs_poll_t* handle, char* buffer, size_t* size)
+* void uv_fs_req_cleanup(uv_fs_t* req)
+* int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, int mode, uv_fs_cb cb)
+* int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_mkdtemp(uv_loop_t* loop, uv_fs_t* req, const char * tpl, uv_fs_cb cb)
+* int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, uv_fs_cb cb)
+* int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent)
+* int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb)
+* int uv_fs_copyfile(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb)
+* int uv_fs_access(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb)
+* int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char * path, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_close_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_open_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, int mode, uv_fs_cb cb)
+* int uv_fs_read_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_unlink_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_write_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_mkdir_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_mkdtemp_2(uv_loop_t* loop, uv_fs_t* req, const char * tpl, uv_fs_cb cb)
+* int uv_fs_rmdir_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_scandir_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, uv_fs_cb cb)
+* int uv_fs_stat_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_fstat_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_lstat_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_rename_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_fsync_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_fdatasync_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_ftruncate_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb)
+* int uv_fs_copyfile_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_sendfile_2(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb)
+* int uv_fs_access_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_chmod_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_fchmod_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb)
+* int uv_fs_utime_2(uv_loop_t* loop, uv_fs_t* req, const char * path, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_futime_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_link_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_symlink_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_readlink_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_realpath_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_chown_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_fchown_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
+* int uv_queue_work_2(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
+* int uv_getaddrinfo(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char * node, const char * service, const struct addrinfo* hints)
+* int uv_getaddrinfo_2(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char * node, const char * service, const struct addrinfo* hints)
+* void uv_freeaddrinfo(struct addrinfo* ai)
+* int uv_getnameinfo(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, sockaddr * addr, int flags)
+* int uv_getnameinfo_2(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, sockaddr * addr, int flags)
+* int uv_dlopen(const char * filename, uv_lib_t* lib)
+* void uv_dlclose(uv_lib_t* lib)
+* int uv_dlsym(uv_lib_t* lib, const char * name, void** ptr)
+* const char * uv_dlerror(const uv_lib_t* lib)
+* int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg)
+* int uv_thread_create_2(uv_thread_t* tid, uv_thread_cb entry, void* arg)
+* uv_thread_t uv_thread_self(void)
+* int uv_thread_join(uv_thread_t *tid)
+* int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2)
+* int uv_key_create(uv_key_t* key)
+* void uv_key_delete(uv_key_t* key)
+* void* uv_key_get(uv_key_t* key)
+* void uv_key_set(uv_key_t* key, void* value)
+* int uv_mutex_init(uv_mutex_t* handle)
+* int uv_mutex_init_recursive(uv_mutex_t* handle)
+* void uv_mutex_destroy(uv_mutex_t* handle)
+* void uv_mutex_lock(uv_mutex_t* handle)
+* int uv_mutex_trylock(uv_mutex_t* handle)
+* void uv_mutex_unlock(uv_mutex_t* handle)
+* int uv_rwlock_init(uv_rwlock_t* rwlock)
+* void uv_rwlock_destroy(uv_rwlock_t* rwlock)
+* void uv_rwlock_rdlock(uv_rwlock_t* rwlock)
+* int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_rdunlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_wrlock(uv_rwlock_t* rwlock)
+* int uv_rwlock_trywrlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_wrunlock(uv_rwlock_t* rwlock)
+* int uv_sem_init(uv_sem_t* sem, unsigned int value)
+* void uv_sem_destroy(uv_sem_t* sem)
+* void uv_sem_post(uv_sem_t* sem)
+* void uv_sem_wait(uv_sem_t* sem)
+* int uv_sem_trywait(uv_sem_t* sem)
+* int uv_cond_init(uv_cond_t* cond)
+* void uv_cond_destroy(uv_cond_t* cond)
+* void uv_cond_signal(uv_cond_t* cond)
+* void uv_cond_broadcast(uv_cond_t* cond)
+* void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex)
+* int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout)
+* int uv_barrier_init(uv_barrier_t* barrier, unsigned int count)
+* void uv_barrier_destroy(uv_barrier_t* barrier)
+* int uv_barrier_wait(uv_barrier_t* barrier)
+* uv_handle_type uv_guess_handle(uv_file file)
+* int uv_replace_allocator(uv_malloc_func malloc_func, uv_realloc_func realloc_func, uv_calloc_func calloc_func, uv_free_func free_func)
+* uv_buf_t uv_buf_init(char* base, unsigned int len)
+* char** uv_setup_args(int argc, char** argv)
+* int uv_get_process_title(char* buffer, size_t size)
+* int uv_set_process_title(const char * title)
+* int uv_resident_set_memory(size_t* rss)
+* int uv_uptime(double* uptime)
+* int uv_getrusage(uv_rusage_t* rusage)
+* uv_pid_t uv_os_getpid(void)
+* uv_pid_t uv_os_getppid(void)
+* int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count)
+* void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count)
+* int uv_interface_addresses(uv_interface_address_t** addresses, int* count)
+* void uv_free_interface_addresses(uv_interface_address_t* addresses, int count)
+* int uv_ip6_addr(const char * ip, int port, sockaddr_in6* addr)
+* int uv_ip4_name(sockaddr_in* src, char* dst, size_t size)
+* int uv_ip6_name(sockaddr_in6* src, char* dst, size_t size)
+* int uv_inet_ntop(int af, const void* src, char* dst, size_t size)
+* int uv_inet_pton(int af, const char * src, void* dst)
+* int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size)
+* int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size)
+* int uv_exepath(char* buffer, size_t* size)
+* int uv_cwd(char* buffer, size_t* size)
+* int uv_chdir(const char * dir)
+* int uv_os_homedir(char* buffer, size_t* size)
+* int uv_os_tmpdir(char* buffer, size_t* size)
+* int uv_os_get_passwd(uv_passwd_t* pwd)
+* void uv_os_free_passwd(uv_passwd_t* pwd)
+* uint64_t uv_get_total_memory(void)
+* uint64_t uv_hrtime(void)
+* void uv_print_all_handles(uv_loop_t* loop, FILE* stream)
+* void uv_print_active_handles(uv_loop_t* loop, FILE* stream)
+* int uv_os_getenv(const char * name, char* buffer, size_t* size)
+* int uv_os_setenv(const char * name, const char * value)
+* int uv_os_unsetenv(const char * name)
+* int uv_os_gethostname(char* buffer, size_t* size)
diff --git a/docs/en/source/ringlibzipfuncsdoc.txt b/docs/en/source/ringlibzipfuncsdoc.txt
new file mode 100644 (file)
index 0000000..8ba8985
--- /dev/null
@@ -0,0 +1,19 @@
+.. index:: 
+     single: RingLibZip Functions Reference; Introduction
+
+==============================
+RingLibZip Functions Reference
+==============================
+
+* ZIP_T *zip_openfile(const char *, const char *)
+* int zip_entry_open(ZIP_T*, const char *)
+* int zip_entry_write(ZIP_T*, const char *,int)
+* int zip_entry_fwrite(ZIP_T*, const char *)
+* int zip_entry_read(ZIP_T*, void *, size_t *)
+* int zip_entry_fread(ZIP_T*, const char *cFile)
+* int zip_entry_close(ZIP_T*)
+* void zip_extract_file(const char *cZIPFile,const char *cFile)
+* void zip_extract_allfiles(const char *cFile, const char *cFolder)
+* void zip_close(ZIP_T*)
+* int zip_filescount(ZIP_T *)
+* const char *zip_getfilenamebyindex(ZIP_T *pZip,int index)
diff --git a/docs/en/source/ringmurmurhashfuncsdoc.txt b/docs/en/source/ringmurmurhashfuncsdoc.txt
new file mode 100644 (file)
index 0000000..4033025
--- /dev/null
@@ -0,0 +1,75 @@
+.. index:: 
+     single: RingMurmurHash Functions Reference; Introduction
+
+=====================================
+RingMurmurHash Functions Reference
+=====================================
+
+"   MurmurHash is a non-cryptographic hash function suitable for general hash-based lookup.
+    It was created by Austin Appleby in 2008 and is currently hosted on Github along with its test suite named 'SMHasher'.
+    It also exists in a number of variants,[5] all of which have been released into the public domain.
+    The name comes from two basic operations, multiply (MU) and rotate (R), used in its inner loop.  "
+
+Murmurhash extension is an extension written to implement a full implementation for the MurmurHash library.
+
+Developer: Hassan Ahmed
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; MurmurHash1 functions
+
+MurmurHash1 functions
+=====================
+
+uint32_t murmurhash1(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash1_aligned(string key, int seed, [bool return_type]);
+
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; MurmurHash2 functions
+
+MurmurHash2 functions
+=====================
+
+uint32_t murmurhash2(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash2a(string key, int seed, [bool return_type]);
+
+uint64_t murmurhash64a(string key, int seed, [bool return_type]);
+
+uint64_t murmurhash64b(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash_neutral2(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash_aligned2(string key, int seed, [bool return_type]);
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; MurmurHash3 functions
+
+MurmurHash3 functions
+=====================
+
+uint32_t murmurhash3_x86_32(string key, int seed, [bool return_type]);
+
+list murmurhash3_x86_128(string key, int seed, [bool return_type]);
+
+list murmurhash3_x64_128(string key, int seed, [bool return_type]);
+
+The third optional parameter is to set the type of the returned value, this parameter accepts a bool value [ true, false ], true will return a Hex value, while false will return a integer value.
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; Example
+
+Example
+=======
+
+
+.. code-block:: ring
+
+       load "murmurhashlib.ring"
+
+       key = "Ring Language"
+
+       see murmurhash3_x86_32(key, 0, 0) + nl // Output: 1894444853
+       see murmurhash3_x86_32(key, 0, 1) + nl // Output: 70eaef35
+
diff --git a/docs/en/source/ringnatural.png b/docs/en/source/ringnatural.png
new file mode 100644 (file)
index 0000000..b6d9738
Binary files /dev/null and b/docs/en/source/ringnatural.png differ
diff --git a/docs/en/source/ringnotepad.txt b/docs/en/source/ringnotepad.txt
new file mode 100644 (file)
index 0000000..4705627
--- /dev/null
@@ -0,0 +1,339 @@
+.. index:: 
+       single: Ring Notepad; Introduction
+
+==================
+Using Ring Notepad
+==================
+
+In this chapter we will learn about using Ring Notepad to write and execute Ring programs quickly
+
+Ring Notepad is just a simple application developed using the Ring language.
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Main Window
+
+Ring Notepad - Main Window
+==========================
+
+When we run the Ring Notepad we get the next dockable windows
+
+* Project Files Window : where we can select and open any ring file (*.ring) quickly.
+* Source Code Window : Where we write the source code. 
+* Form Designer Window : The Form Designer to create GUI application forms.
+* Web Browser Window : Where we read the documentation or quickly open any website.
+* Output Window : Output when we run programs that print to the standard output
+* Function Window : List of functions in the current source file
+* Classes Window : List of classes in the current source file
+
+.. image:: urn_shot1.png
+       :alt: Using Ring Notepad
+
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first console application 
+
+Creating and running your first Console Application 
+===================================================
+
+At first we will type the source code
+
+.. code-block:: ring
+
+       See "Hello, World!"
+
+As in the next image 
+
+.. image:: urn_shot2.png
+       :alt: Using Ring Notepad
+
+Then we will click on the "Save" button from the toolbar (or press CTRL+S)
+
+.. image:: urn_shot3.png
+       :alt: Using Ring Notepad
+
+Determine the source code file name and location. 
+
+For example type : hello 
+
+This will create a new source code file called : hello.ring
+
+.. image:: urn_shot4.png
+       :alt: Using Ring Notepad
+
+To run the program click on "Debug (Run then wait!)" button from the toolbar
+
+.. image:: urn_shot5.png
+       :alt: Using Ring Notepad
+
+The next screen shot present the application during the runtime
+
+Press Enter to continue and return to the Ring Notepad.
+
+.. image:: urn_shot6.png
+       :alt: Using Ring Notepad
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first GUI application 
+
+Creating and running your first GUI/Mobile Application 
+======================================================
+
+To learn how to create GUI applications using Ring check the "Desktop and Mobile development using RingQt" chapter.
+
+Source Code:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               new qWidget() {
+                       resize(400,400)
+                       setWindowTitle("Hello, World!")
+                       show()
+               }
+               exec()
+       }
+
+In Ring notepad we have a special button to run GUI applications without displaying the console window.
+
+.. image:: urn_shot7.png
+       :alt: Using Ring Notepad
+
+The next screen shot present the application during the runtime
+
+.. image:: urn_shot8.png
+       :alt: Using Ring Notepad
+
+       
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first Web application 
+
+Creating and running your first Web Application 
+===============================================
+
+To learn how support Ring in your web server and how to create web applications using Ring check 
+the "Web Development (CGI Library)" chapter.
+
+.. note:: You need to support the Ring language in your web server to be able to run the next example.
+
+Source Code:
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       load "weblib.ring"
+
+       Import System.Web
+
+       new page {
+
+               text("Hello, World!")
+
+       }
+
+
+We can run the application in any web browser or in the browser that are embedded in Ring Notepad.
+
+.. image:: urn_shot9.png
+       :alt: Using Ring Notepad
+
+For Windows users, Ring comes with Apache Web server!
+
+We can run any web application from any folder directly without doing any configuration.
+
+.. image:: runwebapp1.png
+       :alt: Ring Notepad - Run Web Application - shot 1
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first game 
+
+Creating and running your first Desktop/Mobile Game
+===================================================
+
+To learn about creating 2D Games using Ring check the "Demo Project - Game Engine for 2D Games" chapter.
+
+Source Code:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                           
+
+       func main                                        
+
+               oGame = New Game                         
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER            
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=true        
+                               Scaled=true
+                       }
+               }                                        
+
+
+We can run the application as any GUI application.
+
+.. image:: urn_shot10.png
+       :alt: Using Ring Notepad
+
+
+.. index:: 
+       pair: Ring Notepad; The Main File in the Project
+
+The Main File in the Project
+============================
+
+The idea of the Main File ToolBar is to determine the main file in the project When the project contains many source code files
+
+Using this feature we can run the project (Main File) at any time while opening other files in the project without the need to switch to the Main File to run the project.
+
+To quickly use this feature
+
+(Open the project main file)
+
+Press Ctrl+Shift+M to set the current source code file as the main file
+
+Open and modify other source code files in the project
+
+To run the project (Main File) at any time press Ctrl+Shift+F5 (GUI) or Ctrl+Shift+D (Console)
+
+Screen Shots:
+
+.. image:: urn_shot11.png
+       :alt: Ring Notepad
+
+.. image:: urn_shot12.png
+       :alt: Ring Notepad
+
+
+.. index:: 
+       pair: Ring Notepad; The File Menu
+
+The File Menu
+=============
+
+From this menu we can create, open and save the source code files.
+
+Another feature in this menu is "Print to PDF" 
+
+.. image:: rnotemenu_file.png
+       :alt: Ring Notepad - File Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Edit Menu
+
+The Edit Menu
+=============
+
+From the Edit menu we can Cut, Copy and Paste text.
+
+Also we can change the font and the colors.
+
+We can Go to a specific line or use the Find and Replace window 
+to find and replace text.
+
+Also We can set the Tab Width (Number of Spaces)
+
+Starting from Ring 1.8 we have the (Find in Files) option.
+
+Starting from Ring 1.11 we have the (Insert Text, Lower Case, Upper Case & Capitalize) options.
+
+.. image:: rnotemenu_edit.png
+       :alt: Ring Notepad - Edit Menu
+
+.. index:: 
+       pair: Ring Notepad; The View Menu
+
+The View Menu
+=============
+
+From this menu we can show/hide the dockable windows
+
+Also we can change the Style of the Ring Notepad
+
+Common Styles are (Fusion White and Modern Black)
+
+.. image:: rnotemenu_view.png
+       :alt: Ring Notepad - View Menu
+
+Also we can quickly show/hide group of dockable windows based on the context
+
+.. image:: rnotemenu_mode.png
+       :alt: Ring Notepad - View Menu - Set Mode
+
+
+.. index:: 
+       pair: Ring Notepad; The Program Menu
+
+The Program Menu
+================
+
+From this menu we can run the programs
+
+Also we can set the Main file in the project
+
+.. image:: rnotemenu_program.png
+       :alt: Ring Notepad - Program Menu
+
+.. index:: 
+       pair: Ring Notepad; The Browser Menu
+
+The Browser Menu
+================
+
+From this menu we can quickly open common links in the browser
+
+.. image:: rnotemenu_browser.png
+       :alt: Ring Notepad - Browser Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Tools Menu
+
+The Tools Menu
+==============
+
+From this menu we can run the Form Designer in separate window
+
+Also we can run the REPL (Read-Eval-Print-Loop) application
+
+.. image:: rnotemenu_tools.png
+       :alt: Ring Notepad - Tools Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Distribute Menu
+
+The Distribute Menu
+===================
+
+From this menu we can build an executable file for the application
+
+Also we can prepare the application for distribution 
+
+.. image:: rnotedistributemenu.png
+       :alt: Ring Notepad - Distribute Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Help Menu
+
+The Help Menu
+=============
+
+From this menu we can get the help files (CHM & PDF)
+
+.. image:: rnotemenu_help.png
+       :alt: Ring Notepad - Help Menu
+
+
+
+
diff --git a/docs/en/source/ringnotepad_screenshot.png b/docs/en/source/ringnotepad_screenshot.png
new file mode 100644 (file)
index 0000000..a204e82
Binary files /dev/null and b/docs/en/source/ringnotepad_screenshot.png differ
diff --git a/docs/en/source/ringonmanjarolinux.png b/docs/en/source/ringonmanjarolinux.png
new file mode 100644 (file)
index 0000000..844fcba
Binary files /dev/null and b/docs/en/source/ringonmanjarolinux.png differ
diff --git a/docs/en/source/ringopengl11funcsdoc.txt b/docs/en/source/ringopengl11funcsdoc.txt
new file mode 100644 (file)
index 0000000..a2fe13e
--- /dev/null
@@ -0,0 +1,877 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/source/ringopengl12funcsdoc.txt b/docs/en/source/ringopengl12funcsdoc.txt
new file mode 100644 (file)
index 0000000..506bd83
--- /dev/null
@@ -0,0 +1,917 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.2) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.2) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/source/ringopengl13funcsdoc.txt b/docs/en/source/ringopengl13funcsdoc.txt
new file mode 100644 (file)
index 0000000..e6d8cfe
--- /dev/null
@@ -0,0 +1,1013 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.3) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.3) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/source/ringopengl14funcsdoc.txt b/docs/en/source/ringopengl14funcsdoc.txt
new file mode 100644 (file)
index 0000000..bbf9532
--- /dev/null
@@ -0,0 +1,1052 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.4) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.4) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/source/ringopengl15funcsdoc.txt b/docs/en/source/ringopengl15funcsdoc.txt
new file mode 100644 (file)
index 0000000..8cc3665
--- /dev/null
@@ -0,0 +1,1102 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.5) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.5) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/source/ringopengl20funcsdoc.txt b/docs/en/source/ringopengl20funcsdoc.txt
new file mode 100644 (file)
index 0000000..90cf9a4
--- /dev/null
@@ -0,0 +1,1186 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 2.0) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 2.0) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/source/ringopengl21funcsdoc.txt b/docs/en/source/ringopengl21funcsdoc.txt
new file mode 100644 (file)
index 0000000..4021008
--- /dev/null
@@ -0,0 +1,1466 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 2.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 2.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl30funcsdoc.txt b/docs/en/source/ringopengl30funcsdoc.txt
new file mode 100644 (file)
index 0000000..30907fd
--- /dev/null
@@ -0,0 +1,1571 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.0) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.0) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl31funcsdoc.txt b/docs/en/source/ringopengl31funcsdoc.txt
new file mode 100644 (file)
index 0000000..7ff162e
--- /dev/null
@@ -0,0 +1,1605 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl32funcsdoc.txt b/docs/en/source/ringopengl32funcsdoc.txt
new file mode 100644 (file)
index 0000000..9f77a9a
--- /dev/null
@@ -0,0 +1,1627 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.2) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.2) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl33funcsdoc.txt b/docs/en/source/ringopengl33funcsdoc.txt
new file mode 100644 (file)
index 0000000..f0f02de
--- /dev/null
@@ -0,0 +1,1628 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.3) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.3) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_RGB10_A2UI
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl40funcsdoc.txt b/docs/en/source/ringopengl40funcsdoc.txt
new file mode 100644 (file)
index 0000000..0b9f92d
--- /dev/null
@@ -0,0 +1,1641 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.0) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.0) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl41funcsdoc.txt b/docs/en/source/ringopengl41funcsdoc.txt
new file mode 100644 (file)
index 0000000..62021db
--- /dev/null
@@ -0,0 +1,1641 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl42funcsdoc.txt b/docs/en/source/ringopengl42funcsdoc.txt
new file mode 100644 (file)
index 0000000..79de5b2
--- /dev/null
@@ -0,0 +1,1649 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.2) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.2) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl43funcsdoc.txt b/docs/en/source/ringopengl43funcsdoc.txt
new file mode 100644 (file)
index 0000000..dde841a
--- /dev/null
@@ -0,0 +1,1651 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.3) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.3) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl44funcsdoc.txt b/docs/en/source/ringopengl44funcsdoc.txt
new file mode 100644 (file)
index 0000000..15ff710
--- /dev/null
@@ -0,0 +1,1654 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.4) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.4) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl45funcsdoc.txt b/docs/en/source/ringopengl45funcsdoc.txt
new file mode 100644 (file)
index 0000000..0e39358
--- /dev/null
@@ -0,0 +1,1655 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.5) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.5) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringopengl46funcsdoc.txt b/docs/en/source/ringopengl46funcsdoc.txt
new file mode 100644 (file)
index 0000000..b86c3da
--- /dev/null
@@ -0,0 +1,1676 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.6) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.6) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT
+* GL_PARAMETER_BUFFER
+* GL_PARAMETER_BUFFER_BINDING
+* GL_TRANSFORM_FEEDBACK_OVERFLOW
+* GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW
+* GL_VERTICES_SUBMITTED
+* GL_PRIMITIVES_SUBMITTED
+* GL_VERTEX_SHADER_INVOCATIONS
+* GL_TESS_CONTROL_SHADER_PATCHES
+* GL_TESS_EVALUATION_SHADER_INVOCATIONS
+* GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED
+* GL_FRAGMENT_SHADER_INVOCATIONS
+* GL_COMPUTE_SHADER_INVOCATIONS
+* GL_CLIPPING_INPUT_PRIMITIVES
+* GL_CLIPPING_OUTPUT_PRIMITIVES
+* GL_TEXTURE_MAX_ANISOTROPY
+* GL_MAX_TEXTURE_MAX_ANISOTROPY
+* GL_POLYGON_OFFSET_CLAMP
+* GL_SHADER_BINARY_FORMAT_SPIR_V
+* GL_SPIR_V_BINARY
+* GL_SPIR_V_EXTENSIONS
+* GL_NUM_SPIR_V_EXTENSIONS
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/source/ringpm.txt b/docs/en/source/ringpm.txt
new file mode 100644 (file)
index 0000000..27f09d3
--- /dev/null
@@ -0,0 +1,632 @@
+.. index:: 
+       single: Ring Package Manager (RingPM); Introduction
+
+=================================
+The Ring Package Manager (RingPM)
+=================================
+
+In this chapter we will learn about using the Ring Package Manager (RingPM)
+
+RingPM is a tool for discovering, installing and updating Ring packages.
+
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Features
+
+Features
+========
+
+The Package Manager uses Semantic Versioning to check compatibility between packages 
+
+The Package Manager comes with the next options
+
+.. code-block:: none
+
+       Usage   : ringpm [command]
+       Command : search  [keywords...]
+       Command : refresh : Update the Registry (Packages List)
+       Command : install [ <packagename> [from <UserName>] [branch <branchname>] ]
+       Command : list    [-u : check updates]
+       Command : run     [packagename]
+       Command : update  <packagename>
+       Command : remove  <packagename>
+       Command : format  : Delete All Packages
+       Command : new     <packagename>
+       Command : package : Create package in the current folder
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Discovering Packages
+
+Discovering Packages
+====================
+
+We can discover new packages using the Search command
+
+Using this command we can search in the RingPM Registry (Packages Index)
+
+The RingPM Registry is a local copy of all registred packages.
+
+.. code-block:: none
+
+       ringpm search [keywords...]
+
+Example:
+
+.. code-block:: none
+
+       ringpm search notepad
+
+Output:
+
+.. code-block:: none
+
+       Package : ringnotepad (Ring Notepad)
+       Package : notepadppeditorextension (Notepad++ Editor Extension package)
+
+To print all packages in the RingPM Registry, use the search command without keywords.
+
+Example:
+
+.. code-block:: none
+
+       ringpm search
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Updating the RingPM Registry
+
+Updating the RingPM Registry
+============================
+
+The RingPM Registry is a local copy of all registred packages.
+
+We can update the local copy using the Refresh command
+
+Example:
+
+.. code-block:: none
+
+       ringpm refresh
+
+Output:
+
+.. code-block:: none
+
+       No updates to the Registry, Nothing to do!
+
+Or
+
+.. code-block:: none
+
+       The Registry is updated from revision 110 (2019/01/13) to revision 112 (2019/01/15)
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Installing Packages
+
+Installing Packages
+===================
+
+
+We can install new packages using the Install command
+
+.. code-block:: none
+
+       ringpm install [ <packagename> [from <UserName>] [branch <branchname>] ]
+
+We can type only the package name to get the package information from the RingPM Registry or
+we can determine the user name (GitHub) and the branch name of the github project (optional).
+
+If the current folder is a package folder then we don't need to write the package name. 
+
+Example (1) :
+
+.. code-block:: none
+
+       ringpm install ringnotepad
+
+Example (2) :
+
+.. code-block:: none
+
+       ringpm install goldmagic800
+
+Example (3) :
+
+.. code-block:: none
+
+       ringpm install gameoflife
+
+If the package is not added to the RingPM Registry, We can install it directly from the GitHub user
+
+Example (4) :
+
+.. code-block:: none
+
+       ringpm install firstpackage from mahmoudfayed
+
+To run the package after installation
+
+.. code-block:: none
+
+       ringpm run firstpackage
+
+To install a package in the current folder
+
+Example (5) :
+
+.. code-block:: none
+
+       ringpm install
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Printing List of Installed Packages
+
+Printing List of Installed Packages
+===================================
+
+We can know the installed packages using the List command
+
+.. code-block:: none
+
+       ringpm list [-u : check updates]
+
+Example
+
+.. code-block:: none
+
+       ringpm list
+
+Output
+
+.. code-block:: none
+
+       (analogclock)          : The AnalogClock Package [master]         -- (1.0.0)
+       (androidringlibsdl)    : The AndroidRingLibSDL Package [master]   -- (1.0.0)
+       (androidringqt)        : The AndroidRingQt Package [master]       -- (1.0.0)
+       (atomeditorextension)  : The AtomEditorExtension Package [master] -- (1.0.0)
+       (bignumber)            : The BigNumber Package [master]           -- (1.0.0)
+       (calculator)           : The Calculator Package [master]          -- (1.0.0)
+       (cards)                : The Cards Package [master]               -- (1.0.0)
+       (checkers)             : The Checkers Package [master]            -- (1.0.0)
+       (chess)                : The Chess Package [master]               -- (1.0.0)
+       ....
+
+To check for new updates
+
+.. code-block:: none
+
+       ringpm list -u
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Run Package
+
+Run Package
+===========
+
+After installing a package, we can run it using the Run command.
+
+.. code-block:: none
+
+       ringpm run [packagename]
+
+Example(1):
+
+.. code-block:: none
+
+       ringpm run ringnotepad
+
+Example(2):
+
+.. code-block:: none
+
+       ringpm run goldmagic800
+
+Example(3):
+
+.. code-block:: none
+
+       ringpm run gameoflife
+
+To run a package in the current folder
+
+Example(4):
+
+.. code-block:: none
+
+       ringpm run
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Update Package
+
+Update Package
+==============
+
+We can update a package using the Update command
+
+.. code-block:: none
+
+       ringpm update <packagename>
+
+Example:
+
+.. code-block:: none
+
+       ringpm update ringnotepad
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Remove Package
+
+Remove Package
+==============
+
+We can remove a package using the Remove command
+
+.. code-block:: none
+
+       ringpm remove <packagename>
+
+Example:
+
+.. code-block:: none
+
+       ringpm remove ringnotepad
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Deleting All Packages
+
+Deleting All Packages
+=====================
+
+We can delete all packages using the Format command
+
+Example:
+
+.. code-block:: none
+
+       ringpm format
+
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Creating New Package
+
+Creating New Package
+====================
+
+We can create new package using the New command
+
+.. code-block:: none
+
+       ringpm new <packagename>
+
+Example:
+
+.. code-block:: none
+
+       ringpm new myapp
+
+This will create new folder called my myapp
+
+The new folder will contains the next file
+
+* package.ring : The package description and files 
+* main.ring : main program (used by the Run command)
+* lib.ring : library file for the package 
+
+File  : main.ring
+
+.. code-block:: ring
+
+       # The Main File
+
+       load "lib.ring"
+
+       func main
+
+               ? "Hello, World!"
+
+
+File : lib.ring
+
+.. code-block:: ring
+
+       # The Library File
+
+File : package.ring
+
+.. code-block:: ring
+
+       aPackageInfo = [
+               :name = "The myapp Package",
+               :description = "Our myapp package using the Ring programming language",
+               :folder = "myapp",
+               :developer = "",
+               :email = "",
+               :license = "MIT License",
+               :version = "1.0.0",
+               :ringversion = "1.10",
+               :versions =     [
+                       [
+                               :version = "1.0.0",
+                               :branch = "master"
+                       ]
+               ],
+               :libs =         [
+                       [
+                               :name = "",
+                               :version = "",
+                               :providerusername = ""
+                       ]
+               ],
+               :files =        [
+                       "lib.ring",
+                       "main.ring"
+               ],
+               :ringfolderfiles =      [
+
+               ],
+               :windowsfiles =         [
+
+               ],
+               :linuxfiles =   [
+
+               ],
+               :ubuntufiles =  [
+
+               ],
+               :fedorafiles =  [
+
+               ],
+               :macosfiles =   [
+
+               ],
+               :windowsringfolderfiles =       [
+
+               ],
+               :linuxringfolderfiles =         [
+
+               ],
+               :ubunturingfolderfiles =        [
+
+               ],
+               :fedoraringfolderfiles =        [
+
+               ],
+               :macosringfolderfiles =         [
+
+               ],
+               :run = "ring main.ring",
+               :windowsrun = "",
+               :linuxrun = "",
+               :macosrun = "",
+               :ubunturun = "",
+               :fedorarun = "",
+               :setup = "",
+               :windowssetup = "",
+               :linuxsetup = "",
+               :macossetup = "",
+               :ubuntusetup = "",
+               :fedorasetup = "",
+               :remove = "",
+               :windowsremove = "",
+               :linuxremove = "",
+               :macosremove = "",
+               :ubunturemove = "",
+               :fedoraremove = ""
+       ]
+       
+.. index:: 
+       pair: Ring Package Manager (RingPM); The Package Description File
+
+The Package Description File
+============================
+
+The package description file contains the package information defined in the list aPackageInfo
+
+=======================        =================================================================================
+Attribute              Description
+=======================        =================================================================================
+Name                   Package Name
+Description            Package Desciption
+Folder                 The Folder Name (Will be created in ring/ringpm/packages)
+Developer              The Package Developer Name  
+Email                  The Package Developer Email
+License                        The Package License
+Version                        The Current Version of the Package (Latest Release)
+RingVersion            The Required Ring Language Version (Minimum Version)
+Versions               List of different versions provided by different branches in the GitHub project 
+Libs                   List of dependencies (Defined by name, version & GitHub user name)
+Files                  List of files (will be installed in ring/ringpm/packages/[Folder]
+RingFolderFiles                List of files (will be installed in ring folder)
+WindowsFiles           Like (Files) but for Microsoft Windows Only
+LinuxFiles             Like (Files) but for Linux Only
+MacOSFiles             Like (Files) but for macOS Only
+UbuntuFiles            Like (Files) but for Ubuntu Only
+FedoraFiles            Like (Files) but for Fedora Only
+WindowsRingFolderFiles         Like (RingFolderFiles) but for Microsoft Windows Only
+LinuxRingFolderFiles   Like (RingFolderFiles) but for Linux Only
+MacOSRingFolderFiles   Like (RingFolderFiles) but for macOS Only
+UbuntuRingFolderFiles  Like (RingFolderFiles) but for Ubuntu Only
+FedoraRingFolderFiles  Like (RingFolderFiles) but for Fedora Only
+Run                    System Command (Command prompt or Terminal) to run the package
+WindowsRun             Like (Run) but for Microsoft Windows Only
+LinuxRun               Like (Run) but for Linux Only
+MacOSRun               Like (Run) but for macOS Only
+UbuntuRun              Like (Run) but for Ubuntu Only
+FedoraRun              Like (Run) but for Fedora Only
+Setup                  System Command (Command prompt or Terminal) after downloading the package files
+WindowsSetup           Like (Setup) but for Microsoft Windows Only
+LinuxSetup             Like (Setup) but for Linux Only
+MacOSSetup             Like (Setup) but for macOS Only
+UbuntuSetup            Like (Setup) but for Ubuntu Only
+FedoraSetup            Like (Setup) but for Fedora Only
+Remove                 System Command (Command prompt or Terminal) before removing the package files
+WindowsRemove          Like (Remove) but for Microsoft Windows Only
+LinuxRemove            Like (Remove) but for Linux Only
+MacOSRemove            Like (Remove) but for macOS Only
+UbuntuRemove           Like (Remove) but for Ubuntu Only
+FedoraRemove           Like (Remove) but for Fedora Only
+=======================        =================================================================================
+
+
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Create Package in the Current Folder
+
+Create Package in the Current Folder
+====================================
+
+To create a package for an application that already exists, go to the application folder then type
+
+.. code-block:: none
+
+       ringpm package
+
+This will create the package definition file (package.ring) and will add all of the application files to the package definition.
+
+Each RingPM package contains the package definition file (package.ring)
+
+The package definition file is a list that describe the package information and files.
+
+Example : 
+
+The package definition file for the Ring Notepad package
+
+.. code-block:: ring
+
+       aPackageInfo = [
+               :name = "The RingNotepad Package",
+               :description = "Our RingNotepad package using the Ring programming language",
+               :folder = "ringnotepad",
+               :developer = "Mahmoud Fayed",
+               :email = "msfclipper@yahoo.com",
+               :license = "MIT License",
+               :version = "1.0.0",
+               :ringversion = "1.10",
+               :versions =     [
+                       [
+                               :version = "1.0.0",
+                               :branch = "master"
+                       ]
+               ],
+               :libs =         [
+                       [
+                               :name = "stdlib",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "ringqt",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "findinfiles",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "formdesigner",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "libdepwin_apache",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ]
+               ],
+               :files =        [
+                       "main.ring",
+                       "README.md"
+               ],
+               :ringfolderfiles =      [
+                       "applications/rnote/batch/killwebserver.bat",
+                       "applications/rnote/batch/run.bat",
+                       "applications/rnote/batch/run2.bat",
+                       "applications/rnote/image/back.jpg",
+                       "applications/rnote/image/back2.jpg",
+                       "applications/rnote/image/close.png",
+                       "applications/rnote/image/colors.png",
+                       "applications/rnote/image/copy.png",
+                       "applications/rnote/image/cut.png",
+                       "applications/rnote/image/debug.png",
+                       "applications/rnote/image/font.png",
+                       "applications/rnote/image/formdesigner.png",
+                       "applications/rnote/image/new.png",
+                       "applications/rnote/image/notepad.png",
+                       "applications/rnote/image/open.png",
+                       "applications/rnote/image/paste.png",
+                       "applications/rnote/image/print.png",
+                       "applications/rnote/image/project.png",
+                       "applications/rnote/image/richtext.png",
+                       "applications/rnote/image/run.png",
+                       "applications/rnote/image/rungui.png",
+                       "applications/rnote/image/save.png",
+                       "applications/rnote/image/saveas.png",
+                       "applications/rnote/image/search.png",
+                       "applications/rnote/image/source.png",
+                       "applications/rnote/image/undo.png",
+                       "applications/rnote/image/web.png",
+                       "applications/rnote/README.md",
+                       "applications/rnote/rnote.ring",
+                       "applications/rnote/rnoteactivefile.ring",
+                       "applications/rnote/rnoteactivefolder.ring",
+                       "applications/rnote/rnoteautocomplete.ring",
+                       "applications/rnote/rnotebase.ring",
+                       "applications/rnote/rnotecontroller.ring",
+                       "applications/rnote/rnotedistribute.ring",
+                       "applications/rnote/rnoteeditmenu.ring",
+                       "applications/rnote/rnoteeditorevents.ring",
+                       "applications/rnote/rnotefilemenu.ring",
+                       "applications/rnote/rnotefiles.ring",
+                       "applications/rnote/rnotefilestabs.ring",
+                       "applications/rnote/rnotefind.ring",
+                       "applications/rnote/rnotefindinfiles.ring",
+                       "applications/rnote/rnoteformdesigner.ring",
+                       "applications/rnote/rnotegoto.ring",
+                       "applications/rnote/rnotehelp.ring",
+                       "applications/rnote/rnotelists.ring",
+                       "applications/rnote/rnotemainfiletoolbar.ring",
+                       "applications/rnote/rnotemainwindow.ring",
+                       "applications/rnote/rnotemode.ring",
+                       "applications/rnote/rnoteoutputwindow.ring",
+                       "applications/rnote/rnoteprogrammenu.ring",
+                       "applications/rnote/rnoterun.ring",
+                       "applications/rnote/rnotesettings.ring",
+                       "applications/rnote/rnotestyle.ring",
+                       "applications/rnote/rnotetabwidth.ring",
+                       "applications/rnote/rnotetools.ring",
+                       "applications/rnote/rnotetreeviewevents.ring",
+                       "applications/rnote/rnoteviewmenu.ring",
+                       "applications/rnote/rnotewebbrowser.ring"
+               ],
+               :run = "ring main.ring"
+       ]
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); The RingPM Registry File
+
+The RingPM Registry File
+========================
+
+The RingPM Registry is a local copy of all registred packages.
+
+.. code-block:: ring
+
+       aPackagesRegistry = [
+               [ :name = "ringpresentation",
+                 :description = "Powerpoint presentation for the Ring programming language",
+                 :ProviderUserName = "ringpackages"
+               ]
+               # ...
+       ]
+
+Each package is defined using a list that determine 
+
+* Package Name
+* Package Description
+* Provider User Name (GitHub User Name)
+
+We can register new packages by updating the registry file then sending a Pull Request
+
+URL : https://github.com/ring-lang/ring/blob/master/ringpm/registry/registry.ring
+
diff --git a/docs/en/source/ringqt_shot1.jpg b/docs/en/source/ringqt_shot1.jpg
new file mode 100644 (file)
index 0000000..6be6b88
Binary files /dev/null and b/docs/en/source/ringqt_shot1.jpg differ
diff --git a/docs/en/source/ringqt_shot10.jpg b/docs/en/source/ringqt_shot10.jpg
new file mode 100644 (file)
index 0000000..77f98d0
Binary files /dev/null and b/docs/en/source/ringqt_shot10.jpg differ
diff --git a/docs/en/source/ringqt_shot11.jpg b/docs/en/source/ringqt_shot11.jpg
new file mode 100644 (file)
index 0000000..af53b68
Binary files /dev/null and b/docs/en/source/ringqt_shot11.jpg differ
diff --git a/docs/en/source/ringqt_shot12.jpg b/docs/en/source/ringqt_shot12.jpg
new file mode 100644 (file)
index 0000000..cebc4bb
Binary files /dev/null and b/docs/en/source/ringqt_shot12.jpg differ
diff --git a/docs/en/source/ringqt_shot13.jpg b/docs/en/source/ringqt_shot13.jpg
new file mode 100644 (file)
index 0000000..d5f69ab
Binary files /dev/null and b/docs/en/source/ringqt_shot13.jpg differ
diff --git a/docs/en/source/ringqt_shot14.jpg b/docs/en/source/ringqt_shot14.jpg
new file mode 100644 (file)
index 0000000..5919832
Binary files /dev/null and b/docs/en/source/ringqt_shot14.jpg differ
diff --git a/docs/en/source/ringqt_shot15-B.jpg b/docs/en/source/ringqt_shot15-B.jpg
new file mode 100644 (file)
index 0000000..46491bd
Binary files /dev/null and b/docs/en/source/ringqt_shot15-B.jpg differ
diff --git a/docs/en/source/ringqt_shot15.jpg b/docs/en/source/ringqt_shot15.jpg
new file mode 100644 (file)
index 0000000..c2a2f00
Binary files /dev/null and b/docs/en/source/ringqt_shot15.jpg differ
diff --git a/docs/en/source/ringqt_shot16.jpg b/docs/en/source/ringqt_shot16.jpg
new file mode 100644 (file)
index 0000000..d6c13ae
Binary files /dev/null and b/docs/en/source/ringqt_shot16.jpg differ
diff --git a/docs/en/source/ringqt_shot17.jpg b/docs/en/source/ringqt_shot17.jpg
new file mode 100644 (file)
index 0000000..4c2f196
Binary files /dev/null and b/docs/en/source/ringqt_shot17.jpg differ
diff --git a/docs/en/source/ringqt_shot18.jpg b/docs/en/source/ringqt_shot18.jpg
new file mode 100644 (file)
index 0000000..c5e0fda
Binary files /dev/null and b/docs/en/source/ringqt_shot18.jpg differ
diff --git a/docs/en/source/ringqt_shot19.jpg b/docs/en/source/ringqt_shot19.jpg
new file mode 100644 (file)
index 0000000..6ccb1dd
Binary files /dev/null and b/docs/en/source/ringqt_shot19.jpg differ
diff --git a/docs/en/source/ringqt_shot2.jpg b/docs/en/source/ringqt_shot2.jpg
new file mode 100644 (file)
index 0000000..85df266
Binary files /dev/null and b/docs/en/source/ringqt_shot2.jpg differ
diff --git a/docs/en/source/ringqt_shot20.jpg b/docs/en/source/ringqt_shot20.jpg
new file mode 100644 (file)
index 0000000..add0364
Binary files /dev/null and b/docs/en/source/ringqt_shot20.jpg differ
diff --git a/docs/en/source/ringqt_shot21.jpg b/docs/en/source/ringqt_shot21.jpg
new file mode 100644 (file)
index 0000000..e02df0a
Binary files /dev/null and b/docs/en/source/ringqt_shot21.jpg differ
diff --git a/docs/en/source/ringqt_shot22.jpg b/docs/en/source/ringqt_shot22.jpg
new file mode 100644 (file)
index 0000000..6d86117
Binary files /dev/null and b/docs/en/source/ringqt_shot22.jpg differ
diff --git a/docs/en/source/ringqt_shot23.jpg b/docs/en/source/ringqt_shot23.jpg
new file mode 100644 (file)
index 0000000..2dabd0d
Binary files /dev/null and b/docs/en/source/ringqt_shot23.jpg differ
diff --git a/docs/en/source/ringqt_shot24.jpg b/docs/en/source/ringqt_shot24.jpg
new file mode 100644 (file)
index 0000000..95e585f
Binary files /dev/null and b/docs/en/source/ringqt_shot24.jpg differ
diff --git a/docs/en/source/ringqt_shot25.jpg b/docs/en/source/ringqt_shot25.jpg
new file mode 100644 (file)
index 0000000..4db7f4b
Binary files /dev/null and b/docs/en/source/ringqt_shot25.jpg differ
diff --git a/docs/en/source/ringqt_shot26.jpg b/docs/en/source/ringqt_shot26.jpg
new file mode 100644 (file)
index 0000000..86d5a36
Binary files /dev/null and b/docs/en/source/ringqt_shot26.jpg differ
diff --git a/docs/en/source/ringqt_shot27.jpg b/docs/en/source/ringqt_shot27.jpg
new file mode 100644 (file)
index 0000000..8093a83
Binary files /dev/null and b/docs/en/source/ringqt_shot27.jpg differ
diff --git a/docs/en/source/ringqt_shot28.jpg b/docs/en/source/ringqt_shot28.jpg
new file mode 100644 (file)
index 0000000..d37333c
Binary files /dev/null and b/docs/en/source/ringqt_shot28.jpg differ
diff --git a/docs/en/source/ringqt_shot29.jpg b/docs/en/source/ringqt_shot29.jpg
new file mode 100644 (file)
index 0000000..8c121ce
Binary files /dev/null and b/docs/en/source/ringqt_shot29.jpg differ
diff --git a/docs/en/source/ringqt_shot3.jpg b/docs/en/source/ringqt_shot3.jpg
new file mode 100644 (file)
index 0000000..e06b786
Binary files /dev/null and b/docs/en/source/ringqt_shot3.jpg differ
diff --git a/docs/en/source/ringqt_shot30.jpg b/docs/en/source/ringqt_shot30.jpg
new file mode 100644 (file)
index 0000000..70c477d
Binary files /dev/null and b/docs/en/source/ringqt_shot30.jpg differ
diff --git a/docs/en/source/ringqt_shot31.jpg b/docs/en/source/ringqt_shot31.jpg
new file mode 100644 (file)
index 0000000..6e2abe7
Binary files /dev/null and b/docs/en/source/ringqt_shot31.jpg differ
diff --git a/docs/en/source/ringqt_shot32.jpg b/docs/en/source/ringqt_shot32.jpg
new file mode 100644 (file)
index 0000000..31ab916
Binary files /dev/null and b/docs/en/source/ringqt_shot32.jpg differ
diff --git a/docs/en/source/ringqt_shot33.jpg b/docs/en/source/ringqt_shot33.jpg
new file mode 100644 (file)
index 0000000..3063664
Binary files /dev/null and b/docs/en/source/ringqt_shot33.jpg differ
diff --git a/docs/en/source/ringqt_shot34.jpg b/docs/en/source/ringqt_shot34.jpg
new file mode 100644 (file)
index 0000000..b30e2e9
Binary files /dev/null and b/docs/en/source/ringqt_shot34.jpg differ
diff --git a/docs/en/source/ringqt_shot35.jpg b/docs/en/source/ringqt_shot35.jpg
new file mode 100644 (file)
index 0000000..d178473
Binary files /dev/null and b/docs/en/source/ringqt_shot35.jpg differ
diff --git a/docs/en/source/ringqt_shot36.jpg b/docs/en/source/ringqt_shot36.jpg
new file mode 100644 (file)
index 0000000..d684307
Binary files /dev/null and b/docs/en/source/ringqt_shot36.jpg differ
diff --git a/docs/en/source/ringqt_shot37.jpg b/docs/en/source/ringqt_shot37.jpg
new file mode 100644 (file)
index 0000000..2bbd564
Binary files /dev/null and b/docs/en/source/ringqt_shot37.jpg differ
diff --git a/docs/en/source/ringqt_shot38.jpg b/docs/en/source/ringqt_shot38.jpg
new file mode 100644 (file)
index 0000000..ec6f632
Binary files /dev/null and b/docs/en/source/ringqt_shot38.jpg differ
diff --git a/docs/en/source/ringqt_shot39.jpg b/docs/en/source/ringqt_shot39.jpg
new file mode 100644 (file)
index 0000000..e2365ca
Binary files /dev/null and b/docs/en/source/ringqt_shot39.jpg differ
diff --git a/docs/en/source/ringqt_shot4.jpg b/docs/en/source/ringqt_shot4.jpg
new file mode 100644 (file)
index 0000000..02e58c9
Binary files /dev/null and b/docs/en/source/ringqt_shot4.jpg differ
diff --git a/docs/en/source/ringqt_shot40.jpg b/docs/en/source/ringqt_shot40.jpg
new file mode 100644 (file)
index 0000000..ed63658
Binary files /dev/null and b/docs/en/source/ringqt_shot40.jpg differ
diff --git a/docs/en/source/ringqt_shot41.jpg b/docs/en/source/ringqt_shot41.jpg
new file mode 100644 (file)
index 0000000..dc8ec01
Binary files /dev/null and b/docs/en/source/ringqt_shot41.jpg differ
diff --git a/docs/en/source/ringqt_shot42.jpg b/docs/en/source/ringqt_shot42.jpg
new file mode 100644 (file)
index 0000000..124f6cb
Binary files /dev/null and b/docs/en/source/ringqt_shot42.jpg differ
diff --git a/docs/en/source/ringqt_shot43.jpg b/docs/en/source/ringqt_shot43.jpg
new file mode 100644 (file)
index 0000000..ab8e07f
Binary files /dev/null and b/docs/en/source/ringqt_shot43.jpg differ
diff --git a/docs/en/source/ringqt_shot44.jpg b/docs/en/source/ringqt_shot44.jpg
new file mode 100644 (file)
index 0000000..cd29ce2
Binary files /dev/null and b/docs/en/source/ringqt_shot44.jpg differ
diff --git a/docs/en/source/ringqt_shot45.jpg b/docs/en/source/ringqt_shot45.jpg
new file mode 100644 (file)
index 0000000..cb8b58b
Binary files /dev/null and b/docs/en/source/ringqt_shot45.jpg differ
diff --git a/docs/en/source/ringqt_shot46.jpg b/docs/en/source/ringqt_shot46.jpg
new file mode 100644 (file)
index 0000000..2caef03
Binary files /dev/null and b/docs/en/source/ringqt_shot46.jpg differ
diff --git a/docs/en/source/ringqt_shot47.jpg b/docs/en/source/ringqt_shot47.jpg
new file mode 100644 (file)
index 0000000..0815aed
Binary files /dev/null and b/docs/en/source/ringqt_shot47.jpg differ
diff --git a/docs/en/source/ringqt_shot48.jpg b/docs/en/source/ringqt_shot48.jpg
new file mode 100644 (file)
index 0000000..fd422d6
Binary files /dev/null and b/docs/en/source/ringqt_shot48.jpg differ
diff --git a/docs/en/source/ringqt_shot49.jpg b/docs/en/source/ringqt_shot49.jpg
new file mode 100644 (file)
index 0000000..c529f50
Binary files /dev/null and b/docs/en/source/ringqt_shot49.jpg differ
diff --git a/docs/en/source/ringqt_shot5-b.jpg b/docs/en/source/ringqt_shot5-b.jpg
new file mode 100644 (file)
index 0000000..a42cbf9
Binary files /dev/null and b/docs/en/source/ringqt_shot5-b.jpg differ
diff --git a/docs/en/source/ringqt_shot5.jpg b/docs/en/source/ringqt_shot5.jpg
new file mode 100644 (file)
index 0000000..9407d53
Binary files /dev/null and b/docs/en/source/ringqt_shot5.jpg differ
diff --git a/docs/en/source/ringqt_shot50.jpg b/docs/en/source/ringqt_shot50.jpg
new file mode 100644 (file)
index 0000000..e0c4500
Binary files /dev/null and b/docs/en/source/ringqt_shot50.jpg differ
diff --git a/docs/en/source/ringqt_shot51.jpg b/docs/en/source/ringqt_shot51.jpg
new file mode 100644 (file)
index 0000000..09446fb
Binary files /dev/null and b/docs/en/source/ringqt_shot51.jpg differ
diff --git a/docs/en/source/ringqt_shot52.jpg b/docs/en/source/ringqt_shot52.jpg
new file mode 100644 (file)
index 0000000..66c5524
Binary files /dev/null and b/docs/en/source/ringqt_shot52.jpg differ
diff --git a/docs/en/source/ringqt_shot6.jpg b/docs/en/source/ringqt_shot6.jpg
new file mode 100644 (file)
index 0000000..54188f8
Binary files /dev/null and b/docs/en/source/ringqt_shot6.jpg differ
diff --git a/docs/en/source/ringqt_shot7.jpg b/docs/en/source/ringqt_shot7.jpg
new file mode 100644 (file)
index 0000000..d1d5cac
Binary files /dev/null and b/docs/en/source/ringqt_shot7.jpg differ
diff --git a/docs/en/source/ringqt_shot8.jpg b/docs/en/source/ringqt_shot8.jpg
new file mode 100644 (file)
index 0000000..a43f210
Binary files /dev/null and b/docs/en/source/ringqt_shot8.jpg differ
diff --git a/docs/en/source/ringqt_shot9.jpg b/docs/en/source/ringqt_shot9.jpg
new file mode 100644 (file)
index 0000000..a851ba1
Binary files /dev/null and b/docs/en/source/ringqt_shot9.jpg differ
diff --git a/docs/en/source/ringqtandroid_shot1.png b/docs/en/source/ringqtandroid_shot1.png
new file mode 100644 (file)
index 0000000..7a745eb
Binary files /dev/null and b/docs/en/source/ringqtandroid_shot1.png differ
diff --git a/docs/en/source/ringqtobjects.txt b/docs/en/source/ringqtobjects.txt
new file mode 100644 (file)
index 0000000..92e1091
--- /dev/null
@@ -0,0 +1,218 @@
+.. index:: 
+       single: Objects Library for RingQt Application; Introduction
+
+======================================
+Objects Library for RingQt Application
+======================================
+
+In this chapter we will learn about the objects library for RingQt applications.
+
+Ring comes with the Objects library for RingQt applications. Instead of using global
+variables for windows objects and connecting events to objects using the object name, the
+Objects Library will manage the GUI objects and will provide a more natural API to quickly
+create one or many windows from the same class and the library provide a way to quickly set methods
+to be executed when an event is fired. Also the library provide a natural interface to
+quickly use the parent or the caller windows from the child or sub windows.
+
+The Objects Library is designed to be used with the MVC Design Pattern.
+
+The Objects Library is merged in RingQt so you can use it directly when you use RingQt
+
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Library Usage
+
+Library Usage
+=============
+
+* Use the Open_Window(cWindowControllerClassName) function to open new Windows
+* Create at least Two Classes for each window, The Controller Class and the View Class
+* Create each controller class from the WindowsControllerParent Class
+* Create each view class from the WindowsViewParent Class
+* Use the Last_Window() function to get the object of the last window created (The Controller object).
+* When you call a sub window, use the SetParentObject() method and pass the self object.
+* In the View Class, To determine the event method use the Method(cMethodName) function.
+* The Method(cMethodName) function determine the method in the controller class that will be executed.
+* Each controller class contains by default the CloseAction() method that you can call to close the window.
+* You don't need to call the Show() Method for each window, When you use Open_Window() It will be called.
+* In the view class, Define the GUI window object as an attribute called win.
+* You can use Open_WindowNoShow() to avoid displaying the window.
+* You can use Open_WindowAndLink() to quickly get methods to access the windows.
+       
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Example
+
+Example
+=======
+
+In the next example we will create two types of windows.
+
+* Main Window contains a button. When the user click on the button a sub window will be opened.
+* The User Can click on the button many times to open many sub windows.
+* Each Sub Window contains Two buttons.
+* The first button in the sub window change the Main and the Sub Windows Titles.
+* The second button in the sub window close the Sub Window.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               open_window( :MainWindowController )
+               exec()
+       }
+
+       class MainWindowController from WindowsControllerParent
+               oView = new MainWindowView
+               func SubWindowAction
+                       Open_window( :SubWindowController )
+                       Last_Window().SetParentObject(self)
+
+       class MainWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Main Window")
+                       btnSub = new qPushButton(win) {
+                               setText("Sub Window")
+                               setClickEvent( Method( :SubWindowAction ) )
+                       }
+                       resize(400,400)
+               }
+
+       class SubWindowController from WindowsControllerParent
+               oView = new SubWindowView
+               func SetMainWindowTitleAction
+                       Parent().oView.win.SetWindowTitle("Message from the Sub Window")
+                       oView.win.SetWindowTitle("Click Event Done!")
+
+       class SubWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Sub Window")
+                       btnMsg = new qPushButton(win) {
+                               setText("Set Main Window Title")
+                               setClickEvent( Method( :SetMainWindowTitleAction ) )
+                       }
+                       btnClose = new qPushButton(win) {
+                               Move(200,0)
+                               setText("Close")
+                               setClickEvent( Method( :CloseAction ) )
+                       }
+                       resize(400,400)
+               }
+
+The next screen shot after creating three sub windows.
+
+.. image:: objectslib1.png
+       :alt: Objects Library Example - Shot 1
+
+The next screen shot after clicking on the button in each sub window.
+
+.. image:: objectslib2.png
+       :alt: Objects Library Example - Shot 2
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Open_WindowAndLink() Function
+
+Open_WindowAndLink() Function
+=============================
+
+We can use the Open_WindowAndLink() function to connect between the application
+windows, pass messages (call methods) between the objects. 
+
+This function uses Meta-programming to define dynamic methods in the
+Caller Class to use the dynamic objects of other windows that we create.
+
+Example : (Uses the Form Designer)
+
+First Window
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/firstwindowView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/firstwindowController.ring
+
+Second Window
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/secondwindowView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/secondwindowController.ring
+
+In the next code for example (from FirstWindowController.ring)
+
+The Open_WindowAndLink() will create an object from the SecondWindowController Class
+
+Then will add the Method : SecondWindow(), IsSecondWindow() Methods
+to the FirstWindowController Class
+
+Also will add the Method : FirstWindow(), IsFirstWindow() Methods
+to the SecondWindowController Class
+
+So the SendMessage() method in FirstWindowController class can
+use the SecondWindow() method to access the object.
+
+This is more simple than using Last_Window(), Parent() and
+SetParentObject() methods.
+
+.. code-block:: ring
+
+       class firstwindowController from windowsControllerParent
+
+           oView = new firstwindowView
+
+           func OpenSecondWindow
+               Open_WindowAndLink(:SecondWindowController,self)
+
+           func SendMessage
+               if IsSecondWindow() 
+                   SecondWindow().setMessage("Message from the first window")
+               ok
+
+           func setMessage cMessage
+               oView.Label1.setText(cMessage)
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Open_WindowInPackages() Function
+
+Open_WindowInPackages() Function
+================================
+
+The Open_WindowInPackages() function is the same as Open_Window()
+but takes an extra list that determine the packages 
+to import before opening the window.
+
+Syntax:
+
+.. code-block:: ring
+
+       Open_WindowInPackages(cClassName,aPackagesList)
+
+Example:
+
+The next example from the Form Designer source code, Open the Window Flags window
+using the open_windowInPackages() function.
+
+We determine the class name "WindowFlagsController" and the packages name.
+
+The Window Flags window uses the FormDesigner and System.GUI packages.
+
+.. code-block:: ring
+
+       open_windowInPackages(:WindowFlagsController,[
+               "formdesigner",
+               "System.GUI"
+       ])
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Object Library Source Code
+
+Objects Library Source Code
+===========================
+
+The library source code is very simple, You can check the source code files 
+
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/objects.ring
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/subwindows.ring
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/objectslib.ring
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Open_WindowAndLink() Function
+
diff --git a/docs/en/source/ringqtpixmap2.png b/docs/en/source/ringqtpixmap2.png
new file mode 100644 (file)
index 0000000..5537703
Binary files /dev/null and b/docs/en/source/ringqtpixmap2.png differ
diff --git a/docs/en/source/ringraylib.txt b/docs/en/source/ringraylib.txt
new file mode 100644 (file)
index 0000000..089cef3
--- /dev/null
@@ -0,0 +1,2360 @@
+.. index:: 
+       Single: Using RingRayLib;  Introduction
+
+================
+Using RingRayLib
+================
+
+In this chapter we will learn how to use the RingRayLib extension.
+
+
+.. index:: 
+       pair: Using RingRayLib; Introduction
+
+Introduction
+============
+
+RingRayLib is an extension for the RayLib game programming library.
+
+Also RayGUI functions are supported by this extension.
+
+
+.. index:: 
+       pair: Using RingRayLib; Basic Window
+
+Basic Window
+============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth     = 800
+       screenHeight    = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+               ClearBackground(RED)
+               DrawText("Congrats! You created your first window!", 190, 200, 20, WHITE)
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_basicwindow.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Input Keys
+
+Input Keys
+==========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - keyboard input")
+       ballPosition = Vector2(screenWidth/2, screenHeight/2)
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+                       if IsKeyDown(KEY_RIGHT) ballPosition.x += 2 ok
+                       if IsKeyDown(KEY_LEFT)  ballPosition.x -= 2 ok
+                       if IsKeyDown(KEY_UP)    ballPosition.y -= 2 ok
+                       if IsKeyDown(KEY_DOWN)  ballPosition.y += 2 ok
+                       BeginDrawing()
+                       ClearBackground(RAYWHITE)
+                       DrawText("move the ball with arrow keys", 10, 10, 20, DARKGRAY)
+                       DrawCircleV(ballPosition, 50, MAROON)
+                       EndDrawing()
+       end    
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_inputkeys.png
+       :alt: RayLib Example
+
+
+.. index:: 
+       pair: Using RingRayLib; Input Mouse
+
+Input Mouse
+===========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - mouse input")
+
+       ballPosition    = Vector2(100, 100)
+       ballColor       = DARKBLUE
+
+       SetTargetFPS(60)
+
+       while ! WindowShouldClose()
+
+                       ballPosition = GetMousePosition()
+
+                       if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                               ballColor = MAROON
+                       but IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)   
+                               ballColor = LIME
+                       but IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)    
+                               ballColor = DARKBLUE
+                       ok
+
+                       BeginDrawing()
+                       ClearBackground(BLACK)
+                       DrawCircleV(ballPosition, 40, ballColor)
+                       DrawText("move ball with mouse and click mouse button to change color",
+                                10, 10, 20, YELLOW)
+                       EndDrawing()
+
+       end
+        
+       CloseWindow()  
+
+Screen Shot:
+
+.. image:: raylib_inputmouse.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; 3D Camera
+
+3D Camera
+=========
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera mode")
+
+       camera = Camera3D(
+               0, 10, 10,              // Camera position
+               0, 0, 0 ,               // Camera looking at point
+               0, 1, 0,                // Camera up vector (rotation towards target)
+               45,                     // Camera field-of-view Y
+               CAMERA_PERSPECTIVE)     // Camera mode type
+
+       cubePosition = Vector3(0, 0, 0)
+
+       SetTargetFPS(60)           
+               
+       while !WindowShouldClose()
+
+                       BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       BeginMode3D(camera)
+
+                       DrawCube(cubePosition, 2, 2, 2, RED)
+                       DrawCubeWires(cubePosition, 2, 2, 2, MAROON)
+
+                       DrawGrid(10, 1)
+
+                       EndMode3D()
+
+                       DrawText("Welcome to the third dimension!", 10, 40, 20, DARKGRAY)
+
+                       DrawFPS(10, 10)
+
+                       EndDrawing()
+
+       end 
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_3dcamera.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; 3D Camera Free
+
+3D Camera Free
+==============
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free")
+
+       camera = Camera3D(
+               10, 10, 10,             // Camera position
+               0, 0, 0 ,               // Camera looking at point
+               0, 1, 0,                // Camera up vector (rotation towards target)
+               45,                     // Camera field-of-view Y
+               CAMERA_PERSPECTIVE)     // Camera mode type
+
+       cubePosition = Vector3(0, 0, 0)
+
+       SetCameraMode(camera, CAMERA_FREE)              // Set a free camera mode
+
+       SetTargetFPS(60)                   
+
+       while !WindowShouldClose()
+
+                       UpdateCamera(camera)
+
+                       if IsKeyDown("Z") camera.target = Vector3( 0, 0, 0) ok
+
+                       BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       BeginMode3D(camera)
+
+                       DrawCube(cubePosition, 2, 2, 2, RED)
+                       DrawCubeWires(cubePosition, 2, 2, 2, MAROON)
+
+                       DrawGrid(10, 1)
+
+                       EndMode3D()
+
+                       DrawRectangle( 10, 10, 320, 133, Fade(SKYBLUE, 0.5))
+                       DrawRectangleLines( 10, 10, 320, 133, BLUE)
+
+                       DrawText("Free camera default controls:", 20, 20, 10, BLACK)
+                       DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY)
+                       DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY)
+                       DrawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, DARKGRAY)
+                       DrawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom",
+                                40, 100, 10, DARKGRAY)
+                       DrawText("- Z to zoom to (0, 0, 0)", 40, 120, 10, DARKGRAY)
+
+                       EndDrawing()
+       end 
+
+       CloseWindow() 
+
+
+Screen Shot:
+
+.. image:: raylib_3dcamerafree.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Mouse Wheel 
+
+Mouse Wheel 
+===========
+
+.. code-block:: ring           
+               
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - input mouse wheel")
+
+       boxPositionY = screenHeight/2 - 40
+       scrollSpeed = 4            
+
+       SetTargetFPS(60)  
+
+       while !WindowShouldClose()
+               boxPositionY -= (GetMouseWheelMove()*scrollSpeed)
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawRectangle(screenWidth/2 - 40, boxPositionY, 80, 80, MAROON)
+
+               DrawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, GRAY)
+               DrawText("Box position Y: "+boxPositionY, 10, 40, 20, LIGHTGRAY)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_mousewheel.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Input Multi-touch
+
+Input Multi-touch
+=================
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - input multitouch")
+
+       ballPosition = Vector2(-100, -100)
+       ballColor = BEIGE
+
+       touchCounter = 0
+       touchPosition = vector2(0,0)
+
+       MAX_TOUCH_POINTS = 5
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               ballPosition = GetMousePosition()
+
+               ballColor = BEIGE
+
+               if IsMouseButtonDown(MOUSE_LEFT_BUTTON) ballColor = MAROON ok
+               if IsMouseButtonDown(MOUSE_MIDDLE_BUTTON) ballColor = LIME ok
+               if IsMouseButtonDown(MOUSE_RIGHT_BUTTON) ballColor = DARKBLUE ok
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON) touchCounter = 10 ok
+               if IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON) touchCounter = 10 ok
+               if IsMouseButtonPressed(MOUSE_RIGHT_BUTTON) touchCounter = 10 ok
+
+               if touchCounter > 0 touchCounter-- ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               for i = 0 to MAX_TOUCH_POINTS-1
+                       touchPosition = GetTouchPosition(i)  
+
+                       if touchPosition.x >= 0 && touchPosition.y >= 0
+                               DrawCircleV(touchPosition, 34, ORANGE)
+                               DrawText(""+ i, touchPosition.x - 10, 
+                                       touchPosition.y - 70, 40, BLACK)
+                       ok
+               next
+
+               DrawCircleV(ballPosition, 30 + (touchCounter*3), ballColor)
+
+               DrawText("move ball with mouse and click mouse button to change color",
+                                10, 10, 20, DARKGRAY)
+               DrawText("touch the screen at multiple locations to get multiple balls",
+                                10, 30, 20, DARKGRAY)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()     
+
+Screen Shot:
+
+.. image:: raylib_inputmt.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Camera First Person
+
+Camera First Person
+===================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       MAX_COLUMNS = 20
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera first person")
+
+       camera = Camera3d(
+               4, 2, 4,
+               0, 1, 0,
+               0, 1, 0,
+               60,
+               CAMERA_PERSPECTIVE
+       )
+
+       heights = list(MAX_COLUMNS)
+       positions = list(MAX_COLUMNS)
+       for item in positions item = vector3(0,0,0) next 
+       colors = list(MAX_COLUMNS)
+       for item in colors item = BLACK next
+
+       for i = 1 to  MAX_COLUMNS 
+               heights[i] = GetRandomValue(1, 12)
+               positions[i] = Vector3(GetRandomValue(-15, 15),
+                                heights[i]/2, GetRandomValue(-15, 15) )
+               colors[i] = RAYLibColor(GetRandomValue(20, 255),
+                                GetRandomValue(10, 55), 30, 255 )
+       next
+
+       SetCameraMode(camera, CAMERA_FIRST_PERSON)
+
+       SetTargetFPS(60)                     
+
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               DrawPlane(Vector3( 0, 0, 0 ), Vector2(32, 32 ), LIGHTGRAY) // Draw ground
+               DrawCube(Vector3( -16, 2.5, 0 ), 1, 5, 32, BLUE)     // Draw a blue wall
+               DrawCube(Vector3( 16, 2.5, 0 ), 1, 5, 32, LIME)      // Draw a green wall
+               DrawCube(Vector3( 0, 2.5, 16 ), 32, 5, 1, GOLD)      // Draw a yellow wall
+
+               for i = 1 to  MAX_COLUMNS 
+                       DrawCube(positions[i], 2, heights[i], 2, colors[i])
+                       DrawCubeWires(positions[i], 2, heights[i], 2, MAROON)
+               next
+
+               EndMode3D()
+
+               DrawRectangle( 10, 10, 220, 70, Fade(SKYBLUE, 0.5f))
+               DrawRectangleLines( 10, 10, 220, 70, BLUE)
+
+               DrawText("First person camera default controls:", 20, 20, 10, BLACK)
+               DrawText("- Move with keys: W, A, S, D", 40, 40, 10, DARKGRAY)
+               DrawText("- Mouse move to look around", 40, 60, 10, DARKGRAY)
+
+               EndDrawing()
+       end 
+               
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_camerafirstperson.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; 3D Picking
+
+3D Picking
+==========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d picking")
+
+       camera = Camera3D(
+               10, 10, 10,
+               0, 0, 0 ,
+               0, 1, 0 ,
+               45,
+               CAMERA_PERSPECTIVE
+       )
+
+       cubePosition = Vector3( 0, 1, 0 )
+       cubeSize = Vector3( 2, 2, 2 )
+
+       ray = Ray(0,0,0,0,0,0)
+
+       collision = false
+
+       SetCameraMode(camera, CAMERA_FREE) 
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                       if !collision
+                               ray = GetMouseRay(GetMousePosition(), camera)
+                               collision = CheckCollisionRayBox(ray,
+                               BoundingBox( cubePosition.x - cubeSize.x/2, 
+                               cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2,
+                               cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2,
+                               cubePosition.z + cubeSize.z/2 ) )
+                       else collision = false
+                       ok
+               ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               if collision
+                       DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED)
+                       DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON)
+
+                       DrawCubeWires(cubePosition, cubeSize.x + 0.2f,
+                                       cubeSize.y + 0.2f, cubeSize.z + 0.2f, GREEN)
+               else
+                       DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY)
+                       DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY)
+               ok
+
+               DrawRay(ray, MAROON)
+               DrawGrid(10, 1)
+
+               EndMode3D()
+
+               DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY)
+
+               if collision  DrawText("BOX SELECTED", 
+                       (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, 
+                       screenHeight * 0.1f, 30, GREEN) ok
+
+               DrawFPS(10, 10)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_3dpicking.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Full Screen
+
+Full Screen
+===========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth     = 1024
+       screenHeight    = 768
+
+       InitWindow(screenWidth, screenHeight, "Full Screen")
+       ToggleFullScreen()
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+                       ClearBackground(DARKBLUE)
+                       DrawText("Count from 1 to 10", 190, 200, 20, Yellow)
+                       for t = 1 to 10
+                               DrawText("Number: " + t, 190, 200+(30*t), 20, WHITE)
+                       next 
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_fullscreen.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Two Cubes
+
+Two Cubes
+=========      
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - Two Cubes")
+
+       camera = Camera3D(
+               10, 10, 10,
+               0, 0, 0 ,
+               0, 1, 0 ,
+               45,
+               CAMERA_PERSPECTIVE
+       )
+
+       cubePosition1 = Vector3( 0, 1, 4 )
+       cubePosition2 = Vector3( 0, 1, -4 )
+       cubeSize = Vector3( 2, 2, 2 )
+
+       ray = Ray(0,0,0,0,0,0)
+
+       collision1 = false
+       collision2 = false
+
+       SetCameraMode(camera, CAMERA_FREE) 
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+                       UpdateCamera(camera)
+
+                       if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                               if !collision1
+                                       ray = GetMouseRay(GetMousePosition(), camera)
+
+                                       collision1 = CheckCollisionRayBox(ray,
+                                       BoundingBox( cubePosition1.x - 
+                                       cubeSize.x/2, cubePosition1.y - cubeSize.y/2,
+                                       cubePosition1.z - cubeSize.z/2,
+                                       cubePosition1.x + cubeSize.x/2,
+                                       cubePosition1.y + cubeSize.y/2,
+                                       cubePosition1.z + cubeSize.z/2 ) )
+                               else 
+                                       collision1 = false
+                               ok
+                               if  !collision2
+                                       ray = GetMouseRay(GetMousePosition(), camera)
+
+                                       collision2 = CheckCollisionRayBox(ray,
+                                       BoundingBox( cubePosition2.x -
+                                       cubeSize.x/2, cubePosition2.y - cubeSize.y/2,
+                                       cubePosition2.z - cubeSize.z/2,
+                                       cubePosition2.x + cubeSize.x/2,
+                                       cubePosition2.y + cubeSize.y/2,
+                                       cubePosition2.z + cubeSize.z/2 ) )
+                               else 
+                                       collision2 = false
+                       ok
+               ok
+
+                       BeginDrawing()
+
+                               ClearBackground(RAYWHITE)
+
+                               BeginMode3D(camera)
+
+                                        if collision1
+                                               DrawCube(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, RED)
+                                               DrawCubeWires(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, MAROON)
+
+                                               DrawCubeWires(cubePosition1, cubeSize.x +
+                                               0.2f, cubeSize.y + 0.2f,
+                                               cubeSize.z + 0.2f, GREEN)
+                                               collision1 = true
+                                        else
+                                               DrawCube(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, GRAY)
+                                               DrawCubeWires(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, DARKGRAY)
+                                               collision1 = false
+                                        ok
+
+                                        if collision2
+                                               DrawCube(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, RED)
+                                               DrawCubeWires(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, MAROON)
+
+                                               DrawCubeWires(cubePosition2, cubeSize.x +
+                                               0.2f, cubeSize.y + 0.2f,
+                                               cubeSize.z + 0.2f, GREEN)
+                                               collision2 = true
+                                        else
+                                               DrawCube(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, GRAY)
+                                               DrawCubeWires(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, DARKGRAY)
+                                               collision2 = false
+                                        ok
+
+
+                                       DrawRay(ray, MAROON)
+                                       DrawGrid(10, 1)
+
+                               EndMode3D()
+
+                               DrawText("Try selecting the box with mouse!", 240, 10,
+                                               20, DARKGRAY)
+
+                               if collision1 or collision2  
+                                       DrawText("BOX SELECTED", 
+                                       (screenWidth - MeasureText("BOX SELECTED", 30)) / 2,
+                                       screenHeight * 0.1f, 30, GREEN) 
+                               ok
+
+                               DrawFPS(10, 10)
+
+                       EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_twocubes.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Basic Shapes
+
+Basic Shapes
+============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY)
+
+               DrawCircle(screenWidth/4, 120, 35, DARKBLUE)
+
+               DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED)
+               DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE)  
+               DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD)
+
+               DrawTriangle(Vector2(screenWidth/4*3, 80),
+                                        Vector2(screenWidth/4*3 - 60, 150),
+                                        Vector2(screenWidth/4*3 + 60, 150), VIOLET)
+
+               DrawPoly(Vector2(screenWidth/4*3, 320), 6, 80, 0, BROWN)
+
+               DrawCircleGradient(screenWidth/4, 220, 60, GREEN, SKYBLUE)
+
+               DrawLine(18, 42, screenWidth - 18, 42, BLACK)
+               DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE)
+               DrawTriangleLines(Vector2(screenWidth/4*3, 160),
+                               Vector2(screenWidth/4*3 - 20, 230),
+                               Vector2(screenWidth/4*3 + 20, 230), DARKBLUE)
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_basicshapes.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Draw Ring
+
+Draw Ring
+=========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - draw ring")
+
+       center = Vector2((GetScreenWidth() - 300)/2, GetScreenHeight()/2 )
+
+       innerRadius = 80        outerRadius = 190
+       startAngle = 0          endAngle = 360          segments = 0
+       drawRing = true         drawRingLines = false   drawCircleLines = false
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawLine(500, 0, 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.6))
+               DrawRectangle(500, 0, GetScreenWidth() - 500,
+                                GetScreenHeight(), Fade(LIGHTGRAY, 0.3))
+
+               if drawRing DrawRing(center, innerRadius, outerRadius, 
+                       startAngle, endAngle, segments, Fade(MAROON, 0.3)) ok
+               if drawRingLines DrawRingLines(center, innerRadius, 
+                       outerRadius, startAngle, endAngle,
+                        segments, Fade(BLACK, 0.4)) ok
+               if drawCircleLines DrawCircleSectorLines(center, outerRadius,
+                       startAngle, endAngle, segments, Fade(BLACK, 0.4)) ok
+
+               startAngle = GuiSliderBar(Rectangle( 600, 40, 120, 20 ), 
+                               "StartAngle", startAngle, -450, 450, true)
+               endAngle = GuiSliderBar(Rectangle( 600, 70, 120, 20 ), 
+                               "EndAngle", endAngle, -450, 450, true)
+
+               innerRadius = GuiSliderBar(Rectangle( 600, 140, 120, 20 ), 
+                               "InnerRadius", innerRadius, 0, 100, true)
+               outerRadius = GuiSliderBar(Rectangle( 600, 170, 120, 20 ), 
+                               "OuterRadius", outerRadius, 0, 200, true)
+
+               segments = GuiSliderBar(Rectangle( 600, 240, 120, 20 ), 
+                               "Segments", segments, 0, 100, true)
+
+               drawRing = GuiCheckBox(Rectangle( 600, 320, 20, 20 ), 
+                               "Draw Ring", drawRing)
+               drawRingLines = GuiCheckBox(Rectangle( 600, 350, 20, 20 ), 
+                               "Draw RingLines", drawRingLines)
+               drawCircleLines = GuiCheckBox(Rectangle( 600, 380, 20, 20 ), 
+                               "Draw CircleLines", drawCircleLines)
+
+               if segments >= 4        
+                       DrawText("MODE: MANUAL", 600, 270, 10, MAROON)
+               else            
+                       DrawText("MODE: AUTO", 600, 270, 10, DARKGRAY)  
+               ok
+               
+               DrawFPS(10, 10)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_drawring.png
+       :alt: RayLib Example
+
+Screen Shot (2):
+
+.. image:: raylib_drawring2.png
+       :alt: RayLib Example
+
+
+.. index:: 
+       pair: Using RingRayLib; Bezier Lines
+
+Bezier Lines
+============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       SetConfigFlags(FLAG_MSAA_4X_HINT)
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines")
+
+       start = Vector2(0,0)
+       endvec = Vector2(screenWidth,screenHeight)
+
+       SetTargetFPS(60)  
+
+       while (!WindowShouldClose())  
+
+               if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
+                       start = GetMousePosition() 
+               else (IsMouseButtonDown(MOUSE_RIGHT_BUTTON))
+                         endvec = GetMousePosition()
+               ok
+               
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+               DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS",
+                                15, 20, 20, GRAY)
+               DrawLineBezier(start, endvec, 2.0, RED)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_bezierlines.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Collision Area
+
+Collision Area
+==============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - collision area")
+
+       // Box A: Moving box
+       boxA = Rectangle( 10, GetScreenHeight()/2 - 50, 200, 100 )
+       boxASpeedX = 4
+
+       // Box B: Mouse moved box
+       boxB = Rectangle( GetScreenWidth()/2 - 30, GetScreenHeight()/2 - 30, 60, 60 )
+
+       boxCollision = GetCollisionRec(boxA, boxB)
+
+       boxCollision = Rectangle( 0,0,0,0 ) // Collision rectangle
+
+       screenUpperLimit = 40      // Top menu limits
+
+       pause = false             // Movement pause
+       collision = false         // Collision detection
+
+       SetTargetFPS(60)               
+
+       while !WindowShouldClose()  
+
+               // Move box if not paused
+               if (not pause) boxA.x += boxASpeedX ok
+
+               // Bounce box on x screen limits
+               if (((boxA.x + boxA.width) >= GetScreenWidth()) or (boxA.x <= 0)) 
+                       boxASpeedX = boxASpeedX*(-1) ok
+
+               // Update player-controlled-box (box02)
+               boxB.x = GetMouseX() - boxB.width/2
+               boxB.y = GetMouseY() - boxB.height/2
+
+               // Make sure Box B does not go out of move area limits
+               if ((boxB.x + boxB.width) >= GetScreenWidth()) 
+                       boxB.x = GetScreenWidth() - boxB.width 
+               else (boxB.x <= 0) boxB.x = 0 ok
+
+               if ((boxB.y + boxB.height) >= GetScreenHeight()) 
+                       boxB.y = GetScreenHeight() - boxB.height
+               else (boxB.y <= screenUpperLimit) boxB.y = screenUpperLimit ok
+
+               // Check boxes collision
+               collision = CheckCollisionRecs(boxA, boxB)
+
+               // Get collision rectangle (only on collision)
+               if (collision) boxCollision = GetCollisionRec(boxA, boxB) ok
+
+               // Pause Box A movement
+               if (IsKeyPressed(KEY_SPACE)) pause = not pause ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       if collision = true
+                          color = RED
+                       else
+                          color = BLACK
+                       ok
+                       DrawRectangle(0, 0, screenWidth, screenUpperLimit, color)
+                       DrawRectangleRec(boxA, GOLD)
+
+                       boxB.x = GetMouseX() - boxB.width/2
+                       boxB.y = GetMouseY() - boxB.height/2
+                       collision = CheckCollisionRecs(boxA, boxB)
+                       DrawRectangleRec(boxB, BLUE)
+                       boxCollision = GetCollisionRec(boxA, boxB)
+
+                       if (collision) = true
+
+                               // Draw collision area
+                               DrawRectangleRec(boxCollision, LIME)
+
+                               // Draw collision message
+                               DrawText("COLLISION!", GetScreenWidth()/2 -
+                                                MeasureText("COLLISION!", 20)/2,
+                                               screenUpperLimit/2 - 10, 20, BLACK)
+
+                               // Draw collision area
+                               DrawText("Collision Area: " + 
+                                       string(boxCollision.width*boxCollision.height),
+                                       GetScreenWidth()/2 - 100, 
+                                       screenUpperLimit + 10, 20, BLACK)
+
+                       ok
+
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_collisionarea.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Following Eyes
+
+Following Eyes
+==============
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - following eyes")
+
+       scleraLeftPosition = Vector2( GetScreenWidth()/2 - 100, GetScreenHeight()/2 )
+       scleraRightPosition = Vector2( GetScreenWidth()/2 + 100, GetScreenHeight()/2 )
+       scleraRadius = 80
+
+       irisLeftPosition = Vector2( GetScreenWidth()/2 - 100, GetScreenHeight()/2 )
+       irisRightPosition = Vector2( GetScreenWidth()/2 + 100, GetScreenHeight()/2 )
+       irisRadius = 24
+
+       angle = 0.0
+       dx = 0.0 dy = 0.0 dxx = 0.0 dyy = 0.0
+
+       SetTargetFPS(60) 
+
+       while !WindowShouldClose()
+
+               irisLeftPosition = GetMousePosition()
+               irisRightPosition = GetMousePosition()
+
+               // Check not inside the left eye sclera
+               if !CheckCollisionPointCircle(irisLeftPosition,
+                       scleraLeftPosition, scleraRadius - 20)
+                       dx = irisLeftPosition.x - scleraLeftPosition.x
+                       dy = irisLeftPosition.y - scleraLeftPosition.y
+
+                       angle = atan2(dy, dx)
+
+                       dxx = (scleraRadius - irisRadius)*cos(angle)
+                       dyy = (scleraRadius - irisRadius)*sin(angle)
+
+                       irisLeftPosition.x = scleraLeftPosition.x + dxx
+                       irisLeftPosition.y = scleraLeftPosition.y + dyy
+               ok
+
+               // Check not inside the right eye sclera
+               if !CheckCollisionPointCircle(irisRightPosition,
+                        scleraRightPosition, scleraRadius - 20)
+                       dx = irisRightPosition.x - scleraRightPosition.x
+                       dy = irisRightPosition.y - scleraRightPosition.y
+
+                       angle = atan2(dy, dx)
+
+                       dxx = (scleraRadius - irisRadius)*cos(angle)
+                       dyy = (scleraRadius - irisRadius)*sin(angle)
+
+                       irisRightPosition.x = scleraRightPosition.x + dxx
+                       irisRightPosition.y = scleraRightPosition.y + dyy
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawCircleV(scleraLeftPosition, scleraRadius, LIGHTGRAY)
+                       DrawCircleV(irisLeftPosition, irisRadius, BROWN)
+                       DrawCircleV(irisLeftPosition, 10, BLACK)
+
+                       DrawCircleV(scleraRightPosition, scleraRadius, LIGHTGRAY)
+                       DrawCircleV(irisRightPosition, irisRadius, DARKGREEN)
+                       DrawCircleV(irisRightPosition, 10, BLACK)
+
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_followingeyes.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Colors Palette 
+
+Colors Palette 
+==============
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       MAX_COLORS_COUNT = 21          // Number of colors available
+
+       screenWidth = 800
+       screenHeight = 450
+       colors = list(MAX_COLORS_COUNT)
+       colorNames = list(MAX_COLORS_COUNT)
+       colorsRecs = list(MAX_COLORS_COUNT)
+       colorState = list(MAX_COLORS_COUNT)
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - colors palette")
+
+       colors = [
+               DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN,
+               GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW,
+               GREEN, SKYBLUE, PURPLE, BEIGE ]
+
+       colorNames = [
+               "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE",
+               "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN",
+               "LIGHTGRAY", "PINK", "YELLOW", "GREEN", "SKYBLUE", "PURPLE", "BEIGE" ]
+
+       for i = 1 to MAX_COLORS_COUNT
+               colorsRecs[i] = new Rectangle(0,0,0,0) 
+       next
+
+       for i = 1 to MAX_COLORS_COUNT
+               colorState[i] = 0
+       next
+
+
+       // Fills colorsRecs data (for every rectangle)
+       for i = 1 to MAX_COLORS_COUNT
+               colorsRecs[i].x = 20 + 100*((i-1)%7) + 10*((i-1)%7)
+               colorsRecs[i].y = 80 + 100*floor((i-1)/7) + 10*floor((i-1)/7)
+               colorsRecs[i].width = 100
+               colorsRecs[i].height = 100
+       next
+
+       mousePoint = Vector2( 0.0, 0.0 )
+
+       SetTargetFPS(60)
+
+       // Main game loop
+       while !WindowShouldClose()
+
+               mousePoint = GetMousePosition()
+
+               for i = 1 to MAX_COLORS_COUNT 
+                       if (CheckCollisionPointRec(mousePoint,
+                                colorsRecs[i])) colorState[i] = 1
+                       else colorState[i] = 0 ok
+               next
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("raylib colors palette", 28, 42, 20, BLACK)
+                       DrawText("press SPACE to see all colors",
+                                        GetScreenWidth() - 180,
+                                        GetScreenHeight() - 40, 10, GRAY)
+
+                       for i = 1 to MAX_COLORS_COUNT    // Draw all rectangles
+                               if colorState[i]
+                                  cstate = 0.6
+                               else
+                                  cstate = 1.0
+                               ok
+
+                               DrawRectangleRec(colorsRecs[i], Fade(colors[i], cstate))
+
+                               if (IsKeyDown(KEY_SPACE) || colorState[i])
+                                       DrawRectangle(colorsRecs[i].x,
+                                       colorsRecs[i].y + colorsRecs[i].height - 26,
+                                       colorsRecs[i].width, 20, BLACK)
+                                       DrawRectangleLinesEx(colorsRecs[i], 6,
+                                       Fade(BLACK, 0.3f))
+                                       DrawText(colorNames[i], colorsRecs[i].x + 
+                                       colorsRecs[i].width - MeasureText(colorNames[i],
+                                       10) - 12, colorsRecs[i].y +
+                                       colorsRecs[i].height - 20, 10, colors[i])
+                               ok
+                       next
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_colorspalette.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Functions
+
+.. index:: 
+       pair: Using RingRayLib; Rectangle Scaling 
+
+Rectangle Scaling 
+=================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       MOUSE_SCALE_MARK_SIZE = 12
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                        "raylib [shapes] example - rectangle scaling mouse")
+
+       rec = Rectangle( 100, 100, 200, 80 )
+
+       mousePosition = Vector2( 0,0 )
+
+       mouseScaleReady = false
+       mouseScaleMode = false
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               mousePosition = GetMousePosition()
+
+               if (CheckCollisionPointRec(mousePosition, rec) and
+                       CheckCollisionPointRec(mousePosition,
+                        Rectangle(rec.x + rec.width - MOUSE_SCALE_MARK_SIZE,
+                               rec.y + rec.height - MOUSE_SCALE_MARK_SIZE,
+                                MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE )))
+                       mouseScaleReady = true
+                       if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) 
+                               mouseScaleMode = true ok
+               else mouseScaleReady = false ok
+
+               if (mouseScaleMode)
+               
+                       mouseScaleReady = true
+
+                       rec.width = (mousePosition.x - rec.x)
+                       rec.height = (mousePosition.y - rec.y)
+
+                       if (rec.width < MOUSE_SCALE_MARK_SIZE) 
+                               rec.width = MOUSE_SCALE_MARK_SIZE ok
+                       if (rec.height < MOUSE_SCALE_MARK_SIZE) 
+                               rec.height = MOUSE_SCALE_MARK_SIZE ok
+
+                       if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) 
+                               mouseScaleMode = false ok
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("Scale rectangle dragging from bottom-right corner!",
+                                        10, 10, 20, GRAY)
+
+                       DrawRectangleRec(rec, Fade(GREEN, 0.5f))
+
+                       if (mouseScaleReady)
+                  
+                               DrawRectangleLinesEx(rec, 1, RED)
+                               DrawTriangle(Vector2( rec.x + rec.width -
+                               MOUSE_SCALE_MARK_SIZE, rec.y + rec.height ),
+                               Vector2( rec.x + rec.width, rec.y + rec.height ),
+                               Vector2( rec.x + rec.width, rec.y + rec.height -
+                                        MOUSE_SCALE_MARK_SIZE ), RED)
+                       ok
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_rectanglescaling.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Music Playing 
+
+Music Playing 
+=============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [audio] example - music playing (streaming)")
+
+       InitAudioDevice()               
+
+       music = LoadMusicStream("guitar_noodling.ogg")
+
+       PlayMusicStream(music)
+
+       timePlayed = 0.0
+       pause = false
+
+       SetTargetFPS(60)
+
+
+       while !WindowShouldClose()
+
+               UpdateMusicStream(music)  
+
+               if IsKeyPressed(KEY_SPACE)   
+                       StopMusicStream(music)
+                       PlayMusicStream(music)
+               ok
+
+               if IsKeyPressed(KEY_P)
+                       pause = !pause
+
+                       if pause 
+                               PauseMusicStream(music)
+                       else 
+                               ResumeMusicStream(music)
+                       ok
+               ok
+
+               timePlayed = GetMusicTimePlayed(music) / GetMusicTimeLength(music) *400
+
+               if timePlayed > 400 
+                       StopMusicStream(music)
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY)
+
+                                DrawRectangle(200, 200, 400, 12, LIGHTGRAY)
+                                DrawRectangle(200, 200, timePlayed, 12, MAROON)
+                       DrawRectangleLines(200, 200, 400, 12, GRAY)
+
+                       DrawText("PRESS SPACE  TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY)
+                       DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY)
+
+               EndDrawing()
+
+       end 
+
+       UnloadMusicStream(music)
+
+       CloseAudioDevice()
+
+       CloseWindow()
+
+Screen Shot:
+       
+.. image:: raylib_musicplaying.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Sound Loading
+
+Sound Loading
+=============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                       "raylib [audio] example - sound loading and playing")
+
+       InitAudioDevice()       
+
+       fxWav = LoadSound("sound.wav")         
+       fxOgg = LoadSound("tanatana.ogg")  
+
+
+       SetTargetFPS(60) 
+
+       while !WindowShouldClose()
+
+               if IsKeyPressed(KEY_SPACE) PlaySound(fxWav)  ok  
+               if IsKeyPressed(KEY_ENTER) PlaySound(fxOgg)  ok  
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("Press SPACE to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY)
+                       DrawText("Press ENTER to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY)
+
+               EndDrawing()
+               
+       end
+
+       UnloadSound(fxWav)
+       UnloadSound(fxOgg)
+
+       CloseAudioDevice() 
+
+       CloseWindow()
+
+Screen Shot:
+       
+.. image:: raylib_soundloading.png
+       :alt: RayLib Example
+
+       
+.. index:: 
+       pair: Using RingRayLib; Image Drawing
+
+Image Drawing
+=============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                        "raylib [textures] example - image drawing")
+
+       cat = LoadImage("cat.png")                              
+
+       ImageCrop( cat,  Rectangle( 100, 10, 280, 380 ))        
+       ImageFlipHorizontal( cat)                               
+       ImageResize( cat, 150, 200)                             
+
+       parrots = LoadImage("parrots.png")                      
+
+       ImageDraw( parrots, cat, Rectangle( 0, 0, cat.width, cat.height ), 
+                               Rectangle( 30, 40, cat.width*1.5, cat.height*1.5 ))
+       ImageCrop( parrots, Rectangle( 0, 50, parrots.width, parrots.height - 100 )) 
+
+       UnloadImage(cat)       
+
+       font = LoadFont("custom_jupiter_crash.png")
+
+       ImageDrawTextEx(parrots, Vector2( 300, 230 ), font,
+                        "PARROTS & CAT", font.baseSize, -2, WHITE)
+       UnloadFont(font);                              
+
+       texture = LoadTextureFromImage(parrots)        
+
+       UnloadImage(parrots)                           
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawTexture(texture, screenWidth/2 - texture.width/2,
+                       screenHeight/2 - texture.height/2 - 40, WHITE)
+               DrawRectangleLines(screenWidth/2 - texture.width/2,
+                       screenHeight/2 - texture.height/2 - 40,
+                        texture.width, texture.height, DARKGRAY)
+
+               DrawText("We are drawing only one texture from various images composed!",
+                                       240, 350, 10, DARKGRAY)
+               DrawText("Source images have been cropped, scaled,"+
+                               " flipped and copied one over the other.",
+                                       190, 370, 10, DARKGRAY)
+
+               EndDrawing()
+       end
+
+       UnloadTexture(texture)       
+
+       CloseWindow()                
+
+Screen Shot:
+       
+.. image:: raylib_imagedrawing.png
+       :alt: RayLib Example
+
+       
+.. index:: 
+       pair: Using RingRayLib; Image Generation
+
+Image Generation
+================
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       NUM_TEXTURES = 7
+       textures     = list(7)
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [textures] example - procedural images generation")
+
+       verticalGradient   = GenImageGradientV(screenWidth, screenHeight, RED, BLUE)
+       horizontalGradient = GenImageGradientH(screenWidth, screenHeight, RED, BLUE)
+       radialGradient     = GenImageGradientRadial(screenWidth,
+                                screenHeight, 0.0, WHITE, BLACK)
+       checked            = GenImageChecked(screenWidth, screenHeight,
+                                32, 32, RED, BLUE)
+       whiteNoise         = GenImageWhiteNoise(screenWidth, screenHeight, 0.5)
+       perlinNoise        = GenImagePerlinNoise(screenWidth, screenHeight, 50, 50, 4.0)
+       cellular           = GenImageCellular(screenWidth, screenHeight, 32)
+        
+       textures[NUM_TEXTURES] =  0 
+                          
+       textures[1] = LoadTextureFromImage(verticalGradient)
+       textures[2] = LoadTextureFromImage(horizontalGradient)
+       textures[3] = LoadTextureFromImage(radialGradient)
+       textures[4] = LoadTextureFromImage(checked)
+       textures[5] = LoadTextureFromImage(whiteNoise)
+       textures[6] = LoadTextureFromImage(perlinNoise)
+       textures[7] = LoadTextureFromImage(cellular)
+
+       UnloadImage(verticalGradient)
+       UnloadImage(horizontalGradient)
+       UnloadImage(radialGradient)
+       UnloadImage(checked)
+       UnloadImage(whiteNoise)
+       UnloadImage(perlinNoise)
+       UnloadImage(cellular)
+
+       currentTexture = 1  
+
+       SetTargetFPS(10)
+        
+       while !WindowShouldClose()
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON) || IsKeyPressed(KEY_RIGHT)
+                       currentTexture++
+                       if currentTexture > NUM_TEXTURES  currentTexture = 1 ok
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawTexture(textures[currentTexture], 0, 0, WHITE)
+
+                       DrawRectangle(30, 400, 325, 30, Fade(SKYBLUE, 0.5))
+                       DrawRectangleLines(30, 400, 325, 30, Fade(WHITE, 0.5))
+                       DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL TEXTURES",
+                                40, 410, 10, WHITE)
+
+                       switch(currentTexture)
+                               on 1  DrawText("VERTICAL GRADIENT", 560, 10, 20, RAYWHITE)  
+                               on 2  DrawText("HORIZONTAL GRADIENT", 540, 10, 20, RAYWHITE)
+                               on 3  DrawText("RADIAL GRADIENT", 580, 10, 20, LIGHTGRAY)   
+                               on 4  DrawText("CHECKED", 680, 10, 20, RAYWHITE)            
+                               on 5  DrawText("WHITE NOISE", 640, 10, 20, RED)             
+                               on 6  DrawText("PERLIN NOISE", 630, 10, 20, RAYWHITE)       
+                               on 7  DrawText("CELLULAR", 670, 10, 20, RAYWHITE)           
+                       off 
+
+               EndDrawing()
+
+       end
+
+       for i = 1 to  NUM_TEXTURES
+               UnloadTexture( textures[i] )
+       next 
+
+       CloseWindow()
+
+
+Screen Shot:
+       
+.. image:: raylib_imagegeneration.png
+       :alt: RayLib Example
+
+       
+.. index:: 
+       pair: Using RingRayLib; Texture Source
+
+Texture Source
+==============
+
+.. code-block:: ring   
+       
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 800
+
+       InitWindow(screenWidth, screenHeight,
+               "raylib [textures] examples - texture source and destination rectangles")
+
+       // NOTE: Textures MUST be loaded after Window initialization 
+       // (OpenGL context is required)
+
+       scarfy = LoadTexture("RingLogo.png")        // Texture loading
+
+       frameWidth = scarfy.width
+       frameHeight = scarfy.height
+
+       // Source rectangle (part of the texture to use for drawing)
+       sourceRec = Rectangle( 0.0, 0.0, frameWidth, frameHeight )
+
+       // Destination rectangle (screen rectangle where drawing part of texture)
+       destRec = Rectangle( screenWidth/2, screenHeight/2, frameWidth*2, frameHeight*2 )
+
+       // Origin of the texture (rotation/scale point)
+       // it's relative to destination rectangle size
+       origin = Vector2( frameWidth, frameHeight )
+
+       rotation = 0
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               rotation = rotation+1
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawTexturePro(scarfy, sourceRec, destRec,
+                                        origin, rotation, WHITE)
+
+                       DrawLine(destRec.x, 0, destRec.x, screenHeight, GRAY)
+                       DrawLine(0, destRec.y, screenWidth, destRec.y, GRAY)
+
+                       DrawText("(c) Scarfy sprite by Eiden Marsal",
+                                screenWidth - 200, screenHeight - 20, 10, GRAY)
+
+               EndDrawing()
+
+       end
+
+       UnloadTexture(scarfy)        // Texture unloading
+
+       CloseWindow()
+               
+
+Screen Shot:
+       
+.. image:: raylib_texturesource.png
+       :alt: RayLib Example    
+
+
+.. index:: 
+       pair: Using RingRayLib; Geometric Shapes
+
+Geometric Shapes
+================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       FOVY_PERSPECTIVE   =  45.0
+       WIDTH_ORTHOGRAPHIC =  10.0
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [models] example - geometric shapes")
+
+       camera = Camera3D(  0.0, 10.0, 10.0,
+                                       0.0, 0.0, 0.0,
+                                       0.0, 1.0, 0.0, 
+                                       FOVY_PERSPECTIVE, CAMERA_PERSPECTIVE 
+                               )
+
+       SetTargetFPS(60)       
+
+       while !WindowShouldClose()  
+
+               if IsKeyPressed(KEY_SPACE)
+               
+                       if camera.type = CAMERA_PERSPECTIVE
+                       
+                               camera.fovy = WIDTH_ORTHOGRAPHIC
+                               camera.type = CAMERA_ORTHOGRAPHIC
+                       
+                       else
+                       
+                               camera.fovy = FOVY_PERSPECTIVE
+                               camera.type = CAMERA_PERSPECTIVE
+                       ok
+               ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               DrawCube(Vector3(-4.0, 0.0,  2.0), 2.0, 5.0, 2.0, RED)
+               DrawCubeWires(Vector3(-4.0, 0.0,  2.0), 2.0, 5.0, 2.0, GOLD)
+               DrawCubeWires(Vector3(-4.0, 0.0, -2.0), 3.0, 6.0, 2.0, MAROON)
+
+               DrawSphere(Vector3(-1.0, 0.0, -2.0), 1.0, GREEN)
+               DrawSphereWires(Vector3( 1.0, 0.0,  2.0), 2.0, 16, 16, LIME)
+
+               DrawCylinder(Vector3(4.0, 0.0, -2.0), 1.0, 2.0, 3.0, 4, SKYBLUE)
+               DrawCylinderWires(Vector3(4.0, 0.0, -2.0), 1.0, 2.0, 3.0, 4, DARKBLUE)
+               DrawCylinderWires(Vector3(4.5, -1.0, 2.0), 1.0, 1.0, 2.0, 6, BROWN)
+
+               DrawCylinder(Vector3(1.0, 0.0, -4.0), 0.0, 1.5, 3.0, 8, GOLD)
+               DrawCylinderWires(Vector3(1.0, 0.0, -4.0), 0.0, 1.5, 3.0, 8, PINK)
+
+               DrawGrid(10, 1.0)
+
+               EndMode3D()
+
+               DrawText("Press Spacebar to switch camera type", 10,
+                                GetScreenHeight() - 30, 20, DARKGRAY)
+
+               if camera.type = CAMERA_ORTHOGRAPHIC
+                       DrawText("ORTHOGRAPHIC", 10, 40, 20, BLACK)
+               else 
+                       if camera.type = CAMERA_PERSPECTIVE 
+                               DrawText("PERSPECTIVE", 10, 40, 20, BLACK)
+                       ok
+               ok
+
+               DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+Screen Shot:
+       
+.. image:: raylib_geometricshapes.png
+       :alt: RayLib Example    
+
+.. index:: 
+       pair: Using RingRayLib; Cubic Map
+
+Cubic Map
+=========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [models] example - cubesmap loading and drawing")
+
+       camera = Camera3D( 16.0, 14.0, 16.0,
+                                        0.0, 0.0, 0.0,
+                                        0.0, 1.0, 0.0, 
+                                        45.0, 0 )
+
+       image    = LoadImage("cubicmap.png")        
+       cubicmap = LoadTextureFromImage(image)      
+
+       mesh     = GenMeshCubicmap(image, Vector3( 1.0, 1.0, 1.0 ))
+       model    = LoadModelFromMesh(mesh)
+
+       texture  = LoadTexture("cubicmap_atlas.png") 
+
+       setmodelmaterialtexture(model,0,MAP_DIFFUSE,texture)
+
+       mapPosition = Vector3( -16.0, 0.0, -8.0 )   
+
+       UnloadImage(image)                     
+       SetCameraMode(camera, CAMERA_ORBITAL)  
+       SetTargetFPS(60)                       
+       
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+               
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+                       BeginMode3D(camera)
+                               DrawModel(model, mapPosition, 1.0, WHITE)
+                       EndMode3D()
+
+                       DrawTextureEx(cubicmap, Vector2( screenWidth -
+                                        cubicmap.width*4 - 20, 20 ),
+                                                       0.0, 4.0, WHITE)
+                       DrawRectangleLines(screenWidth - cubicmap.width*4 -
+                                        20, 20, cubicmap.width*4,
+                                       cubicmap.height*4, GREEN)
+
+                       DrawText("cubicmap image used to", 658,  90, 10, GRAY)
+                       DrawText("generate map 3d model",  658, 104, 10, GRAY)
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       UnloadTexture(cubicmap) 
+       UnloadTexture(texture)  
+       UnloadModel(model)      
+
+       CloseWindow()
+       
+Screen Shot:
+       
+.. image:: raylib_cubicmap.png
+       :alt: RayLib Example    
+       
+Functions
+=========
+
+.. code-block:: none
+
+       void InitWindow(int width, int height, const char *title)
+       bool WindowShouldClose(void)
+       void CloseWindow(void)
+       bool IsWindowReady(void)
+       bool IsWindowMinimized(void)
+       bool IsWindowResized(void)
+       bool IsWindowHidden(void)
+       void ToggleFullscreen(void)
+       void UnhideWindow(void)
+       void HideWindow(void)
+       void SetWindowIcon(Image image)
+       void SetWindowTitle(const char *title)
+       void SetWindowPosition(int x, int y)
+       void SetWindowMonitor(int monitor)
+       void SetWindowMinSize(int width, int height)
+       void SetWindowSize(int width, int height)
+       void *GetWindowHandle(void)
+       int GetScreenWidth(void)
+       int GetScreenHeight(void)
+       int GetMonitorCount(void)
+       int GetMonitorWidth(int monitor)
+       int GetMonitorHeight(int monitor)
+       int GetMonitorPhysicalWidth(int monitor)
+       int GetMonitorPhysicalHeight(int monitor)
+       const char *GetMonitorName(int monitor)
+       const char *GetClipboardText(void)
+       void SetClipboardText(const char *text)
+       void ShowCursor(void)
+       void HideCursor(void)
+       bool IsCursorHidden(void)
+       void EnableCursor(void)
+       void DisableCursor(void)
+       void ClearBackground(Color color)
+       void BeginDrawing(void)
+       void EndDrawing(void)
+       void BeginMode2D(Camera2D camera)
+       void EndMode2D(void)
+       void BeginMode3D(Camera3D camera)
+       void EndMode3D(void)
+       void BeginTextureMode(RenderTexture2D target)
+       void EndTextureMode(void)
+       Ray GetMouseRay(Vector2 mousePosition, Camera3D camera)
+       Vector2 GetWorldToScreen(Vector3 position, Camera3D camera)
+       Matrix GetCameraMatrix(Camera3D camera)
+       void SetTargetFPS(int fps)
+       int GetFPS(void)
+       float GetFrameTime(void)
+       double GetTime(void)
+       int ColorToInt(Color color)
+       Vector4 ColorNormalize(Color color)
+       Vector3 ColorToHSV(Color color)
+       Color ColorFromHSV(Vector3 hsv)
+       Color GetColor(int hexValue)
+       Color Fade(Color color, float alpha)
+       void SetConfigFlags(unsigned char flags)
+       void SetTraceLogLevel(int logType)
+       void SetTraceLogExit(int logType)
+       void SetTraceLogCallback(TraceLogCallback callback)
+       void TraceLog(int logType, const char *text)
+       void TakeScreenshot(const char *fileName)
+       int GetRandomValue(int min, int max)
+       bool FileExists(const char *fileName)
+       bool IsFileExtension(const char *fileName, const char *ext)
+       const char *GetExtension(const char *fileName)
+       const char *GetFileName(const char *filePath)
+       const char *GetFileNameWithoutExt(const char *filePath)
+       const char *GetDirectoryPath(const char *fileName)
+       const char *GetWorkingDirectory(void)
+       char **GetDirectoryFiles(const char *dirPath, int *count)
+       void ClearDirectoryFiles(void)
+       bool ChangeDirectory(const char *dir)
+       bool IsFileDropped(void)
+       char **GetDroppedFiles(int *count)
+       void ClearDroppedFiles(void)
+       long GetFileModTime(const char *fileName)
+       void StorageSaveValue(int position, int value)
+       int StorageLoadValue(int position)
+       void OpenURL(const char *url)
+       bool IsKeyPressed(int key)
+       bool IsKeyDown(int key)
+       bool IsKeyReleased(int key)
+       bool IsKeyUp(int key)
+       int GetKeyPressed(void)
+       void SetExitKey(int key)
+       bool IsGamepadAvailable(int gamepad)
+       bool IsGamepadName(int gamepad, const char *name)
+       const char *GetGamepadName(int gamepad)
+       bool IsGamepadButtonPressed(int gamepad, int button)
+       bool IsGamepadButtonDown(int gamepad, int button)
+       bool IsGamepadButtonReleased(int gamepad, int button)
+       bool IsGamepadButtonUp(int gamepad, int button)
+       int GetGamepadButtonPressed(void)
+       int GetGamepadAxisCount(int gamepad)
+       float GetGamepadAxisMovement(int gamepad, int axis)
+       bool IsMouseButtonPressed(int button)
+       bool IsMouseButtonDown(int button)
+       bool IsMouseButtonReleased(int button)
+       bool IsMouseButtonUp(int button)
+       int GetMouseX(void)
+       int GetMouseY(void)
+       Vector2 GetMousePosition(void)
+       void SetMousePosition(int x, int y)
+       void SetMouseOffset(int offsetX, int offsetY)
+       void SetMouseScale(float scaleX, float scaleY)
+       int GetMouseWheelMove(void)
+       int GetTouchX(void)
+       int GetTouchY(void)
+       Vector2 GetTouchPosition(int index)
+       void SetGesturesEnabled(unsigned int gestureFlags)
+       bool IsGestureDetected(int gesture)
+       int GetGestureDetected(void)
+       int GetTouchPointsCount(void)
+       float GetGestureHoldDuration(void)
+       Vector2 GetGestureDragVector(void)
+       float GetGestureDragAngle(void)
+       Vector2 GetGesturePinchVector(void)
+       float GetGesturePinchAngle(void)
+       void SetCameraMode(Camera3D camera, int mode)
+       void UpdateCamera(Camera3D *camera)
+       void SetCameraPanControl(int panKey)
+       void SetCameraAltControl(int altKey)
+       void SetCameraSmoothZoomControl(int szKey)
+       void SetCameraMoveControls(int frontKey, int backKey, int rightKey, int leftKey,
+                int upKey, int downKey)
+       void DrawPixel(int posX, int posY, Color color)
+       void DrawPixelV(Vector2 position, Color color)
+       void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color)
+       void DrawLineV(Vector2 startPos, Vector2 endPos, Color color)
+       void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color)
+       void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color)
+       void DrawLineStrip(Vector2 *points, int numPoints, Color color)
+       void DrawCircle(int centerX, int centerY, float radius, Color color)
+       void DrawCircleSector(Vector2 center, float radius, int startAngle, int endAngle,
+                int segments, Color color)
+       void DrawCircleSectorLines(Vector2 center, float radius, int startAngle, 
+               int endAngle, int segments, Color color)
+       void DrawCircleGradient(int centerX, int centerY, float radius, 
+               Color color1, Color color2)
+       void DrawCircleV(Vector2 center, float radius, Color color)
+       void DrawCircleLines(int centerX, int centerY, float radius, Color color)
+       void DrawRing(Vector2 center, float innerRadius, float outerRadius,
+                int startAngle, int endAngle, int segments, Color color)
+       void DrawRingLines(Vector2 center, float innerRadius, float outerRadius,
+                int startAngle, int endAngle, int segments, Color color)
+       void DrawRectangle(int posX, int posY, int width, int height, Color color)
+       void DrawRectangleV(Vector2 position, Vector2 size, Color color)
+       void DrawRectangleRec(Rectangle rec, Color color)
+       void DrawRectanglePro(Rectangle rec, Vector2 origin, 
+               float rotation, Color color)
+       void DrawRectangleGradientV(int posX, int posY, int width, 
+               int height, Color color1, Color color2)
+       void DrawRectangleGradientH(int posX, int posY, int width, 
+               int height, Color color1, Color color2)
+       void DrawRectangleGradientEx(Rectangle rec, Color col1, 
+               Color col2, Color col3, Color col4)
+       void DrawRectangleLines(int posX, int posY, int width, 
+               int height, Color color)
+       void DrawRectangleLinesEx(Rectangle rec, int lineThick, Color color)
+       void DrawRectangleRounded(Rectangle rec, float roundness, 
+               int segments, Color color)
+       void DrawRectangleRoundedLines(Rectangle rec, float roundness, 
+               int segments, int lineThick, Color color)
+       void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
+       void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
+       void DrawTriangleFan(Vector2 *points, int numPoints, Color color)
+       void DrawPoly(Vector2 center, int sides, float radius, 
+               float rotation, Color color)
+       void SetShapesTexture(Texture2D texture, Rectangle source)
+       bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2)
+       bool CheckCollisionCircles(Vector2 center1, float radius1, 
+               Vector2 center2, float radius2)
+       bool CheckCollisionCircleRec(Vector2 center, float radius, 
+               Rectangle rec)
+       Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2)
+       bool CheckCollisionPointRec(Vector2 point, Rectangle rec)
+       bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius)
+       bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, 
+               Vector2 p2, Vector2 p3)
+       Image LoadImage(const char *fileName)
+       Image LoadImageEx(Color *pixels, int width, int height)
+       Image LoadImagePro(void *data, int width, int height, int format)
+       Image LoadImageRaw(const char *fileName, int width, int height, 
+               int format, int headerSize)
+       void ExportImage(Image image, const char *fileName)
+       void ExportImageAsCode(Image image, const char *fileName)
+       Texture2D LoadTexture(const char *fileName)
+       Texture2D LoadTextureFromImage(Image image)
+       TextureCubemap LoadTextureCubemap(Image image, int layoutType)
+       RenderTexture2D LoadRenderTexture(int width, int height)
+       void UnloadImage(Image image)
+       void UnloadTexture(Texture2D texture)
+       void UnloadRenderTexture(RenderTexture2D target)
+       Color *GetImageData(Image image)
+       Vector4 *GetImageDataNormalized(Image image)
+       int GetPixelDataSize(int width, int height, int format)
+       Image GetTextureData(Texture2D texture)
+       Image GetScreenData(void)
+       void UpdateTexture(Texture2D texture, const void *pixels)
+       Image ImageCopy(Image image)
+       void ImageToPOT(Image *image, Color fillColor)
+       void ImageFormat(Image *image, int newFormat)
+       void ImageAlphaMask(Image *image, Image alphaMask)
+       void ImageAlphaClear(Image *image, Color color, float threshold)
+       void ImageAlphaCrop(Image *image, float threshold)
+       void ImageAlphaPremultiply(Image *image)
+       void ImageCrop(Image *image, Rectangle crop)
+       void ImageResize(Image *image, int newWidth, int newHeight)
+       void ImageResizeNN(Image *image, int newWidth,int newHeight)
+       void ImageResizeCanvas(Image *image, int newWidth, int newHeight, 
+               int offsetX, int offsetY, Color color)
+       void ImageMipmaps(Image *image)
+       void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp)
+       Color *ImageExtractPalette(Image image, int maxPaletteSize, int *extractCount)
+       Image ImageText(const char *text, int fontSize, Color color)
+       Image ImageTextEx(Font font, const char *text, float fontSize, 
+               float spacing, Color tint)
+       void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec)
+       void ImageDrawRectangle(Image *dst, Rectangle rec, Color color)
+       void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color)
+       void ImageDrawText(Image *dst, Vector2 position, const char *text, 
+               int fontSize, Color color)
+       void ImageDrawTextEx(Image *dst, Vector2 position, Font font, 
+               const char *text, float fontSize, float spacing, Color color)
+       void ImageFlipVertical(Image *image)
+       void ImageFlipHorizontal(Image *image)
+       void ImageRotateCW(Image *image)
+       void ImageRotateCCW(Image *image)
+       void ImageColorTint(Image *image, Color color)
+       void ImageColorInvert(Image *image)
+       void ImageColorGrayscale(Image *image)
+       void ImageColorContrast(Image *image, float contrast)
+       void ImageColorBrightness(Image *image, int brightness)
+       void ImageColorReplace(Image *image, Color color, Color replace)
+       Image GenImageColor(int width, int height, Color color)
+       Image GenImageGradientV(int width, int height, Color top, Color bottom)
+       Image GenImageGradientH(int width, int height, Color left, Color right)
+       Image GenImageGradientRadial(int width, int height, float density, 
+               Color inner, Color outer)
+       Image GenImageChecked(int width, int height, int checksX, int checksY, 
+               Color col1, Color col2)
+       Image GenImageWhiteNoise(int width, int height, float factor)
+       Image GenImagePerlinNoise(int width, int height, int offsetX, 
+               int offsetY, float scale)
+       Image GenImageCellular(int width, int height, int tileSize)
+       void GenTextureMipmaps(Texture2D *texture)
+       void SetTextureFilter(Texture2D texture, int filterMode)
+       void SetTextureWrap(Texture2D texture, int wrapMode)
+       void DrawTexture(Texture2D texture, int posX, int posY, Color tint)
+       void DrawTextureV(Texture2D texture, Vector2 position, Color tint)
+       void DrawTextureEx(Texture2D texture, Vector2 position, 
+               float rotation, float scale, Color tint)
+       void DrawTextureRec(Texture2D texture, Rectangle sourceRec, 
+               Vector2 position, Color tint)
+       void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, 
+               Rectangle quad, Color tint)
+       void DrawTexturePro(Texture2D texture, Rectangle sourceRec, 
+               Rectangle destRec, Vector2 origin, float rotation, Color tint)
+       void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, 
+               Rectangle destRec, Vector2 origin, float rotation, Color tint)
+       Font GetFontDefault(void)
+       Font LoadFont(const char *fileName)
+       Font LoadFontEx(const char *fileName, int fontSize, 
+               int *fontChars, int charsCount)
+       Font LoadFontFromImage(Image image, Color key, int firstChar)
+       CharInfo *LoadFontData(const char *fileName, int fontSize, 
+               int *fontChars, int charsCount, int type)
+       Image GenImageFontAtlas(CharInfo *chars, int charsCount, 
+               int fontSize, int padding, int packMethod)
+       void UnloadFont(Font font)
+       void DrawFPS(int posX, int posY)
+       void DrawText(const char *text, int posX, int posY, int fontSize, Color color)
+       void DrawTextEx(Font font, const char *text, Vector2 position, 
+               float fontSize, float spacing, Color tint)
+       void DrawTextRec(Font font, const char *text, Rectangle rec, 
+               float fontSize, float spacing, bool wordWrap, Color tint)
+       void DrawTextRecEx(Font font, const char *text, Rectangle rec, 
+               float fontSize, float spacing, bool wordWrap, Color tint,
+               int selectStart, int selectLength, Color selectText, Color selectBack)
+       int MeasureText(const char *text, int fontSize)
+       Vector2 MeasureTextEx(Font font, const char *text, 
+               float fontSize, float spacing)
+       int GetGlyphIndex(Font font, int character)
+       int GetNextCodepoint(const char *text, int *count)
+       bool TextIsEqual(const char *text1, const char *text2)
+       unsigned int TextLength(const char *text)
+       unsigned int TextCountCodepoints(const char *text)
+       const char *TextFormat(const char *text)
+       const char *TextSubtext(const char *text, int position, int length)
+       const char *TextReplace(char *text, const char *replace, const char *by)
+       const char *TextInsert(const char *text, const char *insert, int position)
+       const char *TextJoin(const char **textList, int count, const char *delimiter)
+       const char **TextSplit(const char *text, char delimiter, int *count)
+       void TextAppend(char *text, const char *append, int *position)
+       int TextFindIndex(const char *text, const char *find)
+       const char *TextToUpper(const char *text)
+       const char *TextToLower(const char *text)
+       const char *TextToPascal(const char *text)
+       int TextToInteger(const char *text)
+       void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color)
+       void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, 
+       float rotationAngle, Color color)
+       void DrawCube(Vector3 position, float width, float height, float length, Color color)
+       void DrawCubeV(Vector3 position, Vector3 size, Color color)
+       void DrawCubeWires(Vector3 position, float width, float height, 
+               float length, Color color)
+       void DrawCubeWiresV(Vector3 position, Vector3 size, Color color)
+       void DrawCubeTexture(Texture2D texture, Vector3 position, 
+               float width, float height, float length, Color color)
+       void DrawSphere(Vector3 centerPos, float radius, Color color)
+       void DrawSphereEx(Vector3 centerPos, float radius, int rings, 
+               int slices, Color color)
+       void DrawSphereWires(Vector3 centerPos, float radius, int rings, 
+               int slices, Color color)
+       void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, 
+               float height, int slices, Color color)
+       void DrawCylinderWires(Vector3 position, float radiusTop, 
+               float radiusBottom, float height, int slices, Color color)
+       void DrawPlane(Vector3 centerPos, Vector2 size, Color color)
+       void DrawRay(Ray ray, Color color)
+       void DrawGrid(int slices, float spacing)
+       void DrawGizmo(Vector3 position)
+       Model LoadModel(const char *fileName)
+       Model LoadModelFromMesh(Mesh mesh)
+       void UnloadModel(Model model)
+       Mesh *LoadMeshes(const char *fileName, int *meshCount)
+       void ExportMesh(Mesh mesh, const char *fileName)
+       void UnloadMesh(Mesh *mesh)
+       Material *LoadMaterials(const char *fileName, int *materialCount)
+       Material LoadMaterialDefault(void)
+       void UnloadMaterial(Material material)
+       void SetMaterialTexture(Material *material, int mapType, Texture2D texture)
+       void SetModelMeshMaterial(Model *model, int meshId, int materialId)
+       ModelAnimation *LoadModelAnimations(const char *fileName, int *animsCount)
+       void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
+       void UnloadModelAnimation(ModelAnimation anim)
+       bool IsModelAnimationValid(Model model, ModelAnimation anim)
+       Mesh GenMeshPoly(int sides, float radius)
+       Mesh GenMeshPlane(float width, float length, int resX, int resZ)
+       Mesh GenMeshCube(float width, float height, float length)
+       Mesh GenMeshSphere(float radius, int rings, int slices)
+       Mesh GenMeshHemiSphere(float radius, int rings, int slices)
+       Mesh GenMeshCylinder(float radius, float height, int slices)
+       Mesh GenMeshTorus(float radius, float size, int radSeg, int sides)
+       Mesh GenMeshKnot(float radius, float size, int radSeg, int sides)
+       Mesh GenMeshHeightmap(Image heightmap, Vector3 size)
+       Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize)
+       BoundingBox MeshBoundingBox(Mesh mesh)
+       void MeshTangents(Mesh *mesh)
+       void MeshBinormals(Mesh *mesh)
+       void DrawModel(Model model, Vector3 position, float scale, Color tint)
+       void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, 
+               float rotationAngle, Vector3 scale, Color tint)
+       void DrawModelWires(Model model, Vector3 position, float scale, Color tint)
+       void DrawModelWiresEx(Model model, Vector3 position, 
+               Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint)
+       void DrawBoundingBox(BoundingBox box, Color color)
+       void DrawBillboard(Camera3D camera, Texture2D texture, 
+               Vector3 center, float size, Color tint)
+       void DrawBillboardRec(Camera3D camera, Texture2D texture, 
+               Rectangle sourceRec, Vector3 center, float size, Color tint)
+       bool CheckCollisionSpheres(Vector3 centerA, float radiusA, 
+               Vector3 centerB, float radiusB)
+       bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2)
+       bool CheckCollisionBoxSphere(BoundingBox box, Vector3 centerSphere, float radiusSphere)
+       bool CheckCollisionRaySphere(Ray ray, Vector3 spherePosition, float sphereRadius)
+       bool CheckCollisionRaySphereEx(Ray ray, Vector3 spherePosition, 
+               float sphereRadius, Vector3 *collisionPoint)
+       bool CheckCollisionRayBox(Ray ray, BoundingBox box)
+       RayHitInfo GetCollisionRayModel(Ray ray, Model *model)
+       RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3)
+       RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight)
+       char *LoadText(const char *fileName)
+       Shader LoadShader(const char *vsFileName, const char *fsFileName)
+       Shader LoadShaderCode(char *vsCode, char *fsCode)
+       void UnloadShader(Shader shader)
+       Shader GetShaderDefault(void)
+       Texture2D GetTextureDefault(void)
+       int GetShaderLocation(Shader shader, const char *uniformName)
+       void SetShaderValue(Shader shader, int uniformLoc, 
+               const void *value, int uniformType)
+       void SetShaderValueV(Shader shader, int uniformLoc, 
+               const void *value, int uniformType, int count)
+       void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
+       void SetShaderValueTexture(Shader shader, int uniformLoc, Texture2D texture)
+       void SetMatrixProjection(Matrix proj)
+       void SetMatrixModelview(Matrix view)
+       Matrix GetMatrixModelview(void)
+       Texture2D GenTextureCubemap(Shader shader, Texture2D skyHDR, int size)
+       Texture2D GenTextureIrradiance(Shader shader, Texture2D cubemap, int size)
+       Texture2D GenTexturePrefilter(Shader shader, Texture2D cubemap, int size)
+       Texture2D GenTextureBRDF(Shader shader, int size)
+       void BeginShaderMode(Shader shader)
+       void EndShaderMode(void)
+       void BeginBlendMode(int mode)
+       void EndBlendMode(void)
+       void BeginScissorMode(int x, int y, int width, int height)
+       void EndScissorMode(void)
+       void InitVrSimulator(void)
+       void CloseVrSimulator(void)
+       void UpdateVrTracking(Camera3D *camera)
+       void SetVrConfiguration(VrDeviceInfo info, Shader distortion)
+       bool IsVrSimulatorReady(void)
+       void ToggleVrMode(void)
+       void BeginVrDrawing(void)
+       void EndVrDrawing(void)
+       void InitAudioDevice(void)
+       void CloseAudioDevice(void)
+       bool IsAudioDeviceReady(void)
+       void SetMasterVolume(float volume)
+       Wave LoadWave(const char *fileName)
+       Wave LoadWaveEx(void *data, int sampleCount, int sampleRate, 
+               int sampleSize, int channels)
+       Sound LoadSound(const char *fileName)
+       Sound LoadSoundFromWave(Wave wave)
+       void UpdateSound(Sound sound, const void *data, int samplesCount)
+       void UnloadWave(Wave wave)
+       void UnloadSound(Sound sound)
+       void ExportWave(Wave wave, const char *fileName)
+       void ExportWaveAsCode(Wave wave, const char *fileName)
+       void PlaySound(Sound sound)
+       void PauseSound(Sound sound)
+       void ResumeSound(Sound sound)
+       void StopSound(Sound sound)
+       bool IsSoundPlaying(Sound sound)
+       void SetSoundVolume(Sound sound, float volume)
+       void SetSoundPitch(Sound sound, float pitch)
+       void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels)
+       Wave WaveCopy(Wave wave)
+       void WaveCrop(Wave *wave, int initSample, int finalSample)
+       float *GetWaveData(Wave wave)
+       Music LoadMusicStream(const char *fileName)
+       void UnloadMusicStream(Music music)
+       void PlayMusicStream(Music music)
+       void UpdateMusicStream(Music music)
+       void StopMusicStream(Music music)
+       void PauseMusicStream(Music music)
+       void ResumeMusicStream(Music music)
+       bool IsMusicPlaying(Music music)
+       void SetMusicVolume(Music music, float volume)
+       void SetMusicPitch(Music music, float pitch)
+       void SetMusicLoopCount(Music music, int count)
+       float GetMusicTimeLength(Music music)
+       float GetMusicTimePlayed(Music music)
+       AudioStream InitAudioStream(unsigned int sampleRate, 
+               unsigned int sampleSize, unsigned int channels)
+       void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)
+       void CloseAudioStream(AudioStream stream)
+       bool IsAudioBufferProcessed(AudioStream stream)
+       void PlayAudioStream(AudioStream stream)
+       void PauseAudioStream(AudioStream stream)
+       void ResumeAudioStream(AudioStream stream)
+       bool IsAudioStreamPlaying(AudioStream stream)
+       void StopAudioStream(AudioStream stream)
+       void SetAudioStreamVolume(AudioStream stream, float volume)
+       void SetAudioStreamPitch(AudioStream stream, float pitch)
+       void GuiEnable(void)
+       void GuiDisable(void)
+       void GuiLock(void)
+       void GuiUnlock(void)
+       void GuiState(int state)
+       void GuiFont(Font font)
+       void GuiFade(float alpha)
+       void GuiSetStyle(int control, int property, int value)
+       int GuiGetStyle(int control, int property)
+       bool GuiWindowBox(Rectangle bounds, const char *text)
+       void GuiGroupBox(Rectangle bounds, const char *text)
+       void GuiLine(Rectangle bounds, const char *text)
+       void GuiPanel(Rectangle bounds)
+       Rectangle GuiScrollPanel(Rectangle bounds, Rectangle content, Vector2 *scroll)
+       void GuiLabel(Rectangle bounds, const char *text)
+       bool GuiButton(Rectangle bounds, const char *text)
+       bool GuiLabelButton(Rectangle bounds, const char *text)
+       bool GuiImageButton(Rectangle bounds, Texture2D texture)
+       bool GuiImageButtonEx(Rectangle bounds, Texture2D texture, 
+               Rectangle texSource, const char *text)
+       bool GuiToggle(Rectangle bounds, const char *text, bool active)
+       int GuiToggleGroup(Rectangle bounds, const char *text, int active)
+       bool GuiCheckBox(Rectangle bounds, const char *text, bool checked)
+       int GuiComboBox(Rectangle bounds, const char *text, int active)=
+       bool GuiDropdownBox(Rectangle bounds, const char *text, 
+               int *active, bool editMode)
+       bool GuiSpinner(Rectangle bounds, int *value, int minValue, 
+               int maxValue, bool editMode)
+       bool GuiValueBox(Rectangle bounds, int *value, int minValue, 
+               int maxValue, bool editMode)
+       bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode)
+       bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode)
+       float GuiSlider(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       float GuiSliderBar(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       float GuiProgressBar(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       void GuiStatusBar(Rectangle bounds, const char *text)
+       void GuiDummyRec(Rectangle bounds, const char *text)
+       int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue)
+       Vector2 GuiGrid(Rectangle bounds, float spacing, int subdivs)
+       bool GuiListView(Rectangle bounds, const char *text, int *active, 
+               int *scrollIndex, bool editMode)
+       bool GuiListViewEx(Rectangle bounds, const char **text, int count, 
+               int *enabled, int *active, int *focus, int *scrollIndex, bool editMode)
+       int GuiMessageBox(Rectangle bounds, const char *windowTitle, 
+               const char *message, const char *buttons)
+       int GuiTextInputBox(Rectangle bounds, const char *windowTitle, 
+               const char *message, char *text, const char *buttons)
+       Color GuiColorPicker(Rectangle bounds, Color color)
+       void GuiLoadStyle(const char *fileName)
+       void GuiLoadStyleProps(const int *props, int count)
+       void GuiLoadStyleDefault(void)
+       void GuiUpdateStyleComplete(void)
+       const char *GuiIconText(int iconId, const char *text)
diff --git a/docs/en/source/ringrepl.png b/docs/en/source/ringrepl.png
new file mode 100644 (file)
index 0000000..162c174
Binary files /dev/null and b/docs/en/source/ringrepl.png differ
diff --git a/docs/en/source/ringzip.txt b/docs/en/source/ringzip.txt
new file mode 100644 (file)
index 0000000..4b2e5d7
--- /dev/null
@@ -0,0 +1,181 @@
+.. index:: 
+       single: RingZip; Introduction
+
+=============
+Using RingZip
+=============
+
+In this chapter we will learn about using RingZip
+
+.. index:: 
+       pair: RingZip; Create Zip File
+
+Create Zip File
+===============
+
+Example : Create myfile.zip contains 4 files 
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'w')
+       zip_addfile(oZip,"test.c")
+       zip_addfile(oZip,"zip.c")
+       zip_addfile(oZip,"zip.h")
+       zip_addfile(oZip,"miniz.h")
+       zip_close(oZip)
+
+.. index:: 
+       pair: RingZip; Extract Zip File
+
+Extract Zip File
+================
+
+Example : Extract myfile.zip to myfolder folder.
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       zip_extract_allfiles("myfile.zip","myfolder")
+
+.. index:: 
+       pair: RingZip; Print files in Zip file
+
+Print Files in Zip file
+=======================
+
+Example : Print file names in the myfile.zip
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'r')
+       for x=1 to zip_filescount(oZip)
+              see zip_getfilenamebyindex(oZip,x) + nl
+       next
+       zip_close(oZip)
+
+.. index:: 
+       pair: RingZip; Using RingZip Classes
+
+Using RingZip Classes
+=====================
+
+The RingZip library comes with two classes. The Zip class and the ZipEntry class.
+
+Example (1):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               setFileName("myfile.zip")
+               open("w")
+               newEntry() {
+                       open("test.c")
+                       writefile("test.c")
+                       close()
+               }
+               close()
+       }
+
+Example (2):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("w")
+               AddFile("test.c")
+               AddFile("zip.c")
+               AddFile("zip.h")
+               AddFile("miniz.h")
+               Close()
+       }
+
+
+Example (3):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new zip {
+               SetFileName("myfile.zip")
+               ExtractAllFiles("myfolder")
+       }
+
+
+Example (4):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("r")
+               see FilesCount()
+               Close()
+       }
+
+
+Example (5):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("r")
+               for x = 1 to filescount() 
+                       See GetFileNameByIndex(x) + nl
+               next
+               Close()
+       }
+
+.. index:: 
+       pair: RingZip; Zip Class Reference
+
+Zip Class Reference
+===================
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+SetFileName(cName)             Set the Zip file name
+GetFileName()                  Return the Zip file name
+Open(cMode)                    Open File, cMode = "a", "w" or "r"
+Close()                        Close the Zip File
+AddFile(cFileName)             Add file to the Zip file
+ExtractAllFiles(cFolder)       Extract all files from the Zip file
+FilesCount()                   Return files count in the Zip file
+GetFileNameByIndex(nIndex)     Return file name in the Zip file by file index
+NewEntry()                     Create new ZipEntry object
+===========================    ======================================================================
+
+
+.. index:: 
+       pair: RingZip; ZipEntry Class Reference
+
+ZipEntry Class Reference
+========================
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Open(cFileName)                Open new Entry
+WriteFile(cFileName)           Write File to the Entry
+WriteString(cString)           Write String to the Entry
+Close()                                Close the Entry
+===========================    ======================================================================
+
+
diff --git a/docs/en/source/rnote15events.png b/docs/en/source/rnote15events.png
new file mode 100644 (file)
index 0000000..a14997a
Binary files /dev/null and b/docs/en/source/rnote15events.png differ
diff --git a/docs/en/source/rnote15output.png b/docs/en/source/rnote15output.png
new file mode 100644 (file)
index 0000000..6cf97e7
Binary files /dev/null and b/docs/en/source/rnote15output.png differ
diff --git a/docs/en/source/rnote15shot1.png b/docs/en/source/rnote15shot1.png
new file mode 100644 (file)
index 0000000..f8f03f1
Binary files /dev/null and b/docs/en/source/rnote15shot1.png differ
diff --git a/docs/en/source/rnote15shot2.png b/docs/en/source/rnote15shot2.png
new file mode 100644 (file)
index 0000000..e00e642
Binary files /dev/null and b/docs/en/source/rnote15shot2.png differ
diff --git a/docs/en/source/rnote15shot3.png b/docs/en/source/rnote15shot3.png
new file mode 100644 (file)
index 0000000..b3a96ca
Binary files /dev/null and b/docs/en/source/rnote15shot3.png differ
diff --git a/docs/en/source/rnote19.jpg b/docs/en/source/rnote19.jpg
new file mode 100644 (file)
index 0000000..d61b78c
Binary files /dev/null and b/docs/en/source/rnote19.jpg differ
diff --git a/docs/en/source/rnotedistribute.png b/docs/en/source/rnotedistribute.png
new file mode 100644 (file)
index 0000000..d58bae5
Binary files /dev/null and b/docs/en/source/rnotedistribute.png differ
diff --git a/docs/en/source/rnotedistributemenu.png b/docs/en/source/rnotedistributemenu.png
new file mode 100644 (file)
index 0000000..5ed2e10
Binary files /dev/null and b/docs/en/source/rnotedistributemenu.png differ
diff --git a/docs/en/source/rnotefd.png b/docs/en/source/rnotefd.png
new file mode 100644 (file)
index 0000000..a4c229a
Binary files /dev/null and b/docs/en/source/rnotefd.png differ
diff --git a/docs/en/source/rnotelinenumber.png b/docs/en/source/rnotelinenumber.png
new file mode 100644 (file)
index 0000000..2fc38df
Binary files /dev/null and b/docs/en/source/rnotelinenumber.png differ
diff --git a/docs/en/source/rnotemenu_browser.png b/docs/en/source/rnotemenu_browser.png
new file mode 100644 (file)
index 0000000..de23aed
Binary files /dev/null and b/docs/en/source/rnotemenu_browser.png differ
diff --git a/docs/en/source/rnotemenu_edit.png b/docs/en/source/rnotemenu_edit.png
new file mode 100644 (file)
index 0000000..25d6d08
Binary files /dev/null and b/docs/en/source/rnotemenu_edit.png differ
diff --git a/docs/en/source/rnotemenu_file.png b/docs/en/source/rnotemenu_file.png
new file mode 100644 (file)
index 0000000..cbfb86c
Binary files /dev/null and b/docs/en/source/rnotemenu_file.png differ
diff --git a/docs/en/source/rnotemenu_help.png b/docs/en/source/rnotemenu_help.png
new file mode 100644 (file)
index 0000000..522f987
Binary files /dev/null and b/docs/en/source/rnotemenu_help.png differ
diff --git a/docs/en/source/rnotemenu_mode.png b/docs/en/source/rnotemenu_mode.png
new file mode 100644 (file)
index 0000000..525815a
Binary files /dev/null and b/docs/en/source/rnotemenu_mode.png differ
diff --git a/docs/en/source/rnotemenu_program.png b/docs/en/source/rnotemenu_program.png
new file mode 100644 (file)
index 0000000..55d2b56
Binary files /dev/null and b/docs/en/source/rnotemenu_program.png differ
diff --git a/docs/en/source/rnotemenu_tools.png b/docs/en/source/rnotemenu_tools.png
new file mode 100644 (file)
index 0000000..f06d303
Binary files /dev/null and b/docs/en/source/rnotemenu_tools.png differ
diff --git a/docs/en/source/rnotemenu_view.png b/docs/en/source/rnotemenu_view.png
new file mode 100644 (file)
index 0000000..d60f854
Binary files /dev/null and b/docs/en/source/rnotemenu_view.png differ
diff --git a/docs/en/source/rnotemodernstyle.png b/docs/en/source/rnotemodernstyle.png
new file mode 100644 (file)
index 0000000..356b31a
Binary files /dev/null and b/docs/en/source/rnotemodernstyle.png differ
diff --git a/docs/en/source/rnotemodernstyle2.png b/docs/en/source/rnotemodernstyle2.png
new file mode 100644 (file)
index 0000000..aa90019
Binary files /dev/null and b/docs/en/source/rnotemodernstyle2.png differ
diff --git a/docs/en/source/rnotestylemenu.png b/docs/en/source/rnotestylemenu.png
new file mode 100644 (file)
index 0000000..e8b78f7
Binary files /dev/null and b/docs/en/source/rnotestylemenu.png differ
diff --git a/docs/en/source/rnotetoolsterminal.png b/docs/en/source/rnotetoolsterminal.png
new file mode 100644 (file)
index 0000000..46a6c9a
Binary files /dev/null and b/docs/en/source/rnotetoolsterminal.png differ
diff --git a/docs/en/source/rnotetoolsterminal2.png b/docs/en/source/rnotetoolsterminal2.png
new file mode 100644 (file)
index 0000000..19a01c0
Binary files /dev/null and b/docs/en/source/rnotetoolsterminal2.png differ
diff --git a/docs/en/source/runwebapp1.png b/docs/en/source/runwebapp1.png
new file mode 100644 (file)
index 0000000..3d708ed
Binary files /dev/null and b/docs/en/source/runwebapp1.png differ
diff --git a/docs/en/source/runwebapp2.png b/docs/en/source/runwebapp2.png
new file mode 100644 (file)
index 0000000..d55801d
Binary files /dev/null and b/docs/en/source/runwebapp2.png differ
diff --git a/docs/en/source/scope.txt b/docs/en/source/scope.txt
new file mode 100644 (file)
index 0000000..e3acd30
--- /dev/null
@@ -0,0 +1,1006 @@
+.. index:: 
+       single: Scope Rules; Introduction
+
+========================================
+Scope Rules for Variables and Attributes
+========================================
+
+In this chapter we will learn about scope rules and how Ring find variables.
+
+Also we will learn about conflicts and how to solve/avoid them.
+
+The next information are important once you start developing large applications using Ring
+
+These application may uses 
+
+* Global variables (Try to avoid them)
+
+* Classes (Object-Oriented)
+
+* braces { } to access objects
+
+* Declarative Programming
+
+* Natural Programming
+
+.. index:: 
+       pair: Scope Rules; Three Scopes
+
+Three Scopes 
+============
+
+In Ring we have three scopes :-
+
+(1) Public/Global Scope - Each variable you define in the statements part (before functions and classes)
+
+(2) Object Scope - When you are inside an object (Inside class method or using { } to access the object )
+
+(3) Local Scope - Related to functions and methods
+
+.. index:: 
+       pair: Scope Rules; Defining Variables and Variables Access
+
+Defining Variables and Variables Access
+=======================================
+
+(1) Ring uses lexical scoping, i.e. the scope of the variable is based on where we defined the variable.
+
+(2) Inside braces {  } when you access an object, You will change the current active object scope to this object scope but you still can access the global scope and the local scope.
+
+(3) After the 'Class' keyword and the class name, when you write variable names to be defined as attributes, You still can access the global scope.
+
+In this region (class region - after the class name and before methods) we have
+
+       * Global Scope ----> The Global Scope
+       * Object Scope ----> The Object Scope
+       * Local Scope  ----> The Object Scope
+
+.. note:: Since the local scope in the class region point also to the object scope in this region, we can use nested braces and still have access to the object scope of the class through the local scope.
+
+.. tip :: You can create windows and controls as attibutes by defining them in this region.
+       
+.. tip :: In the class region if you created objects and used braces {} to access them then using self.attribute inside braces will use the class (not the object that you access) because you have access to the class through the local scope.
+
+(4) Function Parameters are automatically defined in the local scope.
+
+.. index:: 
+       pair: Scope Rules; How Ring find the Variable?
+
+How Ring find the variable?
+===========================
+
+1 - Search First in the Local Scope 
+
+if not found !
+
+2 - Search in the Object Scope 
+
+if not found !
+
+3 - Search in the public scope
+
+if not found ----> Runtime Error
+
+if found  ----> Check if we can do optimization to avoid 
+searching next time (Cache / Pointers for performance).
+
+.. index:: 
+       pair: Scope Rules; Using Object.Attribute
+
+Using Object.Attribute
+======================
+
+When we use object.attribute the search will be in the object attributes only.
+
+I.e. no search will be done in the local scope or in the global scope for the object attribute.
+
+.. note:: Using self.attribute will search for the first self before searching for attributes.
+
+
+.. index:: 
+       pair: Scope Rules; The Self Object
+
+The Self Object
+===============
+
+The self object is a reference to the current object that we can use from the class methods.
+
+When we are inside class method and use Self we mean the object that will be created from this class.
+
+Inside the class methods if we used Braces { } this will change the current object scope and self will
+be changed also inside braces to reference the object that we access using Braces.
+
+Inside the Class Region (after the class name and before any method) we have access to the object through
+the object scope and the local scope also. In this region using Self will always be a reference to the class object.
+if we used Braces to change the object scope then used Self inside Braces, Also self will be a reference to the class object (not the object that
+we already access using braces) because in the class region we have :-
+
+* Global Scope ---> Global Scope
+* Object Scope ---> Object Scope
+* Local Scope  ---> Object Scope
+
+And using Braces changes the object scope only (not the local scope) and when Ring search for variables
+it will search in the Local Scope first so it will find self in the class that we are inside.
+
+.. index:: 
+       pair: Scope Rules; Conflict between Global Variables and Class Attributes
+
+How Ring Define Variables and Attributes
+========================================
+
+Ring will use the variable name in the Assignment operation
+
+1 - Search using the variable name
+
+2 - If not found ---> Avoid the runtime error and define the variable in the current scope
+
+3 - If found ---> Use the variable and don't define anything in the current scope
+
+* In the global region (before any function or class) the current scope is the global scope.
+
+* In the class region (after the class name and before any method) the current scope is the object attributes.
+
+* In Functions and methods the current scope is the local scope.
+
+
+Conflict between Global Variables and Class Attributes
+======================================================
+
+Look at this example:
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               name
+               address 
+               phone
+
+In the previous example we have a global variable called 'name'
+inside the class person.
+
+when we use the variable 'name', Ring will start the search operation and 
+will try to find it.
+
+if found ---> Use it
+
+if not found ---> Define new attribute
+
+But the variable name is a global variable, so it will be found and used!
+
+We will not have the attribute name! added to the object. 
+
+Solution (1) - Use the Main Function 
+
+.. code-block:: ring
+
+       func main
+               name = "test"
+               o1 = new person
+               see o1
+
+       class person
+               name
+               address 
+               phone
+
+Solution (2) - Use special mark for global variable names like $
+
+.. code-block:: ring
+
+       $name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               name
+               address 
+               phone
+
+Solution (3) - Use the AddAttribute() Method
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               AddAttribute(self,"name")
+               address 
+               phone
+
+Solution (4) - Use self before the attribute name
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               self.name
+               address 
+               phone
+
+
+So what is the best solution to this conflict?
+
+1 - Use the $ Mark for global variables 
+
+2 - Optional : Try to avoid global variables and use the Main function 
+
+In practice i do both of them.
+
+The other solution 
+
+* Use self before the attribute name or use AddAttribute()
+
+.. index:: 
+       pair: Scope Rules; Conflict between Class Attributes and Local Variables
+
+Conflict between Class Attributes and Local Variables
+=====================================================
+
+This conflict may happen when we access the object using braces
+
+Example:
+
+.. code-block:: ring
+       func main
+               name = "nice"
+               o1 = new person {name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+In the previous example we have the local variable name.
+
+The value of this variable will be set to "mahmoud" instead of the object attribute.
+
+Solution (1) : Just use Self 
+
+.. code-block:: ring
+
+       func main
+               name = "nice"
+               o1 = new person {self.name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+Solution (2) : Change the Local variable name 
+
+.. code-block:: ring
+
+       func main
+               cName = "nice"
+               o1 = new person {name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+Solution (3) : Change Braces and use the Dot operator
+
+.. code-block:: ring
+
+       func main
+               name = "nice"
+               o1 = new person 
+               o1.name ="mahmoud" 
+               o1.address ="Egypt"  
+               o1.phone = 000 
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+
+.. index:: 
+       pair: Scope Rules; Using Braces to access objects inside Class Methods
+
+Using Braces to access objects inside Class Methods
+===================================================
+
+Remember that we have Three scopes (Local Scope, Object Scope and Global Scope) and when we
+are inside a class method, we expect that we have access to the object attributes and methods and
+this is true until we use braces to access another object attributes and methods because in this case
+our object scope will be switched to another object.
+
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl # works fine
+                       myobj = new otherclass {
+                               see name + nl
+                               see x + nl + y + nl # error !
+                       }
+
+       class otherclass
+               name = "test"
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       test
+
+       Line 8 Error (R24) : Using uninitialized variable : x
+       In method test() in file methodbraceerror.ring
+       called from line 5  in file methodbraceerror.ring
+
+Now what we will do to solve the previous problem?
+
+Solution (1) : Write the code that access the class attributes outside braces.
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl # works fine
+                       myobj = new otherclass {
+                               see name + nl
+                       }
+                       see x + nl + y + nl # Outside braces - works fine
+
+
+       class otherclass
+               name = "test"
+
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       test
+       10
+       20
+
+
+Solution (2) : Don't Use Braces
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl  
+                       myobj = new otherclass 
+                       see myobj.name
+                       see x + nl + y + nl                     
+
+       class otherclass
+               name = "test"
+
+
+Solution (3) : Copy the self object 
+
+We may use this solution if we want to use braces and get access to the class attributes (Just Reading).
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       oSelf = self
+                       see x + nl + y + nl  
+                       myobj = new otherclass {
+                               see name + nl
+                               see oself.x + nl + oself.y + nl  
+                       }
+
+       class otherclass
+               name = "test"
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       test
+       10
+       20
+
+Now look at this line
+
+.. code-block:: ring
+
+       oself = self
+
+The problem with the previous line is that we will have a new copy from the object
+Because in Ring the assignment operator copy lists and objects by value (not by reference).
+
+When we access the new object attributes (reading) we don't have problems 
+
+But if we modified the object attributes (Then we will modify the copy!).
+
+.. note:: We can use braces again with the copy
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       oSelf = self
+                       see x + nl + y + nl  
+                       myobj = new otherclass {
+                               see name + nl
+                               oSelf {
+                                       see x + nl + y + nl
+                               }
+                       }
+
+       class otherclass
+               name = "test"
+
+In a GUI application, we may create a class contains the window objects as attributes to be able 
+to access the controls from different methods. Remember the previous information when you try to access
+objects using braces inside methods because in this case you can't access the object attributes directly
+and if you copied the self object you will work on a copy and the new controls that you create will be 
+related to the copy and you can't access them.
+
+
+.. index:: 
+       pair: Scope Rules; Accessing the class attributes from braces inside class methods
+
+
+Accessing the class attributes from braces inside class methods
+===============================================================
+
+We access the class attributes directly from the class methods, also we have the choice to use the Self
+reference before the attribute/method name. Using Braces {} inside class method change the active object
+scope and prevent us from getting direct access to the class attributes. Also using Self will not help because
+the Self reference will be changed to the object that we access using Braces.
+
+In this case if you want to read an attribute you have to copy the Self object before using Braces and
+if you want to modify an attribute you have to the copy from local variable to the object attribute after using
+Braces. 
+
+This case happens when you want to read/modify attribute insead braces. 
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # Attribute
+
+               # some code here
+
+               Func OpenDatabase
+                       # some code here
+                       new QSqlDatabase() {
+                               oCon = addDatabase("QSQLITE") {
+                                       setDatabaseName("weighthistory.db")
+                                       open()
+                               }
+                       }       
+                       self.oCon = oCon 
+                       # some code here        
+
+In the previous example we want to create the connection object and save it inside the oCon attribute.
+
+The object is an output from the addDatabase() method that we use after accessing the QSQLDatabase() object.
+
+Inside braces we can't use the Self reference to use the object created from the MyApp class, Because
+the Self reference here will be to the object that we access using Braces.
+
+We solved the problem in the previous example by creating a local variable called oCon then after Braces
+we copied that variable to the oCon attribute.
+
+The next code is another solution.
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # Attribute
+
+               # some code here
+
+               Func OpenDatabase
+                       # some code here
+                       oCon = new QSqlDatabase()
+                       oCon = oCon.addDatabase("QSQLITE") {
+                               setDatabaseName("weighthistory.db")
+                               Open()  
+                       }
+                       # some code here        
+
+
+The next code is a better solution.
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # Attribute
+
+               # some code here
+
+               Func OpenDatabase
+                       # some code here
+                       new QSqlDatabase() {
+                               this.oCon = addDatabase("QSQLITE") {
+                                       setDatabaseName("weighthistory.db")
+                                       Open()  
+                               }
+                       }
+                       # some code here        
+
+.. note:: We used this.attribute to access the class attribute (oCon) while we are inside Braces.
+
+
+.. index:: 
+       pair: Scope Rules; Creating a Class for each Window in GUI applications
+
+Creating a Class for each Window in GUI applications
+====================================================
+
+A good way for creating classes for windows is to define the window directly after the class name
+
+In this area you can use nested braces without problems to define the window and the controls, and
+they will be attributes that you can access from methods.
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp 
+       {
+               $ObjectName = "oFirstWindow"
+               oFirstWindow = new FirstWindow
+
+               $ObjectName = "oSecondWindow"
+               oSecondWindow = new SecondWindow
+
+               exec()
+       }
+
+       Class FirstWindow
+
+               win = new qWidget() {
+                       setgeometry(0,50,300,200)
+                       setWindowTitle("First Window")
+                       label1 = new qLabel(win)
+                       {
+                               setgeometry(10,10,300,30)
+                               setText("0")
+                       }
+                       btn1 = new qPushButton(win)
+                       {
+                               move(100,100)
+                               setText("Increment")
+                               setClickEvent($ObjectName+".increment()")
+                       }
+                       show()
+               }       
+
+               Func Increment
+                       label1 {
+                               setText( "" + ( 0 + text() + 1 ) )
+                       }
+
+
+       Class SecondWindow
+
+               win = new qWidget() {
+                       setgeometry(400,50,300,200)
+                       setWindowTitle("Second Window")
+                       label1 = new qLabel(win)
+                       {
+                               setgeometry(10,10,300,30)
+                               setText("0")
+                       }
+                       btn1 = new qPushButton(win)
+                       {
+                               move(100,100)
+                               setText("Decrement")
+                               setClickEvent($ObjectName+".decrement()")
+                       }
+                       show()
+               }       
+
+               Func Decrement
+                       label1 {
+                               setText( "" + ( 0 + text() - 1 ) )
+                       }
+
+.. index:: 
+       pair: Scope Rules; Conflict between self inside braces and self in the class region
+
+Conflict between self inside braces and self in the class region
+================================================================
+
+In the class region (after the class name and before any methods) we define the attributes.
+
+In this region we have access to the global scope and the local scope will point to the object scope.
+
+Three Scopes
+
+* Global Scope ---> Gloabl Scope
+* Object Scope ---> Object Scope
+* Local Scope  ---> Object Scope
+
+Look at this example
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       name = "Gal" 
+               }
+               aFriends + new Friend { 
+                       name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+Output:
+
+.. code-block:: none
+
+       name: NULL
+       name: NULL
+
+The problem in the previous example is that the Class account contains an attribute called "name"
+and the Friend class contains an attribue called "name" also.
+
+If you tried using self.name inside braces you will get the same result!
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       self.name = "Gal" 
+               }
+               aFriends + new Friend { 
+                       self.name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+So why using self.name inside braces doesn't solve this conflict?
+
+Because after the class region we have
+
+* global scope ---> global scope
+* object scope ---> object scope (Account Class)
+* local  scope ---> local scope (Account Class)
+
+When we use braces we change the object scope, so we have
+
+* global scope ---> global scope
+* object scope ---> object scope (Friend Class)
+* local  scope ---> local scope (Account Class)
+
+Ring search in the local scope first, so using self.name will use the Account class.
+
+There are many solution
+
+Solution (1) : Access the object through the list
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend
+               aFriends[len(aFriends)] { 
+                       aFriends[len(aFriends)].name = "Gal" 
+               }
+               aFriends + new Friend 
+               aFriends[len(aFriends)] { 
+                       aFriends[len(aFriends)].name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+Solution (2) : Create Method in the friend class to set the name attribute.
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       setname("Gal")
+               }
+               aFriends + new Friend { 
+                       setname("Bert")
+               }
+       
+       Class Friend
+               name
+               func setname cName
+                       name = cName
+
+Solution (3) : Create a method in the account class to set the attribute
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               friend("Gal")
+               friend("Bert")
+
+               func friend cName
+                       aFriends + new Friend { 
+                               name = cName
+                       }
+       
+       Class Friend
+               name
+
+Solution (4) : Declarative Programming
+
+.. code-block:: ring
+
+       New Account {
+               name = "mahmoud"
+               friend {
+                       name = "Gal"
+               }
+               friend {
+                       name = "Bert"
+               }
+               see aFriends
+       }
+
+       Class Account
+               name 
+               aFriends = []
+               friend
+               func getfriend
+                       aFriends + new Friend
+                       return aFriends[len(aFriends)]
+       
+       Class Friend
+               name
+
+Output:
+
+.. code-block:: none
+
+       name: Gal
+       name: Bert
+
+.. index:: 
+       pair: Scope Rules; Using braces to escape from the current object scope
+
+
+Using braces to escape from the current object scope
+====================================================
+
+Since braces change the current object scope to another object. we can use it to do some work without
+modifying the class attributes and using the same variable names.
+
+.. code-block:: ring
+
+       new point {x=10 y=20 z=30 start() }
+       class point x y z
+               func start
+                       see self # print the x y z values (10,20,30)
+                       new Local {
+                               x = 100
+                               y = 200
+                               z = 300
+                       }
+                       see self # print the x y z values (10,20,30)    
+                       see x + nl # will print 100
+                       see y + nl # will print 200
+                       see z + nl # will print 300
+                       Self {  # NO Advantage - Search is done in local scope first
+                               see x + nl # will print 100
+                               see y + nl # will print 200
+                               see z + nl # will print 300
+                       }
+                       see self.x + nl # will print 10
+                       see self.y + nl # will print 20
+                       see self.z + nl # will print 30
+
+       class Local
+       
+Output:
+
+.. code-block:: none
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       100
+       200
+       300
+       100
+       200
+       300
+       10
+       20
+       30
+
+
+.. index:: 
+       pair: Scope Rules; The For Loops uses the local scope
+
+The For Loops uses the local scope
+==================================
+
+Starting from Ring 1.8, when the For Loop defines new identifier (variable) it will define it in the local scope.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       ? x             # Print 10
+       test1()
+       ? x             # Print 10
+       test2()
+       ? x             # Print 10
+
+       func test1
+               for x = 1 to 5
+               next
+               ? x     # Print 6
+
+       func test2
+               list = 1:5
+               for x in list
+               next
+               ? x     # Print NULL (The "For In" loop will kill the reference after the loop)
+
+Output:
+
+.. code-block:: ring
+
+       10
+       6
+       10
+       NULL
+       10      
+       
+.. index:: 
+       pair: Scope Rules; Summary of Scope Rules
+
+
+Summary of Scope Rules
+======================
+
+At first remember that 
+
+1 - Each programming language comes with it's scope rules based on the language goals
+
+2 - Programming in the small is different than Programming in the Large
+
+3 - Some programming language are designed for developing small programs while others are designed for large programs
+
+4 - In programming, If we have access to more than one scope - Then problems may come if we don't manage things correctly
+
+5 - It's always more secure to reduce the number of visible scopes
+
+6 - Some programming languages force you to manage the scope in some way, while others not!
+
+In Ring
+
+1 - Special and *very simple* scope rules that are designed for Flexibility first then Security
+
+2 - Ring is designed to support programming in the small and programming in the large.
+
+3 - The language provide the different programming paradigms that you may select from based on the project size. Errors comes only if you selected a bad paradigm for the target project or you are using the paradigm in a way that is not correct or at least not common.
+
+4 - In Ring you have the choice, you can use global variables or avoid them. you can give them a special $ mark or leave them. you can use object-oriented or stay with procedures. you can use the class region (after the class name and before any method) just for attributes or use it for code too.
+
+5 - Just read the next scope rules and think about them then use them in your favorite way.
+
+Scope Rules:
+
+1 - At any place in our program code we have only at maximum Three Scopes (Local Scope, Object Scope and Global Scope).
+
+2 - When Ring find a variable it will search in the local scope first then in the object scope then in the global scope.
+
+3 - At any time inside procedures or methods you can use braces { } to access an object and change the current object scope.
+
+4 - In the class region (After the class name and before any method) this is a special region where both of the object scope and the local scope point to the object scope. I.e. No local variables where each variable you define in this region will become an attribute.
+
+5 - Before defining any variable (in any scope and in the class region too) a search process will be done to use the variable if it's found.
+
+6 - Functions and Methods parameters are defined automatically as local variables to these functions or methods.
+
+7 - Using Object.Attribute will search in the object attributes only.
+
+8 - Using Self.Attribute will lead to a search for Self first then search in Self Attributes.
+
+9 - The Self reference inside class region (after the class name and before any method) always point to the object scope created from the class.
+
+10- The Self reference inside methods will be changed when we uses Braces to be a reference to the object that we access.
+
+11- Writing variable names directly in the class region (after the class name and before any method) means using them or define then (in order).
+
+12- Using self.attribute in the class region reduce search to the object scope (avoid conflict with global scope).
+
+From these rules you can understand all types of conflicts and why you may have them and how to avoid them
+
+Simple advices to avoid any conflict and use the scope rules in a better way
+
+1 - Try to avoid global variables
+
+2 - Use the Main Function - This will help you to avoid global variables
+
+3 - If you are going to use many global variables use the $ mark before the variable name
+
+4 - In the class region if you don't respect the advice number three ($) then use self.attribute when you define your attributes
+
+5 - You can use object.attribute and object.method() instead of object { attribute } and object { method() } if you don't like changing the object scope.
+
+6 - If you will use nested braces in a class - think about using the class region if possible because in this region you will have access to the object that you access using { } + access to the class attributes
+
+7 - If you are inside a class method and used nested braces you will change the object scope with each brace and you will loss the access to the class attributes directly but you have access to the local scope before and after using brace { } , if you will read/modify the class attribute from braces then use This.Attribute because using 'This' means (The object created from this class) while using 'Self' means (The object in the current object scope).
+
+
+After understanding all of the previous points, You will master this topic.
\ No newline at end of file
diff --git a/docs/en/source/scope2.txt b/docs/en/source/scope2.txt
new file mode 100644 (file)
index 0000000..fc2b908
--- /dev/null
@@ -0,0 +1,204 @@
+.. index::
+       single: Scope Rules for Functions and Methods; Introduction
+
+=====================================
+Scope Rules for Functions and Methods
+=====================================
+
+In this chapter we will learn about the scope rules for functions and methods.
+
+You need to know the next information once you started using Ring for large applications.
+
+These applications may contains and use 
+
+* Many Packages and Classes written in Ring
+* Many Functions written in Ring
+* Standard Ring Functions (Written in C language)
+* Functions and Classes written in C/C++ languages
+
+.. index::
+       pair: Scope Rules for Functions and Methods; How Ring find a functions and methods?
+
+How Ring find the Functions and Methods?
+========================================
+
+When you call a method or function, Ring will start a search process to find this function
+
+If found --> Call the function and store the function pointer in the cache so Ring can use it again with doing another search.
+
+If not found ---> Runtime error message (That you can avoid using Try/Catch)
+
+How the search process is done?
+
+Search for functions/methods follow the next order
+
+1 - Search in methods (if we are inside class method or object using braces {})
+
+2 - Search in functions written by the programmer using Ring Code 
+
+3 - Search in functions written in C/C++ like standard Ring functions 
+
+This enable us to write clean code inside classes methods and avoid any conflict with functions.
+
+If we want to call a function with the same name as a method in the class we will need a wrapper function or we will access a temp. object using { } then call that function there.
+
+We can replace C/C++ Functions with Ring Functions. 
+
+We can replace Ring Functions with Ring Methods.
+
+
+.. note:: Using self.method() is not necessary in any use case.
+
+.. tip:: We can use this.method() to escape from the current active scope that we access using braces {} and call a method in the class that we are inside.
+
+.. index::
+       pair: Scope Rules for Functions and Methods; Example about Sharing Names between Functions and Methods
+
+Example about Sharing Names between Functions and Methods
+=========================================================
+
+Look at the next example
+
+.. code-block:: ring
+
+       func main
+               o1 = new myclass { test() test2() }
+               test2()
+
+       func f1
+               see "f1 function" + nl
+
+       func f2 
+               see "f2 function" + nl
+
+       func f3 
+               see "f3 function" + nl
+
+       func test2
+               myline()
+               see "test2 function" + nl
+               new myclass {
+                       f1()
+                       f2()
+                       f3()
+                       self.f3()
+               }       
+               myobj = new myclass
+               myobj.f3()
+               myline()
+
+       func myline
+               see copy("=",40) + nl
+
+       Class myclass
+
+               func test
+                       myline()
+                       see "test method" + nl
+                       f1()
+                       f2()
+                       f3()
+                       myline()
+
+               func f3
+                       see "f3 method" + nl
+
+               func test2
+                       myline()
+                       see "test2 method" + nl
+                       self {
+                               f1()
+                               f2()
+                               f3()
+                       }
+                       myline()
+
+
+
+Output:
+
+.. code-block:: none
+
+       ========================================
+       test method
+       f1 function
+       f2 function
+       f3 method
+       ========================================
+       ========================================
+       test2 method
+       f1 function
+       f2 function
+       f3 method
+       ========================================
+       ========================================
+       test2 function
+       f1 function
+       f2 function
+       f3 method
+       f3 method
+       f3 method
+       ========================================
+
+.. index::
+       pair: Scope Rules for Functions and Methods; Calling a function sharing the name with a method in the current class
+
+Calling a function sharing the name with a method in the current class
+======================================================================
+
+In the previous example we have a function called f3() and we have a method called f3() 
+
+How we can call the f3() function from the test() method ?
+
+Solution (1) : Change the current object scope to another object scope
+
+In this solution we will have an empty class called local that we will use to change the current object scope.
+
+.. code-block:: ring
+
+       func main
+               o1 = new myclass { test()}
+
+       func f1
+               see "f1 function" + nl
+
+       func f2 
+               see "f2 function" + nl
+
+       func f3 
+               see "f3 function" + nl
+
+       func myline
+               see copy("=",40) + nl
+
+       Class myclass
+
+               func test
+                       myline()
+                       see "test method" + nl
+                       f1()
+                       f2()
+                       f3()               # call f3() method   
+                       new local { f3() } # call f3() function 
+                       myline()
+
+               func f3
+                       see "f3 method" + nl
+
+       class local
+
+Output:
+
+.. code-block:: none
+
+       ========================================
+       test method
+       f1 function
+       f2 function
+       f3 method
+       f3 function
+       ========================================
+
+
+
+
diff --git a/docs/en/source/secfunc.txt b/docs/en/source/secfunc.txt
new file mode 100644 (file)
index 0000000..a32ec78
--- /dev/null
@@ -0,0 +1,409 @@
+.. index:: 
+       single: Security and Internet Functions; Introduction
+
+===============================
+Security and Internet Functions
+===============================
+
+This chapter contains the security and internet functions provided by the Ring programming language
+for Hashing, Encryption & Decryption.
+
+Before using the next function load the openssllib.ring library
+
+.. code-block:: ring
+
+       load "openssllib.ring"
+       # Use OpenSSL functions
+
+* MD5()
+* SHA1()
+* SHA256()
+* SHA512()
+* SHA384()
+* SHA224()
+* Encrypt()
+* Decrypt()
+* Randbytes()
+
+Before using the next function load the internetlib.ring library
+
+.. code-block:: ring
+
+       load "internetlib.ring"
+       # Use the Internet functions
+
+* Download()
+* SendEmail()
+
+.. index:: 
+       pair: Security and Internet Functions; MD5()
+
+MD5() Function
+==============
+
+We can calculate the MD5 hash using the MD5() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       MD5(cString) ---> String contains the MD5 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "md5('happy') = " + md5("happy") + nl +
+           "md5('Hello') = " + md5("Hello") + nl
+
+Output:
+
+.. code-block:: ring
+
+       md5('happy') = 56ab24c15b72a457069c5ea42fcfc640
+       md5('Hello') = 8b1a9953c4611296a827abf8c47804d7
+
+.. index:: 
+       pair: Security and Internet Functions; SHA1()
+
+SHA1() Function
+===============
+
+We can calculate the SHA1 hash using the SHA1() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA1(cString) ---> String contains the SHA1 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha1('hello') : " + sha1("hello") + nl +
+           "sha1('apple') : " + sha1("apple") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha1('hello') : aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
+       sha1('apple') : d0be2dc421be4fcd0172e5afceea3970e2f3d940
+
+.. index:: 
+       pair: Security and Internet Functions; SHA256()
+
+SHA256() Function
+=================
+
+We can calculate the SHA256 hash using the SHA256() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA256(cString) ---> String contains the SHA256 hash of the string cString 
+
+
+Example:
+
+.. code-block:: ring
+
+       see "sha256('hello') : " + sha256("hello") + nl +
+           "sha256('apple') : " + sha256("apple") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha256('hello') : 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
+       sha256('apple') : 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
+
+.. index:: 
+       pair: Security and Internet Functions; SHA512()
+
+SHA512() Function
+=================
+
+We can calculate the SHA512 hash using the SHA512() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA512(cString) ---> String contains the SHA512 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha512('hello') : " + sha512("hello") + nl +
+           "sha512('apple') : " + sha512("apple") + nl +
+           "sha512('hello world') : " + sha512("hello world") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha512('hello') : 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673c
+       a72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
+       sha512('apple') : 844d8779103b94c18f4aa4cc0c3b4474058580a991fba85d3ca698a0bc9e52
+       c5940feb7a65a3a290e17e6b23ee943ecc4f73e7490327245b4fe5d5efb590feb2
+       sha512('hello world') : 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca8
+       6d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f
+
+.. index:: 
+       pair: Security and Internet Functions; SHA384()
+
+SHA384() Function
+=================
+
+
+We can calculate the SHA384 hash using the SHA384() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA384(cString) ---> String contains the SHA384 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha384('hello') : " + sha384("hello") + nl +
+           "sha384('apple') : " + sha384("apple") + nl +
+           "sha384('hello world') : " + sha384("hello world") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha384('hello') : 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa
+       90125a3c79f90397bdf5f6a13de828684f
+       sha384('apple') : 3d8786fcb588c93348756c6429717dc6c374a14f7029362281a3b21dc10250
+       ddf0d0578052749822eb08bc0dc1e68b0f
+       sha384('hello world') : fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcb
+       b83578b3e417cb71ce646efd0819dd8c088de1bd
+
+.. index:: 
+       pair: Security and Internet Functions; SHA224()
+
+SHA224() Function
+=================
+
+We can calculate the SHA224 hash using the SHA224() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA224(cString) ---> String contains the SHA224 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha224('hello') : " + sha224("hello") + nl + 
+           "sha224('apple') : " + sha224("apple") + nl +
+           "sha224('hello world') : " + sha224("hello world") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha224('hello') : ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193
+       sha224('apple') : b7bbfdf1a1012999b3c466fdeb906a629caa5e3e022428d1eb702281
+       sha224('hello world') : 2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b
+
+.. index:: 
+       pair: Security and Internet Functions; Encrypt()
+
+Encrypt() Function
+==================
+
+We can use the Encrypt() function to encrypts the data using the Blowfish algorithm.
+
+Syntax:
+
+.. code-block:: ring
+
+       Encrypt(cString, cKey, cIV) ---> Encrypted string
+
+.. index:: 
+       pair: Security and Internet Functions; Decrypt()
+
+Decrypt() Function
+==================
+
+We can use the Decrypt() function to decrypt the data encrypted using the Encrypt() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Decrypt(cCipher, cKey, cIV) ---> Decrypted string
+
+.. index:: 
+       pair: Security and Internet Functions; Example
+
+Encryption and Decryption Example
+=================================
+
+The next example demonstrates how to use the Encrypt() and Decrypt() functions.
+
+These functions use the Blowfish algorithm.
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+       list = 0:15  cKey=""    for x in list cKey += char(x) next
+       list = 1:8   cIV = ""   for x in list cIV += char(x) next
+       cStr = Encrypt(cStr,cKey,cIV) 
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+We can write the same example using normal for loop
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+
+       cKey=""                         # 16 bytes
+       for x = 0 to 15
+               cKey += char(x) 
+       next
+
+       cIV = ""   
+       for x = 1 to 8
+               cIV += char(x) 
+       next
+
+
+       cStr = Encrypt(cStr,cKey,cIV)
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+Also we can write the password and the IV directly using strings
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+
+       # Note: Don't use simple password in real applications!
+       cKey = "1234567890@#$%^&"               
+       cIV  = "87654321"                       
+
+       cStr = Encrypt(cStr,cKey,cIV)
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+
+.. index:: 
+       pair: Security and Internet Functions; File Hash
+
+File Hash
+=========
+
+The next example demonstrates how to calculate the hash functions for files
+
+.. code-block:: ring
+
+       cStr = read("myapp.exe")
+       see "Size : " + len(cStr) + nl +
+           "md5 : " + md5(cStr) + nl +
+           "sha1 : " + sha1(cStr) + nl +
+           "sha256 : " + sha256(cStr) + nl +
+           "sha224 : " + sha224(cStr) + nl +
+           "sha384 : " + sha384(cStr) + nl +
+           "sha512 : " + sha512(cStr) + nl
+
+Output:
+
+.. code-block:: ring
+
+       Size : 58079876
+       md5 : 762eee15d8d2fd73b71ea52538b28667
+       sha1 : 9212c0c7258bad89a62bd239e1358a9276a9d070
+       sha256 : 7d6724e69b6c553da749ba31b6185dddc965129b64d9e9bf3de88f67df3b1cdc
+       sha224 : 5a9c8a7d662bce4f880ba94f90a79362b672528b9efd5abc718c7a3d
+       sha384 : 18e23f973abedbeb3981c423f12aeadecf96f9c6fb28aeabe3be4c484f8540afcc3861b
+       b370ce2b59cf3c99c130b856b
+       sha512 : da3d5e997d06f8b2a7a9964b77f7d82eedb76b245c611082c1639f83f51d83880bcd08f
+       cd53dcab1167bdca0b82fec5071971ac17c76479d76985ced4ab0d18e
+
+.. index:: 
+       pair: Security and Internet Functions; RandBytes()
+
+Randbytes() Function
+====================
+
+We can generate a string of pseudo-random bytes using the Randbytes() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Randbytes(nSize) ---> String contains random bytes (bytes count = nSize)
+
+Example:
+
+.. code-block:: ring
+
+       salt =  randbytes(32) 
+       password = "SecretPassWord@$%123"
+       see salt + nl
+       see sha256("test" + salt) + nl
+
+.. index:: 
+       pair: Security and Internet Functions; Download()
+
+Download() Function
+===================
+
+Syntax:
+
+.. code-block:: ring
+
+       Download(cURL) ---> String contains the server response
+
+Example:
+
+.. code-block:: ring
+
+       cStr= download("http://doublesvsoop.sourceforge.net/")
+       see cStr
+       write("download.txt",cStr)
+
+.. index:: 
+       pair: Security and Internet Functions; SendEmail()
+
+SendEmail() Function
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       SendEmail(cSMTPServer,cEmail,cPassword,cSender,cReceiver,cCC,cTitle,cContent)
+
+Example:
+
+.. code-block:: ring
+
+       See "Send email..." + nl
+       sendemail("smtp://smtp.gmail.com:587",
+               "email@gmail.com",
+               "password",
+               "email@gmail.com",
+               "somebody@yahoo.com",
+               "somebodyelse@yahoo.com",
+               "Sending email from Ring",
+               "Hello
+                How are you?
+                Are you fine?
+                Thank you!
+                Greetings,
+                Mahmoud")
+       see "Done.." + nl
\ No newline at end of file
diff --git a/docs/en/source/shotringnotepad.png b/docs/en/source/shotringnotepad.png
new file mode 100644 (file)
index 0000000..2850426
Binary files /dev/null and b/docs/en/source/shotringnotepad.png differ
diff --git a/docs/en/source/shotrotatetext.png b/docs/en/source/shotrotatetext.png
new file mode 100644 (file)
index 0000000..f0227a4
Binary files /dev/null and b/docs/en/source/shotrotatetext.png differ
diff --git a/docs/en/source/sixteenpuzzle.jpg b/docs/en/source/sixteenpuzzle.jpg
new file mode 100644 (file)
index 0000000..a8b6671
Binary files /dev/null and b/docs/en/source/sixteenpuzzle.jpg differ
diff --git a/docs/en/source/snake.png b/docs/en/source/snake.png
new file mode 100644 (file)
index 0000000..49fa863
Binary files /dev/null and b/docs/en/source/snake.png differ
diff --git a/docs/en/source/snakesgame.png b/docs/en/source/snakesgame.png
new file mode 100644 (file)
index 0000000..2819f37
Binary files /dev/null and b/docs/en/source/snakesgame.png differ
diff --git a/docs/en/source/sokoban.jpg b/docs/en/source/sokoban.jpg
new file mode 100644 (file)
index 0000000..78df9c9
Binary files /dev/null and b/docs/en/source/sokoban.jpg differ
diff --git a/docs/en/source/sourcecode.txt b/docs/en/source/sourcecode.txt
new file mode 100644 (file)
index 0000000..4a2894c
--- /dev/null
@@ -0,0 +1,781 @@
+.. index:: 
+       single: Building From Source Code; Introduction
+
+=========================
+Building From Source Code
+=========================
+
+The Ring programming language is a free open source product (MIT License).
+
+You can build Ring using CMake or using Scripts (Batch Files or Shell Scripts).
+
+The next steps explains building using scripts.
+
+.. index:: 
+       pair: Building From Source Code; Building using Microsoft Windows
+
+Building using Microsoft Windows
+================================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       cd ring/src
+       buildvc.bat
+       buildvcw.bat
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       buildring2exe.bat
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       gencode.bat
+       buildvc.bat
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       buildvc.bat
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       gencode.bat
+       buildvc.bat
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       gencode.bat
+       buildvc.bat
+
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       buildringpm.bat
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       buildvc.bat
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       buildvc.bat
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       buildvc.bat
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.bat
+       buildvc.bat
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       buildvc.bat
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       buildvc.bat
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       gencode.bat
+       buildvc.bat
+
+Generate RingLibuv Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv
+       gencode.bat
+       buildvc.bat
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       gencode.bat
+       buildvc.bat
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.bat
+       buildvc.bat
+
+Generate RingPostgreSQL Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.bat
+       buildvc.bat
+
+Install Qt 5.12 : https://download.qt.io/archive/qt/5.12/5.12.6/
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       gencodeqt512.bat
+       buildqt512.bat
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       install.bat
+
+Add Ring/bin to System path
+
+.. code-block:: ring
+
+       Hit "windows key".
+       Type "Edit the System environment variables"
+       Select "Advanced" tab.
+       Click on "Enviroment Variables..."
+       Double click on "Path"
+       Add at the end the new path separated by semicolon. 
+           ;C:\Ring\Bin
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+.. index:: 
+       pair: Building From Source Code; Building using Ubuntu Linux
+
+Building using Ubuntu Linux
+===========================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Install Libraries
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdep.sh 
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       sudo ./buildgcc.sh
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildgcc.sh
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildgcc.sh
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildgcc.sh
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildgcc.sh
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildgcc.sh
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildgcc.sh
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildgcc.sh
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingLibuv Source Code and Build
+
+We will build Libuv first
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv/libuv
+       sudo apt-get install libtool m4 automake
+       sh autogen.sh
+       ./configure
+       make
+       make check
+       sudo make install
+
+Then we will build RingLibuv
+
+.. code-block:: ring
+       
+       cd ..
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.sh
+       buildgcc.sh
+
+Generate RingPostgreSQL Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencode.sh
+       ./buildgcc.sh
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+.. index:: 
+       pair: Building From Source Code; Building using Fedora Linux
+
+Building using Fedora Linux
+===========================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Install Libraries
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdepfedora.sh 
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       sudo ./buildgcc.sh
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildgcc.sh
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildgcc.sh
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildgccfedora.sh
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildgcc.sh
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildgcc.sh
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildgcc.sh
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildgcc.sh
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingLibuv Source Code and Build
+
+We will build Libuv first
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv/libuv
+       sudo dnf install libtool m4 autoconf automake
+       sh autogen.sh
+       ./configure
+       make
+       make check
+       sudo make install
+
+Then we will build RingLibuv
+
+.. code-block:: ring
+       
+       cd ..
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.sh
+       buildgcc.sh
+
+Generate RingPostgreSQL Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencode.sh
+       ./buildgccfedora.sh
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+
+
+.. index:: 
+       pair: Building From Source Code; Building using MacOS X
+
+Building using MacOS X
+======================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Install homebrew (follow the directions on homebrew's homepage).
+Install Libraries
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdepmac.sh 
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       ./buildclang.sh
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildclang.sh
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildclang.sh
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildclang.sh
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildclang.sh
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildclang.sh
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildclang.sh
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildclang.sh
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildclang.sh
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildclang.sh
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingLibuv Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingPostgreSQL Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencodemac.sh
+       ./buildclang.sh
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       sudo ring rnote.ring
+
+.. index:: 
+       pair: Building From Source Code; Building using CMake
+
+Building using CMake
+====================
+
+Install libraries (MySQL Client, OpenSSL, LibCurl, Allegro 5 and Qt 5.5)
+
+.. code-block:: ring
+
+       cmake .
+       make
diff --git a/docs/en/source/sqlite.txt b/docs/en/source/sqlite.txt
new file mode 100644 (file)
index 0000000..df4b1f2
--- /dev/null
@@ -0,0 +1,139 @@
+.. index:: 
+       single: SQLite; Introduction
+
+================
+SQLite Functions
+================
+
+In this chapter we will learn about using the SQLite database in the Ring programming language.
+
+Before using the next function load the sqlitelib.ring library
+
+.. code-block:: ring
+
+       load "sqlitelib.ring"
+       # Use SQLite functions
+
+.. index:: 
+       pair: SQLite; sqlite_init()
+
+sqlite_init() function
+======================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_init() ---> SQLite Object
+
+.. index:: 
+       pair: SQLite; sqlite_open()
+
+sqlite_open() function
+======================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_open(SQLite Object,cFileName)
+
+.. index:: 
+       pair: SQLite; sqlite_execute()
+
+sqlite_execute() function
+=========================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_execute(SQLite Object,cSQLStatement)
+
+.. index:: 
+       pair: SQLite; sqlite_close()
+
+sqlite_close() function
+=======================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_close(SQLite Object)
+
+Example
+=======
+
+The next code create a SQLite database, add new records then display the data.
+
+.. code-block:: ring
+
+       load "sqlitelib.ring"
+
+       oSQLite = sqlite_init()
+
+       sqlite_open(oSQLite,"mytest.db") 
+
+       sql = "
+                CREATE TABLE COMPANY (
+                ID INT PRIMARY KEY     NOT NULL,
+                NAME           TEXT    NOT NULL,
+                AGE            INT     NOT NULL,
+                ADDRESS        CHAR(50),
+                SALARY         REAL );
+       "
+       sqlite_execute(oSQLite,sql) 
+
+       sql = "
+               INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) 
+               VALUES  (1, 'Mahmoud' , 29, 'Jeddah', 20000.00 ),
+                       (2, 'Ahmed'   , 27, 'Jeddah', 15000.00 ),
+                       (3, 'Mohammed', 31, 'Egypt' , 20000.00 ),
+                       (4, 'Ibrahim' , 24, 'Egypt ', 65000.00 );
+       "
+
+       sqlite_execute(oSQLite,sql)
+
+       aResult =  sqlite_execute(oSQLite,"select * from COMPANY") 
+       for x in aResult
+               for t in x
+                       ? t[2] + nl
+               next
+       next
+       ? copy("*",50) 
+       for x in aResult
+               ? x[:name] 
+       next
+       sqlite_close(oSQLite) 
+
+Output:
+
+.. code-block:: ring
+
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000.0
+       2
+       Ahmed
+       27
+       Jeddah
+       15000.0
+       3
+       Mohammed
+       31
+       Egypt
+       20000.0
+       4
+       Ibrahim
+       24
+       Egypt
+       65000.0
+       **************************************************      
+       Mahmoud
+       Ahmed
+       Mohammed
+       Ibrahim
+
diff --git a/docs/en/source/starsfighter.png b/docs/en/source/starsfighter.png
new file mode 100644 (file)
index 0000000..90812e9
Binary files /dev/null and b/docs/en/source/starsfighter.png differ
diff --git a/docs/en/source/stdlib.txt b/docs/en/source/stdlib.txt
new file mode 100644 (file)
index 0000000..7980da8
--- /dev/null
@@ -0,0 +1,1578 @@
+.. index:: 
+       single: Stdlib Functions; Introduction
+
+================
+Stdlib Functions
+================
+
+In this chapter we are going to learn about functions in the stdlib.ring
+
+Before using the functions in the library, We must load the library first
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+Instead of using stdlib.ring we can use stdlibcore.ring
+
+Using stdlibcore.ring we can use the StdLib functions (Without Classes)
+
+This is useful when developing standalone console applications
+
+Because using stdlib.ring (functions & classes) will load libraries like RingLibCurl, RingOpenSSL, etc.
+
+.. index:: 
+       pair: Stdlib Functions; puts()
+
+Puts() function
+===============
+
+print the value then print new line (nl)
+
+Syntax:
+
+.. code-block:: ring
+
+       puts(expr)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Hello, World!")
+
+.. index:: 
+       pair: Stdlib Functions; print()
+
+Print() function
+=================
+
+print string - support \\n,\\t and \\r
+
+Also we can use #{variable_name} to insert variables values.
+
+Syntax:
+
+.. code-block:: ring
+
+       print(string) ---> String
+
+Example:
+
+.. code-block:: ring
+
+       print("\nHello, World\n\nHow are you? \t\t I'm fine!\n")
+       x=10 y=20
+       print("\nx value = #{x} , y value = #{y} \n")
+
+
+.. index:: 
+       pair: Stdlib Functions; Print2Str() Function
+
+Print2Str() Function
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       print2Str(string) ---> String
+
+
+Example:
+
+.. code-block:: ring
+
+       world = "World!"
+       mystring = print2str("Hello, #{world} \nIn Year \n#{2000+17} \n")
+
+       see mystring + nl
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       In Year
+       2017
+
+
+.. index:: 
+       pair: Stdlib Functions; getstring()
+
+GetString() function
+====================
+
+Get input from the keyboard - return value as string
+
+.. code-block:: ring
+
+       getstring() ---> string
+
+
+.. index:: 
+       pair: Stdlib Functions; getnumber()
+
+GetNumber() function
+====================
+
+Get input from the keyboard - return value as number
+
+.. code-block:: ring
+
+       getnumber() ---> number
+
+.. index:: 
+       pair: Stdlib Functions; apppath()
+
+AppPath() function
+==================
+
+Get the path of the application folder
+
+Syntax:
+
+.. code-block:: ring
+
+       AppPath() ---> The path as String
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Application Path
+       Puts("Test AppPath()")
+       See AppPath() + nl
+
+.. index:: 
+       pair: Stdlib Functions; JustFilePath()
+
+JustFilePath() function
+=======================
+
+Get the path of the file, remove the file name.
+
+Syntax:
+
+.. code-block:: ring
+
+       JustFilePath(cFile) ---> The path as String
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see  justfilePath("b:\ring\applications\rnote\rnote.ring")
+
+Output:
+
+.. code-block:: ring
+
+       b:\ring\applications\rnote\
+
+
+.. index:: 
+       pair: Stdlib Functions; JustFileName()
+
+JustFileName() function
+=======================
+
+Get the file, remove the file path.
+
+Syntax:
+
+.. code-block:: ring
+
+       JustFileName(cFile) ---> The file name as String
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see justfileName("b:\ring\applications\rnote\rnote.ring") 
+
+Output:
+
+.. code-block:: ring
+
+       rnote.ring
+
+
+.. index:: 
+       pair: Stdlib Functions; value()
+
+Value() function
+================
+
+create a copy from a list or object
+
+Syntax:
+
+.. code-block:: ring
+
+       value(List) ---> new list 
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       aList = 1:10
+       del(value(aList),1) # delete first item
+       see aList           # print numbers from 1 to 10
+
+.. index:: 
+       pair: Stdlib Functions; times()
+
+Times() function
+================
+
+Execute a Function nCount times
+
+Syntax:
+
+.. code-block:: ring
+
+       Times(nCount,function)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Times()")
+       Times ( 3 , func { see "Hello, World!" + nl } )
+
+.. index:: 
+       pair: Stdlib Functions; map()
+
+Map() function
+==============
+
+Execute a Function on each list item
+
+Syntax:
+
+.. code-block:: ring
+
+        Map(alist,function) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Map()")
+       See Map( 1:10, func x { return x*x } )
+
+.. index:: 
+       pair: Stdlib Functions; filter()
+
+Filter() function
+=================
+
+Execute a Function on each list item to filter items
+
+Syntax:
+
+.. code-block:: ring
+
+       Filter(alist,function) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Filter()")
+       See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
+
+.. index:: 
+       pair: Stdlib Functions; split()
+
+Split() function
+================
+
+Convert string words to list items
+
+Syntax:
+
+.. code-block:: ring
+
+       Split(cstring,delimiter) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Split()")
+       See Split("one two three four five"," ")
+
+
+.. index:: 
+       pair: Stdlib Functions; splitmany()
+
+SplitMany() function
+====================
+
+Convert string words to list items. Allow many delimiters.
+
+Syntax:
+
+.. code-block:: ring
+
+       SplitMany(cstring,delimiters as string or list) --> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test SplitMany()")
+       See SplitMany("one,two,three,four and five"," ,")
+
+
+.. index:: 
+       pair: Stdlib Functions; newlist()
+
+NewList() function
+==================
+
+Create a two dimensional list
+
+
+Syntax:
+
+.. code-block:: ring
+
+       NewList(nRows,nColumns) ---> new list 
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Newlist()")
+       a1 = 3
+       a2 = 5
+       chrArray = newlist(a1,a2)
+       numArray = newlist(a1,a2)
+       chrArray[1][1] = "Hello"
+       numArray[1][1]  = 987.2
+       See chrArray[1][1] + nl
+       See numArray[1][1] + nl
+
+.. index:: 
+       pair: Stdlib Functions; capitalized()
+
+Capitalized() function
+======================
+
+Return a copy of a string with the first letter capitalized
+
+Syntax:
+
+.. code-block:: ring
+
+       Capitalized(string) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Capitalized()")
+       See capitalized("welcome to the Ring Programming Language")
+
+.. index:: 
+       pair: Stdlib Functions; isspecial()
+
+IsSpecial() function
+====================
+
+Check whether a character is special or not
+
+
+Syntax:
+
+.. code-block:: ring
+
+       IsSpecial(char) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isspecial()")
+       See "Isspecial  = " + isSpecial("%") + nl
+
+.. index:: 
+       pair: Stdlib Functions; isvowel()
+
+IsVowel() function
+==================
+
+Check whether a character is vowel or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsVowel(char) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isvowel()")
+       See "Isvowel = " + isVowel("c") + nl
+
+
+.. index:: 
+       pair: Stdlib Functions; linecount()
+
+LineCount() function
+====================
+
+Return the lines count in a text file.
+
+Syntax:
+
+.. code-block:: ring
+
+       LineCount(cFileName) ---> Lines Count as number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Linecount()")
+       See "the number of lines = " + lineCount("test.ring")
+
+.. index:: 
+       pair: Stdlib Functions; factorial()
+
+Factorial() function
+====================
+
+Return the factorial of a number
+
+Syntax:
+
+.. code-block:: ring
+
+       Factorial(number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Factorial()")
+       see "6 factorial is : " + Factorial(6)
+
+.. index:: 
+       pair: Stdlib Functions; fibonacci()
+
+Fibonacci() function
+====================
+
+Return the fibonacci number
+
+Syntax:
+
+.. code-block:: ring
+
+       Fibonacci(number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Fibonacci()")
+       see "6 Fibonacci is : " + Fibonacci(6)
+
+.. index:: 
+       pair: Stdlib Functions; isprime()
+
+IsPrime() function
+==================
+
+Check whether a number is prime or not
+
+Syntax:
+
+.. code-block:: ring
+
+       isprime(number) ---> Number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isprime()")
+       if isPrime(16) see "16 is a prime number"
+       else see "16 is not a prime number" ok
+
+.. index:: 
+       pair: Stdlib Functions; sign()
+
+Sign() function
+===============
+
+Returns an integer value indicating the sign of a number.
+
+Syntax:
+
+.. code-block:: ring
+
+       Sign(number) ---> number ( -1 = negative , 0 , 1 (positive) )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sign()")
+       see "sign of 12 is = " + sign(12) + nl
+
+.. index:: 
+       pair: Stdlib Functions; list2file()
+
+List2File() function
+====================
+
+Write list items to text file (each item in new line).
+
+Syntax:
+
+.. code-block:: ring
+
+       List2File(aList,cFileName)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Test List2File
+       Puts("Test List2File()")
+       list2file(1:100,"myfile.txt")
+
+
+.. index:: 
+       pair: Stdlib Functions; file2list()
+
+File2List() function
+====================
+
+Read text file and convert lines to list items
+
+Syntax:
+
+.. code-block:: ring
+
+       File2List(cFileName) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Test File2List
+       Puts("Test File2List()")
+       see len(file2list("myfile.txt"))
+
+.. index:: 
+       pair: Stdlib Functions; startswith()
+
+StartsWith() function
+=====================
+
+Returns true if the given string starts with the specified substring.
+
+Leading white spaces are ignored.
+
+Syntax:
+
+.. code-block:: ring
+
+       StartsWith(string, substring) ---> True/False
+
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Startswith()")
+       see Startswith("CalmoSoft", "Calmo") + nl
+
+.. index:: 
+       pair: Stdlib Functions; endswith()
+
+EndsWith() function
+===================
+
+Returns true if the given string ends with the specified substring.
+
+Trailing white spaces are ignored.
+
+Syntax:
+
+.. code-block:: ring
+
+       Endswith(string, substring) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Endswith()")
+       see endsWith("CalmoSoft", "Soft") + nl
+
+.. index:: 
+       pair: Stdlib Functions; gcd()
+
+GCD() function
+==============
+
+Finding of the greatest common divisor of two integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       Gcd(number,number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Gcd()")
+       see gcd (24, 32) + nl
+
+
+.. index:: 
+       pair: Stdlib Functions; lcm()
+
+LCM() function
+==============
+
+Compute the least common multiple of two integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       lcm(number,number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Lcm()")
+       see Lcm(24,36) + nl
+
+.. index:: 
+       pair: Stdlib Functions; sumlist()
+
+SumList() function
+==================
+
+Compute the sum of a list of integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       sumlist(list) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sumlist()")
+       aList = [1,2,3,4,5]
+       see Sumlist(aList) + nl
+
+.. index:: 
+       pair: Stdlib Functions; prodlist()
+
+ProdList() function
+===================
+
+Compute the product of a list of integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       prodlist(list) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Prodlist()")
+       aList = [1,2,3,4,5]
+       see Prodlist(aList) + nl
+
+.. index:: 
+       pair: Stdlib Functions; evenorodd()
+
+EvenOrOdd() function
+====================
+
+Test whether an integer is even or odd.
+
+Result of test (1=odd 2=even).
+
+Syntax:
+
+.. code-block:: ring
+
+       evenorodd(number) ---> 1 (odd) or 2 (even)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Evenorodd()")
+       nr = 17
+       see Evenorodd(nr) + nl
+
+.. index:: 
+       pair: Stdlib Functions; factors()
+
+Factors() function
+==================
+
+Compute the factors of a positive integer.
+
+Syntax:
+
+.. code-block:: ring
+
+       factors(number) ---> list
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Factors()")
+       n = 45
+       aList = factors(n)
+       see "Factors of " + n + " = "
+       for i = 1 to len(aList)
+           see "" + aList[i] + " "
+       next
+
+
+.. index:: 
+       pair: Stdlib Functions; ispalindrome()
+
+IsPalindrome() function
+=======================
+
+Check if a sequence of characters is a palindrome or not. 
+
+Syntax:
+
+.. code-block:: ring
+
+       IsPalindrome(String) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test IsPalindrome()")
+       cString = "radar"
+       see IsPalindrome(cString)
+
+
+.. index:: 
+       pair: Stdlib Functions; isleapyear()
+
+IsLeapYear() function
+=====================
+
+Check whether a given year is a leap year in the Gregorian calendar. 
+
+Syntax:
+
+.. code-block:: ring
+
+       Isleapyear(number) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isleapyear()")
+       year = 2016
+       if Isleapyear(year) see "" + year + " is a leap year."
+       else see "" + year + " is not a leap year." ok
+
+
+.. index:: 
+       pair: Stdlib Functions; binarydigits()
+
+BinaryDigits() function
+=======================
+
+Compute the sequence of binary digits for a given non-negative integer. 
+
+Syntax:
+
+.. code-block:: ring
+
+       binarydigits(number) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Binarydigits()")
+       b = 35
+       see "Binary digits of " + b + " = " + Binarydigits(b)
+
+.. index:: 
+       pair: Stdlib Functions; matrixmulti()
+
+MatrixMulti() function
+======================
+
+Multiply two matrices together. 
+
+Syntax:
+
+.. code-block:: ring
+
+       Matrixmulti(List,List) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Multiply two matrices together.
+       Puts("Test Matrixmulti()")
+       A = [[1,2,3], [4,5,6], [7,8,9]]
+       B = [[1,0,0], [0,1,0], [0,0,1]]
+       see Matrixmulti(A, B)
+
+
+.. index:: 
+       pair: Stdlib Functions; matrixtrans()
+
+MatrixTrans() function
+======================
+
+Transpose an arbitrarily sized rectangular Matrix. 
+
+Syntax:
+
+.. code-block:: ring
+
+       Matrixtrans(List) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Transpose an arbitrarily sized rectangular Matrix.
+       Puts("Test Matrixtrans()")
+       matrix = [[78,19,30,12,36], [49,10,65,42,50], [30,93,24,78,10], [39,68,27,64,29]]
+       see Matrixtrans(matrix)
+
+.. index:: 
+       pair: Stdlib Functions; dayofweek()
+
+DayOfWeek() function
+====================
+
+Return the day of the week of given date. (yyyy-mm-dd)
+
+Syntax:
+
+.. code-block:: ring
+
+       dayofweek(string) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Return the day of the week of given date.
+       Puts("Test Dayofweek()")
+       date = "2016-04-24"
+       see "Data : " + date + " - Day : " + Dayofweek(date) + nl
+
+.. index:: 
+       pair: Stdlib Functions; permutation()
+
+Permutation() function
+======================
+
+Generates all permutations of n different numerals.
+
+Syntax:
+
+.. code-block:: ring
+
+       permutation(list)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Generates all permutations of n different numerals
+       Puts("Test Permutation()")
+       list = [1, 2, 3, 4]
+       for perm = 1 to 24
+               for i = 1 to len(list)
+                       see list[i] + " "
+               next
+               see nl
+               Permutation(list)
+       next
+
+.. index:: 
+       pair: Stdlib Functions; readline()
+
+ReadLine() function
+===================
+
+Read line from file
+
+Syntax:
+
+.. code-block:: ring
+
+       readline(fp) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Read a file line by line.
+       Puts("Test Readline()")
+       fp = fopen("test.ring","r")
+       while not feof(fp)
+       See Readline(fp) end
+       fclose(fp)
+
+.. index:: 
+       pair: Stdlib Functions; substring()
+
+SubString() function
+====================
+
+Return a position of a substring starting from a given position in a string.
+
+Syntax:
+
+.. code-block:: ring
+
+       Substring(str,substr,npos) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Return a position of a substring starting from a given position in a string.
+       Puts("Test Substring()")
+       a = "abcxyzqweabc"
+       b = "abc"
+       i = 4
+       see substring(a,b,i)
+
+.. index:: 
+       pair: Stdlib Functions; changestring()
+
+ChangeString() function
+=======================
+
+Change substring from given position to a given position with another substring.
+
+Syntax:
+
+.. code-block:: ring
+
+       Changestring(cString, nPos1, nPos2, cSubstr) ---> cString
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Change substring from given position for given position with a substring.
+       Puts("Test Changestring()")
+       see Changestring("Rmasdg",2,5,"in")     # Ring
+
+.. index:: 
+       pair: Stdlib Functions; sleep()
+
+Sleep() function
+================
+
+Sleep for the given amount of time.
+
+Syntax:
+
+.. code-block:: ring
+
+       sleep(nSeconds) 
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sleep()")
+       see "Wait 3 Seconds!"
+       Sleep(3)
+       see nl
+
+.. index:: 
+       pair: Stdlib Functions; ismainsourcefile()
+
+IsMainSourceFile() function
+===========================
+
+Check if the current file is the main source file
+
+Syntax:
+
+.. code-block:: ring
+
+       IsMainSourceFile() ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       if ismainsourcefile()
+               # code 
+       ok
+
+.. index:: 
+       pair: Stdlib Functions; direxists()
+
+DirExists() function
+====================
+
+Check if directory exists
+
+Syntax:
+
+.. code-block:: ring
+
+       DirExists(String) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       see "Check dir : b:\ring " 
+       puts( DirExists("b:\ring") )
+       see "Check dir : C:\ring " 
+       Puts( DirExists("C:\ring") )
+
+.. index:: 
+       pair: Stdlib Functions; makedir()
+
+MakeDir() function
+==================
+
+Make Directory
+
+Syntax:
+
+.. code-block:: ring
+
+       MakeDir(String)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Create Directory
+       puts("create Directory : myfolder")
+       makedir("myfolder")
+
+
+.. index:: 
+       pair: Stdlib Functions; FSize()
+
+Fsize() function
+================
+
+The function return the file size in bytes.
+
+Syntax:
+
+.. code-block:: ring
+
+       FSize(File Handle) ---> Number (File Size in Bytes)
+
+.. index:: 
+       pair: Stdlib Functions; TrimAll()
+
+TrimAll() function
+==================
+
+Remove all spaces and tabs characters from a string
+
+Syntax:
+
+.. code-block:: ring
+
+       TrimAll(cString) ---> cString # Without Spaces and Tabs
+
+.. index:: 
+       pair: Stdlib Functions; TrimLeft()
+
+TrimLeft() function
+===================
+
+Remove all spaces and tabs characters from the left side of a string
+
+Syntax:
+
+.. code-block:: ring
+
+       TrimLeft(cString) ---> cString # Without Spaces and Tabs from the left side
+
+.. index:: 
+       pair: Stdlib Functions; TrimRight()
+
+TrimRight() function
+====================
+
+Remove all spaces and tabs characters from the right side of a string
+
+Syntax:
+
+.. code-block:: ring
+
+       TrimRight(cString) ---> cString # Without Spaces and Tabs from the right side
+
+.. index:: 
+       pair: Stdlib Functions; EpochTime()
+
+EpochTime() function
+====================
+
+Return the Epoch Time
+
+Syntax:
+
+.. code-block:: ring
+
+       EpochTime(cDate,cTime) ---> nEpochTime
+
+Example:
+
+.. code-block:: ring
+
+       see EpochTime( Date(), Time() )
+
+.. index:: 
+       pair: Stdlib Functions; SystemCmd() Function
+
+SystemCmd() Function
+====================
+
+We can execute system commands using the SystemCmd() function that outputs to a variable
+
+Syntax:
+
+.. code-block:: ring
+
+       SystemCmd(cCommand)
+
+Example:
+
+.. code-block:: ring
+
+       cYou  = SystemCmd("whoami")        # User Name logged in is output a variable
+       cThem = SystemCmd("dir c:\Users")  # Directory List is output to a variable
+
+
+.. index:: 
+       pair: Stdlib Functions; ListAllFiles() Function
+
+ListAllFiles() Function
+=======================
+
+Using this function we can quickly do a process on a group of files in a folder and it's sub folders.
+
+Syntax:
+
+.. code-block:: ring
+
+       ListAllFiles(cFolder,cExtension) ---> List of Files
+
+Example:
+
+.. code-block:: ring
+
+       aList = ListAllFiles("c:/ring/ringlibs","ring") # *.ring only
+       aList = sort(aList)
+       see aList
+
+Example:
+
+.. code-block:: ring
+
+       see listallfiles("b:/ring/ringlibs/weblib","") # All Files
+
+.. index:: 
+       pair: Stdlib Functions; SystemSilent() Function
+
+SystemSilent() Function
+=======================
+
+We can execute system commands using the SystemSilent() function to avoid displaying the output!
+
+Syntax:
+
+.. code-block:: ring
+
+       SystemSilent(cCommand)
+
+.. index:: 
+       pair: Stdlib Functions; OSCreateOpenFolder() Function
+
+OSCreateOpenFolder() Function
+=============================
+
+Create folder then change the current folder to this new folder
+
+Syntax:
+
+.. code-block:: ring
+
+       OSCreateOpenFolder(cCommand)
+
+
+.. index:: 
+       pair: Stdlib Functions; OSCopyFolder() Function
+
+OSCopyFolder() Function
+=======================
+
+Copy folder to the current folder 
+
+Parameters : The path to the parent folder and the folder name to copy
+
+Syntax:
+
+.. code-block:: ring
+
+       OSCopyFolder(cParentFolder,cFolderName)
+
+Example
+
+To copy the folder b:\\ring\\ringlibs\\stdlib to the current folder
+
+.. code-block:: ring
+
+       OSCopyFolder("b:\ring\ringlibs\","stdlib")
+
+
+.. index:: 
+       pair: Stdlib Functions; OSDeleteFolder() Function
+
+OSDeleteFolder() Function
+=========================
+
+Delete Folder in the current Directory
+
+Syntax:
+
+.. code-block:: ring
+
+       OSDeleteFolder(cFolderName)
+
+.. index:: 
+       pair: Stdlib Functions; OSCopyFile() Function
+
+OSCopyFile() Function
+=====================
+
+Copy File to the current directory
+
+Syntax:
+
+.. code-block:: ring
+
+       OSCopyFile(cFileName)
+
+.. index:: 
+       pair: Stdlib Functions; OSDeleteFile() Function
+
+OSDeleteFile() Function
+=======================
+
+Delete File
+
+Syntax:
+
+.. code-block:: ring
+
+       OSDeleteFile(cFileName)
+
+.. index:: 
+       pair: Stdlib Functions; OSRenameFile() Function
+
+OSRenameFile() Function
+=======================
+
+Rename File
+
+Syntax:
+
+.. code-block:: ring
+
+       OSRenameFile(cOldFileName,cNewFileName)
+
+
+.. index:: 
+       pair: Stdlib Functions; List2Code() Function 
+
+List2Code() Function 
+====================
+
+This function convert a Ring list during the runtime to Ring source code that we can save to source files.
+
+The list may contains strings, numbers or sub lists.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList = 1:10
+       ? list2Code(aList)
+
+Output:
+
+.. code-block:: ring
+
+       [
+               1,2,3,4,5,6,7,8,9,10
+       ]
+
+
+.. index:: 
+       pair: Stdlib Functions; Str2ASCIIList()
+
+Str2ASCIIList()
+===============
+
+Convert a string of bytes to a list of numbers where each item represent
+the ASCII code of one byte in the string.
+
+Syntax:
+
+.. code-block:: ring
+
+       Str2ASCIIList(String) ---> List of numbers
+
+.. index:: 
+       pair: Stdlib Functions; ASCIIList2Str()
+
+ASCIIList2Str()
+===============
+
+Convert a list of numbers where each item represent
+the ASCII code of one byte to a string of bytes.
+
+Syntax:
+
+.. code-block:: ring
+
+       ASCIIList2Str(List of numbers) ---> String
+
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       cStr = "MmMm"
+
+       aList = Str2ASCIILIST(cStr)
+       ? aList 
+
+       cStr2 = ASCIIList2Str(aList)
+       ? cStr2
+       ? len(cStr2)
+
+Output:
+
+.. code-block:: none
+
+       77
+       109
+       77
+       109
+
+       MmMm
+       4
+
+
+.. index:: 
+       pair: Stdlib Functions; IsListContainsItems()
+
+IsListContainsItems()
+=====================
+
+Syntax:
+
+.. code-block:: ring
+
+       IsListContainsItems(aParent,aChild) ----> True/False
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList1 = "a":"z"
+       aList2 = [:h,:l,:p,:u]
+       ? IsListContainsItems(aList1,aList2)
+
+.. index:: 
+       pair: Stdlib Functions; IsBetween()
+
+IsBetween()
+===========
+
+Syntax:
+
+.. code-block:: ring
+
+       IsBetween(nNumber,nMin,nMax) ----> True/False
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? isBetween(1,3,4)
+       ? isBetween(1,-3,4)
+       ? isBetween(4,1,6)
+       ? isBetween(4,3,4)
+
+.. index:: 
+       pair: Stdlib Functions; TimeInfo()
+
+TimeInfo()
+==========
+
+Syntax:
+
+.. code-block:: ring
+
+       TimeInfo(cInformation) ----> String 
+
+The cInformation value could be
+
+.. code-block:: ring
+
+       :time 
+       :hour_24
+       :hour_12
+       :minutes
+       :seconds
+       :date 
+       :day_long
+       :day_short
+       :month
+       :year
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? timeInfo(:date)
+       ? timeInfo(:time)
+       ? timeInfo(:hour_12)
\ No newline at end of file
diff --git a/docs/en/source/stdlibclasses.txt b/docs/en/source/stdlibclasses.txt
new file mode 100644 (file)
index 0000000..1efb059
--- /dev/null
@@ -0,0 +1,1498 @@
+.. index:: 
+       single: Stdlib Classes; Introduction
+
+==============
+Stdlib Classes
+==============
+
+In this chapter we are going to learn about the classes in the stdlib.ring
+
+* StdBase Class
+* String Class
+* List Class
+* Stack Class
+* Queue Class
+* HashTable Class
+* Tree Class
+* Math Class
+* DateTime Class
+* File Class
+* System Class
+* Debug Class
+* DataType Class
+* Conversion Class
+* ODBC CLass
+* MySQL Class
+* SQLite Class
+* PostgreSQL Class
+* Security Class
+* Internet Class
+
+.. index:: 
+       pair: Stdlib Classes; StdBase Class
+
+StdBase Class
+=============
+
+Attributes:
+
+* vValue : Object Value
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Init(x)                                Set vValue Attribute to x value
+Print()                                Print vValue
+PrintLn()                      Print vValue then New Line
+Size()                         return number represent the size of vValue
+Value()                                return vValue
+Set(x)                         Call Init(x)
+===========================    ======================================================================
+
+
+.. index:: 
+       pair: Stdlib Classes; String Class
+
+String Class
+============
+
+Parent Class : StdBase Class
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Init(String|Number|List) 
+Lower()                        New String - Lower case characters
+Upper()                        New String - Upper case characters
+Left(x)                        New String - contains x characters from the left
+Right(x)                       New String - contains x characters from the right
+Lines()                        Number - Lines count
+Trim()                         New String - Remove Spaces
+Copy(x)                        New String - repeat string x times
+strcmp(cString)                Compare string with cString  
+tolist()                       List (String Lines to String Items)
+tofile(cFileName)              Write string to file
+mid(nPos1,nPos2)               New String - from nPos1 to nPos2
+getfrom(nPos1)                 New String - from nPos1 to the end of the string
+replace(cStr1,cStr2,lCase)     New String - Replace cStr1 with cStr2 , lCase (True=Match Case)
+split()                                List - Each Word as list item
+startswith(substring)          Return true if the start starts with a substring 
+endswith(substring)            Return true if the start ends with a substring
+===========================    ======================================================================
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       See "Testing the String Class" + nl
+       oString = new string("Hello, World!")
+       oString.println()
+       oString.upper().println()
+       oString.lower().println()
+       oString.left(5).println()
+       oString.right(6).println()
+       oString = new string("Hi" + nl + "Hello" )
+       See oString.lines() + nl
+       oString = new string("    Welcome    ")
+       oString.println()
+       oString.trim().println()
+       oString = new string("Hello! ")
+       oString.copy(3).println()
+       see oString.strcmp("Hello! ") + nl
+       see oString.strcmp("Hello ") + nl
+       see oString.strcmp("Hello!! ") + nl
+       oString = new string(["one","two","three"])
+       oString.print()
+       see oString.lines() + nl
+       oString = new String(1234)
+       oString.println()
+       oString = new String("one"+nl+"two"+nl+"three")
+       aList = oString.tolist()
+       see "List Items" + nl See aList
+       oString = new String( "Welcome to the Ring programming language")
+       See "the - position : " + oString.pos("the") + nl
+       oString = oString.getfrom(oString.pos("Ring"))
+       oString.println()
+       oString.mid(1,4).println()
+       oString = oString.replace("Ring","***Ring***",true)
+       oString.println()
+       oString = oString.replace("ring","***Ring***",false)
+       oString.println()
+       oString1 = new string("First")
+       oString2 = new string("Second")
+       oString = oString1 + oString2
+       oString.println()
+       oString = oString1 * 3
+       oString.println()
+       for t in ostring see t next
+       oString.tofile("test.txt")
+       oString = new string("one two three")
+       see nl
+       see ostring.split()
+       oString {
+               set("Hello") println()
+               set("How are you?") println()
+       }
+
+Output:
+
+.. code-block:: ring
+
+       Testing the String Class
+       Hello, World!
+       HELLO, WORLD!
+       hello, world!
+       Hello
+       World!
+       2
+               Welcome
+       Welcome
+       Hello! Hello! Hello!
+       0
+       1
+       -1
+       one
+       two
+       three
+       4
+       1234
+       List Items
+       one
+       two
+       three
+       the - position : 12
+       Ring programming language
+       Ring
+       ***Ring*** programming language
+       ******Ring****** programming language
+       FirstSecond
+       FirstFirstFirst
+       FirstFirstFirst
+       one
+       two
+       three
+       Hello
+       How are you?
+
+.. index:: 
+       pair: Stdlib Classes; List Class
+       
+List Class
+==========
+
+Parent Class : StdBase Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(String|List)                      
+Add(Value)                                     Add item to the list
+Delete(nIndex)                         Delete item from the list 
+Item(nIndex)                           Get item from the list
+First()                                                Get the first item in the list
+Last()                                         Get the last item in the list
+Set(nIndex,Value)                      Set item value
+FindInColumn(nCol,Value)       Find item in a column 
+Sort()                                         Sort items - return new list
+Reverse()                                      Reverse items - return new list
+Insert(nIndex,Value)           Inset Item after nIndex
+===========================    ======================================================================
+
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oList = new list ( [1,2,3] )
+       oList.Add(4)
+       oList.print()
+       see oList.item(1) + nl
+       oList.delete(4)
+       oList.print()
+       see oList.first() + nl
+       see oList.last() + nl
+       oList { set(1,"one") set(2,"two") set(3,"three") print() }
+       see oList.find("two") + nl
+       oList.sort().print()
+       oList.reverse().print()
+       oList.insert(2,"nice")
+       oList.print()
+       oList = new list ( [ [1,"one"],[2,"two"],[3,"three"] ] )
+       see copy("*",10) + nl
+       oList.print()
+       see "Search two : " + oList.findincolumn(2,"two") + nl
+       see "Search 1 : " + oList.findincolumn(1,1) + nl
+       oList = new list ( [ "Egypt" , "USA" , "KSA" ] )
+       for x in oList
+               see x + nl
+       next
+       oList =  new list ( [1,2,3,4] )
+       oList + [5,6,7] 
+       oList.print()
+       oList = new list ( ["one","two"] )
+       oList2 = new list ( ["three","four"] )
+       oList + oList2
+       oList.print()
+
+       
+output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       1
+       1
+       2
+       3
+       1
+       3
+       one
+       two
+       three
+       2
+       one
+       three
+       two
+       three
+       two
+       one
+       one
+       two
+       nice
+       three
+       **********
+       1
+       one
+       2
+       two
+       3
+       three
+       Search two : 2
+       Search 1 : 1
+       Egypt
+       USA
+       KSA
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       one
+       two
+       three
+       four
+
+.. index:: 
+       pair: Stdlib Classes; Stack Class
+       
+Stack Class
+===========
+
+Parent Class : List Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(String|Number|List)
+Push(Value)                                    Push item to the stack
+Pop()                                          Pop item from the stack
+Print()                                                Print the stack items
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oStack = new Stack
+       oStack.push(1)
+       oStack.push(2)
+       oStack.push(3)
+       see oStack.pop() + nl
+       see oStack.pop() + nl
+       see oStack.pop() + nl   
+       oStack.push(4)
+       see oStack.pop() + nl
+       oStack { push("one") push("two") push("three") }
+       oStack.print()  
+       
+output:
+
+.. code-block:: ring
+
+       3
+       2
+       1
+       4
+       three
+       two
+       one
+       
+.. index:: 
+       pair: Stdlib Classes; Queue Class
+       
+Queue Class
+===========
+
+Parent Class : List Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(String|Number|List)
+Remove()                                       Remove item from the Queue.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oQueue = new Queue
+       oQueue.add(1)
+       oQueue.add(2)
+       oQueue.add(3)
+       see oQueue.remove() + nl
+       see oQueue.remove() + nl
+       see oQueue.remove() + nl
+       oQueue.add(4)
+       see oQueue.remove() + nl
+       oQueue { add("one") add("two") add("three") }
+       oQueue.print()
+       
+output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       one
+       two
+       three
+
+.. index:: 
+       pair: Stdlib Classes; HashTable Class
+
+HashTable Class
+===============
+
+Parent Class : List Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(List)
+Add(cKey,Value)                                Add item to the HashTable
+Set(cKey,Value)                                Set item value using the Key
+GetValue(cKey)                         Get item value using the Key
+Contains(cKey)                         Check if the HashTable contains item using the Key
+Index(cKey)                                    Get the item index using the Key
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ohashtable = new hashtable
+       See "Test the hashtable Class Methods" + nl
+       ohashtable { 
+               Add("Egypt","Cairo")
+               Add("KSA","Riyadh")
+               see self["Egypt"] + nl
+               see self["KSA"] + nl
+               see contains("Egypt") + nl
+               see contains("USA") + nl
+               see index("KSA")  + NL
+               print()
+               delete(index("KSA"))
+               see copy("*",60) + nl
+               print()
+       }
+       
+output:
+
+.. code-block:: ring
+
+       Test the hashtable Class Methods
+       Cairo
+       Riyadh
+       1
+       0
+       2
+       Egypt
+       Cairo
+       KSA
+       Riyadh
+       ************************************************************
+       Egypt
+       Cairo
+
+
+.. index:: 
+       pair: Stdlib Classes; Tree Class
+
+Tree Class
+==========
+
+Data:
+
+===========================    ======================================================================
+Attribute                                              Description
+===========================    ======================================================================
+Data                                           Node Value
+Children                                       Children List
+===========================    ======================================================================
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+set(value)                                     Set the node value.
+value()                                                Get the node value.
+Add(value)                                     Add new child.
+parent()                                       Get the parent node.
+print()                                                Print the tree nodes.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       otree = new tree
+       See "Test the tree Class Methods" + nl
+       otree {
+               set("The first step")   # set the root node value
+               see value() + nl
+               Add("one")
+               Add("two")
+               Add("three") {
+                       Add("3.1")
+                       Add("3.2")
+                       Add("3.3")
+                       see children
+               }
+               see children
+               oTree.children[2] {
+                       Add("2.1") Add("2.2") Add("2.3") {
+                               Add("2.3.1") Add("2.3.2") Add("test")
+                       }
+               }
+               oTree.children[2].children[3].children[3].set("2.3.3")
+       }
+       see copy("*",60) + nl
+       oTree.print()
+       
+output:
+
+.. code-block:: ring
+
+       Test the tree Class Methods
+       The first step
+       data: 3.1
+       parent: List...
+       children: List...
+       data: 3.2
+       parent: List...
+       children: List...
+       data: 3.3
+       parent: List...
+       children: List...
+       data: one
+       parent: List...
+       children: List...
+       data: two
+       parent: List...
+       children: List...
+       data: three
+       parent: List...
+       children: List...
+       ************************************************************
+       one
+       two
+       2.1
+       2.2
+       2.3
+       2.3.1
+       2.3.2
+       2.3.3
+       three
+       3.1
+       3.2
+       3.3
+
+.. index:: 
+       pair: Stdlib Classes; Math Class
+
+Math Class
+==========
+
+Methods:
+
+===============                =============================================================================
+Method                         Description
+===============                =============================================================================
+sin(x)                 Returns the sine of an angle of x radians
+cos(x)                 Returns the cosine of an angle of x radians
+tan(x)                 Returns the tangent of an angle of x radians
+asin(x)                        Returns the principal value of the arc sine of x, expressed in radians
+acos(x)                        Returns the principal value of the arc cosine of x, expressed in radians
+atan(x)                        Returns the principal value of the arc tangent of x, expressed in radians
+atan2(y,x)             Returns the principal arc tangent of y/x, in the interval [-pi,+pi] radians
+sinh(x)                        Returns the hyperbolic sine of x radians
+cosh(x)                        Returns the hyperbolic cosine of x radians
+tanh(x)                        Returns the hyperbolic tangent of x radians
+exp(x)                 Returns the value of e raised to the xth power
+log(x)                 Returns the natural logarithm of x
+log10(x)               Returns the common logarithm (base-10 logarithm) of x
+ceil(x)                        Returns the smallest integer value greater than or equal to x   
+floor(x)               Returns the largest integer value less than or equal to x
+fabs(x)                        Returns the absolute value of x.
+pow(x,y)               Returns x raised to the power of y 
+sqrt(x)                        Returns the square root of x
+random(x)              Returns a random number in the range [0,x]
+unsigned(n,n,c)                Perform operation using unsigned numbers 
+decimals(n)            Determine the decimals digits after the point in float/double numbers
+===============        =============================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oMath = new Math
+
+       See "Test the Math Class Methods" + nl
+       See "Sin(0) = " + oMath.sin(0) + nl
+       See "Sin(90) radians = " + oMath.sin(90) + nl
+       See "Sin(90) degree = " + oMath.sin(90*3.14/180) + nl
+
+       See "Cos(0) = " + oMath.cos(0) + nl
+       See "Cos(90) radians = " + oMath.cos(90) + nl
+       See "Cos(90) degree = " +oMath. cos(90*3.14/180) + nl
+
+       See "Tan(0) = " + oMath.tan(0) + nl
+       See "Tan(90) radians = " + oMath.tan(90) + nl
+       See "Tan(90) degree = " + oMath.tan(90*3.14/180) + nl
+
+       See "asin(0) = " + oMath.asin(0) + nl
+       See "acos(0) = " + oMath.acos(0) + nl
+       See "atan(0) = " + oMath.atan(0) + nl
+       See "atan2(1,1) = " +oMath. atan2(1,1) + nl
+
+       See "sinh(0) = " + oMath.sinh(0) + nl
+       See "sinh(1) = " + oMath.sinh(1) + nl
+       See "cosh(0) = " + oMath.cosh(0) + nl
+       See "cosh(1) = " + oMath.cosh(1) + nl
+       See "tanh(0) = " + oMath.tanh(0) + nl
+       See "tanh(1) = " + oMath.tanh(1) + nl
+
+       See "exp(0) = " + oMath.exp(0) + nl
+       See "exp(1) = " + oMath.exp(1) + nl
+       See "log(1) = " + oMath.log(1) + nl
+       See "log(2) = " + oMath.log(2) + nl
+       See "log10(1) = " + oMath.log10(1) + nl
+       See "log10(2) = " + oMath.log10(2) + nl
+       See "log10(10) = " + oMath.log10(10) + nl
+
+       See "Ceil(1.12) = " + oMath.Ceil(1.12) + nl
+       See "Ceil(1.72) = " + oMath.Ceil(1.72) + nl
+
+       See "Floor(1.12) = " + oMath.floor(1.12) + nl
+       See "Floor(1.72) = " + oMath.floor(1.72) + nl
+
+       See "fabs(1.12) = " + oMath.fabs(1.12) + nl
+       See "fabs(1.72) = " + oMath.fabs(1.72) + nl
+
+       See "pow(2,3) = " + oMath.pow(2,3) + nl
+
+       see "sqrt(16) = " + oMath.sqrt(16) + nl
+
+       for x = 1 to 20
+                       see "Random number Max (100) : " + oMath.random(100) + nl
+       next
+
+       x = 1.1234567890123
+       for d = 0 to 14
+               oMath.decimals(d)
+               see x + nl
+       next
+
+       cKey = "hello"
+
+       h = 0
+       for x in cKey
+               h = oMath.unsigned(h,ascii(x),"+")
+               h = oMath.unsigned(h,oMath.unsigned(h,10,"<<"),"+")
+               r = oMath.unsigned(h,6,">>")
+               h = oMath.unsigned(h, r,"^")
+       next
+       h = oMath.unsigned(h,oMath.unsigned(h,3,"<<"),"+")
+       h = oMath.unsigned(h,oMath.unsigned(h,11,">>"),"^")
+       h = oMath.unsigned(h,oMath.unsigned(h,15,"<<"),"+")
+
+       see "Hash : " + h
+
+       
+       
+output:
+
+.. code-block:: ring
+
+       Test the Math Class Methods
+       Sin(0) = 0
+       Sin(90) radians = 0.89
+       Sin(90) degree = 1.00
+       Cos(0) = 1
+       Cos(90) radians = -0.45
+       Cos(90) degree = 0.00
+       Tan(0) = 0
+       Tan(90) radians = -2.00
+       Tan(90) degree = 1255.77
+       asin(0) = 0
+       acos(0) = 1.57
+       atan(0) = 0
+       atan2(1,1) = 0.79
+       sinh(0) = 0
+       sinh(1) = 1.18
+       cosh(0) = 1
+       cosh(1) = 1.54
+       tanh(0) = 0
+       tanh(1) = 0.76
+       exp(0) = 1
+       exp(1) = 2.72
+       log(1) = 0
+       log(2) = 0.69
+       log10(1) = 0
+       log10(2) = 0.30
+       log10(10) = 1
+       Ceil(1.12) = 2
+       Ceil(1.72) = 2
+       Floor(1.12) = 1
+       Floor(1.72) = 1
+       fabs(1.12) = 1.12
+       fabs(1.72) = 1.72
+       pow(2,3) = 8
+       sqrt(16) = 4
+       Random number Max (100) : 87
+       Random number Max (100) : 49
+       Random number Max (100) : 99
+       Random number Max (100) : 58
+       Random number Max (100) : 15
+       Random number Max (100) : 46
+       Random number Max (100) : 37
+       Random number Max (100) : 64
+       Random number Max (100) : 73
+       Random number Max (100) : 35
+       Random number Max (100) : 89
+       Random number Max (100) : 80
+       Random number Max (100) : 20
+       Random number Max (100) : 33
+       Random number Max (100) : 44
+       Random number Max (100) : 89
+       Random number Max (100) : 82
+       Random number Max (100) : 94
+       Random number Max (100) : 83
+       Random number Max (100) : 68
+       1
+       1.1
+       1.12
+       1.123
+       1.1235
+       1.12346
+       1.123457
+       1.1234568
+       1.12345679
+       1.123456789
+       1.1234567890
+       1.12345678901
+       1.123456789012
+       1.1234567890123
+       1.12345678901230
+       Hash : 3372029979.00000000000000
+
+.. index:: 
+       pair: Stdlib Classes; DateTime Class
+
+DateTime Class
+==============
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+clock()                                                The number of clock ticks from program start.
+time()                                         Get the system time.
+date()                                         Get the date.
+timelist()                                     List contains the date and the time information.
+adddays(cDate,nDays)           Return Date from cDate and after nDays
+diffdays(cDate1,cDate2)                Return the Number of days (cDate1 - cDate2)
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDateTime = new datetime
+
+       See "Test the datetime Class Methods" + nl
+
+       See "Calculate performance" + nl
+       t1 = oDateTime.clock()
+       for x = 1 to 1000000 next
+       see oDateTime.clock() - t1 + nl
+
+       See "Time : " + oDateTime.time() + nl
+
+       See "Date : " + oDateTime.date() + nl 
+
+       See oDateTime.TimeList()
+
+       See "Month Name : " + oDateTime.TimeList()[4]      
+
+       cDate = oDateTime.date()
+       see cDate + nl                  
+       cDate = oDateTime.adddays(cDate,10)
+       see cDate + nl 
+
+       cDate1 = oDateTime.date()
+       see cDate1 + nl                                          
+       cDate2 = oDateTime.adddays(cDate1,10)
+       see cDate2 + nl                                          
+       see "DiffDays = " + oDateTime.diffdays(cDate1,cDate2) + nl         
+       see "DiffDays = " + oDateTime.diffdays(cDate2,cDate1) + nl       
+
+
+output:
+
+.. code-block:: ring
+
+       Test the datetime Class Methods
+       Calculate performance
+       85
+       Time : 02:53:35
+       Date : 31/08/2016
+       Wed
+       Wednesday
+       Aug
+       August
+       08/31/16 02:53:35
+       31
+       02
+       02
+       244
+       08
+       53
+       AM
+       35
+       35
+       3
+       08/31/16
+       02:53:35
+       16
+       2016
+       Arab Standard Time
+       %
+       Month Name : August31/08/2016
+       10/09/2016
+       31/08/2016
+       10/09/2016
+       DiffDays = -10
+       DiffDays = 10
+
+       
+.. index:: 
+       pair: Stdlib Classes; File Class
+
+File Class
+==========
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+read(cFileName)                                Read the file content
+write(cFileName,cStr)          Write string to file
+dir(cFolderPath)                       Get the folder contents (files & sub folders)
+rename(cOld,cNew)                      Rename files using the Rename() function
+remove(cFileName)                      Delete a file using the Remove() function
+open(cFileName,cMode)          Open a file using the Fopen() function
+close()                                                Close file
+flush()                                                Flushes the output buffer of a stream
+reopen(cFileName,cMode)                Open another file using the same file handle
+tempfile()                                     Creates a temp. file (binary).
+seek(noffset,nwhence)          Set the file position of the stream
+tell()                                         Know the current file position of a stream
+rewind()                                       Set the file position to the beginning of the file 
+getpos()                                       Get handle to the current file position
+setpos(poshandle)                      Set the current file position
+clearerr()                                     Clear the EOF error and the error indicators of a stream
+eof()                                          Test the end-of-file indicator
+error()                                                Test the error indicator
+perror(cErrorMessage)          Print error message to the stderr
+getc()                                         Get the next character from the stream
+gets(nsize)                                    Read new line from the stream
+putc(cchar)                                    Write a character to the stream
+puts(cStr)                                     Write a string to the stream
+ungetc(cchar)                          Push a character to the stream
+fread(nsize)                           Read data from a stream
+fwrite(cString)                                Write data to a stream
+exists(cFileName)                      Check if a file exists
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ofile = new file
+
+       See "Test the file Class Methods" + nl
+       see ofile.read(filename())
+
+       see nl
+       ofile.open(filename(),"r")
+       see ofile.gets(100) + nl
+       ofile.close()
+
+.. index:: 
+       pair: Stdlib Classes; System Class
+
+System Class
+============
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+system()                                       Execute system commands
+sysget()                                       Get environment variables 
+ismsdos()                                      Check if the operating system is MSDOS or not
+iswindows()                                    Check if the operating system is Windows or not
+iswindows64()                          Check if the operating system is Windows 64bit or not 
+isunix()                                       Check if the operating system is Unix or not 
+ismacosx()                                     Check if the operating system is macOS or not
+islinux()                                      Check if the operating system is Linux or not 
+isfreebsd()                                    Check if the operating system is FreeBSD or not
+isandroid()                                    Check if the operating system is Android or not 
+windowsnl()                                    Get the windows new line string 
+sysargv()                                      Get the command line arguments passed to the ring script
+filename()                                     Get the active source file
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oSystem = new System
+
+       See "Test the System Class Methods" + nl
+       
+       oSystem.system("dir")
+       see oSystem.sysget("path") + nl
+       see oSystem.ismsdos() + nl
+       see oSystem.iswindows() + nl
+       see oSystem.iswindows64() + nl
+       see oSystem.isunix() + nl
+       see oSystem.ismacosx() + nl
+       see oSystem.islinux() + nl
+       see oSystem.isfreebsd() + nl
+       see oSystem.isandroid() + nl
+       see oSystem.windowsnl() + nl
+       see oSystem.sysargv() + nl
+       see oSystem.filename() + nl
+
+.. index:: 
+       pair: Stdlib Classes; Debug Class
+
+Debug Class
+===========
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+eval(cCode)                                    Execute code during the runtime from string.
+raise(cError)                          Raise an exception.
+assert(cCondition)                     Test condition before executing the code.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDebug = new Debug
+       See "Test the Debug Class Methods" + nl
+       oDebug.eval("see 'Hello'+nl")
+       try
+               x = 10
+               oDebug.assert(x=11)
+       catch see "assert" + nl done
+       raise("Error!")
+       
+
+.. index:: 
+       pair: Stdlib Classes; DataType Class
+
+DataType Class
+==============
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+isstring(vValue)                       We can know if the value is a string or not.
+isnumber(vValue)                       We can know if the value is a number or not.
+islist(vValue)                         We can know if the value is a list or not.
+type(vValue)                           Know the type of a value 
+isnull(vValue)                         Check the value to know if it’s null or not.
+isalnum(vValue)                                1 if the value is digit/letter or 0 if not
+isalpha(vValue)                                1 if the value is a letter or 0 if not
+iscntrl(vValue)                                1 if the value is a control character (no printing position) 
+isdigit(vValue)                                1 if the value is a digit or 0 if not
+isgraph(vValue)                                1 if the value can be printed (Except space) or 0 if not
+islower(vValue)                                1 if the value is lowercase letter or 0 if not
+isprint(vValue)                                1 if the value occupies a printing position or 0 if not
+ispunct(vValue)                                1 if the value is a punctuation character or 0 if not
+isspace(vValue)                                1 if the value is a white-space or 0 if not
+isupper(vValue)                                1 if the value is an uppercase alphabetic letter or 0 if not
+isxdigit(vValue)                       1 if the value is a hexdecimal digit character or 0 if not
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDataType = new DataType
+       See "Test the DataType Class Methods" + nl
+       see oDataType.isstring("test") + nl
+       see oDataType.isnumber(1) + nl
+       see oDataType.islist(1:3) + nl
+       see oDataType.type("test") + nl
+       see oDataType.isnull(null) + nl
+       see oDataType.isalnum("Hello") + nl +     # print 1
+       oDataType.isalnum("123456") + nl +    # print 1
+       oDataType.isalnum("ABCabc123") + nl + # print 1
+       oDataType.isalnum("How are you")  + nl     # print 0 because of spaces
+       see oDataType.isalpha("Hello") + nl +     # print 1
+       oDataType.isalpha("123456") + nl +    # print 0
+       oDataType.isalpha("ABCabc123") + nl + # print 0
+       oDataType.isalpha("How are you")  + nl    # print 0
+       See oDataType.iscntrl("hello") + nl +     # print 0
+       oDataType.iscntrl(nl)                 # print 1
+       see oDataType.isdigit("0123456789") + nl +        # print 1
+       oDataType.isdigit("0123a") + nl
+       see oDataType.isgraph("abcdef") + nl +    # print 1
+       oDataType.isgraph("abc def")   + nl        # print 0
+       see oDataType.islower("abcDEF") + nl +    # print 0
+       oDataType.islower("ghi") + nl          # print 1
+       see oDataType.isprint("Hello") + nl +             # print 1
+       oDataType.isprint("Nice to see you") + nl +   # print 1
+       oDataType.isprint(nl)    + nl                      # print 0
+       see oDataType.isprint("Hello") + nl              # print 1
+       see oDataType.isupper("welcome") + nl +    # print 0
+       oDataType.isupper("WELCOME")  + nl         # print 1
+       see oDataType.isxdigit("0123456789abcdef") + nl +  # print 1
+       oDataType.isxdigit("123z")                     # print 0
+
+
+Output:
+
+.. code-block:: ring
+
+       Test the DataType Class Methods
+       1
+       1
+       1
+       STRING
+       1
+       1
+       1
+       1
+       0
+       1
+       0
+       0
+       0
+       0
+       11
+       0
+       1
+       0
+       0
+       1
+       1
+       1
+       0
+       1
+       0
+       1
+       1
+       0       
+
+.. index:: 
+       pair: Stdlib Classes; Conversion Class
+
+Conversion Class
+================
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+number(vValue)                         Convert strings to numbers.
+string(vValue)                         Convert numbers to strings.
+ascii(vValue)                          Get the ASCII code for a letter.
+char(vValue)                           Convert the ASCII code to character.
+hex(vValue)                                    Convert decimal to hexadecimal.
+dec(vValue)                                    Convert hexadecimal to decimal.
+str2hex(vValue)                                Convert string characters to hexadecimal characters.
+hex2str(vValue)                                Convert hexadecimal characters to string.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oConversion = new conversion
+       See "Test the conversion Class Methods" + nl
+       See oConversion.number("3") + 5  + nl
+       See oConversion.string(3) + "5" + nl
+       See oConversion.Ascii("m") + nl 
+       See oConversion.char(77) + nl   
+       see oConversion.hex(162) + nl
+       see oConversion.dec("a2") + nl
+       cHex = oConversion.str2hex("Hello")
+       see cHex + nl
+       see oConversion.hex2str(cHex) + nl
+
+Output:
+
+.. code-block:: ring
+
+       Test the conversion Class Methods
+       8
+       35
+       109
+       M
+       a2
+       162
+       48656c6c6f
+       Hello
+
+.. index:: 
+       pair: Stdlib Classes; ODBC Class
+
+ODBC Class
+==========
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+drivers()                                      Get a list of ODBC drivers.
+datasources()                                  Get a list of ODBC data sources.
+close()                                        Free resources.
+connect(cConString)                    Connect to the database.
+disconnect()                           Close the connection.
+execute(cSQL)                          Execute SQL Statements
+colcount()                                     Get columns count in the query result
+fetch()                                                Fetch a row from the query result
+getdata(nCol)                          Get column value from the fetched row
+tables()                                       Get a list of tables inside the database
+columns(cTableName)                    Get a list of columns inside the table
+autocommit(lStatus)                    Enable or disable the auto commit feature
+commit()                                       Commit updates to the database
+rollback()                                     Rollback updates to the database
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oodbc = new odbc
+       See "Test the odbc Class Methods" + nl
+       oODBC { 
+               see drivers()
+               see datasources()
+               See "Connect to database" + nl
+               see connect("DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+               See "Select data" + nl
+               see execute("select * from person") + nl
+               nMax = colcount()
+               See "Columns Count : " + nMax + nl
+               while fetch()
+                       See "Row data:" + nl
+                       for x = 1 to nMax
+                               see getdata(x) + " - "
+                       next
+               end
+               See "Close database..." + nl
+               disconnect()
+               close()
+       }
+       
+.. index:: 
+       pair: Stdlib Classes; MySQL Class
+
+MySQL Class
+===========
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+info()                                                                 Return string contains the MySQL Client version.
+error()                                                                Get the error message from the MySQL Client.
+connect(cServer,cUser,cPass,cDatabase) Connect to the MySQL database server.
+close()                                                                Close the connection to the MySQL database.
+query(cQuery)                                                  Execute SQL queries.
+insert_id()                                                            Get the inserted row id.
+result()                                                               Get the query result (data without column names).
+next_result()                                                  Move to the next query result.
+columns()                                                              Get a list of columns names.
+result2()                                                              Get all of the column names then the query result in one list.
+escape_string(cStr)                                            Before storing binary data and special characters in the database.
+autocommit(lStatus)                                            Enable or disable the auto commit feature.
+commit()                                                               Commit updates to the database.
+rollback()                                                             Rollback updates to the database.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       
+       omysql = new mysql
+       See "Test the MySQL Class Methods" + nl
+       omysql { 
+               see info() + nl
+               connect("localhost", "root", "root","mahdb")
+               see "Execute Query" + nl
+               query("SELECT * FROM Employee")
+               see "Print Result" + nl
+               see result2()
+               see "Close database" + nl
+               close()
+       }
+       
+Output:
+
+.. code-block:: ring
+       
+       Test the MySQL Class Methods
+       5.5.30
+       Execute Query
+       Print Result
+       Id
+       Name
+       Salary
+       1
+       Mahmoud
+       15000
+       2
+       Samir
+       16000
+       3
+       Fayed
+       17000
+       Close database
+
+.. index:: 
+       pair: Stdlib Classes; SQLite Class
+
+SQLite Class
+============
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+open(cDatabase)                                                        Open Database.
+close()                                                                Close Database.
+errormessage()                                                 Get Error Message.
+execute(cSQL)                                                  Execute Query.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       osqlite = new sqlite
+       See "Test the sqlite Class Methods" + nl
+       osqlite {
+               open("test.db")
+               sql = "CREATE TABLE COMPANY("  +
+                               "ID INT PRIMARY KEY     NOT NULL," +
+                        "NAME           TEXT    NOT NULL," +
+                        "AGE            INT     NOT NULL," +
+                        "ADDRESS        CHAR(50)," +
+                        "SALARY         REAL );"
+
+               execute(sql)
+
+               sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+               execute(sql)
+
+               aResult =  execute("select * from COMPANY")
+               for x in aResult
+                       for t in x
+                               see t[2] + nl
+                       next
+               next
+               see copy("*",50)  + nl
+               for x in aResult
+                       see x["name"] + nl
+               next
+               close()
+       }
+
+Output:
+
+.. code-block:: ring
+
+       Test the sqlite Class Methods
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000.0
+       2
+       Ahmed
+       27
+       Jeddah
+       15000.0
+       3
+       Mohammed
+       31
+       Egypt
+       20000.0
+       4
+       Ibrahim
+       24
+       Egypt
+       65000.0
+       **************************************************
+       Mahmoud
+       Ahmed
+       Mohammed
+       Ibrahim
+
+
+.. index:: 
+       pair: Stdlib Classes; PostgreSQL Class
+
+PostgreSQL Class
+================
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+init(cConString)                                               Open Database.
+close()                                                                Close Database.
+execute(cSQL)                                                  Execute Query.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       oPostgreSQL = new PostgreSQL("user=postgres password=sa dbname = mahdb")
+
+       See "Test the PostgreSQL Class Methods" + nl
+
+       oPostgreSQL {
+
+               sql = "CREATE TABLE COMPANY_TEST("  +
+                               "ID INT PRIMARY KEY     NOT NULL," +
+                        "NAME           TEXT    NOT NULL," +
+                        "AGE            INT     NOT NULL," +
+                        "ADDRESS        CHAR(50)," +
+                        "SALARY         REAL );"
+
+               execute(sql)
+
+               sql = "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+               execute(sql)
+
+               ?  execute("select * from COMPANY_TEST")
+
+               ? copy("*",50)  
+
+               close()
+       }
+
+Output:
+
+.. code-block:: none
+
+       Test the PostgreSQL Class Methods
+       id
+       name
+       age
+       address
+       salary
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000
+       2
+       Ahmed
+       27
+       Jeddah
+       15000
+       3
+       Mohammed
+       31
+       Egypt
+       20000
+       4
+       Ibrahim
+       24
+       Egypt
+       65000
+
+       **************************************************
+
+
+.. index:: 
+       pair: Stdlib Classes; Security Class
+
+Security Class
+==============
+
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+md5(cString)                                           Calculate the MD5 hash.
+sha1(cString)                                          Calculate the SHA1 hash.
+sha256(cString)                                                Calculate the SHA256 hash.
+sha512(cString)                                                Calculate the SHA512 hash.
+sha384(cString)                                                Calculate the SHA384 hash.
+sha224(cString)                                                Calculate the SHA224 hash.
+encrypt(cString,cKey,cIV)                              Encrypts the data using the Blowfish algorithm.
+decrypt(cString,cKey,cIV)                              Decrypt the data encrypted using the Encrypt() method.
+randbytes(nSize)                                       Generate a string of pseudo-random bytes.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oSecurity = new security
+       See "Test the security Class Methods" + nl
+       oSecurity { 
+               see md5("hello") + nl + 
+               sha1("hello") + nl + sha256("hello") + nl +
+               sha512("hello") + nl + sha384("hello") + nl + 
+               sha256("hello") + nl 
+               list = 0:15  cKey=""   for x in list cKey += char(x) next
+               list = 1:8   cIV = ""   for x in list cIV += char(x) next
+               cCipher = encrypt("hello",cKey,cIV)
+               see cCipher + nl + decrypt(cCipher,cKey,cIV) + nl
+       }
+
+       
+.. index:: 
+       pair: Stdlib Classes; Internet Class
+
+Internet Class
+==============
+
+Methods:
+
+* download(cURL)
+* sendemail(cSMTPServer,cEmail,cPassword,cSender,cReceiver,cCC,cTitle,cContent)
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ointernet = new internet
+       See "Test the internet Class Methods" + nl
+       ointernet { 
+               see download("www.ring-lang.sf.net")
+       }
diff --git a/docs/en/source/stopwatch.png b/docs/en/source/stopwatch.png
new file mode 100644 (file)
index 0000000..bb98d69
Binary files /dev/null and b/docs/en/source/stopwatch.png differ
diff --git a/docs/en/source/string2constant.png b/docs/en/source/string2constant.png
new file mode 100644 (file)
index 0000000..3d3c56f
Binary files /dev/null and b/docs/en/source/string2constant.png differ
diff --git a/docs/en/source/strings.txt b/docs/en/source/strings.txt
new file mode 100644 (file)
index 0000000..cc01946
--- /dev/null
@@ -0,0 +1,477 @@
+.. index:: 
+       single: Strings; Introduction
+
+=======
+Strings
+=======
+
+In this chapter we are going to learn about strings creation and manipulation.
+
+.. index:: 
+       pair: Strings; String Literals
+
+String Literals
+===============
+
+Syntax:
+
+.. code-block:: ring
+
+       cStr = "This is a string"
+       cStr2 = 'Another string'
+       cStr3 = :JustAnotherString
+       cStr4 = `Yet "another" 'string' ! `
+
+.. index:: 
+       pair: Strings; Get String Length
+
+Get String Length
+=================
+
+We can get the string length (letters count inside a string) using the len() function
+
+Syntax:
+
+.. code-block:: ring
+
+       len(string) ---> string length
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "How are you?"
+       see cStr + nl
+       see "String size : " + len(cStr) + nl
+
+.. index:: 
+       pair: Strings; Convert Letters Case
+
+Convert Letters Case
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       lower(string) ---> convert string letters to lower case
+       upper(string) ---> convert string letters to UPPER case
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome To The Ring Programming Language"
+       see cStr + nl + upper(cStr) + nl + lower(cStr)          
+
+.. index:: 
+       pair: Strings; Access String Letters
+
+Access String Letters
+=====================
+
+We can access a letter inside a string by the letter index
+
+Syntax:        
+
+.. code-block:: ring
+
+       string[index] ---> get string letter
+       string[index] = letter  # set string letter
+
+Example:
+
+.. code-block:: ring
+
+       # print user name letter by letter (each letter in new line)
+
+       See "Hello, Enter your name : " give cName
+       for x = 1 to len(cName)
+               see nl + cName[x]
+       next
+
+We can use for in to get string letters.
+
+
+Example:
+
+.. code-block:: ring
+
+       # print user name letter by letter (each letter in new line)
+
+       See "Hello, Enter your name : " give cName
+       for x in cName
+               see nl + x
+       next
+
+We can modify the string letters
+
+Example:
+
+.. code-block:: ring
+
+       # convert the first letter to UPPER case
+
+       See "Enter your name : " give cName
+       cName[1] = upper(cName[1])
+       see "Hello " + cName
+
+.. index:: 
+       pair: Strings; Left()
+
+Left() Function
+===============
+
+We can get a specified number of characters from a string using the Left() function.
+
+The starting position is 1.
+
+Syntax:
+
+.. code-block:: ring
+
+       Left(string,count)
+
+Example:
+
+.. code-block:: ring
+
+       see left("Hello World!",5) # print Hello
+
+.. index:: 
+       pair: Strings; Right()
+
+Right() Function
+================
+
+We can get a specified number of characters from a string using the Right() function.
+
+The starting position is the last character on the right.
+
+Syntax:
+
+.. code-block:: ring
+
+       Right(string,count)
+
+Example:
+
+.. code-block:: ring
+
+       see Right("Hello World!",6) # print World!
+
+.. index:: 
+       pair: Strings; Trim()
+
+Trim() Function
+===============
+
+We can remove all leading and trailing spaces from a string using the Trim() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       trim(string)
+
+Example:
+
+.. code-block:: ring
+
+       cMsg = "     Welcome      "
+       see trim(cMsg)                  # print Welcome
+
+.. index:: 
+       pair: Strings; Copy()
+
+Copy() Function
+===============
+
+We can duplicate a string more than one time using the copy() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       copy(string,nCount) ---> string replicated nCount times
+
+Example
+
+.. code-block:: ring
+
+       see copy("***hello***",3) # print ***hello******hello******hello***
+
+.. index:: 
+       pair: Strings; Lines()
+
+Lines() Function
+================
+
+We can count the number of lines inside a string using the Lines() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       lines(string) ---> Number of lines inside the string
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Hello
+       How are you?
+       are you fine?"
+       see lines(cStr)         # print 3
+
+.. index:: 
+       pair: Strings; Substr()
+
+Substr() Function
+=================
+
+We can work on sub strings inside a string using the substr() function.
+Using Substr() we can 
+
+* Find substring
+
+* Get substring from position to end
+
+* Get Number of characters from position
+
+* Transform Substring To Another Substring 
+
+.. index:: 
+       pair: Strings; Find SubString
+
+Find substring
+==============
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,substring)  ---> the starting position of substring in string
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       see substr(cStr,"Ring")         # print 16
+
+.. index:: 
+       pair: Strings; Get Substring from position to end
+
+Get substring from position to end
+==================================
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,position)  ---> Get substring starting from position to end
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       nPos = substr(cStr,"Ring")      # nPos = 16
+       see substr(cStr,nPos)           # print Ring programming language
+
+.. index:: 
+       pair: Strings; Get Number of Characters from position
+
+Get Number of Characters From Position
+======================================
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,position,count)  ---> Get characters starting from position
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       nPos = substr(cStr,"Ring")      # nPos = 16
+       see substr(cStr,nPos,4)         # print Ring 
+
+.. index:: 
+       pair: Strings; Transform Substring To Another Substring
+
+Transform Substring To Another Substring
+========================================
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,substring,newsubstring)  ---> Transformed string (Match case)
+       substr(string,substring,newsubstring,1)  ---> Transformed string (Ignore case)
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the New programming language"
+       see substr(cStr,"New","Ring") + nl  # print Welcome to the Ring programming language 
+       see substr(cStr,"new","Ring",1)+ nl # print Welcome to the Ring programming language 
+
+.. index:: 
+       pair: Strings; strcmp()
+
+strcmp() Function
+=================
+
+We can compare between two strings using the strcmp() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       strcmp(cString1,cString2) ---> value = 0 if cString1 = cString2
+                                      value < 0 if cString1 < cString2
+                                      value > 0 if cString1 > cString2
+
+Example:
+
+.. code-block:: ring
+
+       see strcmp("hello","hello") + nl +
+           strcmp("abc","bcd") + nl + 
+           strcmp("bcd","abc") + nl
+
+Output:
+
+.. code-block:: ring
+
+       0
+       -1
+       1
+
+.. index:: 
+       pair: Strings; str2list() and list2str()
+
+str2list() and list2str() Functions
+===================================
+
+We can convert string lines to list items using the str2list() function.
+Also we can convert the list to a string using list2str() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       str2list(string) ---> list contains the string lines 
+       list2str(list)   ---> string contains the list items
+
+Example:
+
+.. code-block:: ring
+
+       /* output:
+       ** Items : 4
+       ** Item : Hello
+       ** Item : How are you ?
+       ** Item : are you fine ?
+       ** Item : ok
+       ** list2Str result = Hello
+       ** How are you ?
+       ** are you fine ?
+       ** ok
+       ** Done
+       */
+
+       mystr = "Hello
+       How are you ?
+       are you fine ?
+       ok"
+
+       mylist = str2list(mystr)
+       see "Items : " + len(mylist) + nl
+
+       for x in mylist
+               see "Item : " + x + nl
+       next
+
+       newstr = list2str(mylist)
+       see "list2Str result = " + newstr
+
+       if mystr = newstr
+               see nl + "Done"
+       else
+               see nl + "Error!"
+       ok
+               
+
+.. index:: 
+       pair: Strings; Merge binary characters
+
+Merge binary characters
+=======================
+
+From Ring 1.0 we can create binary strings and do operations on these strings.
+
+Starting from Ring 1.8, we can get individual characters from these strings and merge them together using
+the '+' operator.
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome"
+       ? cstr[1] + cstr[2] + cStr[5]
+       v = cstr[1] + cstr[2] + cStr[5]
+       ? v
+       ? len(v)
+       c1 = cStr[1]
+       ? c1
+       aList = [1,2,3]
+       cStr = ""
+       for item in aList 
+               cStr += int2bytes(item)
+       next 
+       ? "All String"
+       ? len(cStr)
+       ? "First Part"
+       n1 = cStr[1] + cStr[2] + cStr[3] + cStr[4]
+       ? len(n1)
+       ? "Second Part"
+       n2 = cStr[5] + cStr[6] + cStr[7] + cStr[8]
+       ? len(n2)
+       ? "Third Part"
+       n3 = cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(n3)
+       ? "All String"
+       cString = cStr[1] + cStr[2] + cStr[3] + cStr[4] + 
+                 cStr[5] + cStr[6] + cStr[7] + cStr[8] + 
+                 cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(cString)
+       ? ascii(cStr[1])
+       ? len(cStr[2])
+
+Output:
+
+.. code-block:: ring
+
+       Weo
+       Weo
+       3
+       W
+       All String
+       12
+       First Part
+       4
+       Second Part
+       4       \ 2
+       Third Part
+       4
+       All String
+       12
+       1
+       1
+       
\ No newline at end of file
diff --git a/docs/en/source/sudoku.jpg b/docs/en/source/sudoku.jpg
new file mode 100644 (file)
index 0000000..7cc8bd6
Binary files /dev/null and b/docs/en/source/sudoku.jpg differ
diff --git a/docs/en/source/sumpuzzle.png b/docs/en/source/sumpuzzle.png
new file mode 100644 (file)
index 0000000..4aed63c
Binary files /dev/null and b/docs/en/source/sumpuzzle.png differ
diff --git a/docs/en/source/superman.png b/docs/en/source/superman.png
new file mode 100644 (file)
index 0000000..bb3b513
Binary files /dev/null and b/docs/en/source/superman.png differ
diff --git a/docs/en/source/syntaxflexibility.txt b/docs/en/source/syntaxflexibility.txt
new file mode 100644 (file)
index 0000000..4a8490b
--- /dev/null
@@ -0,0 +1,677 @@
+.. index:: 
+       single: Syntax Flexibility; Introduction
+
+==================
+Syntax Flexibility
+==================
+
+In this chapter we will learn about some options that are provided automatically by the Ring
+compiler for syntax flexibility.
+
+.. index:: 
+       pair: Syntax Flexibility; Change Language Keywords
+
+Change Language Keywords
+========================
+
+We can change any keyword using the ChangeRingKeyword command.
+
+.. note:: Remember to restore the keyword again if the team will mix between styles in the same project.
+
+.. tip:: The ChangeRingKeyword command is executed in the scanner stage by the compiler (before parsing).
+
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingKeyword  <oldkeyword>  <newkeyword>
+
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword see print
+       
+       print "welcome" + nl
+
+       ChangeRingKeyword print see
+
+       see "Welcome" + nl
+
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword  func function
+       ChangeRingKeyword  see  print
+       ChangeRingKeyword  ok   endif
+       ChangeRingKeyword  next endfor
+       ChangeRingKeyword  end  endwhile
+
+       x = 10
+       while x > 0
+               print "x = " + x + nl
+               for t = 1 to 10
+                       if t = 3
+                               print "number three" + nl
+                       endif
+               endfor  
+
+       x--
+       endwhile
+
+       test() 
+
+       function test
+               print "message from test" + nl
+
+       ChangeRingKeyword  function func
+       ChangeRingKeyword  print see
+       ChangeRingKeyword  endif ok
+       ChangeRingKeyword  endfor next
+       ChangeRingKeyword  endwhile end
+
+
+.. index:: 
+       pair: Syntax Flexibility; Change Language Operators
+
+Change Language Operators
+=========================
+
+We can change any operator using the ChangeRingOperator command.
+
+.. note:: Remember to restore the operator again if the team will mix between styles in the same project.
+
+.. tip:: The ChangeRingOperartor command is executed in the scanner stage by the compiler (before parsing).
+
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingOperator  <oldkeyword>  <newkeyword>
+
+Example:
+
+The next program hide the + operator by changing it to _+
+
+.. code-block:: ring
+
+       changeringoperator + _+
+       changeringkeyword SEE PRINT
+
+       try
+               print 5 + 10
+       catch
+               print nl print "error" print nl
+       done
+
+       changeringoperator _+ +
+
+The next program change the + operator to "plus".
+
+.. code-block:: ring
+
+       changeringoperator + plus 
+       changeringkeyword SEE PRINT
+
+       Print 5 plus 5  
+
+       changeringoperator plus +
+       changeringkeyword PRINT SEE 
+
+
+.. index:: 
+       pair: Syntax Flexibility; Using "()" around the function parameters
+
+
+.. index:: 
+       pair: Syntax Flexibility; Load Syntax Files
+
+
+Load Syntax Files
+=================
+
+You may store a group of ChangeRingKeyword and ChangeRingOperator commands in a file to use later
+in many source files. You can't use the Load command to call these files because
+
+* ChangeRingKeyword and ChangeRingOperator commands are executed in the scanner phase by the compiler (before parsing).
+* The load command is executed in the parsing phase (after the scanner phase).
+
+Solution: Use the LoadSyntax Command which is executed in the scanner phase.
+
+Syntax:
+
+.. code-block:: ring
+
+       LoadSyntax      "syntaxfile.ring"
+
+Example:
+
+File : StyleBasicOn.ring
+
+.. code-block:: ring
+
+       ChangeRingKeyword       see     print
+       ChangeRingKeyword       ok      endif
+       ChangeRingKeyword       next    endfor
+       ChangeRingKeyword       end     endwhile
+
+File : StyleBasicOff.ring
+
+.. code-block:: ring
+
+       ChangeRingKeyword  print        see
+       ChangeRingKeyword  endif        ok
+       ChangeRingKeyword  endfor       next
+       ChangeRingKeyword  endwhile     end
+
+File : UseStyleBasic.ring
+
+.. code-block:: ring
+
+       LoadSyntax "stylebasicon.ring"
+
+       x = 10
+       while x > 0
+               print "x = " + x + nl
+               for t = 1 to 10
+                       if t = 3
+                               print "number three" + nl
+                       endif
+               endfor  
+               x--
+       endwhile
+
+       LoadSyntax "stylebasicoff.ring"
+
+       see "done" + nl
+
+.. note:: files called by the LoadSyntax command must contains ChangeRingKeyword and ChangeRingOperator commands only. 
+
+.. tip:: files called by the LoadSyntax command doesn't support functions, packages and classes. just imperative commands only.
+
+.. note:: Using this feature you can create many styles that you can use in the same project and you can support Ring translation to other languages like Arabic, French and so on.
+
+.. tip:: The effect of LoadSyntax command is related to the current source code file only.
+       
+Using "()" around the function parameters
+=========================================
+
+We can use () around the function parameters (optional).
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+       sum(3,4)
+
+       func hello()
+               see "Hello" + nl
+
+       func sum(x,y)
+               see x+y+nl
+       
+Output:
+
+.. code-block:: ring
+
+       Hello
+       7
+
+Example:
+
+.. code-block:: ring
+
+       myfunc = func x,y { see x + y + nl }
+
+       call myfunc (3,4)
+
+       myfunc2 = func (x,y) { see x+y+nl }
+
+       call myfunc(3,4)
+
+Output:
+
+.. code-block:: ring
+
+       7
+       7
+
+.. index:: 
+       pair: Syntax Flexibility; Using Semi-colon after and between statements
+
+Using Semi-colon after and between statements
+=============================================
+
+In Ring we can use semi-colon after and between statements (optional).
+
+Example:
+
+.. code-block:: ring
+
+       # Using semi-colon is optional
+
+       see "Hello" + nl ; see "How are you?" + nl  ; see "Welcome to Ring" + nl ;
+       one() ; two() ; three() ;
+       func one ; see "one" + nl ;
+       func two ; see "two" + nl ;
+       func three ; see "three" + nl ;
+
+
+Output:
+
+.. code-block:: ring
+
+
+       Hello
+       How are you?
+       Welcome to Ring
+       one
+       two
+       three
+
+.. index:: 
+       pair: Syntax Flexibility; Using $ and @ in the start of the variable name
+
+Using $ and @ in the start of the variable name
+===============================================
+
+You can use any unicode character in the variable name also we can use $ and @ in the name.
+
+This feature may help, for example we can start global variables with $ and the object attributes
+with @. 
+
+In other languages like Ruby this is the rule, In the Ring language this is just an option without
+any force from the Compiler.
+
+example:
+
+.. code-block:: ring
+
+       $global_variable = 5
+
+       new test { hello() }    
+
+       class test
+
+               @instance_variable = 10
+
+               func hello
+
+                       local_variable = 15
+
+                       see "Global   : " + $global_variable + nl + 
+                           "Instance : " + @instance_variable + nl +
+                           "Local    : " + local_variable + nl
+
+Output:
+
+
+.. code-block:: ring
+
+       Global   : 5
+       Instance : 10
+       Local    : 15
+
+.. index:: 
+       pair: Syntax Flexibility; Using the 'elseif' keyword as 'but' in if statement
+
+Using the 'elseif' keyword as 'but' in if statement
+===================================================
+
+if you don't like the 'but' keyword in if statement
+Then you can use the 'elseif' keyword.
+
+Example:
+
+.. code-block:: ring
+
+       give x
+       if x = 1 see "one"
+       elseif x=2 see "two"
+       elseif x=3 see "three"
+       elseif x=4 see "four"
+       else see "other"
+       ok
+       see nl
+
+.. index:: 
+       pair: Syntax Flexibility; Using the 'else' keyword as 'other' in switch statement
+
+Using the 'else' keyword as 'other' in switch statement
+=======================================================
+
+if you don't like the 'other' keyword in switch statement
+Then you can use the 'else' keyword.
+
+Also you can replace 'else' with 'other' in if statement.
+
+i.e. 'other' keyword is the same as 'else' keyword.
+
+Example:
+
+.. code-block:: ring
+
+       x = 1
+       switch x
+               on 10 
+                       see "10" + nl
+               else 
+                       see "not 10" + nl
+       end
+
+Output:
+
+.. code-block:: ring
+
+       not 10
+
+.. index:: 
+       pair: Syntax Flexibility; Using the 'end' keyword in different control structures
+
+Using the 'end' keyword in different control structures
+=======================================================
+
+We can use the 'end' keyword to close different control structures
+
+* If statement
+* For loop
+* Switch 
+* While
+* Try-Catch
+
+Example:
+
+.. code-block:: ring
+
+       see "if statement.." + nl
+       x = 1
+       if x = 1 
+               see "one" + nl
+       elseif x=2 
+               see "two" + nl
+       elseif x=3 
+               see "three" + nl
+       end
+       see "for loop.." + nl
+       for t = 1 to 10
+               see t 
+       end
+       see nl
+       see "switch..." + nl
+       x = 1
+
+       switch x
+               on 1 see "one" + nl
+               on 2 see "two" + nl
+       end
+
+       see "try catch..." + nl
+       try
+               x = 1 / 0
+       catch
+               see "catching error" + nl
+       end
+
+Output:
+
+.. code-block:: ring
+
+       if statement..
+       one
+       for loop..
+       12345678910
+       switch...
+       one
+       try catch...
+       catching error
+
+.. index:: 
+       pair: Syntax Flexibility; Using braces to start and end different control structures
+
+Using braces to start and end different control structures
+==========================================================
+
+
+We can use braces { } to start and end different control structures
+
+* If statement
+* For loop
+* Switch 
+* While
+* Try-Catch
+
+Example:
+
+.. code-block:: ring
+
+       see "if statement.." + nl
+       x = 1
+       if x = 1 {
+               see "one" + nl
+       elseif x=2 
+               see "two" + nl
+       elseif x=3 
+               see "three" + nl
+       }
+       see "for loop.." + nl
+       for t = 1 to 10 {
+               see t 
+       }
+       see nl
+       see "switch..." + nl
+       x = 1
+
+       switch x {
+               on 1 see "one" + nl
+               on 2 see "two" + nl
+       }
+
+       see "try catch..." + nl
+       try {
+               x = 1 / 0
+       catch
+               see "catching error" + nl
+       }
+
+Output:
+
+.. code-block:: ring
+
+       if statement..
+       one
+       for loop..
+       12345678910
+       switch...
+       one
+       try catch...
+       catching error
+
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'put' and 'get' as 'see' and 'give'
+
+Using 'put' and 'get' as 'see' and 'give'
+=========================================
+
+We can replace the 'see' keyword with the 'put' keyword.
+
+Also we can replacew the 'give' keyword with the 'get' keyword.
+
+Example:
+
+.. code-block:: ring
+
+       put "Hello World" + nl
+       put "Enter Your Name ? " Get Name
+       Put "Hello " + Name
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'case' as 'on' in switch statements
+
+Using 'case' as 'on' in switch statements
+=========================================
+
+We can replace the 'on' keyword with 'case' keyword in the switch statement.
+
+Example (1) :
+
+.. code-block:: ring
+
+       for x=1 to 10 
+               switch x 
+               case 1 put "one" + nl
+               case 2 put "two" + nl
+               case 3 put "thre" + nl
+               else put "else" + nl
+               end
+       end
+
+Example (2) :
+
+.. code-block:: ring
+
+       for x=1 to 10 {
+               switch x {
+               case 1 put "one" + nl
+               case 2 put "two" + nl
+               case 3 put "thre" + nl
+               else put "else" + nl
+               }
+       }
+
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'def' as 'func' in functions/methods definition
+
+Using 'def' as 'func' in functions/methods definition
+=====================================================
+
+We can use the 'def' keyword as the 'func' keyword to define functions and methods.
+
+Example:
+
+.. code-block:: ring
+
+       one() two()
+
+       def one put "one" + nl
+       def two put "two" + nl
+
+.. index:: 
+       pair: Syntax Flexibility; Using braces { } in Packages/Classes/Functions
+
+Using braces { } in Packages/Classes/Functions
+==============================================
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+       {
+               class myclass 
+               {
+                       func myfunc 
+                       {
+                               print("Hello, World!\n")
+                       }
+               }
+       }
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'end' keyword after Packages/Classes/Functions
+
+Using 'end' keyword after Packages/Classes/Functions
+====================================================
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+               class myclass 
+                       def myfunc 
+                               put "Hello, World!"
+                       end
+               end
+       end
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'endpackage'/'endclass'/'endfunc' keywords after Packages/Classes/Functions
+
+Using 'endpackage'/'endclass'/'endfunc' keywords after Packages/Classes/Functions
+=================================================================================
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass { myfunc() }
+
+       package mypackage
+               class myclass
+                       func myfunc                     
+                               see "welcome"  + nl
+                       endfunc
+               endclass
+       endpackage
+
+.. index:: 
+       pair: Syntax Flexibility; Ignore new lines after keywords
+
+Ignore new lines after keywords
+===============================
+
+Starting from Ring 1.8 the compiler will ignore new lines after keywords that expect tokens after it
+
+Example:
+
+.. code-block:: ring
+
+       see 
+       "
+               Hello, World!
+       "
+       test()
+
+       func 
+       #======================#
+               Test
+       #======================#
+
+               ?
+               "
+       
+               Hello from the Test function
+
+               "
+
+Output:
+
+.. code-block:: none
+
+
+               Hello, World!
+
+
+               Hello from the Test function
\ No newline at end of file
diff --git a/docs/en/source/systemfunc.txt b/docs/en/source/systemfunc.txt
new file mode 100644 (file)
index 0000000..924b1ae
--- /dev/null
@@ -0,0 +1,482 @@
+.. index:: 
+       single: System Functions; Introduction
+
+================
+System Functions
+================
+
+In this chapter we are going to learn about the system functions
+
+* System()
+
+* SysGet()
+
+* IsMSDOS()
+
+* IsWindows()
+
+* IsWindows64()
+
+* IsUnix()
+
+* IsMacOSX()
+
+* IsLinux()
+
+* IsFreeBSD()
+
+* IsAndroid()
+
+* Windowsnl()
+
+* Get Command Line Arguments
+
+* Get Active Source File Name
+
+* CurrentDir()
+
+* ExeFileName()
+
+* ChDir()
+
+* ExeFolder()
+
+* Version()
+
+* Shutdown()
+
+.. index:: 
+       pair: System Functions; System() Function
+
+System() Function
+=================
+
+We can execute system commands using the system() function
+
+Syntax:
+
+.. code-block:: ring
+
+       System(cCommand)
+
+Example:
+
+.. code-block:: ring
+
+       System("myapp.exe")     # Run myapp.exe
+       System("ls")            # print list of files
+
+.. index:: 
+       pair: System Functions; SysGet() Function
+
+SysGet() Function
+=================
+
+We can get environment variables using the Get() function
+
+Syntax:
+
+.. code-block:: ring
+
+       SysGet(cVariable)
+
+Example:
+
+.. code-block:: ring
+
+       see sysget("path")              # print system path information
+
+
+.. index:: 
+       pair: System Functions; IsMSDOS() Function
+
+IsMSDOS() Function
+==================
+
+We can check if the operating system is MSDOS or not using the IsMSDOS() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsMSDOS() ---> Returns 1 if the operating system is MS-DOS, Returns 0 if it's not
+                      
+
+.. index:: 
+       pair: System Functions; IsWindows() Function
+
+IsWindows() Function
+====================
+
+We can check if the operating system is Windows or not using the IsWindows() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsWindows() ---> Returns 1 if the operating system is Windows, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsWindows64() Function
+
+IsWindows64() Function
+======================
+
+We can check if the operating system is Windows 64bit or not using the IsWindows64() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsWindows64() ---> Returns 1 if the operating system is Windows64, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsUnix() Function
+
+IsUnix() Function
+=================
+
+We can check if the operating system is Unix or not using the IsUnix() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsUnix() ---> Returns 1 if the operating system is Unix, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsMacOSX() Function
+
+IsMacOSX() Function
+===================
+
+We can check if the operating system is macOS or not using the IsMacOSX() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsMacOSX() ---> Returns 1 if the operating system is Mac OS X, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsLinux() Function
+
+IsLinux() Function
+==================
+
+We can check if the operating system is Linux or not using the IsLinux() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsLinux() ---> Returns 1 if the operating system is Linux, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsFreeBSD() Function
+
+IsFreeBSD() Function
+====================
+
+We can check if the operating system is FreeBSD or not using the IsFreeBSD() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsFreeBSD() ---> Returns 1 if the operating system is FreeBSD, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsAndroid() Function
+
+IsAndroid() Function
+====================
+
+We can check if the operating system is Android or not using the IsAndroid() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsAndroid() ---> Returns 1 if the operating system is Android, Returns 0 if it's not
+
+.. index:: 
+       pair: System Functions; Example
+
+Example
+=======
+
+.. code-block:: ring
+
+       see "IsMSDOS()     --> " + ismsdos()     + nl
+       see "IsWindows()   --> " + iswindows()   + nl
+       see "IsWindows64() --> " + iswindows64() + nl
+       see "IsUnix()      --> " + isunix()      + nl
+       see "IsMacOSX()    --> " + ismacosx()    + nl
+       see "IsLinux()     --> " + islinux()     + nl
+       see "IsFreeBSD()   --> " + isfreebsd()   + nl
+       see "IsAndroid()   --> " + isandroid()   + nl
+
+Output:
+
+.. code-block:: ring
+
+       IsMSDOS()     --> 0
+       IsWindows()   --> 1
+       IsWindows64() --> 0
+       IsUnix()      --> 0
+       IsMacOSX()    --> 0
+       IsLinux()     --> 0
+       IsFreeBSD()   --> 0
+       IsAndroid()   --> 0
+
+.. index:: 
+       pair: System Functions; Windowsnl() Function
+
+Windowsnl() Function
+====================
+
+We can get the windows new line string using the Windowsnl() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       WindowsNL() ---> Returns a string contains CR+LF = CHAR(13) + CHAR(10)
+
+Example:
+
+.. code-block:: ring
+
+       cStr = read("input.txt")
+
+       if iswindows()
+               cStr = substr(cStr,windowsnl(),nl)
+       ok
+
+       aList = str2list(cStr)
+       # to do - list items processing using "for in"
+       cStr = list2str(aList)
+
+       if iswindows()
+               cStr = substr(cStr,nl,windowsnl())
+       ok
+
+       write("ouput.txt",cStr)
+
+.. index:: 
+       pair: System Functions; Get Command Line Arguments
+
+Get Command Line Arguments
+==========================
+
+We can get the command line arguments passed to the ring script using the sysargv variable.
+
+The sysargv variable is a list contains the command line parameters.
+
+Example
+
+.. code-block:: ring
+
+       see copy("=",30) + nl
+       see "Command Line Parameters" + nl
+       see "Size : " + len(sysargv) + nl
+       see sysargv
+       see copy("=",30) + nl
+       if len(sysargv) < 4 return ok
+       nStart = sysargv[3]
+       nEnd = sysargv[4]
+       for x = nStart to nEnd
+               see x + nl
+       next
+
+Output
+
+.. code-block:: ring
+
+       b:\mahmoud\apps\ring>ring tests\syspara.ring 1 10
+       ==============================
+       Command Line Parameters
+       Size : 4
+       ring
+       tests\syspara.ring
+       1
+       10
+       ==============================
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: System Functions; Get Active Source File Name
+
+Get Active Source File Name
+===========================
+
+We can get the active source file name (*.ring) using the filename() function
+
+Syntax:
+
+.. code-block:: ring
+
+       filename() ---> String contains the active source file name.
+
+Example:
+
+.. code-block:: ring
+
+       see "Active Source File Name : " + filename() + nl
+
+Output:
+
+.. code-block:: ring
+
+       Active Source File Name : tests\filename.ring
+
+
+Example:
+
+.. code-block:: ring
+
+       if sysargv[2] = filename()
+               see "I'm the main program file!" + nl
+               # we can run tests here!
+       else
+               see "I'm a sub file in a program" + nl
+       ok
+
+
+.. index:: 
+       pair: System Functions; PrevFileName() Function
+
+PrevFileName() Function
+=======================
+
+Using the PrevFileName() function we can get the previous active source file name.
+
+The previous file would be the file of the caller function, Or the file of the function
+that we called before calling PrevFileName().
+
+Syntax:
+
+.. code-block:: ring
+
+       prevfilename() ---> String contains the previous source file name.
+
+Example:
+
+The next function in stdlib.ring uses the PrevFileName() to know if the file of the
+caller function is the main source file of the program or not.
+
+.. code-block:: ring
+
+       Func IsMainSourceFile
+               if PrevFileName() = sysargv[2]
+                       return true
+               ok
+               return false
+
+.. index:: 
+       pair: System Functions; CurrentDir() Function
+
+CurrentDir() Function
+=====================
+
+Return the path of the current directory
+
+Syntax:
+
+.. code-block:: ring
+
+       CurrenDir() ---> String contains the path of the currect directory 
+
+.. index:: 
+       pair: System Functions; ExeFileName() Function
+
+ExeFileName() Function
+======================
+
+Return the Ring executable file name
+
+Syntax:
+
+.. code-block:: ring
+
+       exefilename() ---> String contains the Ring executable file name
+
+.. index:: 
+       pair: System Functions; ChDir() Function
+
+ChDir() Function
+================
+
+Change the current directory
+
+Syntax:
+
+.. code-block:: ring
+
+       ChDir(cNewPath)
+
+.. index:: 
+       pair: System Functions; ExeFolder() Function
+
+ExeFolder() Function
+====================
+
+Return the Ring executable file path
+
+Syntax:
+
+.. code-block:: ring
+
+       exefolder() ---> String contains the Ring executable path
+
+.. index:: 
+       pair: System Functions; Version() Function
+
+Version() Function
+==================
+
+Return the Ring version
+
+Syntax:
+
+.. code-block:: ring
+
+       version() ---> String contains the Ring version
+
+Output:
+
+.. code-block:: ring
+
+       1.12
+
+
+.. index:: 
+       pair: System Functions; Shutdown() Function
+
+Shutdown() Function
+===================
+
+Close the application
+
+Syntax:
+
+.. code-block:: ring
+
+       shutdown(nStatus) ---> Close the application
+
diff --git a/docs/en/source/tesseragame.png b/docs/en/source/tesseragame.png
new file mode 100644 (file)
index 0000000..e8b26ba
Binary files /dev/null and b/docs/en/source/tesseragame.png differ
diff --git a/docs/en/source/tests_shot.png b/docs/en/source/tests_shot.png
new file mode 100644 (file)
index 0000000..b92822a
Binary files /dev/null and b/docs/en/source/tests_shot.png differ
diff --git a/docs/en/source/thering.jpg b/docs/en/source/thering.jpg
new file mode 100644 (file)
index 0000000..416d572
Binary files /dev/null and b/docs/en/source/thering.jpg differ
diff --git a/docs/en/source/tictactoe.jpg b/docs/en/source/tictactoe.jpg
new file mode 100644 (file)
index 0000000..8904478
Binary files /dev/null and b/docs/en/source/tictactoe.jpg differ
diff --git a/docs/en/source/tictactoe3d.png b/docs/en/source/tictactoe3d.png
new file mode 100644 (file)
index 0000000..bb53799
Binary files /dev/null and b/docs/en/source/tictactoe3d.png differ
diff --git a/docs/en/source/ttsapp.png b/docs/en/source/ttsapp.png
new file mode 100644 (file)
index 0000000..d2b639f
Binary files /dev/null and b/docs/en/source/ttsapp.png differ
diff --git a/docs/en/source/typehints.txt b/docs/en/source/typehints.txt
new file mode 100644 (file)
index 0000000..25e6bb8
--- /dev/null
@@ -0,0 +1,145 @@
+.. index:: 
+       single: The Type Hints Library; Introduction to the Type Hints Library
+
+======================================
+Introduction to the Type Hints Library
+======================================
+
+In this chapter we will learn about the Type Hints Library
+
+
+.. index:: 
+       pair: The Type Hints Library; Why Type Hints?
+
+Why Type Hints?
+===============
+
+Using this library we can add the type information to the source code which will be 
+very useful for tools like
+
+* Code Editors 
+* Static-Analysis
+
+.. note:: Ring is a dynamic language, No type checking will be done by the compiler.
+
+.. index:: 
+       pair: The Type Hints Library; Example
+
+Example
+=======
+
+The next example will use the Type Hints library
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       see sum(3,4) + nl ;
+       see sayHello("Mahmoud");
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+.. index:: 
+       pair: The Type Hints Library; User Types
+
+User Types
+==========
+
+The Type Hints library is very powerful and will support user types (Classes) automatically
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       import mypackage 
+
+       test()  { main([:one,:two,:three]) }
+
+       myclass func test() {
+               see "Testing User Types!" + nl
+               return new myclass
+       }
+
+       package mypackage {
+               public class myclass {
+                       public static void func main(list args) {
+                               see "welcome" + nl
+                               see args
+                       }
+               }
+       }
+
+.. index:: 
+       pair: The Type Hints Library; Using Types inside Code
+
+Using Types inside Code
+=======================
+
+Also you can use the types inside the code (not only the function prototype)
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       int     sum = sum(3,4)
+       string  msg = sayHello("Mahmoud")
+
+       see "Sum = " + sum + nl + msg + nl
+
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+.. index:: 
+       pair: The Type Hints Library; Rules
+
+Rules
+=====
+
+* To use the types in the function prototype you must use '(' and ')' around parameters
+* To use the types in the function code, You must set the variable value (Assignment).
+
+The next types are defined by the library
+
+.. code-block:: ring
+
+       # Low Level Types
+       char             
+       unsigned         
+       signed           
+       int              
+       short            
+       long             
+       float            
+       double           
+       void             
+
+       # High Level Types 
+       string           
+       list             
+       number           
+       object           
+
+       # Other
+       public           
+       static           
+       abstract         
+       protected        
+       override         
+
+
diff --git a/docs/en/source/urlappmacshot3.png b/docs/en/source/urlappmacshot3.png
new file mode 100644 (file)
index 0000000..bdb5fb6
Binary files /dev/null and b/docs/en/source/urlappmacshot3.png differ
diff --git a/docs/en/source/urlappmacshot4.png b/docs/en/source/urlappmacshot4.png
new file mode 100644 (file)
index 0000000..fee1e5d
Binary files /dev/null and b/docs/en/source/urlappmacshot4.png differ
diff --git a/docs/en/source/urlappmainshot.png b/docs/en/source/urlappmainshot.png
new file mode 100644 (file)
index 0000000..e825220
Binary files /dev/null and b/docs/en/source/urlappmainshot.png differ
diff --git a/docs/en/source/urlappshot1.png b/docs/en/source/urlappshot1.png
new file mode 100644 (file)
index 0000000..b8b92e7
Binary files /dev/null and b/docs/en/source/urlappshot1.png differ
diff --git a/docs/en/source/urlappshot2.png b/docs/en/source/urlappshot2.png
new file mode 100644 (file)
index 0000000..587fdcd
Binary files /dev/null and b/docs/en/source/urlappshot2.png differ
diff --git a/docs/en/source/urn_shot1.png b/docs/en/source/urn_shot1.png
new file mode 100644 (file)
index 0000000..31bb9d3
Binary files /dev/null and b/docs/en/source/urn_shot1.png differ
diff --git a/docs/en/source/urn_shot10.png b/docs/en/source/urn_shot10.png
new file mode 100644 (file)
index 0000000..ecf8757
Binary files /dev/null and b/docs/en/source/urn_shot10.png differ
diff --git a/docs/en/source/urn_shot11.png b/docs/en/source/urn_shot11.png
new file mode 100644 (file)
index 0000000..f0e5f2f
Binary files /dev/null and b/docs/en/source/urn_shot11.png differ
diff --git a/docs/en/source/urn_shot12.png b/docs/en/source/urn_shot12.png
new file mode 100644 (file)
index 0000000..67c0a7c
Binary files /dev/null and b/docs/en/source/urn_shot12.png differ
diff --git a/docs/en/source/urn_shot2.png b/docs/en/source/urn_shot2.png
new file mode 100644 (file)
index 0000000..b57da48
Binary files /dev/null and b/docs/en/source/urn_shot2.png differ
diff --git a/docs/en/source/urn_shot3.png b/docs/en/source/urn_shot3.png
new file mode 100644 (file)
index 0000000..252a2e1
Binary files /dev/null and b/docs/en/source/urn_shot3.png differ
diff --git a/docs/en/source/urn_shot4.png b/docs/en/source/urn_shot4.png
new file mode 100644 (file)
index 0000000..5b23411
Binary files /dev/null and b/docs/en/source/urn_shot4.png differ
diff --git a/docs/en/source/urn_shot5.png b/docs/en/source/urn_shot5.png
new file mode 100644 (file)
index 0000000..c52ca61
Binary files /dev/null and b/docs/en/source/urn_shot5.png differ
diff --git a/docs/en/source/urn_shot6.png b/docs/en/source/urn_shot6.png
new file mode 100644 (file)
index 0000000..9b7a147
Binary files /dev/null and b/docs/en/source/urn_shot6.png differ
diff --git a/docs/en/source/urn_shot7.png b/docs/en/source/urn_shot7.png
new file mode 100644 (file)
index 0000000..f945e3f
Binary files /dev/null and b/docs/en/source/urn_shot7.png differ
diff --git a/docs/en/source/urn_shot8.png b/docs/en/source/urn_shot8.png
new file mode 100644 (file)
index 0000000..3a24887
Binary files /dev/null and b/docs/en/source/urn_shot8.png differ
diff --git a/docs/en/source/urn_shot9.png b/docs/en/source/urn_shot9.png
new file mode 100644 (file)
index 0000000..9de14da
Binary files /dev/null and b/docs/en/source/urn_shot9.png differ
diff --git a/docs/en/source/usingopengl.txt b/docs/en/source/usingopengl.txt
new file mode 100644 (file)
index 0000000..c30f2de
--- /dev/null
@@ -0,0 +1,2550 @@
+.. index:: 
+       single: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Introduction
+
+===================================================
+Using RingOpenGL and RingFreeGLUT for 3D  Graphics
+===================================================
+
+
+In this chapter we will learn about using RingOpenGL
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Samples Source (Authors)
+
+Samples Source (Authors)
+========================
+
+The samples in this chapter are based on C Tutorials 
+
+from 
+
+(1) http://www.lighthouse3d.com/tutorials/glut-tutorial/
+
+(2) http://www.wikihow.com/Make-a-Cube-in-OpenGL
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; What is RingOpenGL?
+
+What is RingOpenGL?
+===================
+
+RingOpenGL contains the Ring binding to the OpenGL library
+
+You can learn about OpenGL from : https://www.opengl.org/
+
+RingOpenGL comes with support for the next versions 
+
+* OpenGL 1.1
+* OpenGL 1.2
+* OpenGL 1.3
+* OpenGL 1.4
+* OpenGL 1.5
+* OpenGL 2.0
+* OpenGL 2.1
+* OpenGL 3.0
+* OpenGL 3.2
+* OpenGL 3.3
+* OpenGL 4.0
+* OpenGL 4.1
+* OpenGL 4.2
+* OpenGL 4.3
+* OpenGL 4.4
+* OpenGL 4.5
+* OpenGL 4.6
+
+For example, if you want to use OpenGL 2.1 then load RingOpenGL 2.1 library
+
+.. code-block:: ring
+
+       load "opengl21lib.ring"
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; What is RingFreeGLUT?
+
+What is RingFreeGLUT?
+=====================
+
+RingFreeGLUT contains the Ring binding to the FreeGLUT library
+
+You can learn about FreeGLUT from : http://freeglut.sourceforge.net/
+
+To use the RingFreeGLUT library, Just load the library
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; The First Window using RingFreeGLUT
+
+The First Window using RingFreeGLUT
+===================================
+
+Example:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_SINGLE)
+               glutInitWindowSize(800, 600)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 1")
+               glutDisplayFunc(:displayCode)
+               glutMainLoop()
+
+       func displaycode
+
+Screen Shot
+
+.. image:: freeglutshot1.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Drawing using RingOpenGL
+
+
+Drawing using RingOpenGL
+========================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_SINGLE)
+               glutInitWindowSize(800, 600)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 2")
+               glutDisplayFunc(:displayCode)
+               glutMainLoop()
+
+       func displaycode
+               glClear(GL_COLOR_BUFFER_BIT)
+               glColor3f(0,255,0)
+               glBegin(GL_POLYGON)
+                       glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(0.5, 0.0, 0.0)
+                       glVertex3f(0.5, 0.5, 0.0)
+                       glVertex3f(0.0, 0.5, 0.0)
+               glEnd()
+               glColor3f(255,0,0)
+               glBegin(GL_POLYGON)
+                       glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(0.5, 0.0, 0.0)
+                       glVertex3f(-0.5,- 1, 0.0)
+                       glVertex3f(0.0, -1, 0.0)
+               glEnd()
+               glColor3f(0,0,255)
+               glBegin(GL_POLYGON)
+                      glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(-0.5, 0.0, 0.0)
+                       glVertex3f(-0.5,- 0.5, 0.0)
+                       glVertex3f(0.0, -0.5, 0.0)
+               glEnd()
+
+               glFlush()
+
+Screen Shot
+
+.. image:: freeglutshot2.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; The First Triangle
+
+
+The First Triangle
+==================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowSize(320,320)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 3")
+               glutDisplayFunc(:renderScene)
+               glutMainLoop()
+
+       func renderScene
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+       
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-0.5,-0.5,0.0)
+                       glVertex3f(0.5,0.0,0.0)
+                       glVertex3f(0.0,0.5,0.0)
+               glEnd()
+       
+               glutSwapBuffers()
+
+
+Screen Shot
+
+.. image:: freeglutshot3.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Window Resize Event
+
+Window Resize Event
+===================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 4")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+
+               glutMainLoop()
+
+       func renderScene
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2,-2,-5.0)
+                       glVertex3f(2,0.0,-5.0)
+                       glVertex3f(0.0,2,-5.0)
+               glEnd()
+
+               glutSwapBuffers()
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45,ratio,1,100)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Triangle Rotation
+
+Triangle Rotation
+=================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       angle = 0
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 5")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutMainLoop()
+
+       func renderScene
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      0.0, 0.0, 10.0,
+                                       0.0, 0.0,  0.0,
+                                       0.0, 1.0,  0.0)
+
+               glRotatef(angle, 0.0, 1.0, 0.0)
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2.0,-2.0, 0.0)
+                       glVertex3f( 2.0, 0.0, 0.0)
+                       glVertex3f( 0.0, 2.0, 0.0)
+               glEnd()
+
+               angle+=0.1
+
+               glutSwapBuffers();
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45,ratio,1,100)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+Screen Shot
+
+.. image:: freeglutshot4.png
+       :alt: RingFreeGLUT
+               
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Keyboard Events and Colors
+
+Keyboard Events and Colors
+==========================
+
+Example:
+
+.. code-block:: ring
+               
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       angle = 0
+
+       red=1.0  
+       blue=1.0 
+       green=1.0
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 6")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               // here are the new entries
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:processSpecialKeys)
+
+               glutMainLoop()
+
+       func renderScene
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      0.0, 0.0, 10.0,
+                                       0.0, 0.0,  0.0,
+                                       0.0, 1.0,  0.0)
+
+               glRotatef(angle, 0.0, 1.0, 0.0)
+
+
+               glColor3f(red,green,blue);
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2.0,-2.0, 0.0)
+                       glVertex3f( 2.0, 0.0, 0.0)
+                       glVertex3f( 0.0, 2.0, 0.0)
+               glEnd()
+
+               angle+=0.1
+
+               glutSwapBuffers();
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45,ratio,1,100)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func processNormalKeys
+               key = GLUTEventKey()
+               if key = 27
+                       shutdown()
+               ok
+
+       func processSpecialKeys
+
+               key = GLUTEventKey()
+
+               switch key  
+                       on GLUT_KEY_F1
+                                       red = 1.0
+                                       green = 0.0
+                                       blue = 0.0
+                       on GLUT_KEY_F2 
+                                       red = 0.0
+                                       green = 1.0
+                                       blue = 0.0
+                       on GLUT_KEY_F3
+                                       red = 0.0
+                                       green = 0.0
+                                       blue = 1.0
+               off
+
+Screen Shot
+
+.. image:: freeglutshot5.png
+       :alt: RingFreeGLUT
+               
+
+               
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; The Camera
+
+The Camera
+==========
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle=0.0
+       // actual vector representing the camera's direction
+       lx=0.0
+       lz=-1.0
+       // XZ position of the camera
+       x=0.0
+       z=5.0
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(1.0, 0.5 , 0.5)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0  / h 
+
+                       // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+                       // Reset Matrix
+               glLoadIdentity()
+
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0);
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func processNormalKeys
+               key = glutEventKey()
+
+               if key = 27
+                       shutdown()
+               ok
+
+
+
+       func renderScene
+
+               // Clear Color and Depth Buffers
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+                       // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+                       // Draw 36 SnowMen
+               for i = -3 to 2
+                       for  j=-3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0,0,j * 10.0)                 
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+
+
+       func processSpecialKeys 
+
+               key = glutEventKey()
+
+               fraction = 0.1
+
+               switch key 
+                       on GLUT_KEY_LEFT 
+                               angle -= 0.01
+                               lx = sin(angle)
+                               lz = -cos(angle)
+                       on GLUT_KEY_RIGHT 
+                               angle += 0.01
+                               lx = sin(angle)
+                               lz = -cos(angle)
+                       on GLUT_KEY_UP 
+                               x += lx * fraction
+                               z += lz * fraction
+                       on GLUT_KEY_DOWN 
+                               x -= lx * fraction
+                               z -= lz * fraction
+               off
+
+
+       func main
+
+               // init GLUT and create window
+
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 7")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:processSpecialKeys)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+Screen Shot
+
+.. image:: freeglutshot6.png
+       :alt: RingFreeGLUT
+
+Another Example:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0 z=5.0
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+
+       func changeSize 
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(1.0, 0.5 , 0.5)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func computeDir deltaAngle
+
+               angle += deltaAngle
+               lx = sin(angle)
+               lz = -cos(angle)
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               if deltaAngle
+                       computeDir(deltaAngle)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                                       x+lx, 1.0,  z+lz,
+                                       0.0, 1.0,  0.0)
+
+       // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 36 SnowMen
+
+               for i = -3 to 2
+                       for j=-3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0,0,j * 10.0)
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+       func pressKey 
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_LEFT 
+                                deltaAngle = -0.01 
+                       on GLUT_KEY_RIGHT 
+                                deltaAngle = 0.01 
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5 
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5  
+               off
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_LEFT  
+                               deltaAngle = 0.0
+                       on GLUT_KEY_RIGHT  
+                               deltaAngle = 0.0
+                       on GLUT_KEY_UP  
+                               deltaMove = 0
+                       on GLUT_KEY_DOWN  
+                               deltaMove = 0
+               off
+
+       func main 
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 8")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutSpecialFunc(:pressKey)
+
+               // here are the new entries
+               glutIgnoreKeyRepeat(1)
+               glutSpecialUpFunc(:releaseKey)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+        
+        
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Mouse Events
+
+Mouse Events
+============
+
+Example:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0.0
+       xOrigin = -1
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+               // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+               // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+               // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+               // Draw Nose
+               glColor3f(1.0, 0.5 , 0.5)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+               // Draw 36 SnowMen
+
+               for i = -3 to 2
+                       for  j=-3 to 2
+                                                glPushMatrix()
+                                                glTranslatef(i*10.0,0,j * 10.0)
+                                                drawSnowMan()
+                                                glPopMatrix()
+                        next
+               next
+               glutSwapBuffers()
+
+       func processNormalKeys
+
+               key  = glutEventKey()
+
+                       if key = 27
+                                shutdown()
+                       ok
+
+
+       func pressKey
+               key  = glutEventKey()
+
+                  switch key
+                                on GLUT_KEY_UP
+                                       deltaMove = 0.5 
+                                on GLUT_KEY_DOWN
+                                        deltaMove = -0.5 
+                  off
+
+
+       func releaseKey 
+               key  = glutEventKey()
+                       switch key
+                                on GLUT_KEY_UP 
+                                       deltaMove = 0
+                                on GLUT_KEY_DOWN 
+                                       deltaMove = 0
+                       off
+
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+                       // this will only be true when the left button is down
+                       if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+               
+               
+
+       func mouseButton
+
+               button  = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1            
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+                       fflush(stdout)
+               ok
+
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 9")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Menu Events
+
+Menu Events
+===========
+
+Example:
+
+.. code-block:: ring 
+               
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+
+
+       // for RingFreeGLUT - We must have different ID for each menu item
+       C_RED = 1
+       C_GREEN = 2
+       C_BLUE  = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       C_SHRINK = 7
+       C_NORMAL = 8
+
+       // Pop up menu identifiers
+       fillMenu= 0  
+       shrinkMenu= 0
+       mainMenu=0 
+       colorMenu=0
+
+       // color for the nose
+       red = 1.0  blue=0.5  green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+       // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 36 SnowMen
+
+               for  i = -3 to 2
+                       for  j = -3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               glutSetMenu(mainMenu)
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(shrinkMenu)
+                               shutdown()
+
+                       on 's'
+                               if not menuFlag
+                                 glutChangeToSubMenu(2,"Shrink",shrinkMenu)
+                               ok
+                       on 'c'
+                               if not menuFlag
+                                       glutChangeToSubMenu(2,"Color",colorMenu)
+                               ok
+               off
+               if key = 27
+                       shutdown()
+               ok
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               if  status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                                glPolygonMode(GL_FRONT, GL_FILL) 
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE) 
+               off
+
+
+       func processShrinkMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_SHRINK
+                               scale = 0.5
+                       on C_NORMAL
+                                scale = 1.0
+               off
+
+
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               shrinkMenu = glutCreateMenu(:processShrinkMenu)
+
+               glutAddMenuEntry("Shrink",C_SHRINK)
+               glutAddMenuEntry("NORMAL",C_NORMAL)
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED)
+               glutAddMenuEntry("Blue",C_BLUE)
+               glutAddMenuEntry("Green",C_GREEN)
+               glutAddMenuEntry("Orange",C_ORANGE)
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 10")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+Screen Shot
+
+.. image:: freeglutshot7.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Using Fonts
+
+Using Fonts
+===========
+
+Example:
+
+.. code-block:: ring 
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // Pop up menu identifiers
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // color for the nose
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       // default font
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 36 SnowMen
+               for i = -3 to 2
+                       for j = -3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*6+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 11")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+Screen Shot
+
+.. image:: freeglutshot8.png
+       :alt: RingFreeGLUT
+
+       
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Frames Per Second 
+
+Frames Per Second
+=================
+
+Example 
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // Pop up menu identifiers
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // color for the nose
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       // default font
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       // width and height of the window
+       h = 0
+       w = 0
+
+       // variables to compute frames per second
+       frame=0
+       time=0
+       timebase=0
+       s = ""
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+       func renderStrokeFontString x,y,z,font,string
+               glPushMatrix()
+               glTranslatef(x, y,z)
+               glScalef(0.002, 0.002, 0.002)
+               for c in string
+                       glutStrokeCharacter(font, Ascii(c));
+               next
+               glPopMatrix()
+
+
+       func restorePerspectiveProjection
+
+               glMatrixMode(GL_PROJECTION)
+               // restore previous projection matrix
+               glPopMatrix()
+
+               // get back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func setOrthographicProjection
+
+               // switch to projection mode
+               glMatrixMode(GL_PROJECTION)
+
+               // save previous matrix which contains the
+               //settings for the perspective projection
+               glPushMatrix()
+
+               // reset matrix
+               glLoadIdentity()
+
+               // set a 2D orthographic projection
+               gluOrtho2D(0, w, h, 0)
+
+               // switch back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 9 SnowMen
+               for i = -3 to -1
+                       for j = -3 to -1
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*3+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               // Code to compute frames per second
+               frame++
+
+               time=glutGet(GLUT_ELAPSED_TIME)
+               if time - timebase > 1000 
+                       s = "RingFreeGLUT - FPS: " + (frame*1000.0/(time-timebase))
+                       timebase = time
+                       frame = 0
+               ok
+
+               // Code to display a string (fps) with bitmap fonts
+               setOrthographicProjection()
+
+               glPushMatrix()
+               glLoadIdentity()
+               renderBitmapString(5,30,0,GLUT_BITMAP_HELVETICA_18,s)
+               glPopMatrix()
+
+               restorePerspectiveProjection()
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test - 9 SnowMan")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+
+Screen Shots:
+
+The First screen shot
+
+.. image:: ring15freeglut.png
+       :alt: RingFreeGLUT
+
+
+The Second screen shot
+
+.. image:: ring15freeglut2.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Make a Cube using RingOpenGL and RingFreeGLUT
+
+Make a Cube using RingOpenGL and RingFreeGLUT
+=============================================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // ----------------------------------------------------------
+       // Global Variables
+       // ----------------------------------------------------------
+       rotate_y=0 
+       rotate_x=0
+        
+       // ----------------------------------------------------------
+       // display() Callback function
+       // ----------------------------------------------------------
+       func display
+        
+         //  Clear screen and Z-buffer
+         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
+        
+         // Reset transformations
+         glLoadIdentity()
+        
+         // Rotate when user changes rotate_x and rotate_y
+         glRotatef( rotate_x, 1.0, 0.0, 0.0 )
+         glRotatef( rotate_y, 0.0, 1.0, 0.0 )
+        
+         //Multi-colored side - FRONT
+         glBegin(GL_POLYGON)
+        
+         glColor3f( 1.0, 0.0, 0.0 )     glVertex3f(  0.5, -0.5, -0.5 )      # P1 is red
+         glColor3f( 0.0, 1.0, 0.0 )     glVertex3f(  0.5,  0.5, -0.5 )      # P2 is green
+         glColor3f( 0.0, 0.0, 1.0 )     glVertex3f( -0.5,  0.5, -0.5 )      # P3 is blue
+         glColor3f( 1.0, 0.0, 1.0 )     glVertex3f( -0.5, -0.5, -0.5 )      # P4 is purple
+        
+         glEnd()
+        
+         // White side - BACK
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  1.0, 1.0 )
+         glVertex3f(  0.5, -0.5, 0.5 )
+         glVertex3f(  0.5,  0.5, 0.5 )
+         glVertex3f( -0.5,  0.5, 0.5 )
+         glVertex3f( -0.5, -0.5, 0.5 )
+         glEnd()
+        
+         // Purple side - RIGHT
+         glBegin(GL_POLYGON)
+         glColor3f(  1.0,  0.0,  1.0 )
+         glVertex3f( 0.5, -0.5, -0.5 )
+         glVertex3f( 0.5,  0.5, -0.5 )
+         glVertex3f( 0.5,  0.5,  0.5 )
+         glVertex3f( 0.5, -0.5,  0.5 )
+         glEnd()
+        
+         // Green side - LEFT
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  1.0,  0.0 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         // Blue side - TOP
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  0.0,  1.0 )
+         glVertex3f(  0.5,  0.5,  0.5 )
+         glVertex3f(  0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glEnd()
+        
+         // Red side - BOTTOM
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  0.0,  0.0 )
+         glVertex3f(  0.5, -0.5, -0.5 )
+         glVertex3f(  0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         glFlush()
+         glutSwapBuffers()
+        
+        
+       // ----------------------------------------------------------
+       // specialKeys() Callback Function
+       // ----------------------------------------------------------
+       func specialKeys
+
+               key = glutEventKey()
+        
+         //  Right arrow - increase rotation by 5 degree
+               switch Key
+
+               on GLUT_KEY_RIGHT
+                       rotate_y += 5
+        
+               //  Left arrow - decrease rotation by 5 degree
+               on GLUT_KEY_LEFT
+                       rotate_y -= 5
+        
+               on GLUT_KEY_UP
+                       rotate_x += 5
+        
+               on GLUT_KEY_DOWN
+                       rotate_x -= 5
+        
+               off
+
+         //  Request display update
+         glutPostRedisplay()
+        
+
+        
+       // ----------------------------------------------------------
+       // main() function
+       // ----------------------------------------------------------
+       func main
+        
+         //  Initialize GLUT and process user parameters
+         glutInit()
+        
+         //  Request double buffered true color window with Z-buffer
+         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
+        
+         // Create window
+         glutCreateWindow("Awesome Cube")
+        
+         //  Enable Z-buffer depth test
+         glEnable(GL_DEPTH_TEST)
+        
+         // Callback functions
+         glutDisplayFunc(:display)
+         glutSpecialFunc(:specialKeys)
+        
+         //  Pass control to GLUT for events
+         glutMainLoop()
+        
+         //  Return to OS
+
+
+Screen Shot:
+
+.. image:: ring15opengl.png
+       :alt: RingOpenGL
+
diff --git a/docs/en/source/usingopengl2.txt b/docs/en/source/usingopengl2.txt
new file mode 100644 (file)
index 0000000..d4e3be9
--- /dev/null
@@ -0,0 +1,1114 @@
+.. index:: 
+       single: Using RingOpenGL and RingAllegro for 3D  Graphics; Introduction
+
+=================================================
+Using RingOpenGL and RingAllegro for 3D  Graphics
+=================================================
+
+
+In this chapter we will learn about using RingOpenGL and RingAllegro
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; 3D Cube and Texture
+
+3D Cube and Texture
+===================
+
+Source Code:
+
+.. code-block:: ring
+
+       # Load Libraries
+               load "gamelib.ring"             # RingAllegro Library
+               load "opengl21lib.ring"         # RingOpenGL  Library
+
+       #==============================================================
+       # To Support MacOS X
+               al_run_main()   
+               func al_game_start      # Called by al_run_main()
+                       main()          # Now we call our main function
+       #==============================================================
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Ring Cube"
+
+               bitmap texture
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("ring.bmp")
+                       texture = al_get_opengl_texture(bitmap)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+
+               func drawScene
+
+                       w = 800 h = 600
+                       ratio =  w / h
+
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+
+                       gluPerspective(45,ratio,1,100)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)                                                 
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(0.0,0.0,-5.0)
+
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+
+                       glBindTexture(GL_TEXTURE_2D, texture)
+
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+                       xrot += 0.3
+                       yrot += 0.2
+                       zrot += 0.4
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+Screen Shot:
+
+.. image:: ringcube3d.png
+       :alt: Ring Cube
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; Many Cubes
+
+Many Cubes
+==========
+
+Source Code:
+
+.. code-block:: ring
+
+       # Load Libraries
+               load "gamelib.ring"             # RingAllegro Library
+               load "opengl21lib.ring"         # RingOpenGL  Library
+
+       #==============================================================
+       # To Support MacOS X
+               al_run_main()   
+               func al_game_start      # Called by al_run_main()
+                       main()          # Now we call our main function
+       #==============================================================
+
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Many Cubes"
+
+               bitmap bitmap2 bitmap3
+               texture texture2 texture3
+
+               fps = 120
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               nPerspective = 100
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("sky1.jpg")
+                       texture = al_get_opengl_texture(bitmap)
+
+                       bitmap2 = al_load_bitmap("sky2.jpg")
+                       texture2 = al_get_opengl_texture(bitmap2)
+
+                       bitmap3 = al_load_bitmap("sky3.jpg")
+                       texture3 = al_get_opengl_texture(bitmap3)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_bitmap(bitmap2)
+                       al_destroy_bitmap(bitmap3)
+
+               func drawScene
+
+                       prepare()
+                       cubes()
+                       rotate()
+
+               func Prepare
+                       w = 800 h = 600
+                       ratio =  w / h
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+                       gluPerspective(-nPerspective,ratio,1,nPerspective)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)         
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               func Cubes
+                       cube(5,-3.4,-5,:sky1)
+                       cube(0,-3,-5,:sky1)
+                       cube(-5,-3,-5,:sky1)
+                       cube(5,0.5,-5,:sky2)
+                       cube(0,0.5,-5,:sky2)
+                       cube(-5,0.5,-5,:sky2)
+                       cube(5,4,-5,:sky3)
+                       cube(0,4,-5,:sky3)
+                       cube(-5,4,-5,:sky3)
+
+               func Rotate 
+                       xrot += 0.3 * 5
+                       yrot += 0.2 * 5
+                       zrot += 0.4 * 5
+                       nPerspective += 0.5
+
+
+               func cube(x,y,z,nTexture)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(x,y,z)
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+                       drawcube(nTexture)
+
+               func drawcube(cTexture) 
+
+                       switch cTexture
+                               on :sky1
+                                       glBindTexture(GL_TEXTURE_2D, texture)
+                               on :sky2
+                                       glBindTexture(GL_TEXTURE_2D, texture2)
+                               on :sky3
+                                       glBindTexture(GL_TEXTURE_2D, texture3)
+                       off
+
+
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                        
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+
+Screen Shot:
+
+.. image:: manycubes.png
+       :alt: Many Cubes
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; TicTacToe 3D Game
+
+TicTacToe 3D Game
+=================
+
+
+Source Code:
+
+.. code-block:: ring
+
+
+       # Load Libraries
+               load "gamelib.ring"             # RingAllegro Library
+               load "opengl21lib.ring"         # RingOpenGL  Library
+
+       #==============================================================
+       # To Support MacOS X
+               al_run_main()   
+               func al_game_start      # Called by al_run_main()
+                       main()          # Now we call our main function
+       #==============================================================
+
+       func main
+               new TicTacToe3D {
+                       start()
+               }
+
+       class TicTacToe3D from GameLogic
+
+               FPS = 60
+               TITLE = "TicTacToe 3D"
+
+               oBackground = new GameBackground
+               oGameSound = new GameSound
+               oGameCube = new GameCube
+               oGameOver = new GameOver
+               oGameInterface = new GameInterface 
+
+               func loadresources
+                       oGameOver.loadresources()
+                       oGameSound.loadresources()
+                       oBackGround.loadresources()
+                       oGameCube.loadresources()
+
+               func destroyResources
+                       oGameOver.destroyResources()
+                       oGameSound.destroyResources()
+                       oBackGround.destroyResources()
+                       oGameCube.destroyResources()
+
+               func drawScene
+                       oBackground.update()
+                       oGameInterface.update(self)
+
+               func MouseClickEvent
+                       oGameInterface.MouseClickEvent(self)
+
+       class GameInterface 
+
+               func Update oGame
+                       prepare()
+                       cubes(oGame)
+
+               func Prepare 
+                       w = 1024 h = 768
+                       ratio =  w / h
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+                       gluPerspective(-120,ratio,1,120)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)         
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+               func Cubes oGame
+                       oGame.oGameCube {
+                               aGameMap = oGame.aGameMap 
+                               cube( 5  , -3 , -5  , aGameMap[1][1] )
+                               cube( 0  , -3 , -5  , aGameMap[1][2] )
+                               cube( -5 , -3 , -5  , aGameMap[1][3] )
+                               cube( 5  , 1  , -5  , aGameMap[2][1] )
+                               cube( 0  , 1  , -5  , aGameMap[2][2] )
+                               cube( -5 , 1  , -5  , aGameMap[2][3] )
+                               cube( 5  , 5  , -5  , aGameMap[3][1] )
+                               cube( 0  , 5  , -5  , aGameMap[3][2] )
+                               cube( -5 , 5  , -5  , aGameMap[3][3] )
+                               rotate()
+                       }
+
+               func MouseClickEvent oGame
+                       oGame {
+                               aBtn = Point2Button(Mouse_X,Mouse_Y)
+                               nRow = aBtn[1]
+                               nCol = aBtn[2]
+                               if nRow != 0 and nCol != 0      
+                                       if aGameMap[nRow][nCol] = :n
+                                               aGameMap[nRow][nCol] = cActivePlayer
+                                               ChangeActivePlayer()
+                                               CheckGameOver()
+                                       ok                      
+                               ok
+                       }
+
+       Class GameLogic from GraphicsAppBase
+
+               aGameMap = [
+                       [ :n , :n , :n ] ,
+                       [ :n , :n , :n ] ,
+                       [ :n , :n , :n ]
+               ]
+
+               aGameButtons = [                        # x1,y1,x2,y2
+                       [176,88,375,261],               # [1,1]
+                       [423,88,591,261],               # [1,2]
+                       [645,88,876,261],               # [1,3]
+                       [176,282,375,428],              # [2,1]
+                       [423,282,591,428],              # [2,2]
+                       [645,282,876,428],              # [2,3]
+                       [176,454,375,678],              # [3,1]
+                       [423,454,591,678],              # [3,2]
+                       [645,454,876,678]               # [3,3]
+               ]
+
+               cActivePlayer = :x
+
+               func point2button x,y
+                       nRow = 0
+                       nCol = 0
+                       for t = 1 to len(aGameButtons) 
+                               rect = aGameButtons[t]
+                               if x >= rect[1] and x <= rect[3] and
+                                  y >= rect[2] and y <= rect[4] 
+                                               switch t
+                                                       on 1  nRow = 1  nCol = 1
+                                                       on 2  nRow = 1  nCol = 2
+                                                       on 3  nRow = 1  nCol = 3
+                                                       on 4  nRow = 2  nCol = 1
+                                                       on 5  nRow = 2  nCol = 2
+                                                       on 6  nRow = 2  nCol = 3
+                                                       on 7  nRow = 3  nCol = 1
+                                                       on 8  nRow = 3  nCol = 2
+                                                       on 9  nRow = 3  nCol = 3
+                                               off
+                                               exit 
+                               ok
+                       next 
+                       return [nRow,nCol]
+
+               func ChangeActivePlayer()
+                       if cActivePlayer = :x
+                               cActivePlayer = :o
+                       else 
+                               cActivePlayer = :x
+                       ok
+
+               func CheckGameOver
+                       aList = [
+                               aGameMap[1][1],
+                               aGameMap[1][2],
+                               aGameMap[1][3],
+                               aGameMap[2][1],
+                               aGameMap[2][2],
+                               aGameMap[2][3],
+                               aGameMap[3][1],
+                               aGameMap[3][2],
+                               aGameMap[3][3]
+                       ]
+                       for item in aList 
+                               switch item 
+                                       on :x   item = 1
+                                       on :o   item = 2
+                                       on :n   item = 0
+                               off
+                       next
+                       nStatus = CheckWinner(aList)
+                       if nStatus 
+                               oGameOver {
+                                       Switch nStatus
+                                               on 1 Player1Win(this)  
+                                               on 2 Player2Win(this)  
+                                               on 3 NoOneWin(this)   
+                                       off
+                               }
+                               refreshGame()
+                       ok
+
+               func refreshGame
+                       aGameMap = [
+                               [ :n , :n , :n ] ,
+                               [ :n , :n , :n ] ,
+                               [ :n , :n , :n ]
+                       ]
+                       cActivePlayer = :x
+
+               func CheckWinner lst
+                       //vertical check
+                       for v=1 to 9 step 3
+                               if lst[v]!=0 and lst[v+1]!=0 and lst[v+2]!=0
+                                       if lst[v]=lst[v+1] and lst[v+1]=lst[v+2]
+                                               return lst[v]
+                                       ok
+                               ok
+                       next
+                       //horzintal
+                       for h=1 to 3
+                               if lst[h]!=0 and lst[h+3]!=0 and lst[h+6]!=0
+                                       if lst[h]=lst[h+3] and lst[h+3]=lst[h+6]
+                                               return lst[h]
+                                       ok
+                               ok
+                       next
+                       //Cross
+                       if lst[1]!=0 and lst[5]!=0 and lst[9]!=0
+                               if lst[1]=lst[5] and lst[5]=lst[9] return lst[1] ok
+                       ok
+                       if lst[3]!=0 and lst[5]!=0 and lst[7]!=0
+                               if lst[3]=lst[5] and lst[5]=lst[7] return lst[3] ok
+                       ok
+                       //tie
+                       tie=true
+                       for i=1 to 9
+                               if lst[i]=0 tie=false exit ok
+                       next
+                       if tie=true return 3 ok return 0
+
+
+
+       class GameOver
+
+               font bitmap
+
+               func loadresources
+                       font = al_load_ttf_font("font/pirulen.ttf",54,0 )
+                       bitmap = al_load_bitmap("image/ballon.png")
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_font(font)
+
+               func Player1Win oGame
+                       showMsg(oGame,80,430,"Good job X you won!")
+                       
+               func Player2Win oGame
+                       showMsg(oGame,80,430,"Good job O you won!")
+               
+               func NoOneWin oGame
+                       showMsg(oGame,150,430,"Oh no it's a tie!")
+                       
+               func ShowMsg oGame,x,y,cMsg
+                       oGame {
+                               drawScene()
+                               al_flip_display()
+                               al_rest(0.3)
+                               newdisplay = al_create_display(SCREEN_W,SCREEN_H)
+                               al_set_window_title(newdisplay,TITLE)
+                               al_clear_to_color(al_map_rgb(255,255,255))
+                               al_draw_bitmap(this.bitmap,200,50,1)
+                               al_draw_text(this.font,
+                                        al_map_rgb(0,0,255), x,y,
+                                        ALLEGRO_ALIGN_LEFT,cMsg)
+                               al_flip_display()
+                               al_rest(2)
+                               al_destroy_display(newdisplay)
+                               al_set_target_backbuffer(display)
+                       }
+
+       class GameCube
+
+               bitmap bitmap2 bitmap3 
+               textureX textureO textureN
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+                       bitmap = al_load_bitmap("image/o.png")
+                       textureO = al_get_opengl_texture(bitmap)
+                       bitmap2 = al_load_bitmap("image/x.png")
+                       textureX = al_get_opengl_texture(bitmap2)
+                       bitmap3 = al_load_bitmap("image/empty.png")
+                       textureN = al_get_opengl_texture(bitmap3)
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_bitmap(bitmap2)
+                       al_destroy_bitmap(bitmap3)
+
+               func cube(x,y,z,nTexture)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(x,y,z)
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+                       setCubeTexture(nTexture)
+                       drawCube()
+
+               func setCubeTexture cTexture
+                       switch cTexture
+                               on :x
+                                       glBindTexture(GL_TEXTURE_2D, textureX)
+                               on :o
+                                       glBindTexture(GL_TEXTURE_2D, textureO)
+                               on :n
+                                       glBindTexture(GL_TEXTURE_2D, textureN)
+                       off
+
+               func Rotate 
+                       xrot += 0.3 * 5
+                       yrot += 0.2 * 5
+                       zrot += 0.4 * 5
+
+               func drawcube
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                        
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+
+       class GameBackground 
+
+               nBackX = 0
+               nBackY = 0
+               nBackDiffx = -1
+               nBackDiffy = -1
+               nBackMotion = 1
+               aBackMotionList = [
+                       [ -1, -1 ] ,            # Down - Right
+                       [ 0 , 1  ] ,            # Up
+                       [ -1, -1 ] ,            # Down - Right
+                       [ 0 , 1  ] ,            # Up
+                       [ 1 , -1 ] ,            # Down - Left
+                       [ 0 , 1  ] ,            # Up
+                       [ 1 , -1 ] ,            # Down - Left
+                       [ 0 , 1  ]                      # Up
+               ]
+
+               bitmap
+
+               func Update 
+                       draw()
+                       motion()
+
+               func draw
+                       al_draw_bitmap(bitmap,nBackX,nBackY,1)
+
+               func motion
+                       nBackX += nBackDiffx
+                       nBackY += nBackDiffy
+                       if (nBackY = -350) or (nBackY = 0)
+                               nBackMotion++
+                               if nBackMotion > len(aBackMotionList)
+                                       nBackMotion = 1
+                               ok
+                               nBackDiffx  = aBackMotionList[nBackMotion][1]
+                               nBackDiffy  = aBackMotionList[nBackMotion][2]
+                       ok
+
+               func loadResources
+                       bitmap = al_load_bitmap("image/back.jpg")
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+
+
+       class GameSound
+
+               sample sampleid
+
+               func loadresources
+                       sample = al_load_sample( "sound/music1.wav" )
+                       sampleid = al_new_allegro_sample_id()
+                       al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,sampleid)
+
+               func destroyResources
+                       al_destroy_allegro_sample_id(sampleid)
+                       al_destroy_sample(sample)
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  
+               redraw                  = true
+               FPS                     = 60 
+               SCREEN_W                = 1024
+               SCREEN_H                = 700
+               KEY_UP                  = 1
+               KEY_DOWN                = 2
+               KEY_LEFT                = 3
+               KEY_RIGHT               = 4
+               Key                     = [false,false,false,false]
+               Mouse_X                 = 0
+               Mouse_Y                 = 0
+               TITLE                   = "Graphics Application"
+               PRINT_MOUSE_XY  = False
+
+               func start
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+                       al_init()
+                       al_init_font_addon()
+                       al_init_ttf_addon()
+                       al_init_image_addon()
+                       al_install_audio()
+                       al_init_acodec_addon()
+                       al_reserve_samples(1)
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       CloseEvent()
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                                       if PRINT_MOUSE_XY
+                                               see "x = " + mouse_x + nl
+                                               see "y = " + mouse_y + nl
+                                       ok
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       MouseClickEvent()
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+               func MouseClickEvent
+                       exit                    # Exit from the Events Loop 
+
+               func CloseEvent
+                       exit                    # Exit from the Events Loop 
+
+
+Screen Shot:
+
+.. image:: tictactoe3d.png
+       :width: 450pt
+       :height: 350pt
+       :alt: TicTacToe 3D Game
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; More 3D Samples
+
+More 3D Samples
+===============
+
+You will find the samples in ring/samples/3D folder
+
+The next screen shot for the Top-Down view - Many levels of cubes sample
+
+.. image:: more3dsamples.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera Sample
+
+.. image:: more3dsamples2.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera and background sample
+
+Developer : Azzeddine Remmal
+
+.. image:: cameraandbackground.png
+       :alt: Camera and background
+
+
diff --git a/docs/en/source/usingqdial.png b/docs/en/source/usingqdial.png
new file mode 100644 (file)
index 0000000..e91bca0
Binary files /dev/null and b/docs/en/source/usingqdial.png differ
diff --git a/docs/en/source/variables.txt b/docs/en/source/variables.txt
new file mode 100644 (file)
index 0000000..004b8b1
--- /dev/null
@@ -0,0 +1,110 @@
+.. index:: 
+       single: Variables; Introduction
+
+=========
+Variables
+=========
+
+To create a new variable, you just need to determine the variable name & value.
+The value will determine the variable type and you can change the value to
+switch between the types using the same variable name.
+
+Syntax:
+
+.. code-block:: ring
+       
+       <Variable Name> = <Value>
+
+.. tip:: 
+       
+       The operator '=' is used here as an Assignment operator and the same
+       operator can be used in conditions, but for testing equality of expressions.
+
+.. note:: 
+       
+       The Variable will contains the real value (not a reference).
+       This means that once you change the variable value, the old value will
+       be removed from memory (even if the variable contains a list or object).
+
+
+.. index:: 
+       pair: Variables; Dynamic Typing
+
+Dynamic Typing
+==============
+
+Ring is a dynamic programming language that uses `Dynamic Typing <http://en.wikipedia.org/wiki/Type_system>`_.
+
+.. code-block:: ring
+
+       x = "Hello"             # x is a string
+       see x + nl
+       x = 5                   # x is a number (int)
+       see x + nl
+       x = 1.2                 # x is a number (double)
+       see x + nl
+       x = [1,2,3,4]           # x is a list
+       see x                   # print list items
+       x = date()              # x is a string contains date
+       see x + nl
+       x = time()              # x is a string contains time
+       see x + nl
+       x = true                # x is a number (logical value = 1)
+       see x + nl
+       x = false               # x is a number (logical value = 0)
+       see x + nl
+
+.. index:: 
+       pair: Variables; Deep Copy
+
+Deep Copy
+=========
+
+We can use the assignment operator '=' to copy variables.
+We can do that to copy values like strings & numbers.
+Also, we can copy complete lists & objects.
+The assignment operator will do a complete duplication for us.
+This operation called `Deep Copy <http://en.wikipedia.org/wiki/Object_copy#Deep_copy>`_
+
+
+.. code-block:: ring
+
+       list = [1,2,3,"four","five"]
+       list2 = list
+       list = []
+       See list        # print the first list - no items to print
+       See "********" + nl
+       See list2       # print the second list - contains 5 items
+
+.. index:: 
+       pair: Variables; Weakly Typed
+
+Weakly Typed
+============
+
+Ring is a `weakly typed language <http://en.wikipedia.org/wiki/Strong_and_weak_typing>`_, this means that the language can automatically
+convert between data types (like string & numbers) when that conversion make sense.
+
+Rules:
+
+.. code-block:: ring
+
+       <NUMBER> + <STRING> --> <NUMBER>
+       <STRING> + <NUMBER> --> <STRING>
+
+.. note:: 
+
+       The same operator '+' can be used as an arithmetic operator
+       or for string concatenation.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10                  # x is a number
+       y = "20"                # y is a string
+       sum = x + y             # sum is a number (y will be converted to a number)
+       Msg = "Sum = " + sum    # Msg is a string (sum will be converted to a string)
+       see Msg + nl
+
+
diff --git a/docs/en/source/videomusicplayer.jpg b/docs/en/source/videomusicplayer.jpg
new file mode 100644 (file)
index 0000000..47cf0aa
Binary files /dev/null and b/docs/en/source/videomusicplayer.jpg differ
diff --git a/docs/en/source/visualsrc1.jpg b/docs/en/source/visualsrc1.jpg
new file mode 100644 (file)
index 0000000..33cad2a
Binary files /dev/null and b/docs/en/source/visualsrc1.jpg differ
diff --git a/docs/en/source/visualsrc2.jpg b/docs/en/source/visualsrc2.jpg
new file mode 100644 (file)
index 0000000..26c4484
Binary files /dev/null and b/docs/en/source/visualsrc2.jpg differ
diff --git a/docs/en/source/web.txt b/docs/en/source/web.txt
new file mode 100644 (file)
index 0000000..47b61a8
--- /dev/null
@@ -0,0 +1,2407 @@
+.. index:: 
+       single: Web Development (CGI Library); Introduction
+
+=============================
+Web Development (CGI Library)
+=============================
+
+In this chapter we will learn about developing Web applications using a CGI Library written in the Ring language.
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Configure the Apache web server
+
+Configure the Apache web server
+===============================
+
+We can use Ring with any web server that support CGI. 
+In this section we will learn about using Ring with the Apache HTTP Server.
+
+You can download Apache from : http://httpd.apache.org/
+
+Or you can get it included with other projects like 
+
+XAMPP : https://www.apachefriends.org/download.html
+
+Install then open the file: 
+
+.. code-block:: none
+
+       xampp\apache\conf\httpd.conf
+
+search for 
+
+.. code-block:: none
+
+       <Directory />
+
+Then after it add
+
+.. code-block:: none
+       
+       Options FollowSymLinks +ExecCGI
+
+So we have
+
+.. code-block:: none
+
+       <Directory />
+       Options FollowSymLinks +ExecCGI
+
+Search for the next line and be sure that it's not commented
+
+.. code-block:: none
+
+       LoadModule cgi_module modules/mod_cgi.so
+
+Search for : AddHandler cgi-script
+
+Then add ".ring" to the supported cgi extensions 
+
+Example
+
+.. code-block:: none
+
+       AddHandler cgi-script .cgi .ring
+
+Example
+
+.. code-block:: none
+
+       AddHandler cgi-script .cgi .pl .asp .ring
+
+Run/Start the server 
+
+Create your web applications in a directory supported by the web server.
+
+Example: 
+
+.. code-block:: none
+
+       Apache2.2\htdocs\mywebapplicationfolder
+
+Example: 
+
+.. code-block:: none
+
+       xampp\htdocs\mywebapplicationfolder
+
+Inside the source code file (*.ring), Add this line
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+.. note:: Change the previous line based on the path to ring.exe in your machine
+
+.. index:: 
+       pair: Web Development (CGI Library); Ring CGI Hello World Program
+
+Ring CGI Hello World Program
+============================
+
+The next program is the Hello World program 
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       See "content-type: text/html" +nl+nl+
+           "Hello World!" + nl
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Hello World Program using the Web Library 
+
+Hello World Program using the Web Library 
+=========================================
+
+We can use the web library to write CGI Web applications quickly
+
+Example (1) :
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       Load "weblib.ring"
+
+       Import System.Web
+
+       New Page 
+       {
+               Text("Hello World!")
+       }
+
+
+Example (2) :
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       Load "weblib.ring"
+
+       Import System.Web
+
+       WebPage() 
+       {
+               Text("Hello World!")
+       }
+
+.. tip:: the difference between ex. 1 and ex. 2 is using WebPage() function to
+        return the page object instead of creating the object using new statement.
+
+.. index:: 
+       pair: Web Development (CGI Library); Web Library Features
+
+Web Library Features
+====================
+
+The next features are provided by the Web library to quickly create web applications.
+
+* Generate HTML pages using functions
+* Generate HTML pages using objects
+* HTTP Get
+* HTTP Post
+* Files Upload
+* URL Encode
+* Templates
+* CRUD MVC Sample
+* Users Logic & Registration Sample
+
+.. index:: 
+       pair: Web Development (CGI Library); HTTP Get Example
+
+HTTP Get Example
+================
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page
+       {
+         Title = "Test HTTP Get"
+         divstart([ :style = StyleSizeFull() ] )
+         boxstart()
+               text( "Test HTTP GET" )
+               newline()
+         boxend()  
+         divstart([ :style = Styledivcenter("600px","550px") + 
+                             StyleGradient(21) ])
+         divstart([:style = stylefloatleft() + stylesize("100px","100%") + 
+                            stylecolor("black") + stylegradient(58)])
+         formstart("ex5.ring")
+               tablestart([ :style = stylesize("65%","90%") + 
+                                     stylemarginleft("35%") +
+                                     stylemargintop("30%") ])
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Name : "  )  
+                       cellend() 
+                       cellstart([])
+                         cTextboxStyle = StyleMarginLeft("5%") + 
+                                         StyleWidth("250px") + 
+                                         StyleColor("black") + 
+                                         StyleBackColor("white")
+                         textbox([ :name = "Name", :style = cTextboxStyle ] )   
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Address : " )   
+                       cellend()
+                       cellstart([])
+                         textbox([ :name = "Address", :style = cTextboxStyle] )  
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Phone : " )  
+                       cellend() 
+                       cellstart([])
+                         textbox([ :name = "Phone", :style = cTextboxStyle ]) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Age : "  )    
+                       cellend() 
+                       cellstart([])
+                         textbox([ :name = "Age", :style = cTextboxStyle ]) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "City: " )     
+                       cellend() 
+                       cellstart([])
+                         listbox([ :name = "City", :items = ["Cairo","Riyadh","Jeddah"],
+                                :style = stylemarginleft("5%") + stylewidth("400px") ] )
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Country : " )  
+                       cellend() 
+                       cellstart([])
+                         combobox([ :name = "Country",
+                                :items = ["Egypt","Saudi Arabia","USA"],
+                                :style = stylemarginleft("5%") + 
+                                         stylewidth("400px")+
+                                         stylecolor("black")+
+                                         stylebackcolor("white")+
+                                         stylefontsize("14px") ])
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Note : " )       
+                       cellend() 
+                       cellstart([])
+                         editbox([ :name = "Notes", 
+                               :style = stylemarginleft("5%") + 
+                                        stylesize("400px","100px")+
+                                        stylecolor("black")+
+                                        stylebackcolor("white") , 
+                               :value = "write comments here..." ] ) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                       cellend()
+                       cellstart([])
+                         submit([ :value = "Send" , :Style = stylemarginleft("5%") ])
+                       cellend()
+                 rowend()      
+               tableend()
+         formend()
+         divend()
+         divend()
+         divend()
+       }
+
+Screen Shot:
+
+.. image:: ex4.jpg
+       :alt: HTTP Get
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page
+       {
+        divstart([ :style = styledivcenter("800px","500px") ])
+         boxstart()
+               text ( "HTTP GET Response" )  newline()
+         boxend()
+         divstart([ :style = stylefloatleft()+stylewidth("10%")+
+                             stylecolor("black")+stylegradient(58) ])
+               newline()
+               text ( "Name : "   )
+               newline() newline()
+               text ( "Address : "  )
+               newline() newline()
+               text ( "Phone : "   )
+               newline() newline()
+               text ( "Age : "   )
+               newline() newline()
+               text ( "City : "   )
+               newline() newline()
+               text ( "Country : "   )
+               newline() newline()
+               text ( "Note : "   )
+               newline() newline()
+         divend()
+         divstart([ :style = stylefloatleft()+stylewidth("90%")+
+                             stylecolor("black")+stylegradient(47) ])
+               divstart([ :style = stylefloatleft() + stylewidth("1%") ])
+                 newline()
+               divend()
+               divstart([ :style = stylefloatleft() + stylewidth("95%") ])
+                 newline()
+                 text ( aPageVars["Name"] )
+                 newline() newline()
+                 text ( aPageVars["Address"] )
+                 newline() newline()
+                 text ( aPageVars["Phone"] )
+                 newline() newline()
+                 text (  aPageVars["Age"] )
+                 newline() newline()
+                 text ( aPageVars["City"] )
+                 newline() newline()
+                 text (aPageVars["Country"] )
+                 newline() newline()
+                 text ( aPageVars["Notes"] )
+                 newline() newline()
+               divend()
+         divend()
+        divend()
+       }
+
+Screen Shot:
+
+.. image:: ex5.jpg
+       :alt: HTTP Get
+
+.. index:: 
+       pair: Web Development (CGI Library); HTTP POST Example
+
+HTTP POST Example
+=================
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page 
+       {
+               boxstart()
+                       text( "Post Test")
+                       newline()
+               boxend()
+               divstart([ :style=StyleFloatLeft()+StyleWidth("100px") ])
+                       newline()
+                       text( "Number1 : " )    newline() newline()
+                       text( "Number2 : " )    newline() newline()
+               divend()
+               formpost("ex7.ring")
+                       divstart([ :style = styleFloatLeft()+StyleWidth("200px") ])
+                               newline()
+                               textbox([ :name = "Number1" ])  newline() newline()
+                               textbox([ :name = "Number2" ])  newline() newline()
+                               submit([ :value = "Send" ] )
+                       divend()
+               formend()
+       }               
+
+
+Screen Shot:
+
+.. image:: ex6.jpg
+       :alt: HTTP Post
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page 
+       {
+               boxstart()
+                       text( "Post Result" )
+                       newline()
+               boxend()
+               divstart([ :style = styleFloatLeft()+styleWidth("200px") ])
+                       newline()
+                       text( "Number1 : " + aPageVars["Number1"] )     
+                       newline() newline()
+                       text( "Number2 : " + aPageVars["Number2"] )     
+                       newline() newline()
+                       text( "Sum : " + (0 + aPageVars["Number1"] + aPageVars["Number2"] ) )
+                       newline()
+               divend()                
+       }       
+
+Screen Shot:
+
+.. image:: ex7.jpg
+       :alt: HTTP Post
+
+.. index:: 
+       pair: Web Development (CGI Library); Upload Files
+
+Upload Files
+============
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New page 
+       {
+               boxstart()
+                       text( "Upload File" )
+                       newline()
+               boxend()
+               for x = 1 to 3 newline() next
+               formupload("ex9.ring")          
+                       text( "Customer Name : " )
+                       textbox([ :name = "custname" ])         
+                       newline() newline()             
+                       divstart([ :style = styleFloatLeft() + styleWidth("90px") ])
+                               uploadfile("file")  newline() newline()
+                               uploadfile("file2") newline() newline()
+                               submit([ :value = "Send" ])
+                       divend()                
+               formend()
+       }
+
+Screen Shot:
+
+.. image:: ex8.jpg
+       :alt: Upload File
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       cUploadPath = "C:/Apache2.2/htdocs/ringapp/upload/"
+       cUploadFolder = "/ringapp/upload/"
+
+       New page 
+       {
+               boxstart()
+                       text( "Upload Result" )
+                       newline()
+               boxend()                        
+               newline() 
+               divstart([ :style=  styleFloatLeft() + styleWidth("100px") ])
+                       text( "Name : " + aPageVars["custname"] )
+                       newline()
+               divend()
+               if aPageVars["file"] != char(13)
+                       getuploadedfile(self,"file")
+               ok
+               if aPageVars["file2"] != char(13)
+                       getuploadedfile(self,"file2")
+               ok
+       }       
+
+       Func getuploadedfile oObj,cFile
+               # here we use object.property 
+               # instead of object { } to avoid executing braceend method
+               cFileName = cUploadPath + oObj.getfilename(aPageVars,cFile)
+               write(cFileName,aPageVars[cFile])
+               system("chmod a+x "+cFileName)
+               oObj.newline() 
+               oObj.text( "File "+cFileName+ " Uploaded ..." ) 
+               oObj.newline()
+               imageURL = cUploadFolder + oObj.getfilename(aPageVars,cFile)
+               oObj.link([ :url = imageURL, :title = "Download" ]) 
+               oObj.newline()
+               oObj.image( [ :url = imageURL , :alt = :image  ] )
+               oObj.newline()
+
+Screen Shot:
+
+.. image:: ex9.jpg
+       :alt: Upload File
+
+.. index:: 
+       pair: Web Development (CGI Library); Cookies
+
+Cookies
+=======
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New page 
+       {
+               boxstart()
+                       text( "Cookie Test" )
+                       newline()
+               boxend()
+               newline()
+               link([ :url = "ex11.ring", :title = "Use Cookies" ])    
+               cookie("custname","Mahmoud Fayed")
+               cookie("custage",28)    
+       }
+
+Screen Shot:
+
+.. image:: ex10.jpg
+       :alt: Cookies
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Cookies Values" )
+                       newline()
+               boxend()
+               link([ :url = "ex10.ring", :title = "back" ])                   
+               newline() 
+               divstart([:style="float:left;width:200px"])
+                       text( "Name : " + aPageVars["custname"] )
+                       newline()
+                       text( "Age : " + aPageVars["custage"] )
+                       newline()
+               divend()
+       }       
+
+Screen Shot:
+
+.. image:: ex11.jpg
+       :alt: Cookies
+
+.. index:: 
+       pair: Web Development (CGI Library); URL Encode
+
+URL Encode
+==========
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "URLEncode" )
+                       newline()
+               boxend()
+               link([ :url = "ex5.ring?Name="+URLEncode("-*{Mahmoud}*-")+
+                             "&Address=Egypt&Phone=123456&Age=28&Notes=Programmer", 
+                             :title = "Test URL Encode" ])
+       }
+
+Screen Shot:
+
+.. image:: ex12.jpg
+       :alt: URL Encode
+
+Screen Shot:
+
+.. image:: ex12r.jpg
+       :alt: URL Encode
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Templates
+
+Templates
+=========
+
+Using Templates we can write Ring code inside HTML files
+
+Syntax:
+
+.. code-block:: html
+
+       <%= Ring Expression %>
+       <%  Ring Statements %>
+
+The HTML Code
+
+.. code-block:: html
+
+       <h1>Listing Numbers</h1> 
+       <table>
+         <tr>
+           <th> <%= myheader.cColumn1 %> </th>
+           <th> <%= myheader.cColumn2 %> </th>
+           <th></th>
+           <th></th>
+           <th></th>
+         </tr>
+       <% for x in aNumbers %> 
+         <tr>
+           <td> <%= x.nValue  %> </td>
+           <td> <%= x.nSquare %> </td>
+         </tr>
+       <% next %>
+       </table>
+
+The Ring Code
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New NumbersController { start() }
+
+       Class NumbersController
+
+               MyHeader aNumbers               
+
+               Func Start
+
+                       MyHeader = New Header
+                       {
+                               cColumn1 = "Number" cColumn2 = "Square"
+                       }
+
+                       aNumbers = list(20)
+
+                       for x = 1 to len(aNumbers)
+                               aNumbers[x] = new number
+                               {
+                                       nValue  = x   nSquare = x*x
+                               }
+                       next      
+
+                       cTemp = Template("mynumbers.html",self)
+
+                       New Page 
+                       {                       
+                               boxstart()
+                                       text( "Test Templates" )                        
+                                       newline()
+                               boxend()
+                               html(cTemp)  
+                       } 
+
+       Class Header cColumn1 cColumn2
+       Class Number nValue   nSquare
+
+Screen Shot:
+
+.. image:: ex13.jpg
+       :alt: Templates
+
+.. index:: 
+       pair: Web Development (CGI Library); HTML Special Characters
+
+HTML Special Characters
+=======================
+
+The text() function display HTML special characters.
+
+If you want to write html code, use the html() function.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page
+       {
+               boxstart()
+                       text("HTML Special Characters")
+                       newline()
+               boxend()
+               text('
+                       <html>
+                               <body>
+                                       <p> "hello world" </p>
+                               </body>
+                       </html>
+               ')
+       }
+
+Screen Shot:
+
+.. image:: ex14.jpg
+       :alt: HTML Special Characters
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Hash Functions
+
+Hash Functions
+==============
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Hash Test")
+                       newline()
+               boxend()
+               divstart([ :style = StyleFloatLeft() + StyleWidth("100px") ])
+                       newline()
+                       text( "Value : " )      
+                       newline() newline()
+               divend()
+               formpost("ex16.ring")
+                       divstart([ :style = StyleFloatLeft() + StyleWidth("300px") ])
+                               newline()
+                               textbox([ :name = "Value" ])    
+                               newline() newline()
+                               submit([ :value = "Send" ])
+                       divend()
+               formend()
+       }
+
+Screen Shot:
+
+.. image:: ex15.jpg
+       :alt: Hash Functions
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Hash Result" )
+                       newline()
+               boxend()
+               divstart([ :style = styleFloatLeft() + styleWidth("100%") ])
+                       newline()
+                       text( "Value : "  + aPageVars["Value"] )        
+                       newline()
+                       text( "MD5 : "    + MD5(aPageVars["Value"]) )   
+                       newline()
+                       text( "SHA1 : "   + SHA1(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA256 : " + SHA256(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA224 : " + SHA224(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA384 : " + SHA384(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA512 : " + SHA512(aPageVars["Value"]) )
+                       newline()
+               divend()
+       }       
+
+Screen Shot:
+
+.. image:: ex16.jpg
+       :alt: Hash Functions
+
+.. index:: 
+       pair: Web Development (CGI Library); Random Image
+
+Random Image
+============
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       cUploadPath = "C:/Apache2.2/htdocs/ringapp/upload/"
+
+       New Page 
+       {
+               boxstart()
+                       text( "Random Test")
+                       newline()
+               boxend()        
+               divstart([ :style = styleFloatLeft() + styleWidth("400px") ])
+                       newline()
+                       aList = dir(cUploadPath)
+                       if len(aList) > 0
+                               nIndex = random(len(aList)) 
+                               if nindex = 0 nIndex = 1 ok
+                               cItem = "upload/" + aList[nIndex][1]
+                               newline()
+                               image( [ :url = cItem , :alt = :image  ] )
+                       else
+                               text("No images!") newline()
+                       ok
+               divend()
+       }
+
+Screen Shot:
+
+.. image:: ex17.jpg
+       :alt: Random Image
+
+.. index:: 
+       pair: Web Development (CGI Library); HTML Lists
+
+HTML Lists
+==========
+
+The next example print a list contains numbers from 1 to 10
+
+Then print a list from Ring List.
+
+Finally we have a list of buttons and when we press on a button we get a message
+contains the clicked button number.
+
+To start the list we uses the ulstart() function.
+
+To end the list we uses the ulend() function.
+
+We uses listart() and liend() to determine the list item.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page 
+               {        
+                       ulstart([])
+                               for x = 1 to 10
+                                       listart([])
+                                               text(x)
+                                       liend()
+                               next
+                       ulend()  
+                       list2ul(["one","two","three","four","five"])
+                       ulstart([])
+                               for x = 1 to 10
+                                       listart([])
+                                               cFuncName = "btn"+x+"()"
+                                               button([ :onclick = cFuncName , :value = x])
+                                               script(scriptfuncalert(cFuncName,string(x)))
+                                       liend()
+                               next
+                       ulend()
+               }
+
+Screen Shot:
+
+.. image:: ex18.jpg
+       :alt: HTML Lists
+
+.. index:: 
+       pair: Web Development (CGI Library); HTML Tables
+
+HTML Tables
+===========
+
+In this example we will learn how to generate HTML tables using the
+tablestart(), tableend(), rowstart(), rowend() ,headerstart(), headerend(), cellstart()
+and cellend() functions.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page
+               {
+                       divstart([ :style = styledivcenter("400px","500px") ] )
+                               style(styletable() + styletablerows("t01"))
+                               tablestart([ :id = :t01 , :style = stylewidth("100%") ])
+                                       rowstart([]) 
+                                               headerstart([]) text("Number") headerend()
+                                               headerstart([]) text("square") headerend()
+                                       rowend() 
+                                       for x = 1 to 10
+                                               rowstart([])
+                                                       cellstart([]) text(x)   cellend()
+                                                       cellstart([]) text(x*x) cellend()
+                                               rowend()
+                                       next
+                               tableend()
+                       divend()
+               }
+
+Screen Shot:
+
+.. image:: ex19.jpg
+       :alt: HTML Tables
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Gradient
+
+Gradient
+========
+
+In this example we will learn how to use the StyleGradient() function.
+
+The function takes the style number as input (range from 1 to 60).
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page
+               {
+                       boxstart()
+                               text("StyleGradient() Function")
+                       boxend()                         
+                       for x = 1 to 60                         
+                               divstart([ :id = x , :align = "center" , 
+                                          :style = stylefloatleft() +
+                                                   stylesize(string(100/60*6)+"%","50px") +
+                                                   stylegradient(x) ])
+                                       h3(x)
+                               divend()                                         
+                       next
+               }
+
+Screen Shot:
+
+.. image:: ex20.jpg
+       :alt: Gradient
+
+.. index:: 
+       pair: Web Development (CGI Library); Generating Pages using Objects
+
+Generating Pages using Objects
+==============================
+
+Instead of using functions/methods to generate HTML pages, we can use an object
+for each element in the page.
+
+This choice means more beautiful code but slower.
+
+The fastest method is to print HTML code directly, then using functions then using
+templates then using objects (slower).
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+
+         WebPage() 
+         {
+               Title = "Using objects to create the Web Page content"
+               h1 { text("welcome") }
+               link 
+               { 
+                 Title = "Google" 
+                 Link  = "http://www.google.com"
+               }  
+               div 
+               {
+                 id = "div1"
+                 style = stylegradient(30) + stylesize("50%","50%")
+                 text("Outer Div")
+                 div 
+                 {
+                       id = "div2"
+                       color = "white"
+                       backgroundcolor = "green"
+                       width = "50%"
+                       height = "50%"
+                       marginleft = "5%"
+                       margintop = "5%"
+                       text("Inner Div")
+                 }
+               }
+               div
+               {
+                 id = "div3"
+                 color = "black"
+                 backgroundcolor = "silver"
+                 width = "100%"
+                 height = "100%"
+                 text("Form")
+                 form
+                 {
+                       method = "POST"
+                       Action = "helloworld.ring"
+                       Table
+                       { 
+                         style = stylewidth("100%") + stylegradient(24)      
+                         TR 
+                         { 
+                               TD { WIDTH="10%" text("Name : " )  }
+                               TD { Input { type = "text" } }
+                         }
+                         TR
+                         {
+                               TD { WIDTH="10%" text("Email : " ) }
+                               TD { Input { type = "text" } }
+                         }
+                         TR 
+                         {
+                               TD { WIDTH="10%" text("Password : " ) }
+                               TD { Input { type = "password" } }
+                         }
+                         TR
+                         {
+                         
+                               TD { WIDTH="10%" text("Notes") }
+                               TD { TextArea { width="100%" rows = 10  cols = 10  
+                                               text("type text here...") } }
+                         }
+                         TR
+                         {
+                               TD { WIDTH="10%" text("Gender") }
+                               TD { 
+                                 select
+                                  {
+                                        width = "100%"
+                                        option { text("Male") } 
+                                        option { text("Female") } 
+                                  }
+                               }
+                         }
+                         TR
+                         {
+                               TD {   WIDTH="10%" text("Role") }
+                               TD 
+                               {
+                                 select
+                                 { 
+                                        multiple = "multiple"
+                                        width    = "100%"
+                                        option { text("student") } 
+                                        option { text("admin") } 
+                                  }
+                               }
+                         }
+                       }
+                       Input { type = "submit" value = "send" }
+                       Image { src="upload/profile1.jpg" alt="profile"}
+                       Input { type = "checkbox" value = "Old Member"} text("old member")
+                       Input { type = "range" min=1 max=100}
+                       Input { type = "number" min=1 max=100}
+                       Input { type = "radio" color="black" name="one" 
+                               value = "one"} text("one")
+                 }
+               }
+               div
+               {
+                 color = "white"
+                 backgroundcolor = "blue"
+                 width = "100%"      
+                 UL
+                 {
+                       LI { TEXT("ONE") }
+                       LI { TEXT("TWO") }
+                       LI { TEXT("THREE") }
+                 }
+               }
+               div 
+               {
+                 audio
+                 {
+                       src = "horse.ogg"
+                       type = "audio/ogg"
+                 }
+
+                 video
+                 {
+                        width = 320
+                        height = 240
+                        src = "movie.mp4"
+                        type = "video/mp4" 
+                 }
+
+                 Input
+                 {
+                       type = "color"
+                       value = "#ff0000"
+                       onchange = "clickColor(0, -1, -1, 5)"
+                 }
+               }
+         }
+
+Screen Shot:
+
+.. image:: ex21.jpg
+       :alt: Using Objects
+
+.. image:: ex21_2.jpg
+       :alt: Using Objects - part 2
+
+
+.. index:: 
+       pair: Web Development (CGI Library); HtmlPage Class
+
+HtmlPage Class
+==============
+
+Using this class we can create HTML documents without printing the output to the standard output
+
+So instead of using the WebLib in Web Applications only
+
+We can use it in Console/GUI/Mobile Applications too
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+
+       import System.Web
+
+       func main
+
+               mypage = new HtmlPage {
+                       h1 { text("Customers Report") }
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(4)
+                                 TR
+                                 {
+                                       TD { WIDTH="10%" text("Customers Count : " )  }
+                                       TD { text (100) }
+                                 }
+                       }
+       
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(26)
+                                 TR
+                                 {
+                                       style = stylewidth("100%") + stylegradient(24)
+                                       TD { text("Name " )  }
+                                       TD { text("Age" ) }
+                                       TD { text("Country" ) }
+                                       TD { text("Job" ) }     
+                                       TD { text("Company" ) }
+                                 }
+                                 for x =  1 to 100
+                                       TR
+                                       {
+                                               TD { text("Test" )  }
+                                               TD { text("30" ) }
+                                               TD { text("Egypt" ) }
+                                               TD { text("Sales" ) }   
+                                               TD { text("Future" ) }
+                                       }
+                                 next
+                       }
+
+               }
+
+               write("report.html",mypage.output())
+
+.. index:: 
+       pair: Web Development (CGI Library); Using Bootstrap Library using Functions
+
+Using Bootstrap Library using Functions
+=======================================
+
+The next example uses the Bootstrap JavaScript Library when generating the HTML page.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+         new BootstrapPage {
+               divstart([ :class = "container" ])
+                  divstart([ :class = "jumbotron"  ])
+                       h1("Bootstrap Page")
+                 divend() 
+                 divstart([ :class = :row ])  
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "Using a scripting language is very fun!" ])
+                       divend()
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "using a scripting language is very fun!" ])
+                       divend()
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "using a scripting language is very fun!" ])
+                       divend()
+                 divend()   
+               divend()
+         }
+
+
+Screen Shot:
+
+.. image:: ex22.jpg
+       :alt: Bootstrap
+
+.. index:: 
+       pair: Web Development (CGI Library); Using Bootstrap Library using Objects
+
+Using Bootstrap Library using Objects
+=======================================
+
+The next example uses the Bootstrap JavaScript Library when generating the HTML page.
+
+Instead of using functions to generate the HTML elements, we will use objects.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+         BootStrapWebPage()
+         {
+               div
+               {
+                 classname = :container
+                 div
+                 {
+                       classname = :jumbotron
+                       H1 {   text("Bootstrap Page")   }
+                 }
+                 div
+                 {
+                       classname = :row
+                       for x = 1 to 3
+                         div
+                         {
+                               classname = "col-sm-4"
+                               H3 { html("Welcome to the Ring programming language") }
+                               P  { html("Using a scripting language is very fun!") }
+                         }
+                       next 
+                 }
+                 div
+                 {
+                       classname = :row
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button
+                         {            
+                               classname = "btn btn-info btn-lg"
+                               datatoggle= "modal"
+                               datatarget = "#myModal"
+                               text("Open Large Modal")
+                         }          
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button {  classname = "btn btn-default btn-lg" text("default") }
+                         Button {  classname = "btn btn-primary btn-md" text("primary") }
+                         Button {  classname = "btn btn-sucess btn-sm"  text("sucess") }
+                         Button {  classname = "btn btn-info btn-xs"    text("info") }
+                         Button {  classname = "btn btn-warning"        text("warning") }
+                         Button {  classname = "btn btn-danger"         text("danger") }
+                         Button {  classname = "btn btn-link"           text("link") }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button {  classname = "btn btn-default btn-block" text("default") }
+                         Button {  classname = "btn btn-primary btn-block" text("primary") }
+                         Button {  classname = "btn btn-sucess btn-block"  text("sucess") }
+                         Button {  classname = "btn btn-info btn-block"    text("info") }
+                         Button {  classname = "btn btn-warning btn-block" text("warning") }
+                         Button {  classname = "btn btn-danger btn-block"  text("danger") }
+                         Button {  classname = "btn btn-link btn-block"    text("link") }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { classname = "btn-group" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { classname = "btn-group btn-group-lg" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { 
+                               classname = "btn-group-vertical btn-group-lg" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                 }  
+                 div { classname="modal fade" id="myModal" role="dialog"      
+                       div { classname = "modal-dialog modal-lg"
+                         div { classname="modal-content" 
+                               div { classname="modal-header"
+                                 button {  classname="close" datadismiss="modal"
+                                       html("&times")
+                                 }
+                                 h4 {  classname="modal-title"
+                                       text("Modal Header")
+                                 }
+                               }
+                               div { classname = "modal-body" 
+                                 p { text("This is a large model.") }
+                               }
+                               div { classname="modal-footer"
+                                 button { classname = "btn btn-default" datadismiss="modal"
+                                       text("close")
+                                 }
+                               }
+                         }
+                       }
+                 }
+               }  
+         }
+
+Screen Shot:
+
+.. image:: ex23.jpg
+       :alt: Bootstrap Page using Objects
+
+.. index:: 
+       pair: Web Development (CGI Library); CRUD Example using MVC
+
+CRUD Example using MVC
+======================
+
+The next example uses the weblib.ring & datalib.ring.
+
+The datalib.ring contains classes for creating database applications using MVC pattern.
+
+In this example we create an object from the SalaryController class then call the Routing 
+method.
+
+We define the website variable to contains the basic url of the page.
+
+When we create the SalaryModel class from the ModelBase class, the salary table
+will be opened and the columns data will be defined as attributes in the model class.
+
+The SalaryView class create an object from the SalaryLanguageEnglish class to be used
+for translation.
+
+The method AddFuncScript is used to call the form for adding/modifying record data.
+
+The method FormViewContent is used to determine the controls in the form when we add or
+modify a record.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Import System.Web
+
+       website = "ex24.ring"
+
+       New SalaryController { Routing() }
+
+       Class SalaryModel from ModelBase
+
+       Class SalaryController From ControllerBase
+
+       Class SalaryView From ViewBase
+
+         oLanguage = new SalaryLanguageEnglish
+
+         Func AddFuncScript oPage,oController
+               return   oPage.scriptfuncajax("myadd",oController.cMainURL+
+                        oController.cOperation+"=add","mysubpage")
+
+         Func FormViewContent oController,oTranslation,oPage
+               return [
+                               [ oTranslation.aColumnsTitles[2], "textbox", "name",
+                                 oController.oModel.Name, oPage.stylewidth("100%")    ],
+                               [ oTranslation.aColumnsTitles[3], "textbox", "salary",
+                                 oController.oModel.Salary, oPage.stylewidth("50%") ]
+                          ]
+
+       Class SalaryLanguageEnglish
+         cTitle = "Salary Table"
+         cBack = "back"
+         aColumnsTitles = ["ID","Name","Salary"]
+         cOptions = "Options"
+         cSearch = "Search"
+         comboitems = ["Select Option...","Edit","Delete"]
+         cAddRecord = "Add Record"
+         cEditRecord = "Edit Record"
+         cRecordDeleted = "Record Deleted!"
+         aMovePages = ["First","Prev","Next","Last"]
+         cPage = "Page"
+         cOf = "of"
+         cRecordsCount = "Records Count"
+         cSave = "Save"
+         temp = new page
+         cTextAlign = temp.StyleTextRight()
+         cNoRecords = "No records!"
+
+Screen Shot:
+
+.. image:: ex24.jpg
+       :alt: Salary Table
+       
+.. image:: ex24_2.jpg
+       :alt: Salary Table - Search
+
+.. index:: 
+       pair: Web Development (CGI Library); Users registration and Login
+
+Users registration and Login
+============================
+
+We have the users classes (Model, View & Controller) to deal with the users data
+like username & email.
+
+The next code is stored in ex25_users.ring
+
+.. code-block:: ring
+
+       Class UsersModel from ModelBase
+         cSearchColumn = "username"
+
+       Class UsersController From ControllerBase
+         aColumnsNames = ["id","username","email"]
+
+         Func UpdateRecord
+               oModel.id = aPageVars[cRecID]
+               oModel.updatecolumn("username", aPageVars[:username] )
+               oModel.updatecolumn("email", aPageVars[:email] )
+               oView.UpdateView(self)
+
+       Class UsersView from ViewBase
+
+         oLanguage = new UsersLanguageEnglish
+
+         Func AddFuncScript oPage,oController
+               return   oPage.scriptfunc("myadd",oPage.scriptredirection("ex26.ring"))
+
+         Func FormViewContent oController,oTranslation,oPage
+               return [
+                               [oTranslation.aColumnsTitles[2],"textbox","username",
+                               oController.oModel.UserName,oPage.stylewidth("100%")],
+                               [oTranslation.aColumnsTitles[3],"textbox","email",
+                               oController.oModel.Email,oPage.stylewidth("50%")]
+                          ]
+
+       Class UsersLanguageEnglish
+         cTitle = "Users Table"
+         cBack = "back"
+         aColumnsTitles = ["ID","User Name","Email"]
+         cOptions = "Options"
+         cSearch = "Search"
+         comboitems = ["Select Option...","Edit","Delete"]
+         cAddRecord = "Add Record"
+         cEditRecord = "Edit Record"
+         cRecordDeleted = "Record Deleted!"
+         aMovePages = ["First","Prev","Next","Last"]
+         cPage = "Page"
+         cOf = "of"
+         cRecordsCount = "Records Count"
+         cSave = "Save"
+         temp = new page
+         cTextAlign = temp.StyleTextRight()
+         cNoRecords = "No records!"
+
+In the file ex25.ring we load ex25_users.ring then create an object from UsersController class.
+
+Using the created object, we call the routing method.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+       website = "ex25.ring"
+       New UsersController { Routing() }
+
+Screen Shot:
+
+.. image:: ex25.jpg
+       :alt: Users Table
+       
+See the next code for the registration page
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Import System.Web
+
+       website = "ex26.ring"
+
+       new page {
+         boxstart()
+               text( "Register")
+               newline()
+         boxend()
+         divstart([:style = stylegradient(6) + stylesize("100%","95%") ])
+         link([ :url = website, :title = "back" , :style = stylecolor("white")])   
+         newline()
+         divstart([ :style= styledivcenter("500","160") + stylegradient(52) ])   
+         formpost("ex27.ring")
+               tablestart([ :Style =    stylemarginleft("2%") + stylemargintop("2%") +
+                                        stylewidth("90%") ])
+                 rowstart([])
+                       cellstart([:style = stylewidth("20%") + styleheight(30)])
+                         text("User Name")
+                       cellend()
+                       cellstart([ :style = stylewidth("80%")  ])
+                         textbox([:name = "username", :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :Style = styleheight(30)])
+                         text("Password")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "password" , :type = "password"])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                         text("Email")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "email" , :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                       cellend()
+                       cellstart([ :style = styleheight(30)])
+                         submit([:value = "Register"  ])
+                       cellend()
+                 rowend()
+               tableend()
+         formend()
+         divend()
+         divend()
+       }
+
+Screen Shot:
+
+.. image:: ex26.jpg
+       :alt: Registration Page
+
+
+The Registration response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       if oUser.findwith("username",aPageVars["username"])
+               new page {
+                       text("The user name is already registered")
+               }
+               return
+       ok
+       if oUser.findwith("email",aPageVars["email"])
+               new page {
+                       text("This email is already registered")
+               }
+               return
+       ok
+
+       aPageVars["salt"] = str2hex(RandBytes(32))
+       aPageVars["pwhash"] = sha256(aPagevars["password"]+aPageVars["salt"])
+       aPageVars["sessionid"] = str2hex(randbytes(32))
+       oUser.Insert()
+       new page {
+               cookie("sessionid",aPageVars["sessionid"])
+               text("New User Created!")
+               newline()
+               text("User Name : " + aPageVars["username"])
+               newline()
+       }
+       oUser.Disconnect()
+
+See the next code for the Login page
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+
+       Import System.Web
+
+       website = "ex28.ring"
+
+       new page {
+         boxstart()
+               text( "Login")
+               newline()
+         boxend()
+         divstart([:style = stylegradient(6) + stylesize("100%","95%") ])
+         link([ :url = website, :title = "back" , :style = stylecolor("white")])   
+         newline()
+         divstart([ :style= styledivcenter("500","130") + stylegradient(52) ])   
+         formpost("ex29.ring")
+               tablestart([ :Style =   stylemarginleft("2%") + stylemargintop("2%") +
+                                       stylewidth("90%") ])
+                 rowstart([])
+                       cellstart([:style = stylewidth("20%") + styleheight(30)])
+                         text("User Name")
+                       cellend()
+                       cellstart([ :style = stylewidth("80%") ])
+                         textbox([:name = "username", :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                         text("Password")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "password" , :type = "password"])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30) ])
+                       cellend()
+                       cellstart([])
+                         submit([:value = "Login"  ])
+                       cellend()
+                 rowend()
+               tableend()
+         formend()
+         divend()
+         divend()
+       }
+
+Screen Shot:
+
+.. image:: ex28.jpg
+       :alt: Login Page
+
+
+The response page
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       lResult = oUser.FindWith("username",aPageVars["username"])
+       new page {
+               if lResult
+                       if sha256(aPagevars["password"]+oUser.Salt) = oUser.pwhash
+                               text ("Correct Password!")
+                               aPageVars["sessionid"] = str2hex(randbytes(32))
+                               oUser.UpdateColumn("sessionid",aPageVars["sessionid"])
+                               cookie("sessionid",aPageVars["sessionid"])
+                       else
+                               text ("Bad password!")
+                       ok
+               else
+                       text("Bad User Name!")
+               ok
+       }
+       oUser.Disconnect()
+
+The next code for checking if the user needs to login or not
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       lResult = oUser.FindWith("sessionid",aPageVars["sessionid"])
+       new page {
+               if lResult
+                       text("User Name : " + oUser.username )
+               else
+                       text("Please Login First!")
+               ok                      
+       }
+       oUser.Disconnect()
+
+.. index:: 
+       pair: Web Development (CGI Library); Database, ModelBase & ControllerBase classes
+
+Database, ModelBase & ControllerBase classes
+============================================
+
+In this section we will see some code from datalib.ring
+
+The next code presents the Database, ModelBase & ControllerBase classes
+
+.. code-block:: ring
+
+       Import System.Web
+
+       Class Database
+
+         cServer = "localhost"
+         cUserName = "root"
+         cPassword = "root"
+         cDatabase = "mahdb"
+
+         Func Connect
+
+               con = mysql_init() 
+               mysql_connect(con, cServer, cUserName, cPassWord,cDatabase)
+
+         Func Disconnect
+
+               mysql_close(con)
+
+         Func Query cQuery
+
+               mysql_query(con,cQuery)
+
+         Func QueryResult
+
+               return mysql_result(con)
+
+         Func QueryResultWithColumns
+               # return columns names + query result
+               return mysql_result2(con)
+
+         Func QueryValue
+               aResult = mysql_result(con)
+               if islist(aResult) and len(aResult) >= 1
+                 aResult = aResult[1]
+                 if len(aResult) >= 1
+                       return aResult[1]
+                 ok
+               ok
+               return 0
+
+         Func EscapeString x
+               if isstring(x)
+                 return MySQL_Escape_String(con,x)
+               else
+                 return MySQL_Escape_String(con,string(x))
+               ok
+
+         Private
+               con = NULL
+
+       Class ModelBase from Database
+
+         cTableName = ""
+         cSearchColumn = "name"
+         aColumns = []
+         aQueryResult = []
+         ID = 0
+
+         # set table name from class name
+         classname = lower(classname(self))
+         if right(classname,5) = :model
+               cTablename = left(classname,len(classname)-5)
+         ok
+
+         Func Insert 
+
+               cValues = ""
+               for x in aColumns
+                 cValues += "'" + EscapeString(aPageVars[x]) + "',"
+               Next
+               cValues = left(cValues,len(cValues)-1)  # remove last comma    
+               cColumns = ""
+               for x in aColumns
+                 cColumns += x + ","
+               next
+               cColumns = left(cColumns,len(cColumns)-1)    
+               query("insert into " + cTableName + "("+cColumns+") values (" + 
+                        cValues + ")" )
+
+         Func Update nID
+
+               cStr = ""
+               for x in aColumns
+                 cStr += x + " = '" + EscapeString(aPageVars[x]) + "' , " 
+               # the space after comma is necessary
+               Next
+               cStr = left(cStr,len(cStr)-2)      
+               query("update " + cTableName + " set " + cStr + " where id = " + nID )
+
+         Func UpdateColumn cColumn,cValue
+               query("update " + cTableName + " set " + cColumn + " = '" + 
+               EscapeString(cValue) + "' where id = " + self.ID )
+
+
+         Func Count cValue
+
+               query("SELECT count(*) FROM " + cTableName +
+                        " where "+cSearchColumn+" like '" + EscapeString(cValue) + "%'")
+               return queryValue()
+
+         Func Read nStart,nRecordsPerPage
+
+               query("SELECT * FROM "+ cTableName+" limit " + EscapeString(nStart) + "," +
+               EscapeString(nRecordsPerPage) )
+               aQueryResult = queryResult()
+
+         Func Search cValue,nStart,nRecordsPerPage
+
+               query("SELECT * FROM "+ cTableName+" where "+cSearchColumn+" like '" +
+               EscapeString(cValue) + "%'" +
+                 " limit " + EscapeString(nStart) + "," + EscapeString(nRecordsPerPage) )
+               aQueryResult = queryResult()
+
+         Func Find nID
+
+               query("select * from " + cTableName + " where id = " + EscapeString(nID) )
+               aResult = queryResult()[1]
+               # move the result from the array to the object attributes
+               ID = nID
+               cCode = ""
+               for x = 2 to len(aResult)
+                 cCode += aColumns[x-1] + " = hex2str('" + str2hex(aResult[x]) + "')" + nl
+               next
+               eval(cCode)
+
+         Func FindWith cColumn,cValue
+
+               query("select * from " + cTableName + " where "+cColumn+" = '" + 
+               EscapeString(cValue) + "'" )
+               aResult = queryResult()
+               if len(aResult) > 0
+                 aResult = aResult[1]
+               else
+                 return 0
+               ok
+               # move the result from the array to the object attributes
+               ID = aResult[1]
+               cCode = ""
+               for x = 2 to len(aResult)
+                 cCode += aColumns[x-1] + " = hex2str('" + str2hex(aResult[x]) + "')" + nl
+               next
+               eval(cCode)
+               return 1
+
+         Func Delete ID
+
+               query("delete from " + cTableName + " where id = " + EscapeString(ID) )
+
+         Func Clear
+
+               cCode = ""
+               for x in aColumns
+                 cCode += x + ' = ""' + nl
+               next
+               eval(cCode)
+
+         Func LoadModel
+
+               # create the columns array
+               query("SELECT * FROM "+ cTableName + " limit 0,1")
+               aQueryResult = QueryResultWithColumns()[1]
+               for x = 2 to len(aQueryResult)
+                 aColumns + lower(trim(aQueryResult[x]))
+               next
+
+               # create attribute for each column
+               for x in aColumns
+                 addattribute(self,x)
+               next
+
+         Func Connect
+
+               Super.Connect()
+               if nLoadModel = 0
+                 nLoadModel = 1
+                 LoadModel()
+               ok
+
+         private
+
+               nLoadModel = 0
+
+
+       Class ControllerBase
+         
+         nRecordsPerPage = 5
+         nRecordsCount = 0
+         nPagesCount = 0
+         nActivePage = 0
+
+         # Dynamic creation of oView = new tablenameView and oModel = new tablename.Model
+         classname = lower(classname(self))
+         if right(classname,10)  = :controller
+               tablename = left(classname,len(classname)-10)
+               cCode = "oView = new " + tablename+"View" + nl
+               cCode += "oModel = new " + tablename+"Model" + nl
+               eval(cCode)
+               oModel.connect()
+         ok
+
+         cSearchName = "searchname"
+         cPart = "part"
+         cPageError = "The page number is not correct"
+         cLast = "last"
+         cOperation = "operation"
+         cRecID = "recid"
+
+         aColumnsNames = ["id"]
+         for t in oModel.aColumns
+               aColumnsNames + t
+         next
+
+         cMainURL = website + "?"
+
+         func Routing
+
+               switch      aPageVars[cOperation]
+               on NULL     showtable()
+               on :add     addrecord()
+               on :save    saverecord()
+               on :delete  deleterecord()
+               on :edit    editrecord()
+               on :update  updaterecord()
+               off
+
+         func ShowTable
+
+               nRecordsCount = oModel.Count( aPageVars[cSearchName] )
+
+               nPagesCount = ceil(nRecordsCount / nRecordsPerPage)
+
+               if aPageVars[cPart] = cLast
+                 aPageVars[cPart] = string(nPagesCount)
+               ok
+
+               nActivePage = number(aPageVars[cPart])
+               if nActivePage = 0 nActivePage = 1 ok    
+
+               if ( nActivePage > nPagesCount ) and nRecordsCount > 0
+                 ErrorMsg(cPageError)
+                 return
+               ok
+
+               nStart = (nActivePage-1)*nRecordsPerPage
+
+               if aPageVars[cSearchName] = NULL
+                 oModel.Read( nStart,nRecordsPerPage )
+               else
+                 oModel.Search( aPageVars[cSearchName],nStart,nRecordsPerPage )
+               ok
+
+               oView.GridView(self)
+
+         func AddRecord
+
+               oModel.clear()
+               oView.FormViewAdd(Self,:save,false) # false mean don't include record id
+
+         func SaveRecord
+
+               oModel.Insert()
+               oView.SaveView(self)
+
+         func EditRecord
+
+               oModel.Find( aPageVars[cRecID] )
+               oView.FormViewEdit(Self,:update,true) # true mean include record id
+
+         func UpdateRecord
+
+               oModel.update( aPageVars[cRecID] )
+               oView.UpdateView(self)
+
+         func DeleteRecord
+
+               oModel.Delete( aPageVars[cRecID] )
+               oView.DeleteView()
+
+         func braceend
+
+               oModel.Disconnect()
+
+.. index:: 
+       pair: Web Development (CGI Library); WebLib API
+
+WebLib API
+==========
+
+In this section we will see the web library functions, classes and methods.
+
+=====================  =============   =====================================================================
+Function               Parameters      Description
+=====================  =============   =====================================================================
+LoadVars               None            Save the request parameters and cookies to aPageVars List
+WebPage                        None            Create new object from the WebPage Class
+BootStrapWebPage       None            Create new object from the BootStrapWebPage Class
+HTMLSpecialChars       cString         Encode Special characters to HTML equivalent
+Template               cFile,oObject   Execute Ring Code in cFile after accessing oObject using {}
+Alert                  cMessage        Generate HTML Web Page that display cMessage using JavaScript Alert()
+HTML2PDF               cString         Generate and Display PDF File from HTML String (cString)
+=====================  =============   =====================================================================
+
+The Package System.Web contains the next classes
+
+=====================  ========================================================        
+       Class Name      Description
+=====================  ========================================================        
+Application            Contains methods for Encoding, Decoding, Cookies & More.
+Page                   Contains methods to generate HTML pages.
+ScriptFunctions                Contains methods to generate some JavaScript Functions.
+StyleFunctions         Contains methods to generate CSS.
+PageBuffer             Generate HTML Page in memory (don't print the output).
+HTML2PDF               Generate PDF File from HTML code.
+BootStrapPage          Using BootStrap Library.
+WebPage                        Generate page using objects for each element.
+HtmlPage               Like WebPage but doesn't print the output to stdout.
+BootStrapWebPage       Generate page using objects, using BootStrap Library.
+ObjsBase               Parent Class for page objects.
+NewObjectsFunctions    Methods to create new objects in the page or element.
+H1                     Wraps HTML H1.
+H2                     Wraps HTML H2.
+H3                     Wraps HTML H3.
+H4                     Wraps HTML H4.  
+H5                     Wraps HTML H5.
+H6                     Wraps HTML H6.  
+P                      Wraps HTML P.
+Link                   Wraps HTML link.
+NewLine                        Wraps HTML NewLine.
+Div                    Wraps HTML Div.
+Form                   Wraps HTML Form.
+Input                  Wraps HTML Input.       
+TextArea               Wraps HTML TextArea.
+Select                 Wraps HTML Select.
+Option                 Wraps HTML Option.
+Image                  Wraps HTML Image.
+UL                     Wraps HTML UL.
+LI                     Wraps HTML LI.
+Table                  Wraps HTML Table.
+TR                     Wraps HTML TR.
+TD                     Wraps HTML TD.
+TH                     Wraps HTML TH.
+Audio                  Wraps HTML Audio.
+Video                  Wraps HTML Video.
+Nav                    Wraps HTML Nav.
+Span                   Wraps HTML Span.
+Button                 Wraps HTML Button.
+=====================  ========================================================        
+
+.. index:: 
+       pair: Web Development (CGI Library); Application Class
+
+Application Class
+=================
+
+=====================  ======================================= =====================================================================
+Method                 Parameters                              Description
+=====================  ======================================= =====================================================================
+DecodeString           cString                                 Decode request parameters
+Decode                 cString                                 Decode multipart/form-data
+GetFileName            aArray,cVar                             Get File Name in aArray using cVar 
+SetCookie              name,value,expires,path,domain,secure   Set Cookie 
+Cookie                         name,value                              Set Cookie using name and value only
+GetCookies             None                                    Get Cookies
+URLEncode              cString                                 URL Encode 
+ScriptLibs             None                                    Add JavaScript Libraries like BootStrap
+Print                  None                                    Print Page Content
+Style                  cStyle                                  Add cStyle to page CSS content
+StartHTML              None                                    Add HTTP Header to page content         
+=====================  ======================================= =====================================================================
+
+The method DecodeString is used to get HTTP request parameters.
+
+The methods Decode and GetFileName are used for uploading files.
+
+The methods SetCookie, Cookie & GetCookies are used for adding and reading cookies.
+
+The methods StartHTML, ScriptsLibs, Style & Print are used for page structure and JS/CSS support.
+
+The method URLEncode is used to encode a URL to be used in HTML pages.
+
+.. index:: 
+       pair: Web Development (CGI Library); Page Class
+
+Page Class
+==========
+
+=====================  ======================================= =====================================================================
+Method                 Parameters                              Description
+=====================  ======================================= =====================================================================
+text                   x                                       add HTMLSpecialChars(x) to page content (accept strings and numbers)
+html                   cString                                 add html code to page content
+h1                     x                                       add x to page content between <h1> and </h1>
+h2                     x                                       add x to page content between <h2> and </h2>
+h3                     x                                       add x to page content between <h3> and </h3>
+h4                     x                                       add x to page content between <h4> and </h4>
+h5                     x                                       add x to page content between <h5> and </h5>
+h6                     x                                       add x to page content between <h6> and </h6>
+p                      aPara                                   HTML <p> </p>, uses aPara List as Hash to get attributes
+NewLine                        None                                    add <br /> to page content
+AddAttributes          aPara                                   Convert aPara list as hash to HTML element attributes
+Link                   aPara                                   HTML <a href> and </a>, uses aPara List as Hash to get attributes
+Image                  aPara                                   HTML <img>, uses aPara List as Hash to get attributes
+Button                 aPara                                   HTML <input type="button">, uses aPara List as Hash to get attributes
+ButtonLink             aPara                                   HTML <input type="button">, uses link attribute to navigate to link 
+Textbox                        aPara                                   HTML <input type="text">, uses aPara List as Hash to get attributes
+Editbox                        aPara                                   HTML <textarea> and </textarea>, uses aPara to get attributes
+Combobox               aPara                                   HTML <select>, uses items attribute as list for <option>
+Listbox                        aPara                                   HTML <select multiple='multiple'>, uses items attribute for <option>
+ulstart                        aPara                                   HTML <ul>
+ulend                  aPara                                   HTML </ul>
+listart                        aPara                                   HTML <li>
+liend                  aPara                                   HTML </li>
+List2UL                aList                                   Generate HTML <ul> including items from Ring List items
+DivStart               aPara                                   HTML <div>, uses aPara List as Hash to get attributes
+NavStart               aPara                                   HTML <nav>, uses aPara List as Hash to get attributes
+SpanStart              aPara                                   HTML <span>, uses aPara List as Hash to get attributes
+BoxStart               None                                    Generate Div with black background to be used as page header
+DivEnd                 None                                    HTML </div>
+NavEnd                 None                                    HTML </nav>
+SpanEnd                        None                                    HTML </span>
+BoxEnd                 None                                    HTML </div>, the same as divend()
+FormStart              cAction                                 HTML <form>, with cAction as the action attribute or an empty value
+FormPost               cAction                                 HTML <form method="post"> , with cAction as the action attribute
+FormEnd                        None                                    HTML </form>
+Submit                 aPara                                   HTML <input type="submit">
+Hidden                         cName,cValue                            HTML <input type="hidden">
+FormUpload             x                                       HTML Form, method="post" enctype="multipart/form-data" and x = action                           
+UploadFile             x                                       HTML <input type="file"> and name = x
+Video                  aPara                                   HTML <video>
+Audio                  aPara                                   HTML <audio>
+GetColor               aPara                                   Select Color
+Radio                  aPara                                   HTML <input type="radio">
+Checkbox               aPara                                   HTML <input type="checkbox">
+Spinner                        aPara                                   HTML <input type="number">
+Slider                         aPara                                   HTML <input type="range">
+TableStart             aPara                                   HTML <table>
+TableEnd               None                                    HTML </table>
+RowStart               aPara                                   HTML <tr>
+RowEnd                 None                                    HTML </tr>
+CellStart              aPara                                   HTML <td>
+CellEnd                        None                                    HTML </td>
+HeaderStart            aPara                                   HTML <th>
+HeaderEnd              None                                    HTML </th>
+=====================  ======================================= =====================================================================
+
+aPara in the page methods is a list contains attributes and values.
+Using aPara we can set values for the next attributes
+
+.. code-block:: ring 
+
+       classname id name align style dir value onclick oncontextmenu ondblclick
+       onmousedown onmouseenter onmouseleave onmousemove onmouseover onmouseout
+       onmouseup onkeydown onkeypress onkeyup onabort onbeforeunload onerror
+       onhashchange onload onpageshow onpagehide onresize onscroll onunload
+       onblur onchange onfocus onfocusin onfocusout oninput oninvalid onreset
+       onsearch onselect onsubmit ondrag ondragend ondragenter ondragleave
+       ondragover ondragstart ondrop oncopy oncut onpaste onafterprint 
+       onbeforeprint oncanplay oncanplaythrough ondurationchange onemptied
+       onended onloadeddata onloadedmetadata onloadstart onpause onplay
+       onplaying onprogress onratechange onseeked onseeking onstalled onsuspend
+       ontimeupdate onvolumechange onwaiting animationend animationiteration
+       animationstart transitionend onmessage onopen onmousewheel ononline
+       onoffline onpostate onshow onstorage ontoggle onwheel ontouchcancel
+       ontouchend ontouchmove ontouchstart color opacity background backgroundattachment
+       backgroundcolor backgroundimage backgroundposition backgroundrepeat backgroundclip
+       backgroundorigin backgroundsize border borderbottom borderbottomcolor 
+       borderbottomleftradius borderbottomrightradius borderbottomstyle borderbottomwidth 
+       bordercolor borderimage borderimageoutset borderimagerepeat borderimageslice 
+       borderimagesource borderimagewidth borderleft borderleftcolor borderleftstyle
+       borderleftwidth borderradius borderright  borderrightcolor borderrightstyle
+       borderrightwidth borderstyle bordertop bordertopcolor bordertopleftradius
+       bordertoprightradius bordertopstyle bordertopwidth borderwidth boxdecorationbreak
+       boxshadow bottom clear clip display float height left margin marginbottom marginleft
+       marginright margintop maxheight maxwidth minheight minwidth overflow overflowx
+       overflowy padding paddingbottom paddingleft paddingright paddingtop position
+       right top visibility width verticalalign zindex aligncontent alignitems alignself
+       flex flexbasis flexdirection flexflow flexgrow flexshrink flexwrap justifycontent
+       order hangingpunctuation hyphens letterspacing linebreak lineheight overflowwrap
+       tabsize textalign textalignlast textcombineupright textindent textjustify
+       texttransform whitespace wordbreak wordspacing wordwrap textdecoration 
+       textdecorationcolor textdecorationline textdecorationstyle textshadow 
+       textunderlineposition @fontface @fontfeaturevalues font fontfamily fontfeaturesettings
+       fontkerning fontlanguageoverride fontsize fontsizeadjust fontstretch fontstyle
+       fontsynthesis fontvariant fontvariantalternates fontvariantcaps fontvarianteastasian
+       fontvariantligatures fontvariantnumeric fontvariantposition fontweight direction
+       textorientation unicodebidi writingmode bordercollapse borderspacing captionside
+       emptycells tablelayout counterincrement counterreset liststyle liststyleimage
+       liststyleposition liststyletype @keyframes animation animationdelay animationdirection
+       animationduration animationfillmode animationiterationcount animationname
+       animationplaystate animationtimingfunction backfacevisibility perspective
+       perspectiveorigin transform transformorigin transformstyle transition
+       transitionproperty transitionduration transitiontimingfunction transitiondelay
+       boxsizing content cursor imemode navdown navindex navleft navright navup
+       outline outlinecolor outlineoffset outlinestyle outlinewidth resize textoverflow
+       breakafter breakbefore breakinside columncount columnfill columngap columnrule
+       columnrulecolor columnrulestyle columnrulewidth columnspan columnwidth columns
+       widows orphans pagebreakafter pagebreakbefore pagebreakinside marks quotes
+       filter imageorientation imagerendering imageresolution objectfit objectposition
+       mask masktype mark markafter markbefore phonemes rest restafter restbefore
+       voicebalance voiceduration voicepitch voicepitchrange voicerate voicestress
+       voicevolume marqueedirection marqueeplaycount marqueespeed marqueestyle datatoggle
+       dataride datatarget dataslideto dataslide datadismiss dataplacement datacontent
+       datatrigger dataspy dataoffset dataoffsettop
+
+.. index:: 
+       pair: Web Development (CGI Library); ScriptFunctions Class
+
+ScriptFunctions Class
+=====================
+
+This class contains methods for adding JavaScript code to the generated web page.
+
+The class methods are merged to the Page class, so we can use the next methods with
+page objects directly.
+
+==================     ==============================================          ============================================================
+Method                 Parameters                                              Description
+==================     ==============================================          ============================================================
+Script                 cCode                                                   Add cCode string between <script> and </script>
+ScriptRedirection      cURL                                                    set window.location to cURL
+ScriptFunc             cFuncName,cCode                                         Define function cFuncName that contains cCode
+ScriptFuncAlert                cFuncName,cMsg                                          Define function cFuncName that uses alert() to print cMsg
+ScriptFuncAjax         cFuncName,cLink,cDiv                                    Define function cFuncName that load cLink in cDiv
+ScriptFuncClean                cFuncName,cDiv                                          Define function cFuncName that clear the cDiv
+ScriptFuncSelect       cF,aL,cD,cR,cGR,cFC,nTO,cL1,cL2                         Used to Edit/Delete Grid Record
+ScriptScrollFixed      cDiv,nSize                                              Set cDiv as Fixed Div with Size = nSize
+==================     ==============================================          ============================================================
+
+.. index:: 
+       pair: Web Development (CGI Library); StyleFunctions Class
+
+StyleFunctions Class
+====================
+
+This class contains methods for adding CSS to the generated web page.
+
+Like ScriptFunctions Class, The StyleFunctions class methods are merged to the 
+Page class, so we can use the next methods with page objects directly.
+
+=====================  ====================    =====================================================
+Method                 Parameters              Description
+=====================  ====================    =====================================================
+StyleFloatLeft         None                    Return float: left ; 
+StyleFloatRight                None                    Return float: right ; 
+StyleSizeFull          None                    Return width: 100% ; height: 100% ;
+Stylecolor             x                       Return " color: " + x + " ; "
+Stylebackcolor         x                       Return " background-color: " + x + " ;"
+StyleTextCenter                None                    Return "text-align: center ;"
+StyleTextRight         None                    Return "text-align: right ;"
+StyleTextLeft          None                    Return "text-align: left ;"
+StyleSize              x,y                     Return " width: " + x + " ; height: " + y + " ;"
+StyleWidth             x                       Return " width: " + x + " ;"
+StyleHeight            x                       Return " height: " + x + " ;"
+StyleTop               x                       Return " top: " + x + " ;"
+StyleLeft              x                       Return " Left: " + x + " ;"
+StylePos               x,y                     Return " top: " + x + " ;" + " Left: " + y + " ;"
+StyleHorizontalCenter  None                    Return " margin-right:auto ; margin-left:auto; "
+StyleMarginTop         x                       Return " margin-top: " + x + " ;"
+StyleMarginRight       x                       Return " margin-right: " + x + " ;"
+StyleMarginLeft                x                       Return " margin-left: " + x + " ;"
+StyleDivCenter         nWidth,nHeight          Create Div in the center of the page
+StyleAbsolute          None                    Return " position:absolute ;"
+StyleFixed             None                    Return " position:fixed ;"
+StyleZIndex            x                       Return " z-index: " + x + " ;"
+StyleFontSize          x                       Return  " font-size: " + x + " ;"
+StyleGradient          x                       Generate Gradient (x values from 1 to 60)
+StyleTable             None                    Set table properties
+StyleTableRows         id                      Set different color to even and odd rows in the table
+StyleTableNoBorder     None                    Return " border-style: none;"
+=====================  ====================    =====================================================
+
+
+.. index:: 
+       pair: Web Development (CGI Library); WebPage Class
+
+WebPage Class
+=============
+
+We use braces to access the active WebPage object attributes 
+
+Each one of these attribute will return a new object to access again using braces.
+
+=====================  ========================================================        
+       Attribute       Description
+=====================  ========================================================        
+H1                     Wraps HTML H1.
+H2                     Wraps HTML H2.
+H3                     Wraps HTML H3.
+H4                     Wraps HTML H4.  
+H5                     Wraps HTML H5.
+H6                     Wraps HTML H6.  
+P                      Wraps HTML P.
+Link                   Wraps HTML link.
+NewLine                        Wraps HTML NewLine.
+Div                    Wraps HTML Div.
+Form                   Wraps HTML Form.
+Input                  Wraps HTML Input.       
+TextArea               Wraps HTML TextArea.
+Select                 Wraps HTML Select.
+Option                 Wraps HTML Option.
+Image                  Wraps HTML Image.
+UL                     Wraps HTML UL.
+LI                     Wraps HTML LI.
+Table                  Wraps HTML Table.
+TR                     Wraps HTML TR.
+TD                     Wraps HTML TD.
+TH                     Wraps HTML TH.
+Audio                  Wraps HTML Audio.
+Video                  Wraps HTML Video.
+Nav                    Wraps HTML Nav.
+Span                   Wraps HTML Span.
+Button                 Wraps HTML Button.
+=====================  ========================================================
+
+.. index:: 
+       pair: Web Development (CGI Library); HtmlPage Class
+
+HtmlPage Class
+==============
+
+The same as the WebPage class with the next changes
+
+(1) No output to the stdout 
+(2) Provide the Output Method to get the output
+
+Syntax:
+
+.. code-block:: ring
+
+       output() ---> The output as string
+
diff --git a/docs/en/source/weighthistory_app.png b/docs/en/source/weighthistory_app.png
new file mode 100644 (file)
index 0000000..f705925
Binary files /dev/null and b/docs/en/source/weighthistory_app.png differ
diff --git a/docs/en/source/whatisnew.txt b/docs/en/source/whatisnew.txt
new file mode 100644 (file)
index 0000000..0b90c96
--- /dev/null
@@ -0,0 +1,601 @@
+.. index:: 
+       single: What is new in Ring 1.1?; Introduction
+
+========================
+What is new in Ring 1.1?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.1 release.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.1  comes with many new features 
+
+* Better Natural Language Programming Support
+* Generate/Execute Ring Object Files (*.ringo)
+* Syntax Flexibility and different styles for I/O and Control Structures
+* New Functions and Changes
+* StdLib functions and classes written in Ring
+* RingLibSDL 
+* Demo Project - Game Engine for 2D Games
+* RingSQLite
+* Better Code Generator for Extensions 
+* Using Self.Attribute in the Class Region to define new attributes
+* Using This.Attribute in nested Braces inside the Class Methods
+* Better Documentation
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Better Natural Language Programming Support
+
+Better Natural Language Programming Support
+===========================================
+
+Ring is an innovative language because of it's compact syntax, smart implementation (small, transparent & visual)
+and it's ability to create declarative and natural domain specific languages in a fraction of time.
+
+This release add support for calling methods when an expression is evaluated
+
+check this example:
+
+.. code-block:: ring
+
+       # Natural Code
+       new program {
+               Accept 2 numbers then print the sum
+       }
+
+       # Natural Code Implementation
+       class program
+               # Keywords
+                       Accept=0 numbers=0 then=0 print=0 the=0 sum=0
+
+               # Execution
+               func braceexpreval x
+                       value = x
+               func getnumbers
+                       for x=1 to value
+                               see "Enter Number ("+x+") :" give nNumber
+                               aNumbers + nNumber
+                       next
+               func getsum
+                       nSUm = 0
+                       for x in aNumbers nSum+= x next
+                       see "The Sum : " + nSum
+               private
+                       value=0 aNumbers=[]
+               
+Output: 
+
+.. code-block:: ring
+
+       Enter Number (1) :3
+       Enter Number (2) :4
+       The Sum : 7
+
+for more information see the "Natural Language Programming" chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Generate/Execute Ring Object Files (*.ringo)
+
+Generate/Execute Ring Object Files (*.ringo)
+============================================
+
+This feature enable you to distribute your applications without distributing
+the source code. Also it makes application distribution a simple process where
+you get one Ring object file for the complete project (many source code files).
+Also using Ring object file remove the loading time required for compiling the application.
+
+Check the "command line options" chapter to know more about this feature.
+
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Syntax Flexibility
+
+Syntax Flexibility and different styles for I/O and Control Structures
+======================================================================
+
+Programmers are sensitive to the programming language syntax. Great programmers know how to work
+using many different styles but each programmer may have his/her favorite style.
+
+Each programming language comes with a style that you may like or not. Ring is just one of these
+languages, but as a response to many programmers asking for a better syntax we decided to provide
+more options.
+
+Also some of these features are very necessary for Natural Language Programming.
+
+Example : 
+
+We have two commands to change language keywords and operators.
+
+.. code-block:: ring
+
+       ChangeRingOperator + plus 
+       ChangeRingKeyword see print
+
+       Print 5 plus 5  
+
+       ChangeRingOperator plus +
+       ChangeRingKeyword print see
+
+We have new styles (Optional) for Input/Output.
+
+Example :
+
+.. code-block:: ring
+
+       Put "What is your name? "
+       Get cName
+       Put "Hello " + cName
+
+Example : 
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Print("What is your name? ")    # print message on screen
+       cName=GetString()               # get input from the user
+       print("Hello #{cName}")         # say hello!
+
+We have new styles (optional) for control structures.
+
+Example :
+
+.. code-block:: ring
+
+       While True
+
+               Put " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Get nOption
+
+               Switch nOption
+               Case 1 
+                       Put "Enter your name : " 
+                       Get name 
+                       Put "Hello " + name + nl
+               Case 2 
+                       Put "Sample : using while loop" + nl
+               Case 3 
+                       Bye
+               Else 
+                       Put "bad option..." + nl
+               End
+       End
+
+Example :
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       While True {
+
+               print(" 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                         ")
+
+               nOption = GetString()
+
+               switch nOption {
+               case 1 
+                       print("Enter your name : ")
+                       name = getstring()
+                       print("Hello #{name}\n")
+               case 2 
+                       print("Sample : using switch statement\n")
+               case 3 
+                       Bye
+               else 
+                       print("bad option...\n")
+               }
+
+       }
+
+Check the next chapters:-
+
+* Getting Started - Second Style
+* Getting Started - Third Style
+* Control Structures - Second Style - May looks like Lua and Ruby
+* Control Structures - Third Style - May looks like C (uses braces)
+* Syntax Flexibility
+
+.. note:: All of these styles are provided automatically by the compiler at the same time, It's better to select one style for the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; New Functions and Changes
+New Functions and Changes
+=========================
+
+Changed:
+
+* get() function : changed to sysget()
+* sort() function : can now work on list of objects
+* find() function : can now work on list of objects
+
+Added:
+
+* clockspersecond()
+* CurrentDir()
+* ExeFileName()
+* ChDir()
+* ExeFolder()
+* varptr()
+* space()
+* nullpointer()
+* object2pointer()
+* pointer2object()
+
+Check the next chapters 
+
+* System Functions
+* Object Oriented Programming (OOP) 
+* Low Level Functions
+
+.. index:: 
+       pair: What is new in Ring 1.1?; StdLib functions and classes written in Ring
+
+StdLib functions and classes written in Ring
+============================================
+
+Ring 1.1 comes with a library called StdLib, it's written in Ring by the help of Ring Team
+
+The library provide a useful group of new functions and classes
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Times()")
+       Times ( 3 , func { see "Hello, World!" + nl } )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Map()")
+       See Map( 1:10, func x { return x*x } )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Filter()")
+       See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       See "Testing the String Class" + nl
+       oString = new string("Hello, World!")
+       oString.println()
+       oString.upper().println()
+       oString.lower().println()
+       oString.left(5).println()
+       oString.right(6).println()
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oList = new list ( [1,2,3] )
+       oList.Add(4)
+       oList.print()
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oStack = new Stack
+       oStack.push(1)
+       oStack.push(2)
+       oStack.push(3)
+       see oStack.pop() + nl
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oQueue = new Queue
+       oQueue.add(1)
+       oQueue.add(2)
+       oQueue.add(3)
+       see oQueue.remove() + nl
+
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ohashtable = new hashtable
+       See "Test the hashtable Class Methods" + nl
+       ohashtable { 
+               Add("Egypt","Cairo")
+               Add("KSA","Riyadh")
+               see self["Egypt"] + nl
+               see self["KSA"] + nl
+               see contains("Egypt") + nl
+               see contains("USA") + nl
+               see index("KSA")  + NL
+               print()
+               delete(index("KSA"))
+               see copy("*",60) + nl
+               print()
+       }
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       otree = new tree
+       See "Test the tree Class Methods" + nl
+       otree {
+               set("The first step")   # set the root node value
+               see value() + nl
+               Add("one")
+               Add("two")
+               Add("three") {
+                       Add("3.1")
+                       Add("3.2")
+                       Add("3.3")
+                       see children
+               }
+               see children
+               oTree.children[2] {
+                       Add("2.1") Add("2.2") Add("2.3") {
+                               Add("2.3.1") Add("2.3.2") Add("test")
+                       }
+               }
+               oTree.children[2].children[3].children[3].set("2.3.3")
+       }
+       see copy("*",60) + nl
+       oTree.print()
+
+Check the next chapters:
+
+* StdLib Functions
+* StdLib Classes
+
+.. index:: 
+       pair: What is new in Ring 1.1?; RingLibSDL 
+
+RingLibSDL 
+==========
+
+Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library
+
+Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       SDL_Delay(2000)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+
+See the RingLibSDL Chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Game Engine for 2D Games
+
+Demo Project - Game Engine for 2D Games
+=======================================
+
+In practice we would create a game engine in a language like C/C++ to get the best performance 
+then provide Ring classes to use the engine.
+
+But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases
+
+Also this would be a good demo project to learn about the language concepts where we build things
+using Object Oriented Programming (OOP) then access the power that we have using declarative programming
+using nested structures or using natural programming.
+
+In this project we selected the first way (declarative programming using nested structures)
+
+Example:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # Color = black 
+                       }
+                       text {
+                               x = 10  y=150
+                               # Animation Part ======================================
+                               animate = true                          # Use Animation
+                               direction = GE_DIRECTION_INCVERTICAL    # Increase y
+                               point = 400             # Continue until y=400
+                               nStep = 3               # Each time y+= 3
+                               #======================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)    # Color = Blue  
+                       }
+                       Sound {                                 # Play Sound
+                               file = "sound/music1.wav"       # Sound File Name
+                       }               
+               }                                       # Start the Events Loop 
+
+See the "Demo Project - Game Engine for 2D Games" chapter.
+
+
+.. index:: 
+       pair: What is new in Ring 1.1?; RingSQLite
+
+RingSQLite
+==========
+
+Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL.
+
+Now Ring 1.1 provide native support for SQLite database too.
+
+Example:
+
+.. code-block:: ring
+
+       oSQLite = sqlite_init()
+
+       sqlite_open(oSQLite,"mytest.db") 
+
+       sql = "CREATE TABLE COMPANY("  +
+                "ID INT PRIMARY KEY     NOT NULL," +
+                "NAME           TEXT    NOT NULL," +
+                "AGE            INT     NOT NULL," +
+                "ADDRESS        CHAR(50)," +
+                "SALARY         REAL );"
+
+       sqlite_execute(oSQLite,sql) 
+
+       sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+       sqlite_execute(oSQLite,sql)
+
+       aResult =  sqlite_execute(oSQLite,"select * from COMPANY") 
+       for x in aResult
+               for t in x
+                       see t[2] + nl
+               next
+       next
+       see copy("*",50)  + nl
+       for x in aResult
+               see x["name"] + nl
+       next
+       sqlite_close(oSQLite) 
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Better Code Generator for Extensions 
+
+
+Better Code Generator for Extensions 
+====================================
+
+We are using the code generator (written in Ring) every day to add new libraries to Ring.
+
+The generator is used to create RingQt and RingAllegro 
+
+Also in Ring 1.1 it's used to create RingLibSDL.
+
+more features are added like 
+
+* Set/Get structure members (numbers & pointers)
+* Using constants 
+* Better Generated Code
+
+See the Code Generator chapter.
+
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Using Self.Attribute in the Class Region to define new attributes
+
+
+Using Self.Attribute in the Class Region to define new attributes
+=================================================================
+
+We can use Self.Attribute in the Class Region (after the class name and before any methods)
+to define new attributes.
+
+
+.. code-block:: ring
+
+       class Person
+               name            # Define name as attribute if it's not a global variable
+               address
+               phone
+
+       class person2
+               self.name       # Must Define the attribute
+               self.address
+               self.phone
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Using This.Attribute in nested Braces inside the Class Methods
+
+
+Using This.Attribute in nested Braces inside the Class Methods
+==============================================================
+
+We can use nested braces {} while we are inside methods to access another objects, In this case 
+the current object scope will be changed while we are inside the brace and Self will point to the object
+that we access using braces {}. In this case we can use This.Attribute and This.Method() to access the object
+that will be created from the current class.
+
+Check the Object Oriented Programming chapter for more information.
+
+Also Check the Weight History Application in GUI Development using RingQt chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Better Documentation
+
+Better Documentation
+====================
+
+Ring 1.1 documentation (800 pages) is better than Ring 1.0 documentation (340 pages)
+
+Many chapters are added for providing better information about the language like
+
+* Language Reference
+* Scope Rules
+* FAQ
+
+And more!
+
diff --git a/docs/en/source/whatisnew10.txt b/docs/en/source/whatisnew10.txt
new file mode 100644 (file)
index 0000000..9aee2ec
--- /dev/null
@@ -0,0 +1,211 @@
+.. index:: 
+       single: What is new in Ring 1.10?; Introduction
+
+=========================
+What is new in Ring 1.10?
+=========================
+
+In this chapter we will learn about the changes and new features in Ring 1.10 release.
+
+.. index:: 
+       pair: What is new in Ring 1.10?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.10 comes with the next features!
+
+* Chess Game
+* Minesweeper Game
+* Knight Tour Game
+* Game of Life Game
+* Pong Game
+* Snakes and Ladder Game
+* More Games
+* Ring Extension for Visual Studio Code
+* The Ring Package Manager (RingPM)
+* Better Tests
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Chess Game
+
+Chess Game
+==========
+
+Chess Game (2 Players)
+
+.. image:: chessgame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Chess Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Minesweeper Game
+
+Minesweeper Game
+================
+
+The objective of the game is to clear a rectangular board containing hidden "mines" or bombs without detonating any of them.
+
+.. image:: minesweeper.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Minesweeper Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Knight Tour Game
+
+Knight Tour Game
+================
+
+Move to every square on the chess board, using only the moves of a knight.
+
+Can you visit every square in just 63 moves? 
+
+.. image:: knighttour.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Knight Tour Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Game of Life Game
+
+Game of Life Game
+=================
+
+The game is a zero-player game, meaning that its evolution is determined by its initial state, 
+requiring no further input. 
+
+One interacts with the Game of Life by creating an initial configuration and observing how it evolves, 
+or, for advanced players, by creating patterns with particular properties.
+
+.. image:: gameoflife.jpg
+       :width: 400pt
+       :height: 300pt
+       :alt: Game of Life Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Pong Game
+
+Pong Game
+=========
+
+Simple "tennis like" game features two paddles and a ball.
+
+The goal is to defeat your opponent once the opponent misses a ball.
+
+.. image:: ponggame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Pong Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Snakes And Ladder Game
+
+Snakes And Ladder Game
+======================
+
+The Snakes and Ladder Game using Ring Game Engine for 2D Games
+
+.. image:: snakesgame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Snakes Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; More Games
+
+More Games
+==========
+
+The next games are added to the application folder
+
+* Lights Out Game
+* Dots and Boxes Game
+* Magic Four Game
+* Sum Puzzle Game
+
+The next screen shot for the Sum Puzzle Game
+
+.. image:: sumpuzzle.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Sum Puzzle Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Ring Extension for Visual Studio Code
+
+Ring Extension for Visual Studio Code
+=====================================
+
+This extension support the Ring programming language in Visual Studio Code
+
+.. image:: ringinvscode.png
+       :width: 500pt
+       :height: 300pt
+       :alt: Ring in Visual Studio Code
+
+.. index:: 
+       pair: What is new in Ring 1.10?; The Ring Package Manager (RingPM)
+
+The Ring Package Manager (RingPM)
+=================================
+
+Ring comes with a package manager (RingPM) that we can use to install, update and remove packages.
+
+The Package Manager uses Semantic Versioning to check compatibility between packages 
+
+The Package Manager comes with the next options
+
+.. code-block:: none
+
+       ===========================================================================
+       Usage   : ringpm [command]
+       Command : search  [keywords...]
+       Command : refresh : Update the Registry (Packages List)
+       Command : install [ <packagename> [from <UserName>] [branch <branchname>] ]
+       Command : list    [-u : Check updates]
+       Command : run     [packagename]
+       Command : update  <packagename>
+       Command : remove  <packagename>
+       Command : format  : Delete All Packages
+       Command : new     <packagename>
+       Command : package : Create package in the current folder
+       ===========================================================================
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Better Tests
+
+Better Tests
+============
+
+New framework for Ring programming language tests that test the language.
+
+.. image:: tests_shot.png
+       :width: 500pt
+       :height: 300pt
+       :alt: Tests
+
+
+.. index:: 
+       pair: What is new in Ring 1.10?; More Improvements
+
+More Improvements
+=================
+
+(1)  Ring Compiler : Better support for (Operator Operator) to avoid checking the first operator when it's a literal.
+(2)  Ring Compiler : When we load a file that doesn't exist, display the caller file name in the error message.
+(3)  Ring Compiler : Support source code files with one line of comment without end of line.
+(4)  Ring Compiler : change nNoAssignment attribute in Parser Structure to nNewObject.
+(5)  Ring VM : Better support for the (Return) command inside braces that access new objects.
+(6)  Ring VM : Dir() Function - Don't add "." and ".." to the output
+(7)  Ring VM : Dir() Function - Correct output for the item type (file|directory) on Linux and macOS.
+(8)  Ring VM : ICO_LISTSTART - Clean pVM->aSetProperty when setting an object attribute.
+(9)  Ring VM : ICO_NEWOBJECT - Clean pVM->aSetProperty when setting an object attribute.
+(10) Ring VM : Better code for Setter and Getter methods support.
+(11) Ring2EXE: The libraries information are stored in separated files in ring/ring2exe/libs folder.
+(12) WebLib  : Separate the library to many source code files.
+(13) StdLib  : IsVowel() function - Better Code.
+(14) RingQt  : Count(), Left(), Mid() and Right() methods are added to QString class.
+(15) Better Read Me File 
diff --git a/docs/en/source/whatisnew11.txt b/docs/en/source/whatisnew11.txt
new file mode 100644 (file)
index 0000000..aa54591
--- /dev/null
@@ -0,0 +1,488 @@
+.. index:: 
+       single: What is new in Ring 1.11?; Introduction
+
+=========================
+What is new in Ring 1.11?
+=========================
+
+In this chapter we will learn about the changes and new features in Ring 1.11 release.
+
+.. index:: 
+       pair: What is new in Ring 1.11?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.11 comes with the next features!
+
+* More 3D Samples 
+* Checkers Game
+* Sokoban Game
+* Maze Game
+* Snake Game
+* Sudoku Game
+* Desktop Screen Shot Application
+* Text To Speech Application
+* RingRayLib Extension
+* ZeroLib Library
+* StdLib - More Functions
+* Better RingQt
+* Better Performance
+* Better Documentation
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.11?; More 3D Samples
+
+More 3D Samples
+===============
+
+Ring 1.11 comes with more 3D samples based on Qt3D 
+
+* Folder : ring/samples/other/UsingQt3D (Contains 18 samples)
+
+.. image:: qt3dex18.png
+       :alt: Qt3D Example 18
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Checkers Game
+
+Checkers Game
+=============
+
+It plays the - Must Jump - version of Checkers, The International Rules 
+
+It handles various invalid moves, invalid jumps, and must jumps. 
+
+The squares are colored to reflect errors.
+
+The Sqaures are colored to show source and destination of the move or jump.
+
+.. image:: checkersgame.png
+       :alt: Checkers Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Sokoban Game
+
+Sokoban Game
+============
+
+A quick implementation for the Sokoban Game
+
+Developed using Ring Game Engine for 2D Games in 2 hours (Less than 300 lines of code)
+
+.. image:: sokoban.jpg
+       :alt: Sokoban Game
+
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Maze Game
+
+Maze Game
+=========
+
+A quick implementation for the Maze Game
+
+Developed using Ring Game Engine for 2D Games (Around 100 lines of code)
+
+Also the game comes with a level designer (Developed in 10 minutes, 37 Lines of code)
+
+.. image:: maze.png
+       :alt: Maze Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Snake Game
+
+Snake Game
+==========
+
+A quick implementation for the Snake Game
+
+Developed using Ring Game Engine for 2D Games (Around 200 lines of code)
+
+.. image:: snake.png
+       :alt: Snake Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Sudoku Game
+
+Sudoku Game
+===========
+
+Fill a 9 x 9 grid with digits so that each column, each row, and each of the nine 3 x 3 subgrids that
+compose the grid contain all of the digits from 1 to 9.
+
+.. image:: sudoku.jpg
+       :alt: Sudoku Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Desktop Screen Shot Application
+
+Desktop Screen Shot Application
+===============================
+
+.. image:: dssapp.png
+       :alt: Desktop Screen Shot Application
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Text To Speech Application 
+
+Text To Speech Application
+==========================
+
+.. image:: ttsapp.png
+       :alt: Text To Speech Application
+
+
+.. index:: 
+       pair: What is new in Ring 1.11?; RingRayLib Extension
+
+RingRayLib Extension
+====================
+
+Ring 1.11 comes with new extension to support the RayLib game programming library
+
+Example:
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth     = 800
+       screenHeight    = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+               ClearBackground(RED)
+               DrawText("Congrats! You created your first window!", 190, 200, 20, WHITE)
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Output:
+
+.. image:: raylib_ex1.png
+       :alt: RayLib Example
+
+Example:
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY)
+               DrawCircle(screenWidth/4, 120, 35, DARKBLUE)
+               DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED)
+               DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE)  
+               DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD)
+
+               DrawTriangle(Vector2(screenWidth/4*3, 80),
+                                Vector2(screenWidth/4*3 - 60, 150),
+                                Vector2(screenWidth/4*3 + 60, 150), VIOLET)
+
+               DrawPoly(Vector2(screenWidth/4*3, 320), 6, 80, 0, BROWN)
+
+               DrawCircleGradient(screenWidth/4, 220, 60, GREEN, SKYBLUE)
+
+               DrawLine(18, 42, screenWidth - 18, 42, BLACK)
+               DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE)
+               DrawTriangleLines(Vector2(screenWidth/4*3, 160),
+                                 Vector2(screenWidth/4*3 - 20, 230),
+                                 Vector2(screenWidth/4*3 + 20, 230), DARKBLUE)
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Output:
+
+.. image:: ex1_basicshapes.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: What is new in Ring 1.11?; ZeroLib Library
+
+ZeroLib Library
+===============
+
+Ring 1.11 comes with the ZeroLib library that contains classes for Lists and Strings where the index starts from 0.
+
+Example:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using List - Index start from 0"
+       List = Z( [1,2,3] )
+       List.Add(4)
+       List.Add(5)
+       ? List[0]
+       ? List[1]
+       ? List[2]
+       ? List[3]
+       ? List[4]
+       nIndex = List.find(2)
+       ? "Find(2) = " + nIndex
+       List.delete(0)
+       ? "After deleting the first item : List[0]" 
+       ? "Now List[0] = " + List[0] 
+
+       ? "Using String - Index start from 0"
+       String = Z( "Welcome" )
+       ? String[0]
+       ? String[1]
+       ? String[2]
+       ? String[3]
+       ? String[4]
+       ? String[5]
+       ? String[6]
+
+Output:
+
+.. code-block:: ring 
+
+       Using List - Index start from 0
+       1
+       2
+       3
+       4
+       5
+       Find(2) = 1
+       After deleting the first item : List[0]
+       Now List[0] = 2
+       Using String - Index start from 0
+       W
+       e
+       l
+       c
+       o
+       m
+       e
+
+       
+.. index:: 
+       pair: What is new in Ring 1.11?; StdLib - More Functions
+
+StdLib - More Functions
+=======================
+
+The next functions are added to the StdLib
+
+* IsListContainsItems(aParent,aChild)
+* IsBetween(nNumber,nMin,nMax)
+* TimeInfo(cInformation)
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? "Using the IsListContainsItems() function" 
+       aList1 = "a":"z"
+       aList2 = [:h,:l,:p,:u]
+       ? IsListContainsItems(aList1,aList2)
+       ? "Using the IsBetween() function"
+       ? isBetween(1,3,4)
+       ? isBetween(4,1,6)
+       ? "Using the TimeInfo() function"
+       ? timeInfo(:date)
+       ? timeInfo(:year)
+       ? timeInfo(:time)
+       ? timeInfo(:hour_12)
+
+Output:
+
+.. code-block:: ring
+
+       Using the IsListContainsItems() function
+       1
+       Using the IsBetween() function
+       0
+       1
+       Using the TimeInfo() function
+       05/24/19
+       2019
+       15:30:33
+       03
+
+For more information about these functions, see the StdLib functions chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Better RingQt 
+
+Better RingQt
+=============
+
+* Building RingQt using Qt 5.12.3
+
+* RingQt for Android - project file is updated to include webview module when we have it
+
+* QString Class - New Methods
+
+       * compare()
+       * contains()
+       * indexOf()
+       * insert()
+       * isRightToLeft()
+       * remove()
+       * repeated()
+       * replace()
+       * startsWith()
+       * endsWith()
+       * toHtmlEscaped()
+       * clear()
+       * isnull()
+       * resize()
+       * fill()
+
+* QAxBase & QVariant - Better API 
+
+* The next classes are added to RingQt 
+
+       * QQuickView Class
+       * QPrintDialog Class
+       * QAxWidget2 Class
+       * QTextToSpeech Class 
+       * QGraphicsView Class
+       * QAbstractAspect Class
+       * QNode Class
+       * QEntity Class
+       * QTransform Class
+       * QAspectEngine Class
+       * QTorusMesh Class
+       * QConeMesh Class
+       * QCylinderMesh Class
+       * QCuboidMesh Class
+       * QPlaneMesh Class
+       * QSphereMesh Class
+       * QPhongMaterial Class
+       * QForwardRenderer Class
+       * Qt3DWindow Class
+       * QAbstractCameraController Class
+       * QFirstPersonCameraController Class
+       * QTextureMaterial Class
+       * QExtrudedTextMesh Class
+       * QText2DEntity Class
+       * QSkyBoxEntity Class
+       * QConeGeometry Class
+       * QOrbitCameraController Class
+       * QDiffuseSpecularMaterial Class
+       * QGoochMaterial Class
+       * QMetalroughMaterial Class
+       * MorphPhongMaterial Class
+       * QPervertexColorMaterial Class
+       * QInputAspect Class
+       * QFrameAction Class
+       * QLogicAspect Class
+       * QCamera Class
+       * QCameraLens Class
+       * QMesh Class
+       * QTechnique Class
+       * QMaterial Class
+       * QEffect Class
+       * QRenderPass Class
+       * QSceneLoader Class
+       * QPointLight Class
+       * QRenderAspect Class
+       * QTextureLoader Class
+       * QObjectPicker Class
+       * QCameraSelector Class
+       * QCullFace Class
+       * QDepthTest Class
+       * QViewPort Class
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Better Performance
+
+Better Performance
+==================
+
+Ring 1.11 is faster than Ring 1.10
+
+The performance gain is between 10% and 30% based on the application.
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Better Documentation
+
+Better Documentation
+====================
+
+The next chapters are added to the documentation
+
+* Tutorial : Ring Extensions in C/C++
+* Using Qt3D 
+* Using ZeroLib 
+* Using RingRayLib
+
+.. index:: 
+       pair: What is new in Ring 1.11?; More Improvements
+
+More Improvements
+=================
+
+* New Samples 
+       * samples/other/ModuloTimesTableCircle folder
+       * samples/other/saveimage folder
+       * samples/other/UsingQML folder
+       * samples/other/myguicontrol.ring 
+       * samples/other/qcalendarwidget.ring
+       * samples/other/qcalendarwidget2.ring
+       * samples/other/sudoku-KL02.ring
+       * samples/other/sudoku-KL02-longproblem.ring
+       * samples/other/zerobasedlist.ring
+       * ringlibs/gameengine/lesson17.ring (Using Buttons)
+       * samples/other/SQLTutorial/SQL-Tutorial.ring
+       * samples/other/DrawFourier/AA-Draw-Fourier.ring
+       * samples/other/SmartPhoneEmulator/ejemploKey.ring
+       * samples/other/DiscreteFourierTransform/DiscreteFourierTransform.ring
+       * samples/other/phonedatabase/PhoneDatabase.ring
+* Gold Magic 800 - More levels (44 Levels)
+* Fifteen Puzzle Game 3D - Better Code (Animation Speed)
+* Flappy Bird 3000 - change the Bird direction to be looking down when we have game over
+* Ring Notepad - Keyboard shortcuts for the Dockable Windows Mode
+* Ring Notepad - When displaying functions list, don't avoid functions that contains the "_" character
+* Ring Notepad - Output Window - Send Data - Better Code
+* Ring Notepad - Find and Replace Window - Better Code
+* Ring Notepad - Edit Menu - Insert Text Window
+* Ring Notepad - Edit Menu - Lower Case and Upper Case options
+* Ring Notepad - Edit Menu - Capitalize option
+* Ring Notepad - Edit Menu - Comment Lines and Comment Block of lines
+* Ring Notepad - File Tabs - Context Menu (Close other files, Close Active file and Close All files)
+* RingPM - When updating a package - don't reinstall the dependency again
+* Ring Game Engine for 2D Games - Added : GE_FULLSCREEN, GE_SCREEN_W and GE_SCREEN_H
+* Ring Game Engine for 2D Games - Added : name property to game objects
+* Ring Game Engine for 2D Games - Added : find() method to game class (find an object by name)
+* Ring Game Engine for 2D Games - Support oGame[:ObjectName] to access an object
+* Natural Library - Better Performance
+* FoxRing - Added: frCTOD() function
+* Code generator for extensions - generate functions that use managed pointers to new structures
+* Ring VM - Error codes for Ring Object File errors
+* Ring VM - Eval() function - Better Code (Better Performance)
+* Ring VM - State Management - Better Code
+* Ring VM - the ">" operator and operator overloading - Better Code
+* Ring VM - Assignment and calling object methods - Better Code
+* Ring VM - OOP - Getter Methods - Better Performance
+* Ring API - Supporting RING_API_ISLIST() in C Extensions
+* Ring Compiler - Supporting new lines after numbers and literals when writing conditions
+* Ring Compiler - Supporting semi-colon (;) in the start of the line
+* Ring Compiler - Prevent using Loop and Exit commands from outside loops 
diff --git a/docs/en/source/whatisnew12.txt b/docs/en/source/whatisnew12.txt
new file mode 100644 (file)
index 0000000..5432611
--- /dev/null
@@ -0,0 +1,330 @@
+.. index:: 
+       single: What is new in Ring 1.12?; Introduction
+
+=========================
+What is new in Ring 1.12?
+=========================
+
+In this chapter we will learn about the changes and new features in Ring 1.12 release.
+
+.. index:: 
+       pair: What is new in Ring 1.12?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.12 comes with the next features!
+
+* Go Game
+* ASCII Table application
+* BMI Calculator application
+* Calendar application
+* Julian Day Calendar application
+* Tutorial: Number to Words
+* Load Again Command
+* ring_state_filetokens() function
+* Embedded Ring Object File 
+* Better RingRayLib
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Go Game
+
+Go Game
+=======
+
+An implementation for the Go Game
+
+.. image:: go.png
+       :alt: Go Game
+
+.. index:: 
+       pair: What is new in Ring 1.12?; ASCII Table application
+
+ASCII Table application
+=======================
+
+Simple application for displaying the ASCII table 
+
+.. image:: asciitable.png
+       :alt: ASCII Table
+
+.. index:: 
+       pair: What is new in Ring 1.12?; BMI Calculator application
+
+BMI Calculator application
+==========================
+
+Simple application for calculating the BMI 
+
+.. image:: BMI.png
+       :alt: BMI
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Calendar application
+
+Calendar application
+====================
+
+The Calendar for Year 2020
+
+.. image:: calendar.png
+       :alt: calendar
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Julian Day Calendar application
+
+Julian Day Calendar application
+===============================
+
+The Julian Day Calendar application
+
+.. image:: juliancalendar.png
+       :alt: juliandaycalendar
+
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Tutorial: Number to Words
+
+Tutorial: Number to Words
+=========================
+
+Folder : ring/samples/other/number2words
+
+.. image:: number2words.png
+       :alt: Number2Words
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Load Again Command
+
+Load Again Command
+==================
+
+Ring 1.12 comes with the Load Again command
+
+Using this command we can load the Ring source file which contains constants more than one time.
+
+This is useful when using Ring source files for translations through global constants.
+
+Example:
+
+The next function is part from a project which support Arabic and English languages
+
+The files english.ring and arabic.ring contains constants for translation
+
+One of these files is loaded in the start of the program
+
+Loading the same file again using the (Load) command is not possible
+
+Because the (Load) command load the same source file only for the first time and ignore next times.
+
+So we have to use the (Load Again) command.
+
+Where we can use these files again during the runtime as in the next code
+
+.. code-block:: ring
+
+       func setLang nLanguage
+               if C_ENV_DEFAULT_LANG = nLanguage
+                       return
+               ok
+               C_ENV_DEFAULT_LANG = nLanguage
+               # Change the language
+                       switch nLanguage 
+                               on C_TRANSLATION_ENGLISH
+                                       load again "translation/english.ring"
+                               on C_TRANSLATION_ARABIC 
+                                       load again "translation/arabic.ring"
+                       off
+
+.. index:: 
+       pair: What is new in Ring 1.12?; ring_state_filetokens() function
+
+ring_state_filetokens() function
+================================
+
+Using the ring_state_filetokens() function we can get all the tokens in the ring source code file.
+
+.. code-block:: ring
+
+       C_FILENAME      = "test_tokens.ring"
+       C_WIDTH         = 12
+
+       # write the file
+               write(C_FILENAME,'
+                               see "Hello, World!"
+                               ? 3*2+3
+                               Name = "Ring"
+                               ? Name
+       ')
+
+       # Token Type
+               C_KEYWORD       = 0
+               C_OPERATOR      = 1
+               C_LITERAL       = 2
+               C_NUMBER        = 3
+               C_IDENTIFIER    = 4
+               C_ENDLINE       = 5
+
+       # Keywords List
+       aKEYWORDS = ["IF","TO","OR","AND","NOT","FOR","NEW","FUNC", 
+       "FROM","NEXT","LOAD","ELSE","SEE","WHILE","OK","CLASS","RETURN","BUT", 
+       "END","GIVE","BYE","EXIT","TRY","CATCH","DONE","SWITCH","ON","OTHER","OFF", 
+       "IN","LOOP","PACKAGE","IMPORT","PRIVATE","STEP","DO","AGAIN","CALL","ELSEIF", 
+       "PUT","GET","CASE","DEF","ENDFUNC","ENDCLASS","ENDPACKAGE", 
+       "CHANGERINGKEYWORD","CHANGERINGOPERATOR","LOADSYNTAX"]
+
+       pState = ring_state_new()
+       aList = ring_state_filetokens(pState,C_FILENAME)
+       PrintTokens(aList)
+       ring_state_delete(pState)
+
+       func PrintTokens aList
+               for aToken in aList
+                       switch aToken[1]
+                       on C_KEYWORD 
+                               ? Width("Keyword",C_WIDTH) + ": "  + aKeywords[0+aToken[2]]
+                       on C_OPERATOR 
+                               ? Width("Operator",C_WIDTH)  + ": " + aToken[2]
+                       on C_LITERAL 
+                               ? Width("Literal",C_WIDTH)  + ": " + aToken[2]
+                       on C_NUMBER 
+                               ? Width("Number",C_WIDTH)  + ": " + aToken[2]
+                       on C_IDENTIFIER 
+                               ? Width("Identifier",C_WIDTH)  + ": " + aToken[2]
+                       on C_ENDLINE 
+                               ? "EndLine"
+                       other
+                               
+                       off
+               next
+
+       func Width cText,nWidth
+               return cText+copy(" ",nWidth-len(cText))
+
+Output:
+
+.. code-block:: none
+
+       EndLine
+       Keyword     : SEE
+       Literal     : Hello, World!
+       EndLine
+       Operator    : ?
+       Number      : 3
+       Operator    : *
+       Number      : 2
+       Operator    : +
+       Number      : 3
+       EndLine
+       Identifier  : name
+       Operator    : =
+       Literal     : Ring
+       EndLine
+       Operator    : ?
+       Identifier  : name
+       EndLine
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Generate Embedded Object File
+
+Generate Embedded Ring Object File
+==================================
+
+We can generate embedded object file (C source code) from the source code file (*.ring) 
+using -geo option
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -geo
+
+This command will generate at least three files
+
+.. code-block:: ring
+
+       test.c
+       ringappcode.c
+       ringappcode.h
+
+More files could be generated based on the project size
+
+The generated files will pass the byte code to Ring VM to be executed
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Better RingRayLib
+
+Better RingRayLib
+=================
+
+More Samples are added to RingRayLib
+
+       * Sound Loading Playing 
+       * Texture Source 
+       * Music Playing Streaming 
+       * Rectangle scaling 
+       * Colors Palette
+       * Following Eyes
+       * Collision Area
+       * Bezier Lines
+       * Images Generation
+       * Fiften Puzzle Game
+       * Cubic Map
+
+Screen Shot:
+       
+.. image:: raylib_cubicmap.png
+       :alt: RayLib Example    
+
+.. index:: 
+       pair: What is new in Ring 1.12?; More Improvements
+
+More Improvements
+=================
+
+* New Samples 
+       * ring/samples/other/Hex2UTF8.ring
+       * ring/samples/other/CalmoSoftPrimesTable.ring
+       * ring/samples/other/CalmoSoftTicTacToeGame.ring
+       * ring/samples/other/CalmoSoftSimpleGoGame.ring
+       * ring/samples/other/arabicmysql.ring 
+       * ring/samples/other/CalmoSoftExtraCube.ring
+       * ring/samples/other/DynamicCode/anonfunc.ring
+       * ring/samples/other/DynamicCode/deletethisfile.ring
+       * ring/samples/other/DynamicCode/modifythisfile.ring
+       * ring/samples/other/changesyntax/ArabicDemo.ring
+       * ring/samples/other/changesyntax/EnglishDemo.ring
+       * ring/samples/other/changesyntax/ChangeKeywordsArabic.ring
+       * ring/samples/other/changesyntax/ChangeKeywordsEnglish.ring
+       * ring/samples/other/changesyntax/pascal.ring
+       * ring/samples/other/hijridate.ring
+
+* Ring Notepad - Project Files - set minimum width based on desktop screen width
+* Ring Notepad - Output Window - Move the Cursor to the end of text
+* Ring Notepad - Output Window - Correct displaying for line breaks 
+* Form Designer - Better Style - Controls colors and size
+* VideoMusicPlayer is updated to work as expected after RingQt update
+* FlappyBird3000 - Fast response on Android 
+* Snake Game : Change the default window size (800x600)
+* Maze Game : Change the default window size (800x600) 
+* Maze Game : Move the camera with the player
+* Maze Game : Restarting the game will hide the (You Win) message
+* Game Engine : display error message when we can't create the game window
+* Ring Tests : Added File build.sh for building on Linux and macOS
+* RingQt : Updated to Qt 5.12.6
+* RingQt : Added QQMLEngine class
+* RingQt : Added files for building RingQt without Bluetooth support 
+* RingQt : The size of the events code is changed from 100 characters to 200 characters
+* RingQt : Correct links for Qt documentation in RingQt classes chapter
+* RingQt for Android : Better code for executing the ring object file (ringo)
+* Ring2EXE configuration files are updated for RingQt to correctly distribute RingQt apps
+* Code Generator : Convert function names to lower case when generating the functions for structures
+* OSCopyFolder() function is updated to copy the files in sub folders too
+* fgetpos() function is updated to work as expected
+* IsFunction() function is updated to be not case sensitive
+* Space() function is updated to clear the output string with spaces
+* Ring Compiler : Added file buildclang.bat for building on Windows using Clang compiler
+* Ring VM - Internal hash function is updated
+* Ring VM - Better Code for setting pVM->aSetProperty when creating new objects
+* Ring VM - Better Code for state managment
diff --git a/docs/en/source/whatisnew2.txt b/docs/en/source/whatisnew2.txt
new file mode 100644 (file)
index 0000000..a0eabd6
--- /dev/null
@@ -0,0 +1,347 @@
+.. index:: 
+       single: What is new in Ring 1.2?; Introduction
+
+========================
+What is new in Ring 1.2?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.2 release.
+
+.. index:: 
+       pair: What is new in Ring 1.2?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.2  comes with many new features 
+
+* New Functions
+* Better Functions
+* Better Ring Notepad
+* Better RingQt
+* Objects Library for RingQt
+* RingLibCurl
+* Better Call Command
+* Using NULL instead of NULLPointer()
+* Display Warnings Option
+* Better Quality
+
+.. index:: 
+       pair: What is new in Ring 1.2?; New Functions
+
+New Functions
+=============
+
+* PtrCmp() Function is a new function that compare between C pointers like the GUI objects.
+* PrevFileName() Function is added to return the previous active source file name.
+* RingVM_CFunctionsList() Function is added to return a list of functions written in C.
+* RingVM_FunctionsList() Function is added to return a list of functions written in Ring.
+* RingVM_ClassesList() Function is added to return a list of Classes.
+* RingVM_PackagesList() Function is added to return a list of Packages.
+* RingVM_MemoryList() Function is added to return a list of Memory Scopes and Variables.
+* RingVM_CallList() Function is added to return a list of the functions call list.
+* RingVM_FilesList() Function is added to return a list of the Ring Files.
+
+Example:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp.ring","r")
+       fp2 = fp
+       fp3 = fopen("ptrcmp.ring","r")
+
+       see ptrcmp(fp,fp2) + nl
+       see ptrcmp(fp,fp3) + nl
+
+       fclose(fp)
+       fclose(fp3)
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+
+Also we can compare between them using the '=' operator
+
+Example:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp2.ring","r")
+       fp2 = fopen("ptrcmp2.ring","r")
+       fp3 = fp
+       see fp = fp2
+       see nl
+       see fp = fp3
+       fclose(fp)
+       fclose(fp2)
+
+Output:
+
+.. code-block:: ring
+
+       0
+       1
+
+
+Example:
+
+The next function in stdlib.ring uses the PrevFileName() to know if the file of the
+caller function is the main source file of the program or not.
+
+.. code-block:: ring
+
+       Func IsMainSourceFile
+               if PrevFileName() = sysargv[2]
+                       return true
+               ok
+               return false
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Functions
+
+Better Functions
+================
+
+The find() function is updated to support searching in lists using C pointers like GUI
+Objects.
+
+The type() function is updated to display the C pointers types (like the GUI Object Class
+Name).
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+The Ring Notepad will save the current line number of opened files to be restored when
+we switch between files.
+
+Also Ring Notepad will ask the user to save the file if the file content is changed when 
+the user switch between files.
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better RingQt
+
+Better RingQt
+=============
+
+RingQt classes are updated to include methods to get events (The code that will be executed
+when an event is fired). This is necessary to enable/disable events for some time or to
+get the events information.
+
+For example the next code disable an event then call a method then enable the event again.
+
+.. code-block:: ring
+
+       cEvent = oView.oListResult.getCurrentItemChangedEvent()
+       oView.oListResult.setCurrentItemChangedEvent("")
+       FindValueAction()       # Call Method while an event is disabled
+       oView.oListResult.setCurrentItemChangedEvent(cEvent)
+
+Also the QAllEvents class is updated where we can set the output from the event function
+to be true or false using a new method added to the class called setEventOutput.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+                       win = new qWidget() {
+                                       setwindowtitle("Hello World")
+                                       setGeometry(100,100,370,250)
+                                       lineedit1 = new qlineedit(win) {
+                                               setGeometry(10,100,350,30)
+                                               setinputmask("9999;_") 
+                                               oFilter = new qallevents(lineedit1)
+                                               oFilter.setfocusoutEvent("pMove()")
+                                               installeventfilter(oFilter)
+                                       }
+                                       lineedit2 = new qlineedit(win) {
+                                                       setGeometry(10,150,350,30)
+                                       }
+                                       show()
+                       }
+                       exec()
+       }
+       
+       func pMove
+                  win.setWindowTitle("xxxx")
+                  oFilter.setEventOutput(False)
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Objects Library for RingQt
+
+Objects Library for RingQt
+==========================
+
+Ring 1.2 comes with the Objects library for RingQt applications. Instead of using global
+variables for windows objects and connecting events to objects using the object name, the
+Objects Library will manage the GUI objects and will provide a more natural API to quickly
+create one or many windows from the same class and the library provide a way to quickly set methods
+to be executed when an event is fired. Also the library provide a natural interface to
+quickly use the parent or the caller windows from the child or sub windows.
+
+The Objects Library is designed to be used with the MVC Design Pattern.
+
+The Objects Library is merged in RingQt so you can use it directly when you use RingQt
+
+Example :
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               open_window( :MainWindowController )
+               exec()
+       }
+
+       class MainWindowController from WindowsControllerParent
+               oView = new MainWindowView
+               func SubWindowAction
+                       Open_window( :SubWindowController )
+                       Last_Window().SetParentObject(self)
+
+       class MainWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Main Window")
+                       btnSub = new qPushButton(win) {
+                               setText("Sub Window")
+                               setClickEvent( Method( :SubWindowAction ) )
+                       }
+                       resize(400,400)
+               }
+
+       class SubWindowController from WindowsControllerParent
+               oView = new SubWindowView
+               func SetMainWindowTitleAction
+                       Parent().oView.win.SetWindowTitle("Message from the Sub Window")
+                       oView.win.SetWindowTitle("Click Event Done!")
+
+       class SubWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Sub Window")
+                       btnMsg = new qPushButton(win) {
+                               setText("Set Main Window Title")
+                               setClickEvent( Method( :SetMainWindowTitleAction ) )
+                       }
+                       btnClose = new qPushButton(win) {
+                               Move(200,0)
+                               setText("Close")
+                               setClickEvent( Method( :CloseAction ) )
+                       }
+                       resize(400,400)
+               }
+
+.. index:: 
+       pair: What is new in Ring 1.2?; RingLibCurl
+
+RingLibCurl
+===========
+
+The LibCurl library is used starting from Ring 1.0 for the Download() and SendEmail() 
+functions implementation. In Ring 1.2 more functions are added to provide a powerful
+library (RingLibCurl) around LibCurl.
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       cPostThis = "page=4&Number1=4&Number2=5"
+       curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3")
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Call Command
+
+Better Call Command
+===================
+
+The Call command is updated to support calling functions from object attributes also (not
+only variables).
+
+For example the next code from the Stars Fighter Game
+
+.. code-block:: ring
+
+       cFunc = oself.keypress
+       call cFunc(oGame,oSelf,Key_Space)
+
+Can be written in one line
+
+.. code-block:: ring
+
+       call oself.keypress(oGame,oSelf,Key_Space)
+
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Using NULL instead of NULLPointer()
+
+Using NULL instead of NULLPointer()
+===================================
+
+We can pass NULL to functions instead of using NULLPointer()
+
+For example the next code from RingLibSDL
+
+.. code-block:: ring
+
+       SDL_RenderCopy(SDL_ren,tex,NULLPointer(),rect)
+
+Can be written as in the next line
+
+.. code-block:: ring
+
+       SDL_RenderCopy(SDL_ren,tex,NULL,rect)
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Display Warnings Option
+
+Display Warnings Option
+=======================
+
+In Ring 1.2 the Ring compiler is updated to include the Display Warnings option (-w)
+
+Example:
+
+.. code-block:: ring
+       
+       load "stdlib.ring"
+       load "stdlib.ring"
+
+compiling the program using the Display Warnings option will display the file duplication
+warning, While without that option the error will pass silent.
+
+This is a warning (not an error) because in large projects you may use the same file
+more than one time. For example it's common to start each file with the next code. where
+the function IsMainSourceFile() is part from the stdlib.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       if IsMainSourceFile() 
+               // Testing
+       ok 
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Quality
+
+Better Quality
+==============
+
+Ring 1.2 is more stable, We discovered and fixed more bugs during Ring usage everyday
+in practical projects. Some functions are optimized to be faster like the SubStr() function.
+Also the documentation is more better.
diff --git a/docs/en/source/whatisnew3.txt b/docs/en/source/whatisnew3.txt
new file mode 100644 (file)
index 0000000..e7aed02
--- /dev/null
@@ -0,0 +1,487 @@
+.. index:: 
+       single: What is new in Ring 1.3?; Introduction
+
+========================
+What is new in Ring 1.3?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.3 release.
+
+.. index:: 
+       pair: What is new in Ring 1.3?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.3  comes with many new features 
+
+* Better RingQt
+* Better Ring Notepad
+* Ring mode for Emacs Editor
+* Better StdLib
+* Better Loop/Exit Command
+* New Functions
+* Return Self by Reference
+* Using '<' and ':' operators as 'from' keyword
+* Embedding Ring in Ring without sharing the State
+* RingZip Library
+* Form Designer
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better RingQt
+
+Better RingQt
+=============
+
+(1) Another version of QPixMap class is added (QPixMap2) which takes (int width,int height)
+during object init. 
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       New qapp 
+       {
+               win1 =  new qwidget() 
+               {
+                       setwindowtitle("Drawing using QPixMap")
+                       setgeometry(100,100,500,500)
+                       label1 = new qlabel(win1) 
+                       {
+                               setgeometry(10,10,400,400)
+                               settext("")
+                       }
+                       imageStock = new qlabel(win1) 
+                       {               
+                               image = new qPixMap2(200,200)   
+                               color = new qcolor() {
+                                       setrgb(255,255,255,255)
+                               }
+                               pen = new qpen() {
+                                       setcolor(color)
+                                       setwidth(10)
+                               }
+                               new qpainter() {
+                                       begin(image)
+                                               setpen(pen)
+                                               drawline(0,0,200,200)
+                                               drawline(200,0,0,200)
+                                       endpaint()
+                               }
+                               setpixmap(image)   
+                       }   
+                       show()
+               }
+               exec()
+       }
+
+Screen Shot:
+
+.. image:: ringqtpixmap2.png
+       :alt: Using QPixMap2
+
+(2) The Objects Library is updated to include the next functions
+
+* Last_WindowID()
+* Open_WindowNoShow()
+* Open_WindowAndLink()
+
+Also the class name (WindowViewBase) is changed to (WindowsViewParent).
+
+In The next code for example the Open_WindowAndLink() will create an object
+from the SecondWindowController Class Then will add the Method
+SecondWindow() to the FirstWindowController Class
+Also will add the Method FirstWindow() to the SecondWindowController Class
+
+So the SendMessage() method in FirstWindowController class can use the
+SecondWindow() method to access the object.
+
+.. code-block:: ring
+
+       class firstwindowController from windowsControllerParent
+
+           oView = new firstwindowView
+
+           func OpenSecondWindow
+               Open_WindowAndLink(:SecondWindowController,self)
+
+           func SendMessage
+               if IsSecondWindow() 
+                   SecondWindow().setMessage("Message from the first window")
+               ok
+
+           func setMessage cMessage
+               oView.Label1.setText(cMessage)
+
+
+(3) The next classes are added to RingQt
+
+* QPixMap2
+* QScrollArea
+* QSplitter
+* QCompleter
+* QCompleter2
+* QCompleter3
+* QProcess
+* QMdiArea
+* QMdiSubWindow
+* QCursor
+* QListView
+* QDesktopServices
+
+(4) Many constants are defined in qt.rh (loaded by guilib.ring)
+
+(5) New Classes names - Index Start from 1
+
+We added new classes to RingQt - another version of classes where the class names doesn't start with the "q" letter
+Also updated methods so the index start from 1 when we deal with the GUI controls like
+
+* ComboBox
+* ListWidget
+* TableWidget
+* TreeWidget
+
+These classes are inside guilib.ring under the package name : System.GUI
+
+To use it
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       import System.GUI
+
+This doesn't have any effect on our previous code, It's just another choice for better code that is consistent with Ring rules.
+
+Also the form designer is updated to provide us the choice between using classes where (index start from 0) or (index start from 1)
+
+Example  (Uses the Form Designer)
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartController.ring 
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+(1) Using QPlainTextEdit instead of QTextEdit
+
+(2) Displaying the line number for each line in the source code file.
+
+Screen Shot:
+
+.. image:: rnotelinenumber.png
+       :alt: Ring Notepad - Line Number
+
+(3) Auto-Complete for Ring functions names, classes and words in the opened file.
+
+.. image:: autocomplete.png
+       :alt: Ring Notepad - Auto Complete
+
+(4) Functions and Methods List
+
+.. image:: functionslist.png
+       :alt: Ring Notepad - Functions List
+
+(5) Output Window
+
+.. image:: outputwin.png
+       :alt: Ring Notepad - Output Window
+
+(6) Classes List
+
+.. image:: classeslist.png
+       :alt: Ring Notepad - Classes List
+
+(7) Change the Current Style
+
+.. image:: rnotestylemenu.png
+       :alt: Ring Notepad - Style Menu
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Ring mode for Emacs Editor
+
+Ring mode for Emacs Editor
+==========================
+
+Ring 1.3 comes with Ring mode for Emacs Editor
+
+Screen Shot:
+
+.. image:: ringemacs.png
+       :alt: Ring mode for Emacs Editor
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better StdLib
+
+Better StdLib
+=============
+
+The StdLib is updated to include the next functions
+
+* SplitMany()
+* JustFilePath()
+* JustFileName()
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better Loop|Exit Command
+
+Better Loop|Exit Command
+========================
+
+The Loop|Exit command is updated to accept Expressions after the command (not only numbers).
+
+The syntax:
+
+.. code-block:: ring
+
+       Loop|Exit [Number]
+
+Changed to
+
+.. code-block:: ring
+
+       Loop|Exit [Expression]
+
+Example
+
+.. code-block:: ring
+
+       XLoop = 2       # The outer loop 
+       YLoop = 1       # The first inner loop
+       for x = 1 to 10
+               for y = 1 to 10
+                       see "x=" + x + " y=" + y + nl
+                       if x = 3 and y = 5
+                               exit XLoop  
+                       ok
+               next
+       next
+
+.. index:: 
+       pair: What is new in Ring 1.3?; New Functions
+
+New Functions
+=============
+
+* PackageName() function
+* Swap() function
+
+Example:
+
+.. code-block:: ring
+
+       aList = [:one,:two,:four,:three]
+       see aList
+       see copy("*",50) + nl
+       swap(aList,3,4)
+       see aList
+
+Output
+
+.. code-block:: ring
+
+       one
+       two
+       four
+       three
+       **************************************************
+       one
+       two
+       three
+       four
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Return Self by Reference
+
+Return Self by Reference
+========================
+
+In this release, using Return Self in class methods will return the object by reference.
+
+Example:
+
+.. code-block:: ring
+
+       mylist = [new mytest() {
+               see self
+               x = 20
+               see self
+       }]
+
+       see mylist 
+
+       class mytest
+               x = 15
+               func init 
+                       return self     # Return by reference
+
+Output
+
+.. code-block:: ring
+
+       x: 15.000000
+       x: 20.000000
+       x: 20.000000
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Using '<' and ':' operators as 'from' keyword
+
+Using '<' and ':' operators as 'from' keyword
+=============================================
+
+In this release of the Ring language we can use the '<' and ':' operators as the 'from' keyword
+
+Syntax (1):
+
+.. code-block:: ring
+       
+       class Cat from Animal
+
+Syntax (2):
+       
+.. code-block:: ring
+       
+       class Cat < Animal
+
+Syntax (3):
+
+.. code-block:: ring
+       
+       class Cat : Animal
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Embedding Ring in Ring without sharing the State
+
+Embedding Ring in Ring without sharing the State
+================================================
+
+From Ring 1.0 we already have functions for embedding Ring in the C language. Also we
+can execute Ring code inside Ring programs using the eval() function. In this release
+we provide functions for embedding Ring in Ring programs without sharing the state.
+
+Advantages:
+
+(1) Quick integration for Ring programs and applications together without conflicts.
+
+(2) Execute and run Ring code in safe environments that we can trace.
+
+Example:
+
+.. code-block:: ring
+
+       pState = ring_state_init()
+       ring_state_runcode(pState,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState,"x = 10")
+
+       pState2 = ring_state_init()
+       ring_state_runcode(pState2,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState2,"x = 20")
+
+       ring_state_runcode(pState,"see x +nl")
+       ring_state_runcode(pState2,"see x +nl")
+
+       v1 = ring_state_findvar(pState,"x")
+       v2 = ring_state_findvar(pState2,"x")
+
+       see v1[3] + nl
+       see V2[3] + nl
+
+       ring_state_delete(pState)
+       ring_state_delete(pState2)
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       Hello, World!
+       10
+       20
+       10
+       20
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; RingZip Library
+
+RingZip Library
+===============
+
+Ring 1.3 comes with the RingZip library for creating, modifying and extracting *.zip files.
+
+Example (1):  Create myfile.zip contains 4 files 
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'w')
+       zip_addfile(oZip,"test.c")
+       zip_addfile(oZip,"zip.c")
+       zip_addfile(oZip,"zip.h")
+       zip_addfile(oZip,"miniz.h")
+       zip_close(oZip)
+
+Example (2): Extract myfile.zip to myfolder folder.
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       zip_extract_allfiles("myfile.zip","myfolder")
+
+Example (3): Print file names in the myfile.zip
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'r')
+       for x=1 to zip_filescount(oZip)
+              see zip_getfilenamebyindex(oZip,x) + nl
+       next
+       zip_close(oZip)
+
+Example (4) : Using Classes instead of Functions
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("w")
+               AddFile("test.c")
+               AddFile("zip.c")
+               AddFile("zip.h")
+               AddFile("miniz.h")
+               Close()
+       }
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Form Designer
+
+Form Designer
+=============
+
+Ring 1.3 comes with the Form Designer to quickly design your GUI application windows/forms
+and generate the Ring source code.
+
+It's written in Ring (Around 8000 Lines of code) using Object-Oriented Programming and
+Meta-Programming.
+
+We can run the From Designer from Ring Notepad
+
+.. image:: rnotefd.png
+       :alt: Form Desigenr - Inside Ring Notepad
+
+Also we can run the Form Designer in another window.
+
+.. image:: formdesigner.png
+       :alt: Form Desigenr
diff --git a/docs/en/source/whatisnew4.txt b/docs/en/source/whatisnew4.txt
new file mode 100644 (file)
index 0000000..22c3275
--- /dev/null
@@ -0,0 +1,501 @@
+.. index:: 
+       single: What is new in Ring 1.4?; Introduction
+
+========================
+What is new in Ring 1.4?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.4 release.
+
+.. index:: 
+       pair: What is new in Ring 1.4?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.4  comes with many new features 
+
+* Change: Basic Extensions are separated from RingVM
+* The Natural Library
+* New Style is added to Ring Notepad
+* RingREPL
+* Convert between Numbers and Bytes
+* Better StdLib
+* Better WebLib
+* Better RingQt
+* Qt Class Convertor
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Change: Basic Extensions are separated from RingVM
+
+Change: Basic Extensions are separated from RingVM
+==================================================
+
+In Ring 1.4 the next libraries are separated from RingVM
+
+* RingODBC
+* RingMySQL
+* RingSQLite
+* RingOpenSSL
+* RingInternet
+
+To use these libraries, Use the Load command.
+
+.. code-block:: none
+
+       load "odbclib.ring"
+       # use ODBC Functions
+
+.. code-block:: none
+
+       load "mysqllib.ring"
+       # use MySQL Functions
+
+.. code-block:: none
+
+       load "sqlitelib.ring"
+       # use SQLite Functions
+
+.. code-block:: none
+
+       load "openssllib.ring"
+       # use OpenSSL Functions  ( Hash and Security functions)
+
+.. code-block:: none
+
+       load "internetlib.ring"
+       # use Internet Functions ( Download() and SendEmail() )
+
+If you will use all of these libraries, You can just use stdlib.ring
+And the stdlib.ring will load odbclib.ring, mysqllib.ring, sqlitelib.ring,
+opensslib.ring and internetlib.ring files.
+
+.. code-block:: none
+
+       load "stdlib.ring"
+
+.. index:: 
+       pair: What is new in Ring 1.4?; The Natural Library
+
+The Natural Library
+===================
+
+Ring 1.4 comes with the Natural Library to quickly define a language that contains
+a group of commands.
+
+We will write the natural code in a Text file, for example program.txt
+
+File: program.txt
+
+.. code-block:: none
+
+       Welcome to the Ring programming language!
+       What you are reading now is not comments, I swear!
+
+       After many years of programming I decided to think different about
+       programming and solve the problems in a better way. 
+
+       We are writing commands or code and the Ring language is reading
+       it to understand us! Sure, What you are seeing now is
+       just ***part of the code - Not the Complete Program***
+       You have to write little things before and after this 
+       part to be able to run it!
+
+       It is the natural part of our code where we can write in English, 
+       Arabic or any Natural Language Then we will tell the computer 
+       through the Ring language what must happens! in a way that we can scale 
+       for large frameworks and programs.
+
+       Just imagine what will happens to the world of programming once
+       we create many powerful frameworks using the Ring language that
+       uses this way (Natural Programming).
+
+       For example When we say Hello to the Machine, It can reply! and when we
+       say count from 1 to 5 it will understand us, Also if 
+       we said count from 5 to 1 it will
+       understand us too! You can see the Output window!
+
+       This Goal is not new, but the Ring language comes
+       with an innovative solution to this problem.    
+
+Output:
+
+.. code-block:: none
+
+       Hello, Sir!
+
+
+       The Numbers!
+
+       1
+
+       2
+
+       3
+
+       4
+
+       5
+
+       I will count Again!
+
+       5
+
+       4
+
+       3
+
+       2
+
+       1
+
+
+To execute the natural code, We have start.ring
+
+In start.ring we define the language and the commands.
+
+File: start.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               SetCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               RunFile("program.txt")
+       }
+
+
+We defined a language called MyLanguage, We have folder for the language commands.
+
+Each command will define a class that belong to the MyLanguage.Natural package.
+
+We will define two commands, Hello and Count.
+
+So we must have two files for defining the commands in the CurrentDir()+"/../command" folder
+
+File: hello.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeyword([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :hello, 
+               :Function = func {
+                       See  "Hello, Sir!" + nl + nl
+               }
+       ])
+
+File: count.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordNumberNumber([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :count, 
+               :Function = func {
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
+               }
+       ])
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; New Style to Ring Notepad
+
+New Style is added to Ring Notepad
+==================================
+
+In Ring Notepad - From View - Styles - Select the (Modern) Style
+
+Screen Shot:
+
+.. image:: rnotemodernstyle.png
+       :alt: Using Ring Notepad - Modern Style
+
+.. index:: 
+       pair: What is new in Ring 1.4?; RingREPL
+
+RingREPL
+========
+
+In the application folder, You will find RingREPL (Read-Eval-Print-Loop)
+
+Also you can run it from Ring Notepad (Menubar - Tools)
+
+Screen Shot:
+
+.. image:: ringrepl.png
+       :alt: Using RingREPL
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Convert between Numbers and Bytes
+
+Convert between Numbers and Bytes
+=================================
+
+Ring 1.4 comes with the next functions to convert between Numbers and Bytes.
+
+* Int2Bytes()
+* Float2Bytes()
+* Double2Bytes()
+* Bytes2Int()
+* Bytes2Float()
+* Bytes2Double()
+
+Example:
+
+.. code-block:: ring
+
+       see "Test Int2Bytes() and Bytes2Int() - Value : 77" + nl
+       r = Int2Bytes(77)
+       see "Int Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Int(r) + nl
+       see "Test Float2Bytes() and Bytes2Float() - Value 77.12" + nl
+       r = Float2Bytes(77.12)
+       see "Float Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Float(r) + nl
+       see "Test Double2Bytes() and Bytes2Double() - Value 9999977.12345" + nl
+       r = Double2Bytes(9999977.12345)
+       see "Double Size : " + len(r) + nl
+       see r + nl
+       decimals(5)
+       see Bytes2Double(r) + nl
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Better StdLib
+
+Better StdLib
+=============
+
+The StdLib is updated to include the next functions
+
+* FSize()
+
+The print() function is updated to accept local variables.
+
+.. code-block:: ring
+
+       load "stdlib.ring" 
+
+       func main 
+               print("Enter your name : ")     ;
+               Name = getString()              ;
+               print( "Hello : #{Name} ")      ;
+               return                          ;
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Better WebLib
+
+Better WebLib
+=============
+
+The web library is updated 
+
+* Provide better error message
+
+(1) Error (WebLib-1) : REQUEST_METHOD is empty ! - Run this script from the browser
+
+(2) Error (DataLib-1) : Can't connect to the database server!
+
+* Better Template() function - can accept NULL instead of object as the second paramter.
+
+.. code-block:: ring
+
+       html(template("main.rhtml",NULL))
+
+* The Form Class is updated to support the "target" attribute.
+
+.. code-block:: ring
+
+       BootStrapWebPage() 
+       {
+               Title = "The Ring Programming Language"
+               html(template("main.rhtml",NULL))
+               div {
+                       classname = :container
+                       div
+                       {
+                               id = "div3"
+                               color = "black"
+                               backgroundcolor = "white"
+                               width = "100%"
+                               form
+                               {
+                                       method = "POST"
+                                       Action = website  
+                                       Target = "codeoutput"
+                                       input { type="hidden" name="page" value=1 }
+                                       Table
+                                       { 
+                                               style = stylewidth("100%") +
+                                                       stylegradient(3)                        
+                                               TR
+                                               {
+                                       
+                                                       TD { align="center" 
+                                                               WIDTH="10%"
+                                                                text("Code :") 
+                                                       }
+                                                       TD {
+                                                               html(`
+                                                               <textarea name = "cCode" 
+                                                               rows="5" 
+                                                               style="width : 100%; ">
+                                                               See "Hello, World!" + nl
+                                                               </textarea>`)
+                                                       }
+                                               }
+                                       }
+                                       Input { type = "submit" 
+                                               classname="btn btn-primary btn-block" 
+                                                       value = "Execute" }
+                                       Table
+                                       { 
+                                               style = stylewidth("100%") +
+                                                       stylegradient(34)                       
+                                               TR
+                                               {
+                                       
+                                                       TD { align="center"
+                                                               WIDTH="10%" 
+                                                               text("Output :") 
+                                                       }
+                                                       TD {
+                                                       html(`
+                                                       <iframe name="codeoutput" 
+                                                       width="100%" 
+                                                       style="background-color:white;">
+                                                       </iframe>`)
+                                                       }
+                                               }
+                                       }
+
+                               }
+                       }
+
+               }
+               html(template("footer.rhtml",NULL))
+       }
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Better RingQt
+
+Better RingQt
+=============
+
+The next functions are added to RingQt
+
+* SetDialogIcon(cIconFile)
+* MsgInfo(cTitle,cMessage)
+* ConfirmMsg(cTitle,cMessage)
+* InputBox(cTitle,cMessage)
+* InputBoxInt(cTitle,cMessage)
+* InputBoxNum(cTitle,cMessage)
+* InputBoxPass(cTitle,cMessage)
+
+The next classes are added to RingQt
+
+* QToolButton
+* QSerialPort
+* QSerialPortInfo
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Qt Class Convertor
+
+Qt Class Convertor
+==================
+
+Ring 1.4 comes with a simple tool that help in porting Qt classes to RingQt.
+
+You will find it in ring/samples/tools/QtClassConverter
+
+Online : https://github.com/ring-lang/ring/tree/master/samples/tools/QtClassConverter
+
+Screen Shot: 
+
+.. image:: qtclassconvertor.png
+       :alt: Qt Class convertor to RingQt
+
+.. index:: 
+       pair: What is new in Ring 1.4?; What is new in Ring 1.4.1?
+
+
+What is new in Ring 1.4.1?
+==========================
+
+Ring 1.4.1  comes with the next changes
+
+* Better Scripts for Building from Source Code
+* Better Colors for the Modern Style in Ring Notepad
+* Better StdLib
+* Better RingQt
+* New Sample : Sixteen Puzzle
+
+The scripts are updated for building from source code.
+
+Tested using Windows, Ubuntu Linux, Linux Mint and MacOS X.
+
+Screen Shot:
+
+.. image:: linuxmint.png
+       :alt: Using Ring - Linux Mint
+
+In Ring Notepad - the (Modern) Style colors are updated
+
+Screen Shot:
+
+.. image:: rnotemodernstyle2.png
+       :alt: Using Ring Notepad - Modern Style
+
+The StdLib is updated to include the next functions
+
+* TrimLeft()
+* TrimRight()
+* TrimAll()
+* EpochTime()
+
+The next functions are updated to display the dialogs on the top of other windows.
+
+* SetDialogIcon(cIconFile)
+* MsgInfo(cTitle,cMessage)
+* ConfirmMsg(cTitle,cMessage)
+* InputBox(cTitle,cMessage)
+* InputBoxInt(cTitle,cMessage)
+* InputBoxNum(cTitle,cMessage)
+* InputBoxPass(cTitle,cMessage)
+
+The Sixteen Puzzle is added to the Applications folder.
+
+Screen Shot:
+
+.. image:: sixteenpuzzle.jpg
+       :alt: Sixteen Puzzle
diff --git a/docs/en/source/whatisnew5.txt b/docs/en/source/whatisnew5.txt
new file mode 100644 (file)
index 0000000..8377d9a
--- /dev/null
@@ -0,0 +1,2123 @@
+.. index:: 
+       single: What is new in Ring 1.5?; Introduction
+
+========================
+What is new in Ring 1.5?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.5 release.
+
+.. index:: 
+       pair: What is new in Ring 1.5?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.5 comes with many new features!
+
+* Video-Music-Player Application
+* Windows StartUp Manager Application
+* Calculator Application
+* Better Ring Notepad
+* Better StdLib
+* Better WebLib
+* Better RingQt
+* Better Objects Library
+* RingFreeGLUT Extension
+* RingOpenGL Extension
+* Better Code Generator for Extensions
+* Better Documentation Generator for Extensions
+* Ring VM - Tracing Functions 
+* Trace Library and Interactive Debugger 
+* More Syntax Flexibility
+* Type Hints Library
+* Better Quality
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Video-Music-Player Application
+
+Video-Music-Player Application
+==============================
+
+The Video-Music-Player application is added to the Applications folder.
+
+Screen Shot:
+
+.. image:: videomusicplayer.jpg
+       :alt: Video Music Player
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Windows StartUp Manager Application
+
+Windows StartUp Manager Application
+===================================
+
+The Windows StartUp Manager 
+
+URL : https://github.com/ring-lang/WinStartupManager
+
+Screen Shot:
+
+.. image:: winstartupman.jpg
+       :alt: Windows Startup Manager
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Calculator Application
+
+Calculator Application
+======================
+
+The Calculator application is added to the Applications folder.
+
+Screen Shot:
+
+.. image:: calcapp.jpg
+       :alt: Calculator Application
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+(1) Ring Notepad is updated to include some new styles and the Main File ToolBar
+
+The idea of the Main File ToolBar is to determine the main file in the project
+When the project contains many source code files
+
+This way you can run the project ( Main File ) at any time while opening other files in the project
+without the need to switch to the Main File to run the project.
+
+
+To quickly use this feature
+
+(Open the project main file)
+
+Press Ctrl+Shift+M  to set the current source code file as the main file
+
+
+Open and modify other source code files in the project
+
+To run the project (Main File) at any time press Ctrl+Shift+F5 (GUI) or Ctrl+Shift+D (Console)
+
+Screen Shots:
+
+.. image:: rnote15shot1.png
+       :alt: Ring Notepad
+
+
+.. image:: rnote15shot2.png
+       :alt: Ring Notepad
+
+
+.. image:: rnote15shot3.png
+       :alt: Ring Notepad
+
+(2) The output window is updated to display the new lines correctly and contains the "Clear" button.
+
+Screen Shot: 
+
+.. image:: rnote15output.png
+       :alt: Output Window
+
+(3) The Ring Notepad is updated to quickly open and switch between large files while
+preparing the functions/classes lists in the background.
+
+Screen Shot: 
+
+.. image:: rnote15events.png
+       :alt: Ring Notepad - Large Files
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better StdLib
+
+Better StdLib
+=============
+
+New Functions
+
+* Print2Str()
+* ListAllFiles()
+* SystemCmd()
+
+(1) The Print2Str() is a new function added to the StdLib 
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       world = "World!"
+       mystring = print2str("Hello, #{world} \nIn Year \n#{2000+17} \n")
+
+       see mystring + nl
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       In Year
+       2017
+
+(2) The ListAllFiles() is a new function added to the StdLib 
+
+Using this function we can quickly do a process on a group of files in a folder and it's sub folders.
+
+Example:
+
+.. code-block:: ring
+
+            load "stdlib.ring"
+            aList = ListAllFiles("c:/ring/ringlibs","ring") # *.ring only
+            aList = sort(aList)
+            see aList
+
+Example:
+
+.. code-block:: ring
+
+            load "stdlib.ring"
+            see listallfiles("b:/ring/ringlibs/weblib","") # All Files
+
+
+(3) The SystemCmd() is a new function added to the StdLib 
+
+The function will execute a system command like the System() function but 
+will return the output in a string.
+
+Example:
+
+.. code-block:: ring
+
+       cYou = SystemCmd("whoami")
+       See "SystemCmd: whoami ====="+ nl + cYou +nl
+
+Output:
+
+.. code-block:: ring
+
+       SystemCmd: whoami =====
+       desktop-umberto\umberto
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better WebLib
+
+Better WebLib
+=============
+
+The WebLib is updated to include the HTMLPage class
+
+Using this class we can create HTML documents without printing the output to the standard output
+
+So instead of using the WebLib in Web Applications only
+
+We can use it in Console/GUI/Mobile Applications too
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+
+       import System.Web
+
+       func main
+
+               mypage = new HtmlPage {
+                       h1 { text("Customers Report") }
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(4)
+                                 TR
+                                 {
+                                       TD { WIDTH="10%" text("Customers Count : " )  }
+                                       TD { text (100) }
+                                 }
+                       }
+       
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(26)
+                                 TR
+                                 {
+                                       style = stylewidth("100%") + stylegradient(24)
+                                       TD { text("Name " )  }
+                                       TD { text("Age" ) }
+                                       TD { text("Country" ) }
+                                       TD { text("Job" ) }     
+                                       TD { text("Company" ) }
+                                 }
+                                 for x =  1 to 100
+                                       TR
+                                       {
+                                               TD { text("Test" )  }
+                                               TD { text("30" ) }
+                                               TD { text("Egypt" ) }
+                                               TD { text("Sales" ) }   
+                                               TD { text("Future" ) }
+                                       }
+                                 next
+                       }
+
+               }
+
+               write("report.html",mypage.output())
+
+Using this feature we can create reports quickly using WebLib & GUILib together
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+       load "guilib.ring"
+
+       import System.Web
+       import System.GUI
+
+       new qApp {
+               open_window(:CustomersReportController)
+               exec()
+       }
+
+       class CustomersReportController
+
+               oView = new CustomersReportView
+
+               func Start
+                       CreateReport()
+
+               func CreateReport
+                       mypage = new HtmlPage {
+                               h1 { text("Customers Report") }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(4)
+                                       TR
+                                       {
+                                               TD { WIDTH="10%" 
+                                                       text("Customers Count : " )  }
+                                               TD { text (100) }
+                                       }
+                               }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(26)
+                                       TR
+                                       {
+                                               style = stylewidth("100%") +
+                                                       stylegradient(24)
+                                               TD { text("Name " )  }
+                                               TD { text("Age" ) }
+                                               TD { text("Country" ) }
+                                               TD { text("Job" ) }     
+                                               TD { text("Company" ) }
+                                       }
+                                       for x =  1 to 100
+                                               TR
+                                               {
+                                                       TD { text("Test" )  }
+                                                       TD { text("30" ) }
+                                                       TD { text("Egypt" ) }
+                                                       TD { text("Sales" ) }   
+                                                       TD { text("Future" ) }
+                                               }
+                                       next
+                               }
+                       }
+                       write("report.html",mypage.output())
+
+               func PrintEvent
+                       printer1 = new qPrinter(0) {
+                               setoutputformat(1)
+                               setoutputfilename("report.pdf")
+                       }
+                       oView {
+                               web.print(printer1)
+                               web.show()
+                       }
+                       system ("report.pdf")
+
+       class CustomersReportView
+
+                       win = new window() {
+                                       setwindowtitle("Report Window")
+                                       setgeometry(100,100,500,500)
+                                       web = new webview(win) {
+                                               setgeometry(100,100,1000,500)
+                                               loadpage(new qurl("file:///"+
+                                               currentdir()+"/report.html"))
+                                       }
+                                       new pushbutton(win) {
+                                                       setGeometry(100,20,100,30)
+                                                       settext("Print")
+                                                       setclickevent(Method(:PrintEvent))
+                                       }
+                                       showMaximized()
+                               }
+
+Screen Shot:
+
+.. image:: ring15reportshot.png
+       :alt: Customers Report
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better RingQt
+
+Better RingQt
+=============
+
+New classes added to RingQt :
+
+* QStringRef
+* QMutex
+* QMutexLocker
+* QBuffer
+* QBluetoothAddress
+* QBluetoothDeviceDiscoveryAgent
+* QBluetoothDeviceInfo
+* QBluetoothHostInfo
+* QBluetoothLocalDevice
+* QBluetoothServer
+* QBluetoothServiceDiscoveryAgent
+* QBluetoothServiceInfo
+* QBluetoothSocket
+* QBluetoothTransferManager
+* QBluetoothTransferReply
+* QBluetoothTransferRequest
+* QBluetoothUuid
+
+Example:
+
+.. code-block:: ring
+
+       ### Submits your car VIN - Vehicle Id Number - to the Web Site - vpic.nhtsa.dot.gov -
+       ### Parses XML data returned
+       ### Prints out the car info result
+
+       load "libcurl.ring"
+       load "guilib.ring"
+       load "stdlib.ring"
+
+       curl = curl_easy_init()
+
+       # request = "3G1JC5248YS251015?format=xml"  ### VIN - Chevrolet 
+         request = "3GYFK62847G247323?format=xml"  ### VIN - Cadillac
+
+       call_type   = "decodevinvalues/"
+       url         = "https://vpic.nhtsa.dot.gov/api/vehicles/"
+       url_request = url + call_type + request
+
+               See "URL Request: "+ url_request +nl
+
+       curl_easy_setopt(curl, curlopt_url, url_request)
+       response = curl_easy_perform_silent(curl);
+               
+               See nl +"Response Raw: "+ response +nl +nl
+
+       curl_easy_cleanup(curl)
+
+       xml = new qxmlstreamreader()
+       xml.adddata_2(response)
+
+       x = new qstringref()
+       while not xml.atend()
+                  if xml.error()
+                                  see xml.errorstring() see nl
+                                  exit loop
+                  ok
+
+                  x = xml.text()
+                  if not x.length() = 0
+                                  see "Length: " see x.length() +" --- "
+                                  see "Value: " see x.tostring() see nl
+                  ok
+
+                  xml.readnext()
+       end
+
+       get x
+
+       ###------------------------------------------
+       ### Results
+       #
+       # ==>Value: 115
+       # ==>Value: Results returned successfully
+       # ==>Value: VIN(s): 3G1JC5248YS251015
+       # ==>Value: 3G1JC5248YS251015
+       # ==>Value: Sedan/Saloon
+       # ==>Value: 4
+       # ==>Value: 2200.0
+       # ==>Value: 134.25223700841
+       # ==>Value: 2.2
+       # ==>Value: 4
+       # ==>Value: LN2
+       # ==>Value: CHEVROLET
+       # ==>Value: GENERAL MOTORS LLC
+       # ==>Value: Cavalier
+       # ==>Value: 2000
+       # ==>Value: Ramos Arzipe
+       # ==>Value: PASSENGER CAR
+       # ==>Value: 4
+       # ==>Value: In-Line
+       # ==>Value: 1st Row (Driver & Passenger)
+       # ==>Value: Sequential Fuel Injection (SFI)
+       # ==>Value: Mexico
+       # ==>Value: NA
+       # ==>Value: Manual
+       # ==>Value: Body Type: Sedan, 4-6 Window, Notchback (GM codes: 19, 69)
+       # ==>Value:  Name Plate: Chevrolet, Pontiac
+       # ==>Value: 0 - VIN decoded clean. Check Digit (9th position) is correct
+       # ==>Value: LAN
+       # ==>Value: 984
+       #
+       ###-----------------------------------------
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Objects Library
+
+Better Objects Library
+======================
+
+The function Open_WindowInPackages() is added to the Objects library.
+
+The Open_WindowInPackages() function is the same as Open_Window()
+but takes an extra list that determine the packages 
+to import before opening the window.
+
+Syntax:
+
+.. code-block:: ring
+
+       Open_WindowInPackages(cClassName,aPackagesList)
+
+Example:
+
+The next example from the Form Designer source code, Open the Window Flags window
+using the open_windowInPackages() function.
+
+We determine the class name "WindowFlagsController" and the packages name.
+
+The Window Flags window uses the FormDesigner and System.GUI packages.
+
+.. code-block:: ring
+
+       open_windowInPackages(:WindowFlagsController,[
+               "formdesigner",
+               "System.GUI"
+       ])
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; RingFreeGLUT Extension
+
+RingFreeGLUT Extension
+======================
+
+Ring 1.5 comes with RingFreeGLUT extension to support the FreeGLUT library
+
+Example:
+
+.. code-block:: ring
+
+       /*
+               This sample is based on C Tutorials 
+               from : http://www.lighthouse3d.com/tutorials/glut-tutorial/
+       */
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // Pop up menu identifiers
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // color for the nose
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       // default font
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       // width and height of the window
+       h = 0
+       w = 0
+
+       // variables to compute frames per second
+       frame=0
+       time=0
+       timebase=0
+       s = ""
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+       func renderStrokeFontString x,y,z,font,string
+               glPushMatrix()
+               glTranslatef(x, y,z)
+               glScalef(0.002, 0.002, 0.002)
+               for c in string
+                       glutStrokeCharacter(font, Ascii(c));
+               next
+               glPopMatrix()
+
+
+       func restorePerspectiveProjection
+
+               glMatrixMode(GL_PROJECTION)
+               // restore previous projection matrix
+               glPopMatrix()
+
+               // get back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func setOrthographicProjection
+
+               // switch to projection mode
+               glMatrixMode(GL_PROJECTION)
+
+               // save previous matrix which contains the
+               //settings for the perspective projection
+               glPushMatrix()
+
+               // reset matrix
+               glLoadIdentity()
+
+               // set a 2D orthographic projection
+               gluOrtho2D(0, w, h, 0)
+
+               // switch back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 9 SnowMen
+               for i = -3 to -1
+                       for j = -3 to -1
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*3+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               // Code to compute frames per second
+               frame++
+
+               time=glutGet(GLUT_ELAPSED_TIME)
+               if time - timebase > 1000 
+                       s = "RingFreeGLUT - FPS: " + (frame*1000.0/(time-timebase))
+                       timebase = time
+                       frame = 0
+               ok
+
+               // Code to display a string (fps) with bitmap fonts
+               setOrthographicProjection()
+
+               glPushMatrix()
+               glLoadIdentity()
+               renderBitmapString(5,30,0,GLUT_BITMAP_HELVETICA_18,s)
+               glPopMatrix()
+
+               restorePerspectiveProjection()
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test - 9 SnowMan")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+
+Screen Shots:
+
+.. image:: ring15freeglut.png
+       :alt: RingFreeGLUT
+
+
+.. image:: ring15freeglut2.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: What is new in Ring 1.5?; RingOpenGL Extension
+
+RingOpenGL Extension
+====================
+
+Ring 1.5 comes with RingOpenGL and support for the next versions 
+
+* OpenGL 1.1
+* OpenGL 1.2
+* OpenGL 1.3
+* OpenGL 1.4
+* OpenGL 1.5
+* OpenGL 2.0
+* OpenGL 2.1
+* OpenGL 3.0
+* OpenGL 3.2
+* OpenGL 3.3
+* OpenGL 4.0
+* OpenGL 4.1
+* OpenGL 4.2
+* OpenGL 4.3
+* OpenGL 4.4
+* OpenGL 4.5
+* OpenGL 4.6
+
+Example:
+
+.. code-block:: ring
+
+       /*
+               This sample is based on C Tutorials 
+               from : 
+                       http://www.wikihow.com/Make-a-Cube-in-OpenGL
+       */
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // ----------------------------------------------------------
+       // Global Variables
+       // ----------------------------------------------------------
+       rotate_y=0 
+       rotate_x=0
+        
+       // ----------------------------------------------------------
+       // display() Callback function
+       // ----------------------------------------------------------
+       func display
+        
+         //  Clear screen and Z-buffer
+         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
+        
+         // Reset transformations
+         glLoadIdentity()
+        
+         // Rotate when user changes rotate_x and rotate_y
+         glRotatef( rotate_x, 1.0, 0.0, 0.0 )
+         glRotatef( rotate_y, 0.0, 1.0, 0.0 )
+        
+         //Multi-colored side - FRONT
+         glBegin(GL_POLYGON)
+        
+         glColor3f( 1.0, 0.0, 0.0 )     glVertex3f(  0.5, -0.5, -0.5 )      # P1 is red
+         glColor3f( 0.0, 1.0, 0.0 )     glVertex3f(  0.5,  0.5, -0.5 )      # P2 is green
+         glColor3f( 0.0, 0.0, 1.0 )     glVertex3f( -0.5,  0.5, -0.5 )      # P3 is blue
+         glColor3f( 1.0, 0.0, 1.0 )     glVertex3f( -0.5, -0.5, -0.5 )      # P4 is purple
+        
+         glEnd()
+        
+         // White side - BACK
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  1.0, 1.0 )
+         glVertex3f(  0.5, -0.5, 0.5 )
+         glVertex3f(  0.5,  0.5, 0.5 )
+         glVertex3f( -0.5,  0.5, 0.5 )
+         glVertex3f( -0.5, -0.5, 0.5 )
+         glEnd()
+        
+         // Purple side - RIGHT
+         glBegin(GL_POLYGON)
+         glColor3f(  1.0,  0.0,  1.0 )
+         glVertex3f( 0.5, -0.5, -0.5 )
+         glVertex3f( 0.5,  0.5, -0.5 )
+         glVertex3f( 0.5,  0.5,  0.5 )
+         glVertex3f( 0.5, -0.5,  0.5 )
+         glEnd()
+        
+         // Green side - LEFT
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  1.0,  0.0 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         // Blue side - TOP
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  0.0,  1.0 )
+         glVertex3f(  0.5,  0.5,  0.5 )
+         glVertex3f(  0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glEnd()
+        
+         // Red side - BOTTOM
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  0.0,  0.0 )
+         glVertex3f(  0.5, -0.5, -0.5 )
+         glVertex3f(  0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         glFlush()
+         glutSwapBuffers()
+        
+        
+       // ----------------------------------------------------------
+       // specialKeys() Callback Function
+       // ----------------------------------------------------------
+       func specialKeys
+
+               key = glutEventKey()
+        
+         //  Right arrow - increase rotation by 5 degree
+               switch Key
+
+               on GLUT_KEY_RIGHT
+                       rotate_y += 5
+        
+               //  Left arrow - decrease rotation by 5 degree
+               on GLUT_KEY_LEFT
+                       rotate_y -= 5
+        
+               on GLUT_KEY_UP
+                       rotate_x += 5
+        
+               on GLUT_KEY_DOWN
+                       rotate_x -= 5
+        
+               off
+
+         //  Request display update
+         glutPostRedisplay()
+        
+
+        
+       // ----------------------------------------------------------
+       // main() function
+       // ----------------------------------------------------------
+       func main
+        
+         //  Initialize GLUT and process user parameters
+         glutInit()
+        
+         //  Request double buffered true color window with Z-buffer
+         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
+        
+         // Create window
+         glutCreateWindow("Awesome Cube")
+        
+         //  Enable Z-buffer depth test
+         glEnable(GL_DEPTH_TEST)
+        
+         // Callback functions
+         glutDisplayFunc(:display)
+         glutSpecialFunc(:specialKeys)
+        
+         //  Pass control to GLUT for events
+         glutMainLoop()
+        
+         //  Return to OS
+
+
+Screen Shot:
+
+.. image:: ring15opengl.png
+       :alt: RingOpenGL
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Code Generator for Extensions
+
+Better Code Generator for Extensions
+====================================
+
+The Code Generator is updated to support <constant> type, So we can have
+constants other than numbers, for example : Strings and Pointers. 
+
+When we have pointers we can determine the pointer type.
+To use this feature, before <constant> and </constant> we can use
+
+.. code-block:: ring
+
+       $nDefaultConstantType = C_CONSTANT_TYPE_POINTER
+       $cDefaultConstantPointerType = "void *"
+
+The next example from the RingFreeGLUT extension
+
+.. code-block:: ring
+
+       <runcode>
+               $nDefaultConstantType = C_CONSTANT_TYPE_POINTER 
+               $cDefaultConstantPointerType = "void"
+       </runcode>
+       <constant>
+               GLUT_STROKE_ROMAN  
+               GLUT_STROKE_MONO_ROMAN
+               GLUT_BITMAP_9_BY_15   
+               GLUT_BITMAP_8_BY_13   
+               GLUT_BITMAP_TIMES_ROMAN_10
+               GLUT_BITMAP_TIMES_ROMAN_24 
+               GLUT_BITMAP_HELVETICA_10   
+               GLUT_BITMAP_HELVETICA_12   
+               GLUT_BITMAP_HELVETICA_18   
+       </constant>
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Documentation Generator for Extensions
+
+Better Documentation Generator for Extensions
+=============================================
+
+The documentation generator for extensions is updated to generate a list of constants
+in the generated documentation
+
+The previous versions provides the functions prototype only, Now we have the list of
+constants too. 
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Ring VM - Tracing Functions 
+
+Ring VM - Tracing Functions 
+===========================
+
+In Ring 1.5 the next functions are added to Ring VM
+
+* RingVM_SetTrace(cCode)
+* RingVM_TraceData() --> aDataList
+* RingVM_TraceEvent() --> nTraceEvent
+* RingVM_TraceFunc() --> cCode
+* RingVM_ScopesCount() --> nScopes
+* RingVM_EvalInScope(nScope,cCode) 
+* RingVM_PassError()
+* RingVM_HideErrorMsg(lStatus)
+* RingVM_CallFunc(cFuncName)
+
+Example:
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       ringvm_settrace("mytrace()")
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+       mytest()
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       func mytrace
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+Output:
+
+.. code-block:: none
+
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 3
+       File Name   : test1.ring
+       Function Name : ringvm_settrace
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 5
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Hello, world!
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 6
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Welcome
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 7
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       How are you?
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 12
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       Message from mytest
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 14
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 43
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 44
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       Message from mymethod
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 11
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Trace Library and Interactive Debugger
+
+Trace Library and Interactive Debugger
+======================================
+
+Ring 1.5 comes with the Trace Library and the Interactive Debugger
+
+Using this library we can trace events, execute programs line by line, open the 
+Interactive Debugger when an error happens or at breakpoints.
+
+Example:
+
+The next example uses a Breakpoint to open the Interactive Debugger!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+
+Screen Shots:
+
+We have the Interactive Debugger at the Breakpoint!
+
+.. image:: debugshot1.png
+       :alt: Interactive Debugger
+
+We can print the variables values
+
+.. image:: debugshot2.png
+       :alt: Interactive Debugger
+
+We can change the variables values then continue execution
+
+.. image:: debugshot3.png
+       :alt: Interactive Debugger
+
+We can run the Interactive Debugger in the Output Window
+
+.. image:: debugshot4.png
+       :alt: Interactive Debugger
+
+.. index:: 
+       pair: What is new in Ring 1.5?; More Syntax Flexibility
+
+More Syntax Flexibility
+=======================
+
+* Using braces { } in Packages/Classes/Functions
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+       {
+               class myclass 
+               {
+                       func myfunc 
+                       {
+                               print("Hello, World!\n")
+                       }
+               }
+       }
+
+* Using 'end' keyword after Packages/Classes/Functions
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+               class myclass 
+                       def myfunc 
+                               put "Hello, World!"
+                       end
+               end
+       end
+
+* Using 'endpackage'/'endclass'/'endfunc' keywords after Packages/Classes/Functions
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass { myfunc() }
+
+       package mypackage
+               class myclass
+                       func myfunc                     
+                               see "welcome"  + nl
+                       endfunc
+               endclass
+       endpackage
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Type Hints Library
+
+Type Hints Library
+==================
+
+Ring 1.5 comes with the Type Hints library
+
+Using this library we can add the type information to the source code which will be 
+very useful for tools like
+
+* Code Editors 
+* Static-Analysis
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       see sum(3,4) + nl ;
+       see sayHello("Mahmoud");
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+The library is very powerful and support the User types (Classes) automatically!
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       import mypackage 
+
+       test()  { main([:one,:two,:three]) }
+
+       myclass func test() {
+               see "Testing User Types!" + nl
+               return new myclass
+       }
+
+       package mypackage {
+               public class myclass {
+                       public static void func main(list args) {
+                               see "welcome" + nl
+                               see args
+                       }
+               }
+       }
+
+Also You can use the types inside the code (not only the function prototype)
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       int     sum = sum(3,4)
+       string  msg = sayHello("Mahmoud")
+
+       see "Sum = " + sum + nl + msg + nl
+
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+Rules:
+
+* To use the types in the function prototype, You must use '(' and ')' around parameters
+* To use the types in the function code, You must set the variable value (Assignment).
+
+.. note:: Ring is a dynamic language, No type checking will be done by the compiler.
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Quality
+
+Better Quality
+==============
+
+Based on Ring usage every day in practical projects
+
+Ring 1.5 is more stable and more productive!
+
+We are adding features based on clear vision and practical needs.
+
+Also the documentation is better.
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.1?
+
+What is new in Ring 1.5.1?
+==========================
+
+* Better Documentation
+* StdLib - Factorial() function update
+* RingVM - Better code for clearing the stack in the Class Region.
+* Sample : 3D Cube (OpenGL) + Texture Image using GameLib (RingAllegro)
+
+Source Code:
+
+.. code-block:: ring
+
+       load "gamelib.ring"
+       load "opengl21lib.ring"
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Ring Cube"
+
+               bitmap texture
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("ring.bmp")
+                       texture = al_get_opengl_texture(bitmap)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+
+               func drawScene
+
+                       w = 800 h = 600
+                       ratio =  w / h
+
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+
+                       gluPerspective(45,ratio,1,100)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)                                                 
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+                       glLoadIdentity();                                                                       
+                       glTranslatef(0.0,0.0,-5.0);
+
+                       glRotatef(xrot,1.0,0.0,0.0);
+                       glRotatef(yrot,0.0,1.0,0.0);
+                       glRotatef(zrot,0.0,0.0,1.0);
+
+                       glBindTexture(GL_TEXTURE_2D, texture)
+
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+                       xrot += 0.3
+                       yrot += 0.2
+                       zrot += 0.4
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+Screen Shot:
+
+.. image:: ringcube3d.png
+       :alt: Ring Cube
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.2?
+
+What is new in Ring 1.5.2?
+==========================
+
+* Documentation - Chapter "Applications developed in little hours" is updated
+* Ring Notepad  - Display programs output in the output window on all platforms
+* Form Designer - Help Menu - Open CHM/PDF files without displaying the console window
+* Form Designer - Better response to Resize/Move Events when moving the Mouse quickly
+* Form Designer - New/Open/Save As, will open the Controller class in Ring Notepad 
+* Form Designer - Added "Close Form" option to the file menu
+* Ring Notepad  - Run, will save the current file (Also the opened Form) automatically
+* GetQuotesHistory Application - Updated to work on MacOS X and Qt 5.2
+* Calculator Application - Updated to include more features!
+* RingVM - Classification for Environment Errors (Check Chapter : Language Reference)
+* RingQt - New methods added to QAllEvents for faster Events execution
+* RingQt - Fusion Black Style - Better colors for disabled controls
+* Scripts - For building Ring on Fedora Linux (Check Chapter : Building From Source Code)
+
+Screen Shot:
+
+.. image:: fedora.png
+       :alt: Ring on Fedora 1
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.3?
+
+What is new in Ring 1.5.3?
+==========================
+
+* Form Designer : Close Action will notify Ring Notepad to be able to open the Form again
+* Form Designer : Save Action will open the controller class in Ring Notepad
+* Form Designer : Keep current control selected when selecting many controls using CTRL Key
+* Form Designer : Nice form back color when used in Ring Notepad (Style: Modern Black)
+* RingOpenSSL : Updated to support newer versions like OpenSSL 1.1 
+* Building Scripts : Updated to work on Fedora 26 (64bit)
+* OpenGL : New Sample - Many Cubes (samples/3D/manycubes)
+
+Screen Shot:
+
+.. image:: manycubes.png
+       :alt: Many Cubes
+
+* RingQt : Add QDateTime Class 
+* RingQt : New methods added to QMenu and QCursor Classes
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qwidget() {
+                       setwindowtitle("Context Menu")
+                       resize(400,400)
+                       myfilter = new qAllEvents(win) {
+                               setContextmenuEvent("mymenu()")
+                       }
+                       installeventfilter(myfilter)
+                       show()
+               }
+               exec()
+       }
+
+
+       func mymenu 
+
+               new qMenu(win) {
+                       oAction = new qAction(win) {
+                               settext("new")
+                               SetCLickevent("See :New")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("open")
+                               SetCLickevent("See :Open")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("save")
+                               SetCLickevent("See :Save")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("close")
+                               SetCLickevent("See :Close")
+                       }
+                       addaction(oAction)
+                       oCursor  = new qCursor()
+                       exec(oCursor.pos())
+               }
+       
+
+* Compiler : Support using _ in numbers
+
+Example:
+
+.. code-block:: ring
+
+       x = 1_000_000
+       see type(x)+nl
+       see x+1+nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
+       100000001
+
+* Compiler : Support using f after numbers
+
+Example:
+
+.. code-block:: ring
+
+       x = 19.99f
+       see type(x) + nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
+
+* Google API Shortener Application
+
+Screen Shots:
+
+.. image:: urlappshot1.png
+       :alt: URLShortener - shot 1
+
+* TicTacToe 3D Game
+
+Screen Shot:
+
+.. image:: tictactoe3d.png
+       :alt: TicTacToe 3D Game
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.4?
+
+What is new in Ring 1.5.4?
+==========================
+
+* CalmoSoft Fifteen Puzzle Game 3D
+* Ring Notepad - New Styles 
+* Ring Notepad - Better Toolbar Style
+* Ring Notepad - View Modes 
+* Ring Notepad - QPlainTextEdit - don't set back color for the scroll bars
+* Ring Notepad - Style Fusion (White) - use Silver color for comments 
+* Ring Notepad - Tab and Shift-Tab - Indent multiple lines
+* Form Designer - Better Toolbar Style
+* Form Designer - Nice backcolor for Window Flags and Menubar Designer
+* Form Designer - Default back color for controls
+* RingQt - Added grab() and windowHandle() methods to QWidget class
+* RingQt - Added new methods to QPixmap Class
+* RingQt - Added Classes :-
+       * QScreen
+       * QWindow
+       * QGuiApplication
+       * QTextBrowser
+* Code Generator for Extensions - Nonew Option - Support Parent Class
+* Ring VM - Internal Implementation - Pass state to Strings and Lists objects
+* Ring VM - Garbage Collector - Memory Pool for Small Objects
+* Ring VM - Better code for Saving/Restoring the State
diff --git a/docs/en/source/whatisnew6.txt b/docs/en/source/whatisnew6.txt
new file mode 100644 (file)
index 0000000..8b42fad
--- /dev/null
@@ -0,0 +1,479 @@
+.. index:: 
+       single: What is new in Ring 1.6?; Introduction
+
+========================
+What is new in Ring 1.6?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.6 release.
+
+.. index:: 
+       pair: What is new in Ring 1.6?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.6 comes with many new features!
+
+* Employee Application
+* New Tool: Ring2EXE 
+* Better Ring For Android
+* New Tool : Folder2qrc
+* Better Scripts for building Ring
+* RingConsoleColors Extension
+* RingMurmurHash Extension
+* Better Ring Notepad
+* Better RingQt
+* Better StdLib
+* Better RingVM
+* Better RingREPL
+* Using Tab instead of char(9)
+* Using CR as Carriage return
+* Using the ! operator as not
+* Using && and || operators
+* Using ? to print expression then new line
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Employee Application
+
+Employee Application
+====================
+
+The Employee application is added to ring/applications
+
+Developer: Ahmed Hassouna 
+
+.. image:: empapp.png
+       :alt: Employee Sample
+
+.. index:: 
+       pair: What is new in Ring 1.6?; New Tool: Ring2EXE
+
+New Tool: Ring2EXE
+==================
+
+In Ring 1.6 we have a nice tool called Ring2EXE (Written in Ring itself)
+
+Using Ring2EXE we can distribute applications quickly for Windows, Linux, macOS and Mobile devices
+
+Read the chapter "Distributing Ring Applications using Ring2EXE" for more information!
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better Ring For Android
+
+Better Ring For Android
+=======================
+
+Ring For Android (using RingQt) is updated to use the Ring Object File ( *.ringo ) instead of using
+many source code files ( *.ring )
+
+The next screen shot is an example of building the cards game for Android
+
+We are using cards.ringo instead of cards.ring
+
+If you have large project (many *.ring files) it will use only one *.ringo file.
+
+.. image:: cardsqt.png
+       :alt: Better Ring for Android
+
+
+To prepare Qt project to distribute RingQt application for Mobile use Ring2EXE
+
+Example 
+
+.. code-block:: ring
+
+       ring2exe cards.ring -dist -mobileqt
+
+Example (2)
+
+.. code-block:: ring
+
+       ring2exe formdesigner.ring -dist -mobileqt
+
+.. image:: formdesignerandroid.png
+       :alt: Form Designer - Android
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; New Tool: Folder2qrc
+
+New Tool: Folder2qrc
+====================
+
+When we have large RingQt project that contains a lot of images and files, We need to add these files 
+to the resource file ( *.qrc ) when distributing applications for Mobile devices. 
+
+Instead of adding these files one by one, Ring 1.6 comes with a simple tool that save our time, It's
+called Folder2qrc.
+
+Example:
+
+.. code-block:: none
+
+       folder2qrc formdesigner.ring
+
+We determine the main source file while we are in the application folder, and Folder2qrc will check all
+of the files in the current folder and sub folders, Then add them to the resource file after the
+mainfile.ringo (In our example this will be formdesigner.ringo)
+
+The output file will be : project.qrc
+
+You can open it and remove the files that you don't need in the resources!
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better Scripts for building Ring
+
+Better Scripts for building Ring
+================================
+
+Ring 1.6 comes with better scripts for building Ring from source code.
+
+The updates are tested on 32bit and 64bit systems on Windows, Linux (Ubuntu,Fedora) and macOS.
+
+The scripts for Windows are updated to find the Visual C/C++ compiler based on your Visual Studio version.
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; RingConsoleColors Extension
+
+RingConsoleColors Extension
+===========================
+
+Using the RingConsoleColors extension we can easily change the colors used in our console applications
+
+.. image:: consolecolors.png
+       :alt: RingConsoleColors
+
+For more information check the RingConsoleColors chapter in the documentation.
+
+.. index:: 
+       pair: What is new in Ring 1.6?; RingMurmurHash Extension
+
+RingMurmurHash Extension
+========================
+
+Ring 1.6 comes with the RingMurmurHash extension!
+
+Developer: Hassan Ahmed
+
+Example:
+
+.. code-block:: ring
+
+       load "murmurhashlib.ring"
+
+       key = "Ring Language"
+
+       see murmurhash3_x86_32(key, 0, 0) + nl // Output: 1894444853
+       see murmurhash3_x86_32(key, 0, 1) + nl // Output: 70eaef35
+
+For more information check the RingMurmurHash chapter in the documentation.
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+Ring Notepad comes with the next updates
+
+(1) Automatic setting for the Main File when we Run the application (using the Main file buttons).
+
+(2) Main File - Automatic save before running.
+
+(3) When we run GUI application - don't change the focus to the text box used for the input in the Output Window.
+
+(4) A button and option to run web applications
+
+.. image:: runwebapp1.png
+       :alt: Ring Notepad - Run Web Application - shot 1
+
+For Windows users, Ring 1.6 comes with Apache Web server!
+
+We can run any web application from any folder directly without doing any configuration.
+
+.. image:: runwebapp2.png
+       :alt: Ring Notepad - Run Web Application - shot 2
+
+(5) Tools - Operating System - Terminal (Command Prompt) & Files Manager (Explorer).
+
+.. image:: rnotetoolsterminal.png
+       :alt: Ring Notepad - Tools - Terminal - shot 1
+
+So we can quickly open the Command Prompt or the Explorer at the application folder.
+
+.. image:: rnotetoolsterminal2.png
+       :alt: Ring Notepad - Tools - Terminal - shot 2
+
+(6) Support *.sh & *.bat extensions.
+
+(7) New Menu: Distribute 
+
+.. image:: rnotedistribute.png
+       :alt: Ring Notepad - Distribute
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better RingQt
+
+Better RingQt
+=============
+
+RingQt comes with the next updates
+
+(1) QAllEvents - getkeytext() Method
+
+(2) QSQLQuery - exec_2() Method
+
+(3) QDockWidget Events
+
+(4) AppFile() Function
+
+(5) IsMobile() Function
+
+(6) QRegion Class
+
+(7) QCoreApplication class
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better StdLib
+
+Better StdLib
+=============
+
+StdLib comes with the next updates
+
+(1) Factors() function is updated (Return the output instead of printing it)
+
+(2) Palindrome() function is updated (Return the output instead of printing it)
+
+(3) Using stdlibcore.ring we can use the StdLib functions (Without Classes)
+
+    Also this is useful when developing standalone console applications
+
+    Because using stdlib.ring (functions & classes) will load libraries like RingLibCurl, RingOpenSSL, etc.
+
+
+(4) New Functions
+
+* SystemSilent(cCommand) Function : Execute system commands without displaying the output.
+
+* OSCreateOpenFolder(cFolder) : Create folder then change the current folder to this new folder 
+
+* OSCopyFolder(cParentFolder,cFolderNameToCopy) : Copy folder to the current directory
+
+* OSDeleteFolder(cFolder) : Delete Folder
+
+* OSCopyFile(cFileName) : Copy File to the current directory
+
+* OSDeleteFile(cFileName) : Delete File
+
+* OSRenameFile(cOldFileName,cNewFileName) : Rename file 
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better RingVM
+
+Better RingVM
+=============
+
+RingVM comes with the next updates
+
+(1) Support using many getter methods in Expressions
+
+(2) Support using this & self in setter/getter/normal methods without calling setter/getter methods.
+
+(3) TempName() function is updated (Better Code)
+
+(4) ExeFileName() function is updated (Better Code)
+
+(5) Private Attributes - Support re-usage in the class region (After the keyword private)
+
+(6) Ring API : ring_scanner_runobjstring()
+
+(7) ring_state_setvar() function
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better RingREPL
+
+Better RingREPL
+===============
+
+RingREPL comes with the next updates
+
+(1) RingREPL will get command line parameters to determine the style.
+
+(2) Setting RingREPL Style based on Ring Notepad Style.
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using Tab instead of char(9)
+
+Using Tab instead of char(9)
+============================
+
+The variable Tab is defined to be used instead of char(9)
+
+Example (1):
+
+.. code-block:: ring
+
+       see :one + nl + tab + :two + nl + tab + tab + :three
+
+Output:
+
+.. code-block:: none
+
+       one
+               two
+                       three
+
+You can change the variable to another value
+
+Example (2):
+
+.. code-block:: ring
+
+       tab = "  "
+       see :one + nl + tab + :two + nl + tab + tab + :three
+
+Output:
+
+.. code-block:: none
+
+       one
+         two
+           three
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using CR as Carriage return
+
+Using CR as Carriage return
+===========================
+
+The next example count from 1 to 10 in the same line during 10 seconds
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       for x = 1 to 10 see x sleep(1) see cr next
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using the ! operator as not
+
+Using the ! operator as not
+===========================
+
+We have = and != in the Ring language
+
+But for the logical operators we have and, or & not
+
+Now we can use the ! operator as not
+
+Example:
+
+.. code-block:: ring
+
+       if ! false
+               see "True!" + nl
+       ok
+
+Output
+
+.. code-block:: none
+
+       True!
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using && and || operators
+
+Using && and || operators
+=========================
+
+In Ring we have the next keywords for the logical operations
+
+* and
+* or
+* not
+
+Now we have also the next operators
+
+* &&
+* ||
+* !
+
+Example:
+
+.. code-block:: ring
+
+       if one() and two()
+               see "Test1 - Fail" + nl
+       else
+               see "Test1 - Pass" + nl
+       ok
+
+       if two() or one()
+               see "Test2 - Pass" + nl
+       else
+               see "Test2 - Fail" + nl
+       ok
+
+       if one() && two()
+               see "Test3 - Fail" + nl
+       else
+               see "Test3 - Pass" + nl
+       ok
+
+       if two() || one()
+               see "Test4 - Pass" + nl
+       else
+               see "Test4 - Fail" + nl
+       ok
+
+       func one return True
+
+       func two return False
+
+Output:
+
+.. code-block:: none
+
+       Test1 - Pass
+       Test2 - Pass
+       Test3 - Pass
+       Test4 - Pass
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using ? to print expression then new line
+
+Using ? to print expression then new line
+=========================================
+
+It's common to print new line after printing an expression, We can use the ? operator to do that!
+
+Example:
+
+.. code-block:: ring
+
+       ? "Hello, World!"
+       for x = 1 to 10
+               ? x
+       next
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
diff --git a/docs/en/source/whatisnew7.txt b/docs/en/source/whatisnew7.txt
new file mode 100644 (file)
index 0000000..e0b4181
--- /dev/null
@@ -0,0 +1,458 @@
+.. index:: 
+       single: What is new in Ring 1.7?; Introduction
+
+========================
+What is new in Ring 1.7?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.7 release.
+
+.. index:: 
+       pair: What is new in Ring 1.7?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.7 comes with many new features!
+
+* New Command: Load Package
+* ringvm_see() and ringvm_give() functions
+* ring_state_new() and ring_state_mainfile() functions
+* Better Trace Library
+* Better Ring Notepad
+* Better RingQt
+* Better Ring2EXE
+* Better RingZip
+* Better Documentation
+* Better Ring VM
+* RingLibuv Extension
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; New Command: Load Package
+
+New Command: Load Package
+=========================
+
+Using the 'load' command we can use many ring source files in the same project
+
+But all of these files will share the same global scope 
+
+Now we have the "Load Package" command too
+
+Using "Load Package" we can load a library (*.ring file) in new global scope
+
+This is very useful to create libraries that avoid conflicts in global variables
+
+Example:
+
+File: loadpackage.ring
+
+.. code-block:: ring
+
+       x = 100
+       ? "Hello, World!"
+       load package "testloadpackage.ring"
+
+       ? x
+       test()
+
+File: testloadpackage.ring
+
+.. code-block:: ring
+
+       ? "Hello from testloadpackage.ring"
+
+       x = 1000
+
+       test()
+
+       func test
+               ? x
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       Hello from testloadpackage.ring
+       1000
+       100
+       1000
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; ringvm_see() and ringvm_give() functions
+
+ringvm_see() and ringvm_give() functions
+========================================
+
+Using the ringvm_see() function we can redefine the behavior of the See command
+
+Also we can use ring_see() to have the original behavior
+
+Example:
+
+.. code-block:: ring
+
+       see "Hello world" + nl
+       see 123 + nl
+       see ["one","two","three"]
+       see new point {x=10 y=20 z=30} 
+
+       func ringvm_see t
+               ring_see("We want to print: ")
+               ring_See(t)
+
+       class point x y z
+
+Output:
+
+.. code-block:: none
+
+       We want to print: Hello world
+       We want to print: 123
+       We want to print: one
+       two
+       three
+       We want to print: x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+Using the ringvm_give() function we can redefine the behavior of the Give command
+
+Also we can use ring_give() to have the original behavior
+
+Example:
+
+.. code-block:: ring
+
+       see "Name: " give name
+       see "Hello " + name
+
+       func ringvm_give
+               see "Mahmoud" + nl
+               return "Mahmoud"
+
+Output:
+
+.. code-block:: ring
+
+       Name: Mahmoud
+       Hello Mahmoud
+
+.. index:: 
+       pair: What is new in Ring 1.7?; ring_state_new() and ring_state_mainfile() functions
+
+ring_state_new() and ring_state_mainfile() functions
+====================================================
+
+Using ring_state_new() and ring_state_mainfile() we can run Ring programs from Ring programs
+
+But unlike ring_state_main(), Here we can control when to delete the Ring state!
+
+This is important when we run GUI programs from GUI programs
+
+Because they will share the GUI Library (RingQt), And In this case the caller will call
+
+qApp.Exec()
+
+So the sub program, will not stop and will return to the Main program
+
+Here deleting the State of the sub programs will lead to a problem when we run the sub program events
+
+So keeping the state is important for sub GUI programs hosted in GUI programs.
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Trace Library
+
+Better Trace Library
+====================
+
+The Trace library is updated, In the Debugger at break points we have now the "callstack" command
+
+This command will print the functions call stack.
+
+Example:
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       func main
+               ? "Hello from main!"
+               test1()
+
+       func test1 
+               ? "Hello from test1!"
+               test2()
+
+       func test2 
+               ? "Hello from test2!"
+               test3()
+
+       func test3 
+               ? "Hello from test3!"
+               breakpoint()
+
+
+.. image:: callstack.png
+       :alt: Call Stack
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+Ring Notepad comes with the next updates
+
+(1) Support *.cf extension
+(2) Using Hash function (SHA256) for better "Save Changes?" message
+(3) Ring Notepad - X Button - Ask for saving changes?
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better RingQt
+
+Better RingQt
+=============
+
+The next classes are added to RingQt
+
+(1)  QStackedWidget
+(2)  QCalendarWidget
+(3)  QOpenGLFunctions
+(4)  QOpenGLContext
+(5)  QSurfaceFormat
+(6)  QOpenGLWidget
+(7)  QOpenGLVersionProfile
+(8)  QOpenGLFunctions_3_2_Core
+(9)  QVector2D
+(10) QVector3D
+(11) QVector4D
+(12) QQuaternion
+(13) QMatrix4x4
+(14) QOpenGLPaintDevice
+(15) QPaintDevice
+(16) QOpenGLTimerQuery
+(17) QOpenGLDebugLogger
+(18) QOpenGLFramebufferObject
+(19) QOpenGLVertexArrayObject
+(20) QOpenGLBuffer
+(21) QOpenGLShaderProgram
+(22) QOpenGLShader
+(23) QOpenGLTexture
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Ring2EXE
+
+Better Ring2EXE
+===============
+
+Ring2EXE is updated to works as expected when we don't have a C/C++ compiler
+
+Where we can distribute applications and get (exe file and ringo file) in this case.
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better RingZip
+
+Better RingZip
+==============
+
+The library is updated to support extracting files contains sub folders!
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Documentation
+
+Better Documentation
+====================
+
+(1) RingQt Classes Chapter - The classes are sorted.
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Ring VM
+
+Better Ring VM
+==============
+
+(1) Better Error Message
+(2) List2Str() function support lists contains numbers
+(3) Correct support for numbers contains _ as separator
+(4) Creating lists without variables (statement --> Expression --> List)
+(5) IsNULL() - Not case sensitive - treat Null and null like NULL
+(6) Support adding the Self object to an attribute in this object
+(7) Using ':' operator then keyword will create lower case literal 
+(8) Printing objects - respect decimals() function
+(9) When literal is not closed - determine the start of the literal
+(10) Better message when printing objects contains lists
+(11) VarPtr() - Support getting a pointer to variables in the local scope
+(12) replace performance instructions with normal instructions when creating new threads
+
+.. index:: 
+       pair: What is new in Ring 1.7?; RingLibuv Extension
+
+RingLibuv Extension
+===================
+
+Ring 1.7 comes with the RingLibuv extension
+
+Libuv is a multi-platform support library with a focus on asynchronous I/O.
+
+Example (Events Loop):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       counter = 0
+       idler = NULL 
+
+       func main
+               idler = new_uv_idle_t()
+               uv_idle_init(uv_default_loop(), idler)
+               uv_idle_start(idler, "wait()")
+               ? "Idling..."
+               uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+               uv_loop_close(uv_default_loop());
+               destroy_uv_idle_t(idler)
+
+       func wait
+               counter++
+               if counter >= 100000
+                       uv_idle_stop(idler)
+               ok
+
+Output:
+
+.. code-block:: none
+
+       Idling...
+
+Example (Server):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Server Side - Using Classes"
+
+       open_object(:MyServer)
+
+       class MyServer from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               server  = NULL
+               client  = NULL
+               myloop  = NULL
+               
+               func start
+                       myloop = uv_default_loop()
+                       server = new_uv_tcp_t()
+                       uv_tcp_init(myloop, server)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_bind(server, addr, 0)
+                       r = uv_listen(server, DEFAULT_BACKLOG, Method(:newconnection) )
+                       if r 
+                               ? "Listen error " + uv_strerror(r)
+                               return 1
+                       ok
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(server)
+                       destroy_uv_sockaddr_in(addr)
+               
+               func newconnection
+                       ? "New Connection"
+                       aPara   = uv_Eventpara(server,:connect)
+                       nStatus = aPara[2]
+                       if nStatus < 0
+                               ? "New connection error : " + nStatus 
+                               return 
+                       ok
+                       client = new_uv_tcp_t()
+                       uv_tcp_init(myloop, client)
+                       if uv_accept(server, client) = 0 
+                                       uv_read_start(client, uv_myalloccallback(), 
+                                                               Method(:echo_read))
+                       ok
+               
+               func echo_read 
+                       aPara = uv_Eventpara(client,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                               req = new_uv_write_t()
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                               uv_write(req, client, wrbuf, 1, Method(:echo_write))
+                               ? uv_buf2str(wrbuf)
+                               message = "message from the server to the client"
+                               buf = new_uv_buf_t()
+                               set_uv_buf_t_len(buf,len(message))
+                               set_uv_buf_t_base(buf,varptr("message","char *"))
+                               uv_write(req, client, buf, 1, Method(:echo_write))
+                       ok
+               
+               func echo_write
+                       aPara = uv_Eventpara(client,:read)
+                       req   = aPara[1]
+       
+
+Output:
+
+When we run the client, We will see the message "New Connection"
+
+Then the message "hello from the client"
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side - Using Classes
+       New Connection
+       hello from the client
+
+Example (Using Threads):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Threads - Using Classes"
+
+       open_object(:MyThreads)
+
+       class MyThreads from ObjectControllerParent
+
+               func Start
+                       one_id = new_uv_thread_t()
+                       two_id = new_uv_thread_t()
+                       uv_thread_create(one_id, Method(:One))
+                       uv_thread_create(two_id, Method(:Two))
+                       uv_thread_join(one_id)
+                       uv_thread_join(two_id)
+                       destroy_uv_thread_t(one_id)
+                       destroy_uv_thread_t(two_id)
+               
+               func one
+                       ? "Message from the First Thread!"
+               
+               func Two
+                       ? "Message from the Second Thread!"
+               
+
+Output:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads - Using Classes
+       Message from the First Thread!
+       Message from the Second Thread!
+
+For more information about this extension (RingLibuv) check the chapter: Using RingLibuv
\ No newline at end of file
diff --git a/docs/en/source/whatisnew8.txt b/docs/en/source/whatisnew8.txt
new file mode 100644 (file)
index 0000000..b6080ac
--- /dev/null
@@ -0,0 +1,567 @@
+.. index:: 
+       single: What is new in Ring 1.8?; Introduction
+
+========================
+What is new in Ring 1.8?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.8 release.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.8 comes with the next features!
+
+* Better Performance
+* Find in files Application
+* String2Constant Application
+* StopWatch Application
+* More 3D Samples
+* Compiling on Manjaro Linux
+* Using This in the class region as Self
+* Default value for object attributes is NULL
+* The For Loops uses the local scope
+* Merge binary characters
+* FoxRing Library
+* Better Form Designer
+* Better Cards Game
+* Better RingQt
+* Better Code Generator For Extensions
+* Better Ring Compiler and VM
+* Notes to extensions creators
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Performance 
+
+Better Performance
+==================
+
+Ring 1.8 is faster than Ring 1.7 
+
+The performance gain is between 10% and 100% based on the application.
+
+Check the 3D samples in this release to get an idea about the current performance.
+
+For more information check the Performance Tips chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Find in files Application
+
+Find in files Application
+=========================
+
+Ring 1.8 comes with Find in files application
+
+.. image:: findinfiles.png
+       :alt: Find in files
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; String2Constant Application
+
+String2Constant Application
+===========================
+
+Ring 1.8 comes with String2Constant application
+
+Using this tool we can convert the source code to be based on constants instead of string literals
+
+Then we can store constants in separate source code files that we can translate to different languages
+
+Where we can have special file for each language, like (English.ring, Arabic.ring and so on)
+
+Using this simple tool, the Form Designer is translated to the Arabic language.
+
+For more information check the Multi-language Applications chapter.
+
+.. image:: string2constant.png
+       :alt: String2Constant 
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; StopWatch Application
+
+StopWatch Application
+=====================
+
+Ring 1.8 comes with StopWatch application
+
+.. image:: stopwatch.png
+       :alt: StopWatch
+
+.. index:: 
+       pair: What is new in Ring 1.8?; More 3D Samples
+
+More 3D Samples
+===============
+
+Ring 1.8 comes with more 3D Samples
+
+The next screen shot for the Top-Down view - Many levels of cubes sample
+
+.. image:: more3dsamples.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera Sample
+
+.. image:: more3dsamples2.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera and background sample
+
+Developer : Azzeddine Remmal
+
+.. image:: cameraandbackground.png
+       :alt: Camera and background
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Compiling on Manjaro Linux
+
+Compiling on Manjaro Linux
+==========================
+
+Ring 1.8 is tested on Manjaro Linux too
+
+Tests by : Iip Rifai
+
+.. image:: ringonmanjarolinux.png
+       :alt: Ring on Manjaro Linux
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Using This in the class region as Self
+
+Using This in the class region as Self
+======================================
+
+The class region is the region that comes after the class name and before any method.
+
+Now we can use This in the class region as Self.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+
+               o1 = new program {
+                       test()
+               }
+
+               ? o1
+
+       class program 
+
+               this.name = "My Application"
+               this.version = "1.0"
+               ? name ? version        
+
+               func test
+                       ? "Name    = " + name 
+                       ? "Version = " + version
+
+Output
+
+.. code-block:: none
+
+       My Application
+       1.0
+       Name    = My Application
+       Version = 1.0
+       name: My Application
+       version: 1.0
+
+.. note:: When we use braces to change the current active object, Using This we can still point to the class.
+
+.. tip:: The difference between This and Self is that Self point to the current active object that we can change using braces.
+
+Remember that in most cases we don't need to use This or Self in the class region
+
+We can write
+
+
+.. code-block:: ring
+
+       class program name version
+
+Or 
+
+.. code-block:: ring
+
+       class program name="My Application" version="1.0"
+
+.. note:: We use This or Self in the class region just to avoid conflict with global variables that are defined with the same name.
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Default value for object attributes is NULL
+
+Default value for object attributes is NULL
+===========================================
+
+Starting from Ring 1.8 the default value for object attributes is NULL
+
+In Ring, the NULL value is just an empty string or a string that contains "NULL"
+
+We can check for NULL values using the isNULL() function
+
+Example:
+
+.. code-block:: ring
+
+       oProgram = new Program
+       ? oProgram.name
+       ? oProgram.version
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       oProgram { name="My Application" version="1.0" }
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       ? oProgram
+
+       class program
+               name 
+               version
+
+Output:
+
+.. code-block:: none
+
+       NULL
+       NULL
+       1
+       1
+       0
+       0
+       name: My Application
+       version: 1.0
+
+In previous versions of Ring, trying to access the object attribute before assigning a value to it
+
+Will lead to runtime error and you can't check it using isnull() 
+
+The only way was assigning a value or using try/catch/end 
+
+We changed this behavior so we can have full control in seamless way.
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; The For Loops uses the local scope
+
+The For Loops uses the local scope
+==================================
+
+In Ring 1.8, when the For Loop defines new identifier (variable) it will define it in the local scope.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       ? x             # Print 10
+       test1()
+       ? x             # Print 10
+       test2()
+       ? x             # Print 10
+
+       func test1
+               for x = 1 to 5
+               next
+               ? x     # Print 6
+
+       func test2
+               list = 1:5
+               for x in list
+               next
+               ? x     # Print NULL (The "For In" loop will kill the reference after the loop)
+
+Output:
+
+.. code-block:: ring
+
+       10
+       6
+       10
+       NULL
+       10      
+               
+.. index:: 
+       pair: What is new in Ring 1.8?; Merge binary characters
+
+Merge binary characters
+=======================
+
+From Ring 1.0 we can create binary strings and do operations on these strings.
+
+Now in Ring 1.8, we can get individual characters from these strings and merge them together using
+the '+' operator.
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome"
+       ? cstr[1] + cstr[2] + cStr[5]
+       v = cstr[1] + cstr[2] + cStr[5]
+       ? v
+       ? len(v)
+       c1 = cStr[1]
+       ? c1
+       aList = [1,2,3]
+       cStr = ""
+       for item in aList 
+               cStr += int2bytes(item)
+       next 
+       ? "All String"
+       ? len(cStr)
+       ? "First Part"
+       n1 = cStr[1] + cStr[2] + cStr[3] + cStr[4]
+       ? len(n1)
+       ? "Second Part"
+       n2 = cStr[5] + cStr[6] + cStr[7] + cStr[8]
+       ? len(n2)
+       ? "Third Part"
+       n3 = cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(n3)
+       ? "All String"
+       cString = cStr[1] + cStr[2] + cStr[3] + cStr[4] + 
+                 cStr[5] + cStr[6] + cStr[7] + cStr[8] + 
+                 cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(cString)
+       ? ascii(cStr[1])
+       ? len(cStr[2])
+
+Output:
+
+.. code-block:: ring
+
+       Weo
+       Weo
+       3
+       W
+       All String
+       12
+       First Part
+       4
+       Second Part
+       4       \ 2
+       Third Part
+       4
+       All String
+       12
+       1
+       1
+       
+
+.. index:: 
+       pair: What is new in Ring 1.8?; FoxRing Library
+
+FoxRing Library
+===============
+
+Developer: Jose Rosado
+
+A class with some of the functions I used in FoxPro\
+
+Example:
+
+.. code-block:: ring
+
+       Load "foxring.ring"
+
+       mf = new frFunctions
+       ? mf.frAbs(-45)      
+       ? mf.frAbs(10-30)    
+       ? mf.frAbs(30-10)   
+
+       ? mf.frTransform("    Ring is a good language    ",
+                        "@! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") 
+       ? mf.frAllTrim("    Ring is a good language    ", Null) 
+
+Output:
+
+.. code-block:: ring
+
+       45
+       20
+       20
+           RING IS A GOOD LANGUAGE
+       Ring is a good language
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Form Designer
+
+Better Form Designer
+====================
+
+(1) Layout Control - Display the control name when loading forms.
+(2) Button Control - Display the button images written using relative path.
+(3) Table  Control - Display the control name when loading forms.
+(4) Better behavior in "Bring to front" and "Send to back" operations.
+(5) New buttons are added to the toolbar (Duplicate, Bring to front, Send to back, Delete).
+(6) Using layouts in (Menubar designer, Window Flags window, Selecting Objects window).
+(7) Better behavior for displaying the properties window when changing the selected objects.
+(8) New buttons are added to move and resize multiple selection of objects.
+(9) Window Properties - Add button to select the layout.
+(10) Opening forms and switching between files is faster.
+(11) Objects Order window.
+(12) Select Objects window.
+(13) When we change the control name, the name will be updated in layout objects.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Cards Game
+
+Better Cards Game
+=================
+
+The Cards game is updated and we can play with the Computer
+
+.. image:: cardsmainmenu.png
+       :alt: Cards Main Menu
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better RingQt
+
+Better RingQt
+=============
+
+* The next classes are added to RingQt
+
+(1) QTabBar
+(2) QFile
+(3) QFileDevice
+(4) QStandardPaths
+(5) QDir
+(6) QQuickWidget
+(7) QQmlError
+(8) QScrollBar
+
+* RingQt for Android is updated to support modern versions of Qt
+
+Tested using
+
+(1) Qt 5.5.1
+(2) Qt 5.9.5
+(3) Qt 5.11.0
+
+* In RingQt for Android, The Ring Object File (ringo) will be executed directly from resources.
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Code Generator For Extensions
+
+Better Code Generator For Extensions
+====================================
+
+New Option: StaticMethods
+
+Starting from Ring 1.8 the code generator support the staticmethods option.
+
+So the code generator can know that the class doesn't need an object to call the methods.
+
+Example:
+
+.. code-block:: none
+
+       <class>
+       name: QStandardPaths
+       para: void
+       nonew
+       staticmethods
+       </class>
+
+       QString displayName(QStandardPaths::StandardLocation type)
+       QString findExecutable(QString executableName, QStringList paths))
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Ring Compiler and VM
+
+Better Ring Compiler and VM
+===========================
+
+(1) Better loading for files in relative paths
+(2) Code Optimization for eval() function 
+(3) Better Memory Pool
+(4) When embedding Ring in Ring, the error in the hosted environment will not close the host
+
+Example:
+
+.. code-block:: ring
+
+       ? "Start the test!" 
+
+       pState = ring_state_init()
+
+       ring_state_runcode(pState," ? 'Let us try having an error' ? x")
+
+       ring_state_delete(pState)
+
+       ? ""
+       ? "End of test!"
+
+Output:
+
+.. code-block:: none
+
+       Start the test!
+       Let us try having an error
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file Ring_EmbeddedCode
+       End of test!
+       
+(5) The compiler will ignore new lines after keywords that expect tokens after it
+
+Example:
+
+.. code-block:: ring
+
+       see 
+       "
+               Hello, World!
+       "
+       test()
+
+       func 
+       #======================#
+               Test
+       #======================#
+
+               ?
+               "
+       
+               Hello from the Test function
+
+               "
+
+Output:
+
+.. code-block:: none
+
+
+               Hello, World!
+
+
+               Hello from the Test function
+
+(6) Better code (faster) for the main loop, special loop for eval() function.
+(7) Better code (faster) for tracking C pointers to avoid using NULL pointers.
+(8) Better code (faster) for getting the self object using braces.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Notes to extensions creators
+
+Notes to extensions creators
+============================
+
+If you have created new extensions for Ring in the C/C++ languages.
+
+You have to rebuild your extension (Generate the DLL file again using Ring 1.8 header files) before usage with Ring 1.8
+
+Because we changed the internal structure of the VM, but no changes to the code are required. just rebuild.
diff --git a/docs/en/source/whatisnew9.txt b/docs/en/source/whatisnew9.txt
new file mode 100644 (file)
index 0000000..54f3e25
--- /dev/null
@@ -0,0 +1,606 @@
+.. index:: 
+       single: What is new in Ring 1.9?; Introduction
+
+========================
+What is new in Ring 1.9?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.9 release.
+
+.. index:: 
+       pair: What is new in Ring 1.9?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.9 comes with the next features!
+
+* New Game : Gold Magic 800
+* More Games
+* Better Ring Notepad
+* Better StdLib
+* BigNumber Library
+* RingPostgreSQL Extension
+* Deploying Web applications in the Cloud
+* Better RingQt
+* Better Memory Management 
+* Better Code Generator for Extensions
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.9?; New Game : Gold Magic 800
+
+New Game : Gold Magic 800
+=========================
+
+The Gold Magic 800 is a new puzzle game.
+
+Ring 1.9 comes with the Demo Version (18 Levels) and the game source code.
+
+Steam Page (44 Levels) : https://store.steampowered.com/app/939200/Gold_Magic_800/
+
+We can select the level
+
+.. image:: gmshot2.png
+       :alt: Gold Magic 800 - Screen Shot 2
+
+The next screen shot for level (1)
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 - Screen Shot 3
+
+The Gold Magic 800 Level Editor 
+
+.. image:: gmleveleditor.png
+       :alt: Gold Magic 800 Level Editor
+
+.. index:: 
+       pair: What is new in Ring 1.9?; More Games 
+
+More Games
+==========
+
+The next games are added to Ring Applications 
+
+(1) The 2048 Game
+(2) The Memory Game
+(3) The Wise Quadrat Game 
+(4) The Tessera Game
+(5) The Othello Game
+
+The next screen shot for the 2048 game on Android 
+
+.. image:: game2048_shot1.png
+       :alt: 2048 Game
+
+The next screen shot for the Tessera game
+
+.. image:: tesseragame.png
+       :alt: Tessera Game
+
+The next screen shot for the Othello game
+
+.. image:: othellogame.png
+       :alt: Othello Game
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better Ring Notepad 
+
+Better Ring Notepad
+===================
+
+(1) New Style
+(2) New Mode
+(3) Tabs for opened files 
+(4) Support executing batch files 
+
+.. image:: rnote19.jpg
+       :alt: Ring Notepad
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better StdLib
+
+Better StdLib
+=============
+
+(1) The List2Code() function is added to the StdLib 
+
+This function convert a Ring list during the runtime to Ring source code that we can save to source files.
+
+The list may contains strings, numbers or sub lists.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList = 1:10
+       ? list2Code(aList)
+
+Output:
+
+.. code-block:: ring
+
+       [
+               1,2,3,4,5,6,7,8,9,10
+       ]
+
+
+(2) The Str2ASCIIList() and ASCIIList2Str() are added to the StdLib
+
+Using these functions we can convert between string of bytes and a list of numbers where each item represent
+the ASCII code of one byte in the string.
+
+So we may convert a string of bytes to ASCII List then do some operations on the list numbers (Like XOR)
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       cStr = "MmMm"
+
+       aList = Str2ASCIILIST(cStr)
+       ? aList 
+
+       cStr2 = ASCIIList2Str(aList)
+       ? cStr2
+       ? len(cStr2)
+
+Output:
+
+.. code-block:: none
+
+       77
+       109
+       77
+       109
+
+       MmMm
+       4
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; BigNumber Library
+
+BigNumber Library
+=================
+
+Using the BigNumber library we can do arithmetic operations on huge numbers.
+
+Example:
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+
+       num1 = "62345678901234567891678345123456789"    ### Big
+       num2 =  "1237894567890123419871236545"          ### Small
+       num3 =     "64"                                 ### Divide Small
+       num4 = "765432"                 
+       num5 =      "3"                                 ### Power            
+    
+       ? "Add big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 + a2                    a3.Print() ? nl
+
+       ? "Substract big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 - a2                    a3.Print() ? nl
+
+       ? "Multiply big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()      
+       a3 = a1 * a2                    a3.print() ? nl
+
+       ? "Divide big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+    
+       ? "Divide big numbers: by very small number" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num3)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+
+       ? "Power of big number:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num5)        a2.print()
+       a3 = a1 ^ a2                    a3.print() ? nl
+    
+Output:
+
+.. code-block:: none
+
+       Add big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       62345680139129135781801764994693334
+
+
+       Substract big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       52345687663340000001554925252220244
+
+
+       Multiply big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       77177377243260150103462178714197454736432472780119682305154005
+
+
+       Divide big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       50364288
+
+
+       Divide big numbers: by very small number
+       62345678901234567891678345123456789
+       64
+       974151232831790123307474142554012
+
+
+       Power of big number:
+       62345678901234567891678345123456789
+       3
+       242336636261471172092347146031727004 (Output continue in next line)
+       371698195628343934238988256152289508 (Output continue in next line)
+       493964611043228971692389860897069
+
+For more information check the BigNumber Library Chapter in the documentation
+
+.. index:: 
+       pair: What is new in Ring 1.9?; RingPostgreSQL Extension
+
+RingPostgreSQL Extension
+========================
+
+Ring 1.9 provide native support for PostgreSQL database using the RingPostgreSQL Extension.
+
+Example:
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+
+       conninfo = "user=postgres password=sa dbname = mahdb"
+
+       exit_nicely = func conn {
+               PQfinish(conn)
+               shutdown(1)
+       }
+
+       conn = PQconnectdb(conninfo)
+
+       if (PQstatus(conn) != CONNECTION_OK)
+               fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                       call exit_nicely(conn)
+       ok
+
+       res = PQexec(conn, "
+               DROP DATABASE mahdb;
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+
+       res = PQexec(conn, "CREATE DATABASE mahdb;")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+
+
+       res = PQexec(conn, "
+       CREATE TABLE COMPANY (
+                        ID INT PRIMARY KEY     NOT NULL,
+                        NAME           TEXT    NOT NULL,
+                        AGE            INT     NOT NULL,
+                        ADDRESS        CHAR(50),
+                        SALARY         REAL );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                       INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
+                       VALUES  (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
+                                       (2, 'Ahmed'   , 27, 'Jeddah', 20.00 ),
+                                       (3, 'Mohammed', 33, 'Egypt' , 30.00 ),
+                                       (4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                  select * from COMPANY
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+               PQclear(res)
+               call exit_nicely(conn)
+       ok
+
+
+       nFields = PQnfields(res)
+       for i = 1 to nFields
+                       ? PQfname(res, i-1) 
+       next
+
+       ? copy("*",60)
+
+       for i = 1 to PQntuples(res)
+               for j=1 to nFields
+                       see PQgetvalue(res, i-1, j-1) + " "
+               next
+               see nl
+       next
+
+       PQclear(res)
+
+       PQfinish(conn)
+
+Output:
+
+.. code-block:: none
+
+       id
+       name
+       age
+       address
+       salary
+       ************************************************************
+       1 Mahmoud  31 Jeddah  10
+       2 Ahmed    27 Jeddah  20
+       3 Mohammed 31 Egypt   30
+       4 Ibrahim  24 Egypt   40        
+       
+
+For more information check the PostgreSQL Chapter in the documentation
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Deploying Web applications in the Cloud
+
+Deploying Web applications in the Cloud
+=======================================
+
+We created a new project and tutorial to explain how to deploy Ring web applications in the Cloud using Heroku
+
+Demo : http://testring.herokuapp.com/
+
+Project : https://github.com/ring-lang/RingWebAppOnHeroku
+
+Heroku Website : https://www.heroku.com/
+
+.. image:: ringincloud.png
+       :alt: Ring Web Application in the Cloud
+
+For more information check the Deploying Web Applications In The Cloud chapter in the documentation.
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better RingQt
+
+Better RingQt
+=============
+
+(1) The next classes are added to RingQt 
+
+* QDrag
+* QMimeData
+* QDropEvent
+* QDragMoveEvent
+* QDragEnterEvent
+* QDragLeaveEvent
+* QClipboard
+* QChildEvent
+* QGeoPositionInfo
+* QGeoCoordinate
+* QGeoAddress
+* QGeoAreaMonitorInfo
+* QGeoAreaMonitorSource
+* QGeoCircle
+* QGeoPositionInfoSource
+* QGeoRectangle
+* QGeoShape
+* QGeoSatelliteInfo
+* QGeoSatelliteInfoSource
+* QNmeaPositionInfoSource
+* QAxWidget
+* QTextStream
+* QPrinterInfo
+* QPrintPreviewWidget
+* QPrintPreviewDialog
+* QPageSetupDialog
+* QAbstractPrintDialog
+* QPrintDialog
+
+(2) The next classes are updated
+
+* QAllEvents Class : New Events (ChildAdded, ChildPolished, ChildRemoved).
+* QPainter Class : Updated Methods (drawConvexPloygon, drawPoints, drawPolyline) Accept Ring list of points.
+* QVariant : More versions that accept different parameters when creating the object.
+* QAxBase : Different versions for the dynamicCall() and querySubObject() methods.
+
+The next example for using the QPrintPreviewDialog class
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer Preview Dialog")
+                       setgeometry(100,100,800,880)
+                       printer1 = new qPrinter(0)
+                       show()
+                       oPreview = new qPrintPreviewDialog(printer1) {
+                               setParent(win1)
+                               move(10,10) 
+                               setPaintrequestedevent("printPreview()")
+                               exec()
+                       }
+               }
+               exec()
+       }
+
+       func printPreview
+               printer1  {
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)
+                               setfont(myfont)
+                               drawtext(100,100,"Test - Page (1)")
+                               printer1.newpage()
+                               drawtext(100,100,"Test - Page (2)")
+                               printer1.newpage()
+                               myfont2 = new qfont("Times",14,-1,0)
+                               setfont(myfont2)
+                               for x = 1 to 30
+                                       drawtext(100,100+(20*x),"Number : " + x)
+                               next 
+                               endpaint()
+                       }
+               }
+
+Screen Shot:
+
+.. image:: printpreviewdialog.png
+       :alt: Print Preview Dialog
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better Memory Management
+
+Better Memory Management
+========================
+
+The Ring API is updated to include RING_API_RETMANAGEDCPOINTER()
+
+Using RING_API_RETMANAGEDCPOINTER() the Ring extensions written in C/C++ languages can return a managed
+pointer to Ring. This pointer can be controlled by the Ring VM using reference counting.
+
+This is important to avoid the need to write code that free the unmanaged resources like QPixMap objects in RingQt.
+
+Also the Code Generator for extensions is updated to automatically use RING_API_RETMANAGEDCPOINTER() based on need.
+
+Syntax:
+
+.. code-block:: ring
+
+       RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                       void (* pFreeFunc)(void *,void *))
+
+For more information about RING_API_RETMANAGEDCPOINTER()
+
+See the "Extension using the C/C++ languages" Chapter in the documentation 
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better Code Generator for Extensions
+
+Better Code Generator for Extensions
+====================================
+
+(1) The code generator for extensions is updated to support the <loadfile> command
+
+.. code-block:: ring
+
+       <loadfile> filename.cf
+
+This is useful to separate the extension configuraition file to many files
+
+Example:
+
+The file : qt_module_network.cf in the RingQt Extension
+
+.. code-block:: ring
+
+       <comment>
+                                       Module (network)
+       </comment>
+
+       <loadfile> qabstractsocket.cf
+       <loadfile> qnetworkproxy.cf
+       <loadfile> qtcpsocket.cf
+       <loadfile> qtcpserver.cf
+       <loadfile> qhostaddress.cf
+       <loadfile> qhostinfo.cf
+       <loadfile> qnetworkrequest.cf
+       <loadfile> qnetworkaccessmanager.cf
+       <loadfile> qnetworkreply.cf
+
+(2) The code generator support the <managed> option when defining classes.
+
+Using this option, the generator will use RING_API_RETMANAGEDCPOINTER() to return the C pointer.
+
+So the Garabage Collector will manage these C pointers.
+
+Example
+
+.. code-block:: ring
+
+       <class>
+       name: QFont
+       para: QString, int, int, bool
+       managed
+       </class>
+
+.. index:: 
+       pair: What is new in Ring 1.9?; More Improvements
+
+More Improvements
+=================
+
+(1)  Ring Compiler - The Rule (Factor -> '-' Expr) changed to (Factor -> '-' Factor).
+(2)  Ring VM - Better Error Message.
+(3)  Better code for IsNULL() function - updated to check pointers too.
+(4)  Better code for ringvm_evalinscope() function - used by the Trace Library.
+(5)  Better code for Space() function.
+(6)  Better code for Hex() and Dec() functions.
+(7)  Better code for Download() function.
+(8)  Better code for SubStr() function.
+(9)  Better code for the Unsigned() function.
+(10) Better code for Chdir() function.
+(11) Better code for Tempname() function.
+(12) Better code for HashTable - New Key (using ring_strdup() instead of strdup() function).
+(13) New Function : SRandom() - Initialize random number generator. 
+(14) New Function : IsPointer().
+(15) IsList() will not return True for C Pointers, we have now the IsPointer() function. 
+(16) The ? Operator is updated to respect the ringvm_see() function.
+(17) Scripts to run Ring tests on Linux and macOS (Not only Windows).
+(18) RingAllegro is Updated from Allegro 5.1 to Allegro 5.2.
+(19) Shader Functions are added to RingAllegro.
+(20) Joystick Functions are added to RingAllegro.
+(21) Network functions are added to RingLibSDL.
+(22) Game Engine for 2D Games - Text Class - Check the font object before usage.
+(23) Game Engine for 2D Games - Automatic support for Joystick.
+(24) RingLibCurl is updated to automatically use CURLOPT_COPYPOSTFIELDS when needed.
+(25) Ring Notepad - Find Previous Feature.
+(26) Ring Notepad - Default Style. 
+(27) Ring Notepad - Support using Non-English language (Like Arabic) in file names.
+(28) Form Designer - Nice Aliginment for Toolbox Icons.
+(29) Form Desginer - QAllEvents Class - Mouse Double Click Event.
+(30) Find in Files - Replace and Replace All options.
+(31) Qt Class Converter is updated for better conversion results.
+(32) More samples are added to ring/samples/other folder.
+(33) Code Refactoring for Ring Notepad, RingQt, Game Engine for 2D Games.
+(34) Better Documentation - Many images are updated to reflect the current state of Ring Environment.
+(35) Better Documentation - More chapters are added to the documentation.
\ No newline at end of file
diff --git a/docs/en/source/windowflags.png b/docs/en/source/windowflags.png
new file mode 100644 (file)
index 0000000..5ed7606
Binary files /dev/null and b/docs/en/source/windowflags.png differ
diff --git a/docs/en/source/winstartupman.jpg b/docs/en/source/winstartupman.jpg
new file mode 100644 (file)
index 0000000..b539a45
Binary files /dev/null and b/docs/en/source/winstartupman.jpg differ
diff --git a/docs/en/source/zerolib.txt b/docs/en/source/zerolib.txt
new file mode 100644 (file)
index 0000000..aec8503
--- /dev/null
@@ -0,0 +1,168 @@
+.. index:: 
+       Single: Using ZeroLib;  Introduction
+
+=============
+Using ZeroLib
+=============
+
+In this chapter we will learn how to use the ZeroLib library.
+
+
+.. index:: 
+       pair: Using ZeroLib; Introduction
+
+Introduction
+============
+
+ZeroLib is a simple library written in Ring.
+
+The library provideds classes for Lists and String where the index starts from 0.
+
+
+.. index:: 
+       pair: Using ZeroLib; Z() function
+
+Z() function
+============
+
+Syntax:
+
+.. code-block:: none
+
+       Z(String|List) ---> New Object (ZeroBasedString|ZeroBasedList)
+
+.. index:: 
+       pair: Using ZeroLib; ZeroBasedList Class
+
+ZeroBasedList Class
+===================
+
+Simple class provide a List where the index starts from zero.
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(List)                     
+Add(Value)                     Add item to the list
+Insert(nIndex,Value)           Inset Item after nIndex
+Find(Value)                    Find item
+Delete(nIndex)                 Delete item from the list 
+Item(nIndex)                   Get item from the list
+First()                                Get the first item in the list
+Last()                         Get the last item in the list
+Set(nIndex,Value)              Set item value
+FindInColumn(nCol,Value)       Find item in a column 
+Sort()                         Sort items - return new list
+Reverse()                      Reverse items - return new list
+Swap(nIndex1,nIndex2)          Swap two items
+===========================    ======================================================================
+
+
+Example:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using List - Index start from 0"
+       List = Z( [1,2,3] )
+       List.Add(4)
+       List.Add(5)
+       ? List[0]
+       ? List[1]
+       ? List[2]
+       ? List[3]
+       ? List[4]
+       nIndex = List.find(2)
+       ? "Find(2) = " + nIndex
+       List.delete(0)
+       ? "After deleting the first item : List[0]" 
+       ? "Now List[0] = " + List[0] 
+
+Output:
+
+.. code-block:: ring 
+
+       Using List - Index start from 0
+       1
+       2
+       3
+       4
+       5
+       Find(2) = 1
+       After deleting the first item : List[0]
+       Now List[0] = 2
+
+.. index:: 
+       pair: Using ZeroLib; ZeroBasedString Class
+
+ZeroBasedString Class
+=====================
+
+Simple class provide a String where the index starts from zero.
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Init(String|Number) 
+Lower()                        New String - Lower case characters
+Upper()                        New String - Upper case characters
+Left(x)                        New String - contains x characters from the left
+Right(x)                       New String - contains x characters from the right
+Lines()                        Number - Lines count
+Trim()                         New String - Remove Spaces
+Copy(x)                        New String - repeat string x times
+strcmp(cString)                Compare string with cString  
+tolist()                       List (String Lines to String Items)
+tofile(cFileName)              Write string to file
+mid(nPos1,nPos2)               New String - from nPos1 to nPos2
+getfrom(nPos1)                 New String - from nPos1 to the end of the string
+replace(cStr1,cStr2,lCase)     New String - Replace cStr1 with cStr2 , lCase (True=Match Case)
+split()                                List - Each Word as list item
+startswith(substring)          Return true if the start starts with a substring 
+endswith(substring)            Return true if the start ends with a substring
+===========================    ======================================================================
+
+Example:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using String - Index start from 0"
+       String = Z( "Welcome" )
+       ? String[0]
+       ? String[1]
+       ? String[2]
+       ? String[3]
+       ? String[4]
+       ? String[5]
+       ? String[6]
+
+Output:
+
+.. code-block:: ring 
+
+       Using String - Index start from 0
+       W
+       e
+       l
+       c
+       o
+       m
+       e
+
+.. index:: 
+       pair: Using ZeroLib; Source Code
+
+Source Code
+===========
+
+We can find the library source code in this folder 
+
+URL : https://github.com/ring-lang/ring/tree/master/ringlibs/zerolib
+
+
+
diff --git a/docs/en/target/BMI.png b/docs/en/target/BMI.png
new file mode 100644 (file)
index 0000000..179db0c
Binary files /dev/null and b/docs/en/target/BMI.png differ
diff --git a/docs/en/target/Fedora.png b/docs/en/target/Fedora.png
new file mode 100644 (file)
index 0000000..f6a5406
Binary files /dev/null and b/docs/en/target/Fedora.png differ
diff --git a/docs/en/target/Fedora2.png b/docs/en/target/Fedora2.png
new file mode 100644 (file)
index 0000000..32ddb4d
Binary files /dev/null and b/docs/en/target/Fedora2.png differ
diff --git a/docs/en/target/Fedora3.png b/docs/en/target/Fedora3.png
new file mode 100644 (file)
index 0000000..19b705e
Binary files /dev/null and b/docs/en/target/Fedora3.png differ
diff --git a/docs/en/target/allegro.txt b/docs/en/target/allegro.txt
new file mode 100644 (file)
index 0000000..cb8bd83
--- /dev/null
@@ -0,0 +1,494 @@
+.. index:: 
+       single: Graphics and Game Programming; Introduction
+
+===================================================
+Graphics and 2D Games programming using RingAllegro
+===================================================
+
+In this chapter we will learn how to use the allegro game programming library 
+in our Ring applications.
+
+We have the file gamelib.ring that load the DLL library that contains wrappers for the Allegro functions
+
+.. code-block:: ring
+
+       Load "allegro.rh"
+       if iswindows()
+               LoadLib("ring_allegro.dll")
+       but ismacosx()
+               LoadLib("libringallegro.dylib")
+       else
+               LoadLib("libringallegro.so")
+       ok
+
+The file gamelib.ring uses the Load instruction to execute the file allegro.rh which is a ring source
+code file contains constants to be used in our programs.
+Then using the function LoadLib() we can load the DLL library "ring_allegro.dll".
+
+To write portable code we can change the gamelib.ring to check the platform before 
+loading the DLL/So file.
+
+.. index:: 
+       pair: Graphics and Game Programming; Drawing, Animation and Input
+
+Drawing, Animation and Input
+============================
+
+The next example uses the Allegro library for drawing, moving objects on the screen and getting
+input from the keyboard and the mouse.
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)
+
+       al_show_native_message_box(display, "Hello", "Welcome",
+                               "Using Allegro from the Ring programming language", 
+                               "", 0);
+
+       al_clear_to_color(al_map_rgb(0,0,255))
+
+       BOUNCER_SIZE = 40
+       bouncer_x = 10
+       bouncer_y = 20
+       bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE)
+       al_set_target_bitmap(bouncer)
+       al_clear_to_color(al_map_rgb(255,0,255))
+
+       for x = 1 to 30
+               bouncer_x += x 
+               bouncer_y += x
+               al_set_target_bitmap(al_get_backbuffer(display))
+               al_clear_to_color(al_map_rgb(0,0,0))
+               al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0)
+               al_draw_bitmap(bouncer, 200+bouncer_x,200+ bouncer_y, 0)
+               al_flip_display()
+               al_rest(0.1)
+       next
+
+       al_clear_to_color(al_map_rgb(255,255,255))
+       image = al_load_bitmap("man2.jpg")
+       al_draw_bitmap(image,200,200,0)
+       al_flip_display()
+       al_rest(2)
+
+       event_queue = al_create_event_queue()
+       al_register_event_source(event_queue, al_get_display_event_source(display))
+
+       ev = al_new_allegro_event()
+       timeout = al_new_allegro_timeout()
+       al_init_timeout(timeout, 0.06)
+
+       FPS = 60
+       timer = al_create_timer(1.0 / FPS)
+       al_register_event_source(event_queue, al_get_timer_event_source(timer))
+       al_start_timer(timer)
+       redraw = true
+
+       SCREEN_W = 640
+       SCREEN_H = 480
+       BOUNCER_SIZE = 32
+       bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0
+       bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0
+       bouncer_dx = -4.0
+       bouncer_dy = 4.0
+
+       al_install_mouse()
+       al_register_event_source(event_queue, al_get_mouse_event_source())
+
+       al_install_keyboard()
+       al_register_event_source(event_queue, al_get_keyboard_event_source())
+
+       KEY_UP = 1
+       KEY_DOWN = 2
+       KEY_LEFT = 3
+       KEY_RIGHT = 4
+       Key = [false,false,false,false]
+
+       while true
+               al_init_timeout(timeout, 0.06)
+               al_wait_for_event_until(event_queue, ev, timeout)
+               switch al_get_allegro_event_type(ev)
+               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                       exit
+               on ALLEGRO_EVENT_TIMER
+                       
+                       # Animation
+                       if bouncer_x < 0 or bouncer_x > SCREEN_W - BOUNCER_SIZE
+                               bouncer_dx = -bouncer_dx
+                       ok
+        
+                       if bouncer_y < 0 or bouncer_y > SCREEN_H - BOUNCER_SIZE
+                               bouncer_dy = -bouncer_dy
+                       ok
+        
+                       bouncer_x += bouncer_dx
+                       bouncer_y += bouncer_dy
+                       
+                       # Keyboard
+                       if key[KEY_UP] and bouncer_y >= 4.0
+                               bouncer_y -= 4.0
+                       ok 
+                       if key[KEY_DOWN] and bouncer_y <= SCREEN_H - BOUNCER_SIZE - 4.0
+                               bouncer_y += 4.0
+                       ok 
+                       if key[KEY_LEFT] and bouncer_x >= 4.0
+                               bouncer_x -= 4.0
+                       ok 
+                       if key[KEY_RIGHT] and bouncer_x <= SCREEN_W - BOUNCER_SIZE - 4.0
+                               bouncer_x += 4.0
+                       ok
+        
+                       redraw = true
+                       
+               on ALLEGRO_EVENT_MOUSE_AXES
+                       bouncer_x = al_get_allegro_event_mouse_x(ev)
+                       bouncer_y = al_get_allegro_event_mouse_y(ev)
+               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                       bouncer_x = al_get_allegro_event_mouse_x(ev)
+                       bouncer_y = al_get_allegro_event_mouse_y(ev)
+               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                       exit
+               on ALLEGRO_EVENT_KEY_DOWN
+                       switch al_get_allegro_event_keyboard_keycode(ev)
+                               on ALLEGRO_KEY_UP
+                                       key[KEY_UP] = true
+                               on ALLEGRO_KEY_DOWN
+                                       key[KEY_DOWN] = true
+                               on ALLEGRO_KEY_LEFT
+                                       key[KEY_LEFT] = true
+                               on ALLEGRO_KEY_RIGHT
+                                       key[KEY_RIGHT] = true
+                       off
+               on ALLEGRO_EVENT_KEY_UP
+                       switch al_get_allegro_event_keyboard_keycode(ev)
+                               on ALLEGRO_KEY_UP
+                                       key[KEY_UP] = false
+                               on ALLEGRO_KEY_DOWN
+                                       key[KEY_DOWN] = false
+                               on ALLEGRO_KEY_LEFT
+                                       key[KEY_LEFT] = false
+                               on ALLEGRO_KEY_RIGHT
+                                       key[KEY_RIGHT] = false
+                               on ALLEGRO_KEY_ESCAPE
+                                       exit
+                       off
+               off
+               if redraw and al_is_event_queue_empty(event_queue)
+                       redraw = false          
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0)
+                       al_flip_display()
+               ok
+               callgc()
+       end
+
+       al_destroy_timer(timer)
+       al_destroy_allegro_event(ev)
+       al_destroy_allegro_timeout(timeout)
+       al_destroy_event_queue(event_queue)
+       al_destroy_bitmap(bouncer)
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+
+.. note:: In the previous example we used the function callgc() which is a Ring function to force calling the Garbage collector inside the While/End loop.
+
+Program Output:
+
+At first the program display a messagebox
+
+.. image:: ringalleg_shot1.jpg
+       :alt: Displaying a messagebox from our program
+
+Then we see two rectangles are moving on the screen
+
+.. image:: ringalleg_shot2.jpg
+       :alt: Animation - Moving two rectangles in the screen 
+
+Then we see an image displayed on the screen
+
+.. image:: ringalleg_shot3.jpg
+       :alt: Displaying an image on the screen
+
+Finally we have one rectangle, and we see it moving all of the time on
+the screen but we can control it using the Mouse and/or the Keyboard 
+
+.. image:: ringalleg_shot4.jpg
+       :alt: Animation and Getting Input from keyboard and the mouse to move the object
+
+.. index:: 
+       pair: Graphics and Game Programming; TrueType Fonts
+
+Using TrueType Fonts
+====================
+
+In this example we will see how to use TrueType Fonts *.ttf in our Games using Allegro
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_font_addon()
+       al_init_ttf_addon()
+
+       display = al_create_display(800,600)
+
+       al_clear_to_color(al_map_rgb(0,0,255))
+       font = al_load_ttf_font("pirulen.ttf",14,0 )
+       al_draw_text(font, al_map_rgb(255,255,255), 10, 10,ALLEGRO_ALIGN_LEFT,
+                "Welcome to the Ring programming language")
+       al_flip_display()
+       al_rest(2)
+
+       al_destroy_display(display)
+
+Screen Shot:
+
+.. image:: ringalleg_shot5.jpg
+       :alt: Using TrueType Fonts
+
+.. index:: 
+       pair: Graphics and Game Programming; Playing Sound
+
+Playing Sound Files
+===================
+
+The next example play a sound file
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_install_audio()
+       al_init_acodec_addon()
+       al_reserve_samples(1) 
+
+       sample = al_load_sample( "footstep.wav" )
+
+       sampleid = al_new_allegro_sample_id()
+       al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,sampleid)
+
+       display = al_create_display(640,480)
+       al_clear_to_color(al_map_rgb(0,0,255))
+       al_flip_display()
+       al_rest(10)
+
+       al_destroy_allegro_sample_id(sampleid)
+       al_destroy_sample(sample)
+       al_destroy_display(display)
+
+       al_exit()
+
+.. index:: 
+       pair: Graphics and Game Programming; Scaling and Rotating Images
+
+Scaling and Rotating Images
+===========================
+
+The next example display and rotate an image
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)
+       al_set_target_bitmap(al_get_backbuffer(display))
+       al_clear_to_color(al_map_rgb(255,255,255))
+
+       image = al_load_bitmap("man2.jpg")
+       al_draw_rotated_bitmap(image,0,0,250,250,150,0)
+       al_draw_scaled_bitmap(image,0,0,250,250,20,20,400,400,0)
+
+       al_flip_display()
+       al_rest(2)
+
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+Screen Shot:
+
+.. image:: ringalleg_shot6.jpg
+       :alt: Scaling and Rotating Images
+
+.. index:: 
+       pair: Graphics and Game Programming; Transparent Image
+
+Display Transparent Image
+=========================
+
+The next example display image with white background on another image
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)    
+       imageback = al_load_bitmap("palace.jpg")
+       al_draw_bitmap(imageback,0,0,0)
+
+       image = al_load_bitmap("man4.png")
+       al_convert_mask_to_alpha(image,al_map_rgb(255,255,255))
+       al_draw_bitmap(image,0,0,0)
+       al_flip_display()
+       al_rest(10)
+
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+Screen Shot:
+
+.. image:: ringalleg_shot7.jpg
+       :alt: Transparent Image
+
+.. index:: 
+       pair: Graphics and Game Programming; Threads
+
+Using Threads
+=============
+
+In this example we will learn how to use threads from the Allegro library
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       o1 = new mythreads 
+
+       Func Main
+               al_init()
+               for k = 1 to 5
+                       al_create_thread("o1.thread1()")
+                       al_create_thread("o1.thread2()")
+                       al_create_thread("o1.thread3()")
+               next
+               al_rest(2)
+
+       Class Mythreads
+
+               cAppName = "Threads Application"
+
+               Func Thread1
+                       for x = 1 to 5
+                               see x + nl      
+                       next
+                       See 'Thread(1) : Application Name : '  + cAppName + nl
+
+               Func Thread2
+                       for x = 1 to 5
+                               see '*****' + x + nl    
+                       next
+                       See 'Thread(2) : Application Name : '  + cAppName + nl
+
+               Func Thread3
+                       for x = 1 to 5
+                               see '!!!!' + x + nl     
+                       next
+                       See 'Thread(3) : Application Name : '  + cAppName + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****1
+       *****4
+       *****2
+       !!!!1
+       *****5
+       *****3
+       1
+       !!!!2
+       Thread(2) : Application Name : Threads Application
+       1
+       *****4
+       !!!!1
+       2
+       !!!!3
+       !!!!4
+       *****5
+       !!!!2
+       3
+       2
+       !!!!5
+       Thread(2) : Application Name : Threads Application
+       !!!!3
+       4
+       3
+       Thread(3) : Application Name : Threads Application
+       !!!!4
+       5
+       4
+       !!!!5
+       Thread(1) : Application Name : Threads Application
+       5
+       Thread(3) : Application Name : Threads Application
+       Thread(1) : Application Name : Threads Application
diff --git a/docs/en/target/analogclock.png b/docs/en/target/analogclock.png
new file mode 100644 (file)
index 0000000..261d19f
Binary files /dev/null and b/docs/en/target/analogclock.png differ
diff --git a/docs/en/target/asciitable.png b/docs/en/target/asciitable.png
new file mode 100644 (file)
index 0000000..747b1e8
Binary files /dev/null and b/docs/en/target/asciitable.png differ
diff --git a/docs/en/target/autocomplete.png b/docs/en/target/autocomplete.png
new file mode 100644 (file)
index 0000000..29ab605
Binary files /dev/null and b/docs/en/target/autocomplete.png differ
diff --git a/docs/en/target/bignumber.txt b/docs/en/target/bignumber.txt
new file mode 100644 (file)
index 0000000..f94beba
--- /dev/null
@@ -0,0 +1,163 @@
+.. index:: 
+       single: bignumber; Introduction
+
+=================
+BigNumber Library
+=================
+
+In this chapter we will learn about using the Big Number library in the Ring programming language.
+
+Developers : Bert Mariani, Gal Zsolt (~ CalmoSoft ~)
+
+.. index:: 
+       pair: bignumber; Loading the library
+
+Loading the library
+===================
+
+Before using the next function load the bignumber.ring library
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+       # Use Big Number library functions
+
+.. index:: 
+       pair: bignumber; Examples
+
+Examples
+========
+
+Using the BigNumber library we can do arithmetic operations on huge numbers.
+
+Example:
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+
+       num1 = "62345678901234567891678345123456789"    ### Big
+       num2 =  "1237894567890123419871236545"          ### Small
+       num3 =     "64"                                 ### Divide Small
+       num4 = "765432"                 
+       num5 =      "3"                                 ### Power            
+    
+       ? "Add big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 + a2                    a3.Print() ? nl
+
+       ? "Substract big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 - a2                    a3.Print() ? nl
+
+       ? "Multiply big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()      
+       a3 = a1 * a2                    a3.print() ? nl
+
+       ? "Divide big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+    
+       ? "Divide big numbers: by very small number" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num3)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+
+       ? "Power of big number:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num5)        a2.print()
+       a3 = a1 ^ a2                    a3.print() ? nl
+    
+Output:
+
+.. code-block:: none
+
+       Add big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       62345680139129135781801764994693334
+
+
+       Substract big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       52345687663340000001554925252220244
+
+
+       Multiply big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       77177377243260150103462178714197454736432472780119682305154005
+
+
+       Divide big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       50364288
+
+
+       Divide big numbers: by very small number
+       62345678901234567891678345123456789
+       64
+       974151232831790123307474142554012
+
+
+       Power of big number:
+       62345678901234567891678345123456789
+       3
+       242336636261471172092347146031727004 (Output continue in next line)
+       371698195628343934238988256152289508 (Output continue in next line)
+       493964611043228971692389860897069
+
+
+.. index:: 
+       pair: bignumber; BigNumber Functions
+
+BigNumber Functions
+===================
+
+The library contains the next functions
+
+.. code-block:: none
+
+       FuncAdd(num1,num2)
+       FuncSubtract(num1,num2)
+       FuncCompare(num1,num2)
+       FuncDivide(num1,num2)
+       FuncMultiply(num1,num2)
+       FuncPower(num1,num2)
+       FuncBinaryToDecimal(num1)
+       FuncDecimalToBinary(num1)
+       printBinaryDigits(binList)
+       printDecimalDigits(decList)
+
+.. index:: 
+       pair: bignumber; BigNumber Class
+
+BigNumber Class
+===============
+
+The library contains the next class
+
+.. code-block:: ring
+
+       class BigNumber 
+               func init aPara 
+               func operator cOperator, Para
+               func print 
+               func value
+
+.. index:: 
+       pair: bignumber; Library Source Code 
+
+Library Source Code
+===================
+
+You can see the library source code in : ring/ringlibs/bignumber folder
+
+Source Code : https://github.com/ring-lang/ring/blob/master/ringlibs/bignumber/bignumber.ring
+
diff --git a/docs/en/target/calcapp.jpg b/docs/en/target/calcapp.jpg
new file mode 100644 (file)
index 0000000..f48b4fc
Binary files /dev/null and b/docs/en/target/calcapp.jpg differ
diff --git a/docs/en/target/calendar.png b/docs/en/target/calendar.png
new file mode 100644 (file)
index 0000000..66c80eb
Binary files /dev/null and b/docs/en/target/calendar.png differ
diff --git a/docs/en/target/callstack.png b/docs/en/target/callstack.png
new file mode 100644 (file)
index 0000000..ac1d35b
Binary files /dev/null and b/docs/en/target/callstack.png differ
diff --git a/docs/en/target/cameraandbackground.png b/docs/en/target/cameraandbackground.png
new file mode 100644 (file)
index 0000000..28a847c
Binary files /dev/null and b/docs/en/target/cameraandbackground.png differ
diff --git a/docs/en/target/cardsmainmenu.png b/docs/en/target/cardsmainmenu.png
new file mode 100644 (file)
index 0000000..5009e83
Binary files /dev/null and b/docs/en/target/cardsmainmenu.png differ
diff --git a/docs/en/target/cardsqt.png b/docs/en/target/cardsqt.png
new file mode 100644 (file)
index 0000000..efdba1f
Binary files /dev/null and b/docs/en/target/cardsqt.png differ
diff --git a/docs/en/target/checkandconvert.txt b/docs/en/target/checkandconvert.txt
new file mode 100644 (file)
index 0000000..5bfabd8
--- /dev/null
@@ -0,0 +1,585 @@
+.. index:: 
+       single: Data Type; Introduction
+
+==============================
+Check Data Type and Conversion
+==============================
+
+In this chapter we are going to learn about the functions that can be used for
+
+* Checking Data Type
+* Checking Character
+* Conversion
+
+.. index:: 
+       pair: Data Type; Check Data Type
+
+Check Data Type
+===============
+
+The next functions can be used to check the data type
+
+* isstring()
+* isnumber()
+* islist()
+* type()
+* isnull()
+
+.. index:: 
+       pair: Data Type; IsString()
+
+IsString() Function
+===================
+
+Using the IsString() function we can know if the value is a string or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsString(value) ---> 1 if the value is a string or 0 if not     
+
+Example:
+
+.. code-block:: ring
+
+       see isstring(5) + nl +          # print 0
+           isstring("hello") + nl      # print 1
+
+.. index:: 
+       pair: Data Type; IsNumber()
+
+IsNumber() Function
+===================
+
+Using the IsNumber() function we can know if the value is a number or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsNumber(value) ---> 1 if the value is a number or 0 if not     
+
+Example:
+
+.. code-block:: ring
+
+       see isnumber(5) + nl +          # print 1
+           isnumber("hello") + nl      # print 0
+
+.. index:: 
+       pair: Data Type; IsList()
+
+IsList() Function
+===================
+
+Using the IsList() function we can know if the value is a list or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsList(value) ---> 1 if the value is a list or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       see islist(5) + nl +            # print 0
+           islist("hello") + nl +      # print 0
+           islist([1,3,5])             # print 1
+       
+.. index:: 
+       pair: Data Type; Type()
+
+Type() Function
+===============
+
+We can know the type of a value using the Type() Function.
+
+
+Syntax:
+
+.. code-block:: ring
+
+       Type(value) ---> The Type as String 
+
+Example:
+
+.. code-block:: ring
+
+           see Type(5) + nl +          # print NUMBER
+           Type("hello") + nl +        # print STRING
+           Type([1,3,5])               # print LIST
+
+.. index:: 
+       pair: Data Type; IsNULL()
+
+IsNULL() Function
+=================
+
+We can check the value to know if it's null or not using the IsNULL() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsNULL(value) ---> 1 if the value is NULL or 0 if not   
+
+Example:
+
+.. code-block:: ring
+
+           see isnull(5) + nl +        # print 0
+           isnull("hello") + nl +      # print 0
+           isnull([1,3,5]) + nl +      # print 0
+           isnull("") + nl +           # print 1
+           isnull("NULL")              # print 1
+
+.. index:: 
+       pair: Data Type; Check Character
+
+Check Character
+===============
+
+The next functions can be used to check character
+
+* isalnum()
+* isalpha()
+* iscntrl()
+* isdigit()
+* isgraph()
+* islower()
+* isprint()
+* ispunct()
+* isspace()
+* isupper()
+* isxdigit()
+
+.. index:: 
+       pair: Data Type; IsAlNum()
+
+IsAlNum() Function
+==================
+
+We can test a character or a string using the IsAlNum() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsAlNum(value) ---> 1 if the value is digit/letter or 0 if not  
+
+Example:
+
+.. code-block:: ring
+
+       see isalnum("Hello") + nl +     # print 1
+           isalnum("123456") + nl +    # print 1
+           isalnum("ABCabc123") + nl + # print 1
+           isalnum("How are you")      # print 0 because of spaces
+
+.. index:: 
+       pair: Data Type; IsAlpha()
+
+IsAlpha() Function
+==================
+
+We can test a character or a string using the IsAlpha() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsAlpha(value) ---> 1 if the value is a letter or 0 if not      
+
+Example:
+
+.. code-block:: ring
+
+       see isalpha("Hello") + nl +     # print 1
+           isalpha("123456") + nl +    # print 0
+           isalpha("ABCabc123") + nl + # print 0
+           isalpha("How are you")      # print 0
+
+.. index:: 
+       pair: Data Type; IsCntrl()
+
+IsCntrl() Function
+==================
+
+We can test a character or a string using the IsCntrl() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsCntrl(value) ---> 1 if the value is a control character (no printing position) 
+                           or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       See iscntrl("hello") + nl +     # print 0 
+           iscntrl(nl)                 # print 1
+
+.. index:: 
+       pair: Data Type; IsDigit()
+
+IsDigit() Function
+==================
+
+We can test a character or a string using the IsDigit() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsDigit(value) ---> 1 if the value is a digit or 0 if not       
+
+Example:
+
+.. code-block:: ring
+
+       see isdigit("0123456789") + nl +        # print 1
+           isdigit("0123a")                    # print 0
+
+.. index:: 
+       pair: Data Type; IsGraph()
+
+IsGraph() Function
+==================
+
+We can test a character or a string using the IsGraph() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsGraph(value) ---> 1 if the value can be printed (Except space) or 0 if not    
+
+Example:
+
+.. code-block:: ring
+
+       see isgraph("abcdef") + nl +    # print 1
+           isgraph("abc def")          # print 0
+
+
+.. index:: 
+       pair: Data Type; IsLower()
+
+IsLower() Function 
+==================
+
+We can test a character or a string using the IsLower() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsLower(value) ---> 1 if the value is lowercase letter or 0 if not      
+
+Example:
+
+.. code-block:: ring
+
+       see islower("abcDEF") + nl +    # print 0
+           islower("ghi")              # print 1
+
+
+.. index:: 
+       pair: Data Type; IsPrint()
+
+IsPrint() Function
+==================
+
+We can test a character or a string using the IsPrint() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsPrint(value) ---> 1 if the value occupies a printing position or 0 if not     
+
+Example:
+
+.. code-block:: ring
+
+       see isprint("Hello") + nl +             # print 1
+           isprint("Nice to see you") + nl +   # print 1
+           isprint(nl)                         # print 0
+
+.. index:: 
+       pair: Data Type; IsPunct()
+
+IsPunct() Function
+==================
+
+We can test a character or a string using the IsPunct() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsPunct(value) ---> 1 if the value is a punctuation character or 0 if not       
+
+Example:
+
+.. code-block:: ring
+
+       see ispunct("hello") + nl +     # print 0
+           ispunct(",")                # print 1
+
+.. index:: 
+       pair: Data Type; IsSpace()
+
+IsSpace() Function
+==================
+
+We can test a character or a string using the IsSpace() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsSpace(value) ---> 1 if the value is a white-space or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       see isspace("   ") + nl +       # print 1
+           isspace("test")             # print 0
+
+
+.. index:: 
+       pair: Data Type; IsUpper()
+
+IsUpper() Function
+==================
+
+We can test a character or a string using the IsUpper() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsUpper(value) ---> 1 if the value is an uppercase alphabetic letter or 0 if not        
+
+Example:
+
+.. code-block:: ring
+
+       see isupper("welcome") + nl +    # print 0 
+           isupper("WELCOME")           # print 1
+
+
+.. index:: 
+       pair: Data Type; IsXdigit()
+
+IsXdigit() Function
+===================
+
+We can test a character or a string using the IsXdigit() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsXdigit(value) ---> 1 if the value is a hexdecimal digit character or 0 if not 
+
+Example:
+
+.. code-block:: ring
+
+       see isxdigit("0123456789abcdef") + nl +  # print 1
+           isxdigit("123z")                     # print 0
+
+
+.. index:: 
+       pair: Data Type; Conversion
+
+Conversion
+==========
+
+The next functions can be used for conversion
+
+* number()
+* string()
+* ascii()
+* char()
+* hex()
+* dec()
+* str2hex()
+* hex2str()
+
+.. index:: 
+       pair: Data Type; Number()
+
+Number() Function
+=================
+
+We can convert strings to numbers using the Number() function or the + operator.
+
+Syntax:
+
+.. code-block:: ring
+
+       Number(string) ---> Number
+       0 + string ---> Number
+
+Example:
+
+.. code-block:: ring
+
+       see number("5") + 5 + nl        # print 10
+       see 0 + "10" + 2                # print 12      
+
+.. index:: 
+       pair: Data Type; String()
+
+String() Function
+=================
+
+We can convert numbers to strings using the String() function or the + operator.
+
+Syntax:
+
+.. code-block:: ring
+
+       String(number) ---> String
+       "" + number ---> String
+
+Example:
+
+.. code-block:: ring
+
+       see string(5) + 5 + nl          # print 55
+       see "" + 10 + 2                 # print 102     
+
+.. index:: 
+       pair: Data Type; Ascii()
+
+Ascii() Function
+================
+
+We can get the ASCII code for a letter using the Ascii() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Ascii(character) ---> ASCII Code
+
+Example:
+
+.. code-block:: ring
+
+       See ascii("m") + nl +   # print 109
+           ascii("M")          # print 77
+
+.. index:: 
+       pair: Data Type; Char()
+
+Char() Function
+===============
+
+We can convert the ASCII code to character using the Char() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Char(ASCII Code) ---> character
+
+Example:
+
+.. code-block:: ring
+
+       See char(109) + nl +    # print m
+           char(77)            # print M
+
+
+.. index:: 
+       pair: Data Type; Hex()
+
+Hex() Function
+==============
+
+We can convert decimal to hexadecimal using the Hex() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Hex(decimal) ---> hexadecimal
+
+Example:
+
+.. code-block:: ring
+
+       See hex(10) + nl +      # print a
+           hex(200)            # print c8
+
+.. index:: 
+       pair: Data Type; Dec()
+
+Dec() Function
+==============
+
+We can convert hexadecimal to decimal using the Dec() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Dec(hexadecimal) ---> decimal
+
+Example:
+
+.. code-block:: ring
+
+       See dec("a") + nl +     # print 10
+           dec("c8")           # print 200
+
+.. index:: 
+       pair: Data Type; Str2Hex()
+
+Str2hex() Function
+==================
+
+We can convert string characters to hexadecimal characters using the Str2hex() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Str2hex(string) ---> hexadecimal string
+
+Example:
+
+.. code-block:: ring
+
+       See str2hex("hello")    # print 68656c6c6f
+
+.. index:: 
+       pair: Data Type; Hex2str()
+
+Hex2str() Function
+==================
+
+We can convert hexadecimal characters to string using the Hex2str() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Hex2Str(Hexadecimal string) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       See hex2str("68656c6c6f")       # print hello
diff --git a/docs/en/target/checkersgame.png b/docs/en/target/checkersgame.png
new file mode 100644 (file)
index 0000000..287820b
Binary files /dev/null and b/docs/en/target/checkersgame.png differ
diff --git a/docs/en/target/chessgame.png b/docs/en/target/chessgame.png
new file mode 100644 (file)
index 0000000..0f9649a
Binary files /dev/null and b/docs/en/target/chessgame.png differ
diff --git a/docs/en/target/classeslist.png b/docs/en/target/classeslist.png
new file mode 100644 (file)
index 0000000..35b9c46
Binary files /dev/null and b/docs/en/target/classeslist.png differ
diff --git a/docs/en/target/codeeditors.txt b/docs/en/target/codeeditors.txt
new file mode 100644 (file)
index 0000000..838b3e0
--- /dev/null
@@ -0,0 +1,151 @@
+.. index:: 
+       single: Using Other Code Editors; Introduction
+
+========================
+Using Other Code Editors
+========================
+
+In the Ring/Editor folder you will find extensions for the next editors
+
+* Notepad++
+* Geany
+* Atom
+* Sublime Text 2
+* Visual Studio IDE
+* Emacs
+* Visual Studio Code (VSCode)
+
+.. index:: 
+       pair: Using Other Code Editors; Using Notepad++
+
+
+Using Notepad++
+===============
+
+Folder : ring/editor/notepad_plus_plus
+
+* Open Notepad++
+* Open the "Language" menu
+* Select "Define your language..."
+* Click "Import..."
+* select `Ring.xml`
+* Select "OK" on the "Import successful" dialog and close the "User Defined Language" dialog/panel
+* You may need to restart notepad++
+
+.. image:: editor1.png
+       :alt: Using Notepad++
+
+.. index:: 
+       pair: Using Other Code Editors; Using Geany
+
+Using Geany
+===========
+
+Folder : ring/editor/geany
+
+* Run Geany editor
+* Click on "Tools -> configuration files -> filetypes_extensions.conf"  menu
+* Add this line "Ring=*.ring;" without quotes after [Extensions]
+* In unbuntu copy file "filetypes.Ring.conf" to folder "/home/USERNAME/filetypes.Ring.conf"
+* You can run your files by pressing F5 button
+
+.. image:: editor2.png
+       :alt: Using Geany
+
+
+.. index:: 
+       pair: Using Other Code Editors; Using Atom
+
+Using Atom
+==========
+
+Folder : ring/editor/atom
+
+Just Copy the folder atom-language-ring to the next path
+
+.. code-block:: none
+
+       "C:\Users\{UserName}\.atom\Packages"
+
+.. image:: editor3.jpg
+       :alt: Using Atom
+
+.. index:: 
+       pair: Using Other Code Editors; Using Sublime Text 2
+
+Using Sublime Text 2
+====================
+
+Folder : ring/editor/sublime text 2
+
+In the folder Sublime_Text_2 you will find the next three files
+
+1 - ring.json-tmlanguage
+
+2 - ring.sublime-build
+
+3 - ring.tmlanguage
+
+Just Copy the files to the next path
+
+.. code-block:: none
+
+       "C:\Users\{UserName}\AppData\Roaming\Sublime Text 2\Packages\User\"
+
+The file ring.sublime-build includes the next line
+
+.. code-block:: none
+
+       "cmd": ["B:\\ring\\bin\\ring.exe","$file"],
+
+You can modify it according to the ring.exe path in your machine 
+
+
+.. image:: editor4.jpg
+       :alt: Using Sublime Text 2
+
+
+.. index:: 
+       pair: Using Other Code Editors; Using Visual Studio IDE
+
+Using Visual Studio IDE
+=======================
+
+Folder : ring/editor/visualstudio
+
+Check the ReadMe file for installation instructions.   
+
+.. image:: editor5.png
+       :alt: Using Visual Studio
+
+.. index:: 
+       pair: Using Other Code Editors; Using Emacs Editor
+
+Using Emacs Editor
+==================
+
+Folder : ring/editor/emacs
+
+Check the ReadMe file for installation instructions.   
+
+Screen Shot:
+
+.. image:: ringemacs.png
+       :alt: Ring mode for Emacs Editor
+
+
+.. index:: 
+       pair: Using Other Code Editors; Visual Studio Code
+
+Visual Studio Code
+==================
+
+Folder : ring/vscode
+
+Check the ReadMe file for installation instructions.   
+
+Screen Shot:
+
+.. image:: ringinvscode.png
+       :alt: Ring in Visual Studio Code
+
diff --git a/docs/en/target/codegenerator.txt b/docs/en/target/codegenerator.txt
new file mode 100644 (file)
index 0000000..684fe16
--- /dev/null
@@ -0,0 +1,1289 @@
+.. index:: 
+       single: Code Generator; Introduction
+
+============================================
+Code Generator for wrapping C/C++ Libraries 
+============================================
+
+In this chapter we will learn how to use the code generator to wrap C/C++ Libraries 
+to use it in our Ring applications.
+
+.. index:: 
+       pair: Code Generator; Using the tool
+
+Using the tool
+==============
+
+The code generator program is parsec.ring that can be executed as any ring code using the
+ring language.
+
+URL : https://github.com/ring-lang/ring/tree/master/extensions/codegen
+
+for example to read a configuration file called test.cf to generate the source code file test.c
+run parsec.ring as in the next command
+
+.. code-block:: ring
+
+       ring parsec.ring test.cf test.c
+
+.. index:: 
+       pair: Code Generator; Configuration file
+
+
+Configuration file 
+==================
+
+The configuration file (*.cf) is the input file that we pass to the code generator. This file 
+determine the functions prototypes that we need to use from a C/C++ library.
+
+Writing configuration files is simple according to the next rules
+
+.. index:: 
+       pair: Code Generator; function prototype
+
+Using the function prototype
+============================
+
+* To generate code that wraps a C function, we just write the C function prototype
+
+Example:
+
+.. code-block:: ring
+
+       ALLEGRO_DISPLAY *al_create_display(int w, int h)
+       void al_destroy_display(ALLEGRO_DISPLAY *display)
+       int al_get_new_display_flags(void)
+       void al_set_new_display_flags(int flags)
+       int al_get_new_display_option(int option, int *importance)
+
+The previous example will guide the code generator to generate 5 functions that wraps the 
+al_create_display(), al_destroy_display(), al_get_new_display_flags(), al_set_new_diplay_flas()
+and al_get_new_display_option() functions.
+
+The generated code will be as in the next example
+
+.. code-block:: ring
+
+       RING_FUNC(ring_al_create_display)
+       {
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               RING_API_RETCPOINTER(al_create_display( (int ) RING_API_GETNUMBER(1),
+                                        (int ) RING_API_GETNUMBER(2)),"ALLEGRO_DISPLAY");
+       }
+
+
+       RING_FUNC(ring_al_destroy_display)
+       {
+         if ( RING_API_PARACOUNT != 1 ) {
+               RING_API_ERROR(RING_API_MISS1PARA);
+               return ;
+         }
+         if ( ! RING_API_ISPOINTER(1) ) {
+               RING_API_ERROR(RING_API_BADPARATYPE);
+               return ;
+         }
+         al_destroy_display((ALLEGRO_DISPLAY *) RING_API_GETCPOINTER(1,"ALLEGRO_DISPLAY"));
+       }
+
+
+       RING_FUNC(ring_al_get_new_display_flags)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               RING_API_RETNUMBER(al_get_new_display_flags());
+       }
+
+
+       RING_FUNC(ring_al_set_new_display_flags)
+       {
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               al_set_new_display_flags( (int ) RING_API_GETNUMBER(1));
+       }
+
+
+       RING_FUNC(ring_al_get_new_display_option)
+       {
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISSTRING(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               RING_API_RETNUMBER(al_get_new_display_option( (int ) RING_API_GETNUMBER(1),
+                                       RING_API_GETINTPOINTER(2)));
+               RING_API_ACCEPTINTVALUE(2) ;
+       }
+
+from the previous example we can see how much of time and effort is saved using the Code Generator.
+
+.. index:: 
+       pair: Code Generator; Adding code to the generated code
+
+Adding code to the generated code
+=================================
+       
+* To generate code directly type it between <code> and </code>
+
+Example :
+
+.. code-block:: ring
+
+       <code>
+               /* some C code will be written here */
+       </code>
+
+We use this feature when we need to do something without the help of the code generator. for
+example including header files and defining constants using Macro.
+
+.. index:: 
+       pair: Code Generator; Prefix for Functions Names
+
+Prefix for Functions Names 
+==========================
+
+* To determine a prefix in all of the functions names type it between <funcstart> and </funcstart>
+       for example when we wrap the Allegro game programming library and we need all of the library 
+       functions to start with "al" we type the next code in the configuration file
+
+.. code-block:: ring
+
+       <funcstart>
+       al
+       </funcstart>
+
+.. index:: 
+       pair: Code Generator; Wrap structures
+
+Generate function to wrap structures
+====================================
+
+* To generate functions that wrap structures (create/delete/get structure members)
+just type the structures names between  <struct> and </struct> also after the structure name
+you can type the structure members between { } separated by comma.
+
+Example 
+
+.. code-block:: ring
+
+       <struct>
+       ALLEGRO_COLOR
+       ALLEGRO_EVENT { type , keyboard.keycode , mouse.x , mouse.y }
+       </struct>
+
+from the previous example we will generate two function to create/delete the structure ALLEGRO_COLOR
+Also we will generate two functions to create/delete the structure ALLEGRO_EVENT and four functions
+to get the structure ALLEGRO_EVENT members (type, keyboard.keycode, mouse.x, mouse.y).
+
+.. index:: 
+       pair: Code Generator; Determine Structure Members Types
+
+Determine Structure Members Types
+=================================
+
+You can determine the pointer name before the structure member name.
+
+Example:
+
+.. code-block:: none
+
+       SDL_Surface {flags,SDL_PixelFormat *format,w,h,pitch,void *pixels}
+
+.. index:: 
+       pair: Code Generator; Defining Constants
+
+Defining Constants
+==================
+
+You can define constants using <constant> and </constant>
+
+The generator will generate the required functions to get the constant values
+
+And will define the constants to be used with the same name in Ring code using *.rh file that
+will be generated too.
+
+rh = Ring Header
+
+Example:
+
+.. code-block:: ring
+
+       <constant>
+       MIX_DEFAULT_FORMAT
+       SDL_QUIT
+       SDL_BUTTON_LEFT
+       SDL_BUTTON_MIDDLE
+       SDL_BUTTON_RIGHT
+       </constant>
+
+.. note:: You will need to pass the *.rh file name to parsec.ring after the generated source file name.
+
+Example:
+
+.. code-block:: ring
+
+       ring ..\codegen\parsec.ring libsdl.cf ring_libsdl.c ring_libsdl.rh
+
+.. index:: 
+       pair: Code Generator; Register New Functions
+
+Register New Functions
+======================
+
+We can register functions by typing the function prototype between <register> and </register>
+We need this feature only when we don't provide the function prototype as input directly where
+we need to write the code of this function.
+
+Example:
+
+.. code-block:: ring
+
+       <register>
+       void al_exit(void)
+       </register>
+
+       <code>
+       RING_FUNC(ring_al_exit)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+       }
+       exit(0);
+       }
+       </code>
+
+In the previous example we register the al_exit() function. This function is not part of the Allegro
+Library, it's just an extra function that we need to add. Then the code if this function is written
+inside <code> and </code>. This function call the exit() function from the C language library.
+
+.. index:: 
+       pair: Code Generator; Comments in configuration file
+
+Writing comments in the configuration file
+==========================================
+
+* To type comments just type it between <comment> and </comment>
+
+Example:
+
+.. code-block:: ring
+
+       <comment>
+       configuration files
+       </comment>
+
+.. index:: 
+       pair: Code Generator; Executing code during code generation
+
+Executing code during code generation
+=====================================
+
+* To ask from the code generator to execute Ring code during reading the configuration file, just 
+write the code between <runcode> and </runcode>
+
+Example:
+
+.. code-block:: ring
+
+       <runcode>
+       aNumberTypes + "al_fixed"
+       </runcode>
+
+The previoud line of code add the string "al_fixed" to the list aNumberTypes, This list contains 
+types that can be considered as numbers when the code generator find it in the function prototype.
+
+.. index:: 
+       pair: Code Generator; Enum and Numbers
+
+Enum and Numbers
+================
+
+We have the list aEnumTypes to use for adding each Enumeration we uses in the functions prototype.
+
+Example:
+
+.. code-block:: ring
+
+       <runcode>
+       aNumberTypes + "qreal"
+       aNumberTypes + "qint64"
+       aEnumTypes + "Qt::GestureType"
+       aEnumTypes + "Qt::GestureFlag"
+       </runcode>
+
+
+.. index:: 
+       pair: Code Generator; Filtering using Expressions
+
+Filtering using Expressions
+===========================
+
+Using <filter> and </filter> we can include/exclude parts of the configuration file
+based on a condition, for example 
+
+.. code-block:: ring
+
+               <filter> iswindows() 
+                       ... functions related to windows
+               </filter>
+
+.. index:: 
+       pair: Code Generator; Constants Type
+
+Constants Type
+==============
+
+The default type for constant is Number. 
+But Some constants may be another type, for example (pointer : void *)
+
+Before using <constant> and </constant> we can use <runcode> and </runcode>
+to determine the constant type using two global variables used by the code generator.
+
+The first variable is $nDefaultConstantType which can be
+* C_CONSTANT_TYPE_NUMBER       
+* C_CONSTANT_TYPE_STRING
+* C_CONSTANT_TYPE_POINTER
+
+If we are using C_CONSTANT_TYPE_POINTER then we will need the second global variable
+which is $cDefaultConstantPointerType to determine the pointer type.
+
+Example :
+
+The next example uses this feature to define constants in the FreeGLUT library
+
+.. code-block:: ring
+
+       <runcode>
+       $nDefaultConstantType = C_CONSTANT_TYPE_POINTER 
+       $cDefaultConstantPointerType = "void"
+       </runcode>
+       <constant>
+               GLUT_STROKE_ROMAN  
+               GLUT_STROKE_MONO_ROMAN
+               GLUT_BITMAP_9_BY_15   
+               GLUT_BITMAP_8_BY_13   
+               GLUT_BITMAP_TIMES_ROMAN_10
+               GLUT_BITMAP_TIMES_ROMAN_24 
+               GLUT_BITMAP_HELVETICA_10   
+               GLUT_BITMAP_HELVETICA_12   
+               GLUT_BITMAP_HELVETICA_18   
+       </constant>
+
+.. index:: 
+       pair: Code Generator; Configuration file for the Allegro library
+
+Configuration file for the Allegro Library
+==========================================
+
+The next configuration file enable us to use the Allegro library functions.
+The configuration file size is less than 1000 lines. When the code generator take this file as input
+the generated source code file in the C language will be 12000 lines of code!
+
+We can see this configuration file as a complete example about using the code generator.
+Also we can use it to know the functions that can be used from RingAllegro when you use it
+to create 2D games!
+
+.. code-block:: ring
+
+       <code>
+       #define ALLEGRO_NO_MAGIC_MAIN
+
+       #include <allegro5/allegro.h>
+       #include "allegro5/allegro_image.h"
+       #include <allegro5/allegro_font.h>
+       #include <allegro5/allegro_ttf.h>
+       #include <allegro5/allegro_audio.h>
+       #include <allegro5/allegro_acodec.h>
+       #include <allegro5/allegro_opengl.h>
+       #include <allegro5/allegro_direct3d.h>
+       #include <allegro5/allegro_color.h>
+       #include <allegro5/allegro_memfile.h>
+       #include "allegro5/allegro_native_dialog.h"
+       #include <allegro5/allegro_physfs.h>
+       #include <allegro5/allegro_primitives.h>
+       </code>
+
+       <funcstart>
+       al
+       </funcstart>
+
+       <struct>
+       ALLEGRO_EVENT { type , keyboard.keycode , mouse.x , mouse.y }
+       ALLEGRO_TIMEOUT
+       ALLEGRO_SAMPLE_ID
+       ALLEGRO_COLOR
+       </struct>
+
+       <register>
+       void al_exit(void)
+       </register>
+
+       <code>
+       RING_FUNC(ring_al_exit)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               exit(0);
+       }
+       </code>
+
+       int al_init(void)
+
+       <comment>
+       configuration files
+       </comment>
+
+       <runcode>
+       aNumberTypes + "al_fixed"
+       </runcode>
+
+       ALLEGRO_CONFIG *al_create_config(void)
+       void al_destroy_config(ALLEGRO_CONFIG *config)
+       ALLEGRO_CONFIG *al_load_config_file(const char *filename)
+       ALLEGRO_CONFIG *al_load_config_file_f(ALLEGRO_FILE *file)
+       bool al_save_config_file(const char *filename, const ALLEGRO_CONFIG *config)
+       bool al_save_config_file_f(ALLEGRO_FILE *file, const ALLEGRO_CONFIG *config)
+       void al_add_config_section(ALLEGRO_CONFIG *config, const char *name)
+
+.. note:: 
+       we just provided part of the configuration file, for complete copy check the Ring source
+       code distribution.
+
+.. index:: 
+       pair: Code Generator; Threads Support
+
+Threads Support
+===============
+
+Next, another part of the configuration 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.
+
+.. code-block:: ring
+
+       <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) ) {
+                       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)
+
+.. index:: 
+       pair: Code Generator; Wrapping C++ Classes
+
+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, abstract and staticmethods"
+* 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 that 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".
+* The staticmethods instruction means that method doesn't need an object to be called.
+* 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   
+* 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++)
+
+.. index:: 
+       pair: Code Generator; Using configuration file that wrap C++ library
+
+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.
+
+.. code-block:: ring
+
+       ring parsec.ring generator\qt.cf ring_qt.cpp ring_qt.ring
+
+
+.. index:: 
+       pair: Code Generator; Qt configuration file
+
+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.
+
+.. code-block:: ring
+
+       <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"
+       #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>
+       #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>
+
+
+       <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)
+       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)
+       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)
+       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)
+       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)
+       QString selectedText(void)
+       int selectionStart(void)
+       void setAlignment(int)
+       void setBuddy(QWidget *buddy)
+       void setIndent(int)
+       void setMargin(int)
+       void setOpenExternalLinks(bool open)
+       void setScaledContents(bool)
+       void setSelection(int start, int length)
+       void setTextFormat(int)
+       void setTextInteractionFlags(int flags)
+       void setWordWrap(bool on)
+       QString text(void)
+       int textFormat(void)
+       int textInteractionFlags(void)
+       bool wordWrap(void)
+       void clear(void)
+       void setMovie(QMovie *movie)
+       void setNum(double num)
+       void setPicture(QPicture)
+       void setPixmap(QPixmap)
+       void setText(QString)
+
+       <class>
+       name: QPushButton
+       para: QWidget *
+       parent: QWidget
+       codename: GPushButton
+       passvmpointer
+       </class>
+
+       void setText(const char *)
+       void setClickEvent(const char *)
+       void setIcon(QIcon)
+       void setIconSize(QSize)
+
+       <class>
+       name: QLineEdit
+       para: QWidget *
+       parent: QWidget
+       codename: GLineEdit
+       passvmpointer
+       </class>
+
+       int alignment(void)
+       void backspace(void)
+       QCompleter *completer(void)
+       QMenu *createStandardContextMenu(void)
+       void cursorBackward(bool mark, int steps)
+       void cursorForward(bool mark, int steps)
+       int cursorMoveStyle(void)
+       int cursorPosition(void)
+       int cursorPositionAt(QPoint)
+       void cursorWordBackward(bool mark)
+       void cursorWordForward(bool mark)
+       void del(void)
+       void deselect(void)
+       QString displayText(void)
+       bool dragEnabled(void)
+       int echoMode(void)
+       void end(bool mark)
+       void getTextMargins(int *left, int *top, int *right, int *bottom)
+       bool hasAcceptableInput(void)
+       bool hasFrame(void)
+       bool hasSelectedText(void)
+       void home(bool mark)
+       QString inputMask(void)
+       void insert(QString)
+       bool isModified(void)
+       bool isReadOnly(void)
+       bool isRedoAvailable(void)
+       bool isUndoAvailable(void)
+       int maxLength(void)
+       QString placeholderText(void)
+       QString selectedText(void)
+       int selectionStart(void)
+       void setAlignment(int flag)
+       void setCompleter(QCompleter *c)
+       void setCursorMoveStyle(int style)
+       void setCursorPosition(int)
+       void setDragEnabled(bool b)
+       void setEchoMode(int)
+       void setFrame(bool)
+       void setInputMask(QString)
+       void setMaxLength(int)
+       void setModified(bool)
+       void setPlaceholderText(QString)
+       void setReadOnly(bool)
+       void setSelection(int start, int length)
+       void setTextMargins(int left, int top, int right, int bottom)
+       void setValidator(QValidator *v)
+       QString text(void)
+       QMargins textMargins(void)
+       QValidator *validator(void)
+
+       void clear(void)
+       void copy(void) 
+       void cut(void)
+       void paste(void)
+       void redo(void)
+       void selectAll(void)
+       void setText(QString)
+       void undo(void)
+
+       void setTextChangedEvent(const char *)
+       void setcursorPositionChangedEvent(const char *)
+       void seteditingFinishedEvent(const char *)
+       void setreturnPressedEvent(const char *)
+       void setselectionChangedEvent(const char *)
+       void settextEditedEvent(const char *)
+
+.. note:: 
+
+       Most of the content of the previous configuration file is removed from this documentation, 
+        for a complete version see the Ring source code distribution.
+
+.. index:: 
+       pair: Code Generator; Static Methods
+
+Static Methods
+==============
+
+Starting from Ring 1.8 the code generator support the staticmethods option.
+
+So the code generator can know that the class doesn't need an object to call the methods.
+
+Example:
+
+.. code-block:: none
+
+       <class>
+       name: QStandardPaths
+       para: void
+       nonew
+       staticmethods
+       </class>
+
+       QString displayName(QStandardPaths::StandardLocation type)
+       QString findExecutable(QString executableName, QStringList paths))
+
+.. index:: 
+       pair: Code Generator; Loading Files
+
+Loading Files
+=============
+
+Starting from Ring 1.9 the code generator support the <loadfile> command.
+
+.. code-block:: ring
+
+       <loadfile> filename.cf
+
+This is useful to separate the extension configuration file to many files
+
+Example:
+
+The file : qt_module_network.cf in the RingQt Extension
+
+.. code-block:: ring
+
+       <comment>
+                                       Module (network)
+       </comment>
+
+       <loadfile> qabstractsocket.cf
+       <loadfile> qnetworkproxy.cf
+       <loadfile> qtcpsocket.cf
+       <loadfile> qtcpserver.cf
+       <loadfile> qhostaddress.cf
+       <loadfile> qhostinfo.cf
+       <loadfile> qnetworkrequest.cf
+       <loadfile> qnetworkaccessmanager.cf
+       <loadfile> qnetworkreply.cf
+
+.. index:: 
+       pair: Code Generator; Managed Classes
+
+Managed Classes
+===============
+
+Starting from Ring 1.9 the code generator support the <managed> option when defining classes.
+
+Using this option, the generator will use RING_API_RETMANAGEDCPOINTER() to return the C pointer.
+
+So the Garbage Collector will manage these C pointers.
+
+Example
+
+.. code-block:: ring
+
+       <class>
+       name: QFont
+       para: QString, int, int, bool
+       managed
+       </class>
+
+
+.. index:: 
+       pair: Code Generator; Configuration Files Examples
+
+Configuration Files Examples
+============================
+
+You can learn from the next examples
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/classes/qt.cf
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/libsdl.cf
+
+After modifying the configuration file, You will need to generate the code, You can learn from
+the next examples
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencode.bat
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/gencode.bat
+
+After generating the code, You will need to build the library, You can learn from the next examples
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/buildvc.bat
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildmingw32.bat
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/buildvc.bat
diff --git a/docs/en/target/compiler.txt b/docs/en/target/compiler.txt
new file mode 100644 (file)
index 0000000..08322ba
--- /dev/null
@@ -0,0 +1,942 @@
+.. index:: 
+       single: Command Line Options; Introduction
+
+====================
+Command Line Options
+====================
+
+The ring language takes source code file (*.ring) or the object file (*.ringo) as input to execute, 
+also the language provide other options like
+
+============   =======================================================
+Option         Description     
+============   =======================================================
+-tokens        Print a list of tokens in the source code file
+-rules         Print grammar rules applied on the tokens
+-ic            Print the intermediate byte code (before execution)
+-icfinal       Print the final byte code (after execution)
+-cgi           Print http response header before error messages
+-norun         Don't run the program after compiling
+-ins           Print instruction operation code before execution
+-performance   Print clock before and after program execution
+-go            Generate Object File
+-geo           Generate embedded object file (C source code)
+-w             Display Warnings 
+============   =======================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Tokens
+
+Printing Tokens
+===============
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               See "Hello World" + nl
+               for x = 1 to 10
+                       see x + nl
+               next
+               test()
+
+       func test
+               see "welcome" + nl
+               o1 = new point { x=10 y=20 z=30 }
+               see o1
+
+       class point x y z
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -tokens -norun
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Tokens - Generated by the Scanner
+       ===================================================
+
+          Keyword : FUNC
+       Identifier : main
+          EndLine
+          Keyword : SEE
+          Literal : Hello World
+         Operator : +
+       Identifier : nl
+          EndLine
+          Keyword : FOR
+       Identifier : x
+         Operator : =
+           Number : 1
+          Keyword : TO
+           Number : 10
+          EndLine
+          Keyword : SEE
+       Identifier : x
+         Operator : +
+       Identifier : nl
+          EndLine
+          Keyword : NEXT
+          EndLine
+       Identifier : test
+         Operator : (
+         Operator : )
+          EndLine
+          Keyword : FUNC
+       Identifier : test
+          EndLine
+          Keyword : SEE
+          Literal : welcome
+         Operator : +
+       Identifier : nl
+          EndLine
+       Identifier : o1
+         Operator : =
+          Keyword : NEW
+       Identifier : point
+         Operator : {
+       Identifier : x
+         Operator : =
+           Number : 10
+       Identifier : y
+         Operator : =
+           Number : 20
+       Identifier : z
+         Operator : =
+           Number : 30
+         Operator : }
+          EndLine
+          Keyword : SEE
+       Identifier : o1
+          EndLine
+          Keyword : CLASS
+       Identifier : point
+       Identifier : x
+       Identifier : y
+       Identifier : z
+          EndLine
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Rules
+
+Printing Rules
+==============
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -rules -norun
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Grammar Rules Used by The Parser
+       ===================================================
+
+       Rule : Program --> {Statement}
+
+       Line 1
+       Rule : Statement  --> 'Func' Identifier [ParaList]
+
+       Line 2
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 3
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'For' Identifier '=' Expr to Expr ['step' Expr]
+
+       Line 4
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 5
+       Rule : Next --> 'Next'
+
+       Line 6
+       Rule : Mixer -> '(' [Expr { ',' Expr} ] ')'
+
+       Line 8
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Statement  --> 'Func' Identifier [ParaList]
+
+       Line 9
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 10
+       Rule : Factor --> New Identifier {'.' Identifier }
+       Rule : Mixer --> '{' {Statement} BraceEnd
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : BraceEnd --> '}'
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+
+       Line 11
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 13
+       Rule : Statement  --> 'Class' Identifier
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Intermediate Code
+
+Printing Intermediate Code
+==========================
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -ic -norun
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Byte Code - Before Execution by the VM
+       ===================================================
+
+                PC      OPCode        Data
+
+                 1  ReturnNull
+                 2        Func    main
+                 3     NewLine       2
+                 4     FuncExE
+                 5       PushC   Hello World
+                 6       LoadA      nl      0
+                 7       PushV
+                 8         SUM       0
+                 9       Print
+                10     NewLine       3
+                11    ExitMark      29     28
+                12  LoadAFirst       x
+                13       PushN   1.000000
+                14  BeforeEqual       0
+                15  Assignment
+                16       PushN   1.000000
+                17  StepNumber
+                18  JumpVarLENum       x  10.000000    29
+                19     NewLine       4
+                20     FuncExE
+                21       LoadA       x      0
+                22       PushV
+                23       LoadA      nl      0
+                24       PushV
+                25         SUM       0
+                26       Print
+                27     NewLine       5
+                28     IncJump       x     18
+                29  POPExitMark
+                30     POPStep
+                31     NewLine       6
+                32    LoadFunc    test
+                33        Call       0
+                34  NoOperation
+                35     NewLine       8
+                36       PushV
+                37   FreeStack
+                38  ReturnNull
+                39        Func    test
+                40     NewLine       9
+                41     FuncExE
+                42       PushC   welcome
+                43       LoadA      nl      0
+                44       PushV
+                45         SUM       0
+                46       Print
+                47     NewLine      10
+                48       LoadA      o1      0
+                49  AssignmentPointer
+                50         New   point
+                51    SetScope
+                52       PushV
+                53  BraceStart
+                54       LoadA       x      0     58
+                55  AssignmentPointer
+                56       PushN   10.000000
+                57  BeforeEqual       0
+                58  Assignment       0      0
+                59   FreeStack
+                60       LoadA       y      0     64
+                61  AssignmentPointer
+                62       PushN   20.000000
+                63  BeforeEqual       0
+                64  Assignment       0      0
+                65   FreeStack
+                66       LoadA       z      0     70
+                67  AssignmentPointer
+                68       PushN   30.000000
+                69  BeforeEqual       0
+                70  Assignment       0      0
+                71   FreeStack
+                72    LoadFunc   ismethod
+                73       LoadA    self      0
+                74       PushV
+                75       PushC   braceend
+                76        Call
+                77  NoOperation
+                78       PushV
+                79       JumpZ      85
+                80    LoadFunc   braceend
+                81        Call
+                82  NoOperation
+                83       PushV
+                84   FreeStack
+                85    BraceEnd
+                86   FreeStack
+                87     NewLine      11
+                88     FuncExE
+                89       LoadA      o1      0
+                90       PushV
+                91       Print
+                92     NewLine      13
+                93  ReturnNull
+                94       Class   point  006E8BC0
+                95    NewLabel
+                96       LoadA       x      0
+                97       PushV
+                98   FreeStack
+                99       LoadA       y      0
+               100       PushV
+               101   FreeStack
+               102       LoadA       z      0
+               103       PushV
+               104   FreeStack
+               105  ReturnNull
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Printing Final Intermediate Code
+
+Printing Final Intermediate Code
+================================
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -icfinal
+
+Output:
+
+.. code-block:: ring
+
+       Hello World
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       welcome
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+
+       ===================================================
+       Byte Code - After Execution by the VM
+       ===================================================
+
+                PC      OPCode        Data
+
+                 1  ReturnNull
+                 2        Func    main
+                 3     NewLine       2
+                 4     FuncExE
+                 5       PushC   Hello World
+                 6       PushP   007D3670      0
+                 7       PushV
+                 8         SUM       0
+                 9       Print
+                10     NewLine       3
+                11    ExitMark      29     28
+                12  LoadAFirst       x
+                13       PushN   1.000000
+                14  BeforeEqual       0
+                15  Assignment
+                16       PushN   1.000000
+                17  StepNumber
+                18  JumpVarLPLENum       x  10.000000    29
+                19     NewLine       4
+                20     FuncExE
+                21  PushPLocal       x      0
+                22       PushV
+                23       PushP   007D3670      0
+                24       PushV
+                25         SUM       0
+                26       Print
+                27     NewLine       5
+                28   IncLPJump       x     18
+                29  POPExitMark
+                30     POPStep
+                31     NewLine       6
+                32   LoadFuncP    test
+                33        Call       0
+                34  NoOperation
+                35     NewLine       8
+                36       PushV
+                37   FreeStack
+                38  ReturnNull
+                39        Func    test
+                40     NewLine       9
+                41     FuncExE
+                42       PushC   welcome
+                43       PushP   007D3670      0
+                44       PushV
+                45         SUM       0
+                46       Print
+                47     NewLine      10
+                48  PushPLocal      o1      0
+                49  AssignmentPointer
+                50         New   point
+                51    SetScope
+                52       PushV
+                53  BraceStart
+                54       LoadA       x      0     58
+                55  AssignmentPointer
+                56       PushN   10.000000
+                57  BeforeEqual       0
+                58  SetProperty       0    106
+                59   FreeStack
+                60       LoadA       y      0     64
+                61  AssignmentPointer
+                62       PushN   20.000000
+                63  BeforeEqual       0
+                64  SetProperty       0    141
+                65   FreeStack
+                66       LoadA       z      0     70
+                67  AssignmentPointer
+                68       PushN   30.000000
+                69  BeforeEqual       0
+                70  SetProperty       0    176
+                71   FreeStack
+                72    LoadFunc   ismethod
+                73       LoadA    self      0
+                74       PushV
+                75       PushC   braceend
+                76        Call
+                77  NoOperation
+                78       PushV
+                79       JumpZ      85
+                80    LoadFunc   braceend
+                81        Call
+                82  NoOperation
+                83       PushV
+                84   FreeStack
+                85    BraceEnd
+                86   FreeStack
+                87     NewLine      11
+                88     FuncExE
+                89  PushPLocal      o1      0
+                90       PushV
+                91       Print
+                92     NewLine      13
+                93  ReturnNull
+                94       Class   point  007D8470
+                95    NewLabel
+                96       LoadA       x      0
+                97       PushV
+                98   FreeStack
+                99       LoadA       y      0
+               100       PushV
+               101   FreeStack
+               102       LoadA       z      0
+               103       PushV
+               104   FreeStack
+               105  ReturnNull
+               106    LoadFunc   ismethod
+               107       LoadA   ring_gettemp_var      0
+               108       PushV
+               109       PushC    setx
+               110        Call       0
+               111  NoOperation
+               112       PushV
+               113       JumpZ     132
+               114     NewLine       2
+               115       LoadA   ring_gettemp_var      0
+               116  LoadMethod    setx
+               117       LoadA   ring_settemp_var      0
+               118       PushV
+               119        Call       0      1
+               120  AfterCallMethod
+               121       PushV
+               122   FreeStack
+               123     NewLine       3
+               124       LoadA   ring_tempflag_var      0    128
+               125  AssignmentPointer
+               126       PushN   0.000000
+               127  BeforeEqual       0
+               128  Assignment       0      0
+               129   FreeStack
+               130     NewLine       4
+               131        Jump     140
+               132     NewLine       5
+               133       PushP   007D37D8      0    137
+               134  AssignmentPointer
+               135       PushN   1.000000
+               136  BeforeEqual       0
+               137  Assignment       0      0
+               138   FreeStack
+               139     NewLine       6
+               140      Return
+               141    LoadFunc   ismethod
+               142       LoadA   ring_gettemp_var      0
+               143       PushV
+               144       PushC    sety
+               145        Call       0
+               146  NoOperation
+               147       PushV
+               148       JumpZ     167
+               149     NewLine       2
+               150       LoadA   ring_gettemp_var      0
+               151  LoadMethod    sety
+               152       LoadA   ring_settemp_var      0
+               153       PushV
+               154        Call       0      1
+               155  AfterCallMethod
+               156       PushV
+               157   FreeStack
+               158     NewLine       3
+               159       LoadA   ring_tempflag_var      0    163
+               160  AssignmentPointer
+               161       PushN   0.000000
+               162  BeforeEqual       0
+               163  Assignment       0      0
+               164   FreeStack
+               165     NewLine       4
+               166        Jump     175
+               167     NewLine       5
+               168       PushP   007D37D8      0    172
+               169  AssignmentPointer
+               170       PushN   1.000000
+               171  BeforeEqual       0
+               172  Assignment       0      0
+               173   FreeStack
+               174     NewLine       6
+               175      Return
+               176    LoadFunc   ismethod
+               177       LoadA   ring_gettemp_var      0
+               178       PushV
+               179       PushC    setz
+               180        Call       0
+               181  NoOperation
+               182       PushV
+               183       JumpZ     202
+               184     NewLine       2
+               185       LoadA   ring_gettemp_var      0
+               186  LoadMethod    setz
+               187       LoadA   ring_settemp_var      0
+               188       PushV
+               189        Call       0      1
+               190  AfterCallMethod
+               191       PushV
+               192   FreeStack
+               193     NewLine       3
+               194       LoadA   ring_tempflag_var      0    198
+               195  AssignmentPointer
+               196       PushN   0.000000
+               197  BeforeEqual       0
+               198  Assignment       0      0
+               199   FreeStack
+               200     NewLine       4
+               201        Jump     210
+               202     NewLine       5
+               203       PushP   007D37D8      0    207
+               204  AssignmentPointer
+               205       PushN   1.000000
+               206  BeforeEqual       0
+               207  Assignment       0      0
+               208   FreeStack
+               209     NewLine       6
+               210      Return
+
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; CGI Support
+
+
+CGI Support
+===========
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -cgi
+
+.. index:: 
+       pair: Command Line Options; No Run
+
+No Run 
+======
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -norun
+
+.. index:: 
+       pair: Command Line Options; Printing Instruction Operation Code
+
+Printing Instruction Operation Code
+===================================
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -ins
+
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+
+       Operation  : ReturnNull  
+       PC         : 1  
+       Line Number    : 1  , File test.ring 
+        
+       SP (After) : 0  - FuncSP : 0 
+        LineNumber 1 
+       ===================================================
+       .....
+       .....
+       .....
+       
+.. tip:: Output removed from the previous example because it's very large!
+
+.. index:: 
+       pair: Command Line Options; Performance
+
+Performance
+===========
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -performance
+
+Output:
+
+.. code-block:: ring
+
+       ===================================================
+       Date  : 2015/09/15 Time : 15:56:17
+       Clock : 0 
+       ===================================================
+       Hello World
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       welcome
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       
+       ===================================================
+       Date  : 2015/09/15 Time : 15:56:17
+       Clock : 0 
+       ===================================================
+
+.. index:: 
+       pair: Command Line Options; Generate Object File
+
+Generate Object File
+====================
+
+You can generate object file (*.ringo) from your source code file (*.ring) 
+using -go option
+
+.. tip::
+
+       You will get one object file to use for distributing/running your application which may contains one or many
+       ring source files that you can keep or distribute based on the application (commercial or open source).
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -go
+
+To run the compiled object file
+
+.. code-block:: ring
+
+       ring test.ringo
+
+
+.. index:: 
+       pair: Command Line Options; Generate Embedded Object File
+
+Generate Embedded Object File
+=============================
+
+You can generate embedded object file (C source code) from your source code file (*.ring) 
+using -geo option
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -geo
+
+This command will generate at least three files
+
+.. code-block:: ring
+
+       test.c
+       ringappcode.c
+       ringappcode.h
+
+More files could be generated based on the project size
+
+The generated files will pass the byte code to Ring VM to be executed
diff --git a/docs/en/target/conf.py b/docs/en/target/conf.py
new file mode 100644 (file)
index 0000000..444c370
--- /dev/null
@@ -0,0 +1,377 @@
+# -*- coding: utf-8 -*-
+#
+# Ring documentation build configuration file, created by
+# sphinx-quickstart on Sun May 03 10:07:42 2015.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.mathjax',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.viewcode'
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
+source_suffix = '.txt'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'Ring'
+copyright = u'2016-2020, Ring Team'
+author = u'Ring Team'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '1.12'
+# The full version, including alpha/beta/rc tags.
+release = '1.12'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = []
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#html_theme = 'alabaster'
+
+html_theme = "classic"
+html_theme_options = {
+    "rightsidebar": "true",
+    "relbarbgcolor": "black"
+}
+
+#html_theme = "sphinx_rtd_theme"
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
+#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
+#html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+#html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+#html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'Ringdoc'
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+       'classoptions': ',oneside,openany',
+       'babel': '\\usepackage[english]{babel}',
+       'pointsize': '18pt'
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+
+# Latex figure (float) alignment
+#'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+  (master_doc, 'Ring.tex', u'Ring Documentation',
+   u'Ring Team', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'ring', u'Ring Documentation',
+     [author], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  (master_doc, 'Ring', u'Ring Documentation',
+   author, 'Ring', 'One line description of project.',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False
+
+
+# -- Options for Epub output ----------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = project
+epub_author = author
+epub_publisher = author
+epub_copyright = copyright
+
+# The basename for the epub file. It defaults to the project name.
+#epub_basename = project
+
+# The HTML theme for the epub output. Since the default themes are not optimized
+# for small screen space, using the same theme for HTML and epub output is
+# usually not wise. This defaults to 'epub', a theme designed to save visual
+# space.
+#epub_theme = 'epub'
+
+# The language of the text. It defaults to the language option
+# or 'en' if the language is not set.
+#epub_language = ''
+
+# The scheme of the identifier. Typical schemes are ISBN or URL.
+#epub_scheme = ''
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#epub_identifier = ''
+
+# A unique identification for the text.
+#epub_uid = ''
+
+# A tuple containing the cover image and cover page html template filenames.
+#epub_cover = ()
+
+# A sequence of (type, uri, title) tuples for the guide element of content.opf.
+#epub_guide = ()
+
+# HTML files that should be inserted before the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_pre_files = []
+
+# HTML files shat should be inserted after the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_post_files = []
+
+# A list of files that should not be packed into the epub file.
+epub_exclude_files = ['search.html']
+
+# The depth of the table of contents in toc.ncx.
+#epub_tocdepth = 3
+
+# Allow duplicate toc entries.
+#epub_tocdup = True
+
+# Choose between 'default' and 'includehidden'.
+#epub_tocscope = 'default'
+
+# Fix unsupported image types using the Pillow.
+#epub_fix_images = False
+
+# Scale large images.
+#epub_max_image_width = 0
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#epub_show_urls = 'inline'
+
+# If false, no index is generated.
+#epub_use_index = True
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'https://docs.python.org/': None}
diff --git a/docs/en/target/consolecolors.png b/docs/en/target/consolecolors.png
new file mode 100644 (file)
index 0000000..57e03bc
Binary files /dev/null and b/docs/en/target/consolecolors.png differ
diff --git a/docs/en/target/contribute.txt b/docs/en/target/contribute.txt
new file mode 100644 (file)
index 0000000..b5b37d5
--- /dev/null
@@ -0,0 +1,129 @@
+.. index:: 
+       single: How to contribute?; Introduction
+
+==================
+How to contribute?
+==================
+
+Ring is a free-open source project, Everyone is welcome to contribute to Ring.
+
+Project Home : https://github.com/ring-lang/ring
+
+You can help in many parts in the project
+
+* Documentation
+* Testing
+* Samples
+* Applications
+* Editors Support
+* Libraries in Ring
+* Extensions in C/C++
+* Compiler and Virtual Machine (VM)
+* Ideas and suggestions
+
+.. index:: 
+       pair: How to contribute?; Special thanks to contributors
+
+
+Special thanks to contributors
+==============================
+
+Throughout the creation of this project, Ring relied heavily on contributions from experts along with college students.  
+Their input was invaluable, and we want to take a moment to thank them and recognize them for all of their hard work.
+
+Ring Team: http://ring-lang.sf.net/team.html
+
+.. index:: 
+       pair: How to contribute?; Documentation
+
+Documentation
+=============
+
+You can modify anything in the documentation, by updating the text files (*.txt)
+in this folder : https://github.com/ring-lang/ring/tree/master/docs/source
+
+The documentation is created using Sphinx : http://www.sphinx-doc.org/en/stable/
+
+.. index:: 
+       pair: How to contribute?; Testing
+
+Testing
+=======
+
+You can write new tests in this folder 
+
+https://github.com/ring-lang/ring/tree/master/tests/scripts
+
+
+.. index:: 
+       pair: How to contribute?; Samples
+
+Samples
+=======
+
+You can add new samples to this folder
+
+https://github.com/ring-lang/ring/tree/master/samples/other
+
+.. index:: 
+       pair: How to contribute?; Applications
+
+Applications
+============
+
+You can add new applications to this folder
+
+https://github.com/ring-lang/ring/tree/master/applications
+
+.. index:: 
+       pair: How to contribute?; Libraries in Ring
+
+.. index:: 
+       pair: How to contribute?; Editors Support
+
+Editors Support
+===============
+
+You can help in supporting Ring in different code editors
+
+Check the next folder
+
+https://github.com/ring-lang/ring/tree/master/editor
+
+Libraries in Ring
+=================
+
+You can update and add libraries to this folder
+
+https://github.com/ring-lang/ring/tree/master/ringlibs
+
+.. index:: 
+       pair: How to contribute?; Extensions in C/C++
+
+
+Extensions in C/C++
+===================
+
+You can add and update extensions in this folder
+
+https://github.com/ring-lang/ring/tree/master/extensions
+
+.. index:: 
+       pair: How to contribute?; Compiler and Virtual Machine (VM)
+
+Compiler and Virtual Machine (VM)
+=================================
+
+* Source Code (C Language) : https://github.com/ring-lang/ring/tree/master/src
+* Visual Source (PWCT) : https://github.com/ring-lang/ring/tree/master/visualsrc
+
+.. index:: 
+       pair: How to contribute?; Ideas and suggestions
+
+Ideas and suggestions
+=====================
+
+You can share your ideas, suggestions and questions in this group
+
+https://groups.google.com/forum/#!forum/ring-lang
+
diff --git a/docs/en/target/controlstructures.txt b/docs/en/target/controlstructures.txt
new file mode 100644 (file)
index 0000000..dfb8418
--- /dev/null
@@ -0,0 +1,442 @@
+.. index:: 
+       single: Control Structures - First Style; Introduction
+
+================================
+Control Structures - First Style
+================================
+
+In this chapter we are going to learn about the control structures provided by
+the Ring programming language.
+
+.. index:: 
+       pair: Control Structures; Branching
+
+
+Branching
+=========
+
+* If Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       if Expression
+               Block of statements
+       but Expression
+               Block of statements
+       else
+               Block of statements
+       ok
+
+Example:
+
+.. code-block:: ring
+
+       see " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " give nOption
+
+       if nOption = 1  see "Enter your name : " give name see "Hello " + name + nl
+       but nOption = 2 see "Sample : using if statement" + nl
+       but nOption = 3 bye
+       else see "bad option..." + nl
+       ok
+              
+
+.. index:: 
+       pair: Control Structures - First Style; Switch Statement
+
+* Switch Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       switch Expression
+       on Expression
+               Block of statements
+       other
+               Block of statements
+       off             
+
+Example:
+
+.. code-block:: ring
+
+       See " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " Give nOption
+
+       Switch nOption
+       On 1 See "Enter your name : " Give name See "Hello " + name + nl
+       On 2 See "Sample : using switch statement" + nl
+       On 3 Bye
+       Other See "bad option..." + nl
+       Off
+
+
+.. index:: 
+       pair: Control Structures - First Style; Looping
+
+Looping
+=======
+
+.. index:: 
+       pair: Control Structures - First Style; While Loop
+
+* While Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       while Expression
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       While True
+
+               See " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Give nOption
+
+               Switch nOption
+               On 1 
+                       See "Enter your name : " 
+                       Give name 
+                       See "Hello " + name + nl
+               On 2 
+                       See "Sample : using while loop" + nl
+               On 3 
+                       Bye
+               Other 
+                       See "bad option..." + nl
+               Off
+       End
+
+.. index:: 
+       pair: Control Structures - First Style; For Loop
+
+* For Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier=expression to expression [step expression]
+               Block of statements
+       next
+
+Example:
+
+.. code-block:: ring
+
+       # print numbers from 1 to 10
+       for x = 1 to 10  see x + nl  next
+
+Example:
+
+.. code-block:: ring
+
+       # Dynamic loop
+       See "Start : " give nStart       
+       See "End   : " give nEnd
+       See "Step  : " give nStep
+       For x = nStart to nEnd Step nStep
+               see x + nl
+       Next
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 0 to 10
+       for x = 0 to 10 step 2
+               see x + nl
+       next
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 10 to 0
+       for x = 10 to 0 step -2
+               see x + nl
+       next
+
+
+.. index:: 
+       pair: Control Structures - First Style; For In Loop
+
+* For in Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier in List/String  [step expression]
+               Block of statements
+       next
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       for x in aList  see x + nl  next  # print numbers from 1 to 10
+
+.. index:: 
+       pair: Control Structures - First Style; Step Option
+
+Using The Step option with For in
+=================================
+
+We can use the Step option with For in to skip number of items in each iteration
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       # print odd items inside the list
+       for x in aList step 2
+               see x + nl  
+       next  
+
+
+.. index:: 
+       pair: Control Structures - First Style; for in to modify lists
+
+Using For in to modify lists
+=============================
+
+When we use (For in) we get items by reference.
+
+This means that we can read/edit items inside the loop.
+       
+Example:
+
+.. code-block:: ring
+
+       aList = 1:5     # create list contains numbers from 1 to 5
+       # replace list numbers with strings
+       for x in aList  
+               switch x
+               on 1  x = "one"
+               on 2  x = "two"
+               on 3  x = "three"
+               on 4  x = "four"
+               on 5  x = "five"
+               off
+       next
+       see aList       # print the list items
+
+.. index:: 
+       pair: Control Structures - First Style; Do Again Loop
+
+Do Again Loop
+=============
+
+Syntax:
+
+.. code-block:: ring
+       
+       do
+               Block of statements
+       again expression
+
+Example:
+
+.. code-block:: ring
+
+       x = 1 
+       do 
+               see x + nl 
+               x++ 
+       again x <= 10
+
+.. index:: 
+       pair: Control Structures - First Style; Exit
+
+Exit Command
+============
+
+Used to go outside one or more of loops.
+
+
+Syntax:
+
+.. code-block:: ring
+
+       exit [expression]       # inside loop
+
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               see x + nl
+               if x = 5 exit ok
+       next
+
+.. index:: 
+       pair: Control Structures - First Style; Exit from two loops
+
+Exit from two loops
+===================
+
+The next example presents how to use the exit command to exit from two loops in one jump.
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               for y = 1 to 10
+                       see "x=" + x + " y=" + y + nl
+                       if x = 3 and y = 5
+                               exit 2     # exit from 2 loops 
+                       ok
+               next
+       next                    
+
+.. index:: 
+       pair: Control Structures - First Style; Loop Command
+
+Loop Command
+============
+
+Used to jump to the next iteration in the loop.
+
+Syntax:
+
+.. code-block:: ring
+
+       loop [expression]       # inside loop
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               if x = 3
+                       see "Number Three" + nl
+                       loop
+               ok
+               see x + nl
+       next
+
+.. index:: 
+       pair: Control Structures - First Style; Short-circuit evaluation
+
+Short-circuit evaluation
+========================
+
+The logical operators and/or follow the `short-circuit evaluation <http://en.wikipedia.org/wiki/Short-circuit_evaluation>`_.
+
+If the first argument of the AND operator is zero, then there is no need to evaluate the second
+argument and the result will be zero.
+
+If the first argument of the OR operator is one, then there is no need to evaluate the second
+argument and the result will be one.
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** nice 
+       ** nice 
+       ** great        
+       */
+
+       x = 0 y = 10
+
+       if (x = 0 and nice()) and (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl   return 1
+
+
+Example:
+
+.. code-block:: ring
+
+       # No output
+
+       x = 0 y = 10
+
+       if (x = 1 and nice()) and (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl   return 1
+
+
+Example:
+
+.. code-block:: ring
+
+       /* output 
+       ** nice
+       ** great
+       */
+       x = 0 y = 10
+
+       if (x = 0 and nice()) or (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl  return 1                    
+
+
+.. index:: 
+       pair: Control Structures - First Style; Comments about evaluation
+
+Comments about evaluation
+=========================
+
+* True, False, nl & NULL are variables defined by the language
+
+* True = 1
+
+* False = 0 
+
+* nl = new line
+
+* NULL = empty string = ""
+
+* Everything evaluates to true except 0 (False).
+
+Example:
+
+.. code-block:: ring
+
+       # output = message from the if statement
+
+       if 5    # 5 evaluates to true because it's not zero (0).
+               see "message from the if statement" + nl
+       ok
diff --git a/docs/en/target/controlstructures2.txt b/docs/en/target/controlstructures2.txt
new file mode 100644 (file)
index 0000000..3713d99
--- /dev/null
@@ -0,0 +1,219 @@
+.. index:: 
+       single: Control Structures - Second Style; Introduction
+
+=================================
+Control Structures - Second Style
+=================================
+
+In this chapter we are going to learn about the second style of control structures
+provided by the Ring programming language.
+
+.. index:: 
+       pair: Control Structures - Second Style; Branching
+
+
+Branching
+=========
+
+.. index:: 
+       pair: Control Structures - Second Style; If Statement
+
+* If Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       if Expression
+               Block of statements
+       elseif Expression
+               Block of statements
+       else
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       put " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " get nOption
+
+       if nOption = 1  put "Enter your name : " get name put "Hello " + name + nl
+       elseif nOption = 2 put "Sample : using if statement" + nl
+       elseif nOption = 3 bye
+       else put "bad option..." + nl
+       end
+
+.. index:: 
+       pair: Control Structures - Second Style; Switch Statement
+
+* Switch Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       switch Expression
+       case Expression
+               Block of statements
+       else
+               Block of statements
+       end             
+
+Example:
+
+.. code-block:: ring
+
+       Put " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " Get nOption
+
+       Switch nOption
+       Case 1 Put "Enter your name : " Get name Put "Hello " + name + nl
+       Case 2 Put "Sample : using switch statement" + nl
+       Case 3 Bye
+       Else Put "bad option..." + nl
+       End
+
+.. index:: 
+       pair: Control Structures - Second Style; Looping
+
+Looping
+=======
+
+* While Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       while Expression
+               Block of statements
+       end
+
+
+Example:
+
+.. code-block:: ring
+
+       While True
+
+               Put " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Get nOption
+
+               Switch nOption
+               Case 1 
+                       Put "Enter your name : " 
+                       Get name 
+                       Put "Hello " + name + nl
+               Case 2 
+                       Put "Sample : using while loop" + nl
+               Case 3 
+                       Bye
+               Else 
+                       Put "bad option..." + nl
+               End
+       End
+.. index:: 
+       pair: Control Structures - Second Style; For Loop
+
+
+* For Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier=expression to expression [step expression]
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       # print numbers from 1 to 10
+       for x = 1 to 10  put x + nl  end
+
+Example:
+
+.. code-block:: ring
+
+       # Dynamic loop
+       Put "Start : " get nStart       
+       Put "End   : " get nEnd
+       Put "Step  : " get nStep
+       For x = nStart to nEnd Step nStep
+               Put x + nl
+       End
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 0 to 10
+       for x = 0 to 10 step 2
+               Put x + nl
+       end
+
+Example:
+
+.. code-block:: ring
+
+       # print even numbers from 10 to 0
+       for x = 10 to 0 step -2
+               put x + nl
+       end
+
+
+.. index:: 
+       pair: Control Structures - Second Style; For In Loop
+
+* For in Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier in List/String  [step expression]
+               Block of statements
+       end
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       for x in aList  put x + nl  end  # print numbers from 1 to 10
+
+.. index:: 
+       pair: Control Structures - Second Style; Exceptions
+
+Exceptions
+==========
+
+.. code-block:: ring
+
+       try
+               Block of statements
+       catch
+               Block of statements
+       end
diff --git a/docs/en/target/controlstructures3.txt b/docs/en/target/controlstructures3.txt
new file mode 100644 (file)
index 0000000..5a1cbce
--- /dev/null
@@ -0,0 +1,293 @@
+.. index:: 
+       single: Control Structures - Third Style; Introduction
+
+================================
+Control Structures - Third Style
+================================
+
+In this chapter we are going to learn about the third style of control structures
+provided by the Ring programming language.
+
+.. index:: 
+       pair: Control Structures - Third Style; Branching
+
+
+Branching
+=========
+
+.. index:: 
+       pair: Control Structures - Third Style; If Statement
+
+* If Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       if Expression {
+               Block of statements
+       elseif Expression
+               Block of statements
+       else
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       print(" 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+           ")
+
+       nOption = getnumber()
+
+       if nOption = 1  {
+               print("Enter your name : ") 
+               name = getstring()      
+               print("Hello #{name}\n")
+       elseif nOption = 2 
+               print("Sample : using if statement\n")
+       elseif nOption = 3 
+               bye
+       else 
+               print("bad option...\n")
+       }
+
+.. index:: 
+       pair: Control Structures - Third Style; Switch Statement
+
+* Switch Statement
+
+Syntax:
+
+.. code-block:: ring
+
+       switch Expression {
+       case Expression
+               Block of statements
+       else
+               Block of statements
+       }       
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       print(" 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+             ")
+
+       nOption = GetString()
+
+       switch nOption {
+       case 1 
+               print("Enter your name : ")
+               name = getstring()
+               print("Hello #{name}\n")
+       case 2 
+               print("Sample : using switch statement\n")
+       case 3 
+               Bye
+       else 
+               print("bad option...\n")
+       }
+
+
+.. index:: 
+       pair: Control Structures; Looping
+
+Looping
+=======
+
+.. index:: 
+       pair: Control Structures - Third Style; While Loop
+
+* While Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       while Expression {
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       While True {
+
+               print(" 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                         ")
+
+               nOption = GetString()
+
+               switch nOption {
+               case 1 
+                       print("Enter your name : ")
+                       name = getstring()
+                       print("Hello #{name}\n")
+               case 2 
+                       print("Sample : using switch statement\n")
+               case 3 
+                       Bye
+               else 
+                       print("bad option...\n")
+               }
+
+       }
+
+.. index:: 
+       pair: Control Structures - Third Style; For Loop
+
+* For Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier=expression to expression [step expression] {
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       # print numbers from 1 to 10
+       load "stdlib.ring"
+       for x = 1 to 10  { 
+               print("#{x}\n") 
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # Dynamic loop
+       print("Start : ") nStart = getnumber()
+       print("End   : ") nEnd = getnumber()
+       print("Step  : ") nStep = getnumber()
+       for x = nStart to nEnd step nStep {
+               print("#{x}\n") 
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # print even numbers from 0 to 10
+       for x = 0 to 10 step 2 {
+               print("#{x}\n") 
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # print even numbers from 10 to 0
+       for x = 10 to 0 step -2 {
+               print("#{x}\n") 
+       }
+
+
+.. index:: 
+       pair: Control Structures - Third Style; For In Loop
+
+* For in Loop
+
+Syntax:
+
+.. code-block:: ring
+
+       for identifier in List/String  [step expression] {
+               Block of statements
+       }
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       for x in aList { print("#{x}\n") }  # print numbers from 1 to 10
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       # print odd items inside the list
+       for x in aList step 2 {
+               print("#{x}\n") 
+       }
+
+When we use (For in) we get items by reference.
+
+This means that we can read/edit items inside the loop.
+       
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:5     # create list contains numbers from 1 to 5
+       # replace list numbers with strings
+       for x in aList {
+               switch x {
+               case 1  x = "one"
+               case 2  x = "two"
+               case 3  x = "three"
+               case 4  x = "four"
+               case 5  x = "five"
+               }
+       }
+       print(aList)    # print the list items
+
+
+.. index:: 
+       pair: Control Structures - Third Style; Exceptions
+
+Exceptions
+==========
+
+.. code-block:: ring
+
+       try {
+               Block of statements
+       catch
+               Block of statements
+       }
\ No newline at end of file
diff --git a/docs/en/target/dateandtime.txt b/docs/en/target/dateandtime.txt
new file mode 100644 (file)
index 0000000..1c559c6
--- /dev/null
@@ -0,0 +1,270 @@
+.. index:: 
+       single: Date and Time; Introduction
+
+=============
+Date and Time
+=============
+
+In this chapter we are going to learn about the date and time functions.
+
+.. index:: 
+       pair: Date and Time; clock()
+
+
+Clock() Function
+================
+
+Syntax:
+
+.. code-block:: ring
+
+        Clock() ---> The number of clock ticks from program start
+
+Example:
+
+.. code-block:: ring
+       
+       See "Calculate performance" + nl
+       t1 = clock()
+       for x = 1 to 1000000 next
+       see clock() - t1 
+
+.. index:: 
+       pair: Date and Time; ClosPerSecond()
+
+ClocksPerSecond() Function
+==========================
+
+Return how many clocks in one second
+
+Syntax:
+
+.. code-block:: ring
+
+       clockspersecond() ---> Number of clocks in one second
+
+Example:
+
+.. code-block:: ring
+
+       # Wait 1 second
+       t = clock()
+       while clock() - t <= clockspersecond() end
+
+.. index:: 
+       pair: Date and Time; Time()
+
+Time() Function
+===============
+
+We can get the system time using the Time() function.
+
+Example:
+
+.. code-block:: ring
+       
+       See "Time : " + time()
+
+
+.. index:: 
+       pair: Date and Time; Date()
+
+Date() Function
+===============
+
+We can get the date using the Date() function.
+
+Syntax:
+
+.. code-block:: ring
+
+        Date() ---> String represent the date "dd/mm/yyyy"
+
+Example:
+
+.. code-block:: ring
+
+       See "Date : " + date()  # Date : 24/05/2015
+
+
+.. index:: 
+       pair: Date and Time; TimeList()
+
+TimeList() Function
+===================
+
+We can print the date and the time information using the TimeList() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       TimeList() ---> List contains the time and date information.
+
+The next table presents the list items
+
+======  ===================================
+index  value
+====== ===================================
+1              abbreviated weekday name 
+2              full weekday name
+3              abbreviated month name
+4              full month name
+5              Date & Time
+6              Day of the month
+7              Hour (24)
+8              Hour (12)
+9              Day of the year
+10             Month of the year
+11             Minutes after hour
+12             AM or PM
+13             Seconds after the hour
+14             Week of the year (sun-sat)
+15             day of the week
+16             date
+17             time
+18             year of the century             
+19             year
+20             time zone
+21             percent sign
+====== ===================================
+
+Example:
+
+.. code-block:: ring
+
+       /* Output:
+       ** Sun                  abbreviated weekday name 
+       ** Sunday               full weekday name
+       ** May                  abbreviated month name
+       ** May                  full month name
+       ** 05/24/15 09:58:38    Date & Time
+       ** 24                   Day of the month
+       ** 09                   Hour (24)
+       ** 09                   Hour (12)
+       ** 144                  Day of the year
+       ** 05                   Month of the year
+       ** 58                   Minutes after hour
+       ** AM                   AM or PM
+       ** 38                   Seconds after the hour
+       ** 21                   Week of the year (sun-sat)
+       ** 0                    day of the week
+       ** 05/24/15             date
+       ** 09:58:38             time
+       ** 15                   year of the century             
+       ** 2015                 year
+       ** Arab Standard Time   time zone
+       ** %                    percent sign
+       */
+       
+       See TimeList() 
+
+Example:
+
+.. code-block:: ring
+
+       See "Day Name : " + TimeList()[2]       # Sunday
+
+Example:
+
+.. code-block:: ring
+
+       See "Month Name : " + TimeList()[4]     # May
+
+.. index:: 
+       pair: Date and Time; AddDays()
+
+AddDays() Function
+==================
+
+Syntax:
+
+.. code-block:: ring
+
+       AddDays(cDate,nDays) ---> Date from cDate and after nDays
+
+Example:
+
+.. code-block:: ring
+
+       cDate = date()
+       see cDate + nl                  # 24/05/2015
+       cDate = adddays(cDate,10)
+       see cDate + nl                  # 03/06/2015
+
+.. index:: 
+       pair: Date and Time; DiffDays()
+
+DiffDays() Function
+===================
+
+Syntax:
+
+.. code-block:: ring
+
+       DiffDays(cDate1,cDate2) ---> number of days (Date1 - Date2)
+
+Example:
+
+.. code-block:: ring
+
+       cDate1 = date()
+       see cDate1 + nl                                         # 24/05/2015
+       cDate2 = adddays(cDate1,10)
+       see cDate2 + nl                                         # 03/06/2015
+       see "DiffDays = " + diffdays(cDate1,cDate2) + nl        # -10
+       see "DiffDays = " + diffdays(cDate2,cDate1) + nl        # 10
+       
+.. index:: 
+       pair: Date and Time; EpochTime()
+
+EpochTime() Function
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       EpochTime( cDate, cTime ) ---> Epoch Seconds
+
+Example:
+
+.. code-block:: ring
+
+       ###-------------------------------------------------------------
+       # EpochTime()
+       # Example ---  EpochSec = EpochTime( Date(), Time() )
+       # Call Format: EpochSec = EpochTime( "15/07/2016", "10:15:30" )
+       #              EpochSec = 1468577730
+       #---------------------------------------------------------------
+
+       Func EpochTime(Date, Time)
+
+           arrayDate = split(Date, "/")
+           arrayTime = split(Time, ":")
+
+           Year = arrayDate[3] ; Month  = arrayDate[2] ; Day    = arrayDate[1]
+           Hour = arrayTime[1] ; Minute = arrayTime[2] ; Second = arrayTime[3]
+
+           cDate1    = Day +"/"+ Month +"/"+ Year
+           cDate2    = "01/01/" + Year
+           DayOfYear = DiffDays( cDate1, cDate2)
+
+           ### Formula
+           tm_sec  = Second    * 1
+           tm_min  = Minute    * 60
+           tm_hour = Hour      * 3600
+           tm_yday = DayOfYear * 86400
+           tm_year = Year      - 1900
+
+           tm_year1 =         ( tm_year -  70)          * 31536000
+           tm_year2 = ( floor(( tm_year -  69) /   4 )) * 86400
+           tm_year3 = ( floor(( tm_year -   1) / 100 )) * 86400
+           tm_year4 = ( floor(( tm_year + 299) / 400 )) * 86400
+
+           ### Result
+           EpochSec = tm_sec + tm_min + tm_hour + tm_yday +
+                      tm_year1 + tm_year2 - tm_year3 + tm_year4
+
+       return EpochSec
+       
diff --git a/docs/en/target/debug.txt b/docs/en/target/debug.txt
new file mode 100644 (file)
index 0000000..d49620c
--- /dev/null
@@ -0,0 +1,238 @@
+.. index:: 
+       single: The Trace Library and the Interactive Debugger; Introduction
+
+==============================================
+The Trace Library and the Interactive Debugger
+==============================================
+
+In this chapter we will learn about the Trace Library and the Interactive Debugger
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Loading the Trace library
+
+Loading the Trace library
+=========================
+
+To start using the Trace library, We must load it first!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Trace All Events
+
+Trace All Events
+================
+
+The next example demonstrates the Trace library usage to trace all events.
+
+.. code-block:: ring
+
+       # Trace All Events
+       trace(:AllEvents)
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+
+       mytest()
+
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Trace control flow between functions
+
+Trace control flow between functions
+====================================
+
+The next example demonstrates the Trace library usage 
+to trace the control flow between functions.
+
+.. code-block:: ring
+
+       Trace(:Functions)
+
+       test1()
+
+       func test1
+               see :test1 + nl
+               test2()
+
+       func test2
+               see :test2 + nl
+               see test3() + nl
+
+       func test3
+               see :test3 + nl
+               return "test 3 output" 
+       
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Pass Error
+
+Pass Error
+==========
+
+The next example demonstrates the Trace library usage 
+to pass an error!
+
+.. code-block:: ring
+
+       Trace(:PassError)
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               test2() # Runtime Error!
+               see "We can continue!"
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Interactive Debugger
+
+Interactive Debugger
+====================
+
+The next example demonstrates the Trace library usage 
+to use the Interactive Debugger
+
+.. code-block:: ring
+
+       Trace(:Debugger)
+
+       test1()
+       see "good bye!" + nl
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               test2() # Runtime Error!
+               see "After Error!" +nl
+               see "t = " see t see nl
+               see "x = " see x see nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Execute Program Line by Line
+
+Execute Program Line by Line
+============================
+
+The next example demonstrates the Trace library usage 
+to execute the program line by line!
+
+.. code-block:: ring
+
+       Trace(:LineByLine)
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               test2()
+               see "After Error!" +nl
+               see "t = " + t + nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; BreakPoint
+       
+BreakPoint
+==========
+
+The next example demonstrates the Trace library usage 
+to stop at a breakpoint!
+
+.. code-block:: ring
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Disable BreakPoints
+
+Disable BreakPoints
+===================
+
+The next example demonstrates the Trace library usage 
+and how to disable the Breakpoints!
+
+.. code-block:: ring
+
+       NoBreakPoints()
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+.. index:: 
+       pair: The Trace Library and the Interactive Debugger; Using the Interactive Debugger
+               
+Using the Interactive Debugger
+==============================
+
+The next example uses a Breakpoint to open the Interactive Debugger!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+
+Screen Shots:
+
+We have the Interactive Debugger at the Breakpoint!
+
+.. image:: debugshot1.png
+       :alt: Interactive Debugger
+
+We can print the variables values
+
+.. image:: debugshot2.png
+       :alt: Interactive Debugger
+
+We can change the variables values then continue execution
+
+.. image:: debugshot3.png
+       :alt: Interactive Debugger
+
+We can run the Interactive Debugger in the Output Window
+
+.. image:: debugshot4.png
+       :alt: Interactive Debugger
+
diff --git a/docs/en/target/debugshot1.png b/docs/en/target/debugshot1.png
new file mode 100644 (file)
index 0000000..7e7f953
Binary files /dev/null and b/docs/en/target/debugshot1.png differ
diff --git a/docs/en/target/debugshot2.png b/docs/en/target/debugshot2.png
new file mode 100644 (file)
index 0000000..c6ba5b1
Binary files /dev/null and b/docs/en/target/debugshot2.png differ
diff --git a/docs/en/target/debugshot3.png b/docs/en/target/debugshot3.png
new file mode 100644 (file)
index 0000000..56087f6
Binary files /dev/null and b/docs/en/target/debugshot3.png differ
diff --git a/docs/en/target/debugshot4.png b/docs/en/target/debugshot4.png
new file mode 100644 (file)
index 0000000..00d3e47
Binary files /dev/null and b/docs/en/target/debugshot4.png differ
diff --git a/docs/en/target/declarative.txt b/docs/en/target/declarative.txt
new file mode 100644 (file)
index 0000000..b66821c
--- /dev/null
@@ -0,0 +1,349 @@
+.. index:: 
+       single: Declarative Programming; Introduction
+
+===============================================
+Declarative Programming using Nested Structures
+===============================================
+
+In this chapter we are going to learn how to build declarative programming world using nested structures on the top
+of object oriented.
+
+We will learn about
+
+* Creating Objects inside Lists
+* Composition and Returning Objects and Lists by Reference
+* Executing code after the end of object access 
+* Declarative Programming on the top of Object-Oriented
+
+.. index:: 
+       pair: Declarative Programming; Objects inside lists
+
+Creating Objects inside Lists
+=============================
+
+We can create objects inside lists during list definition.
+Also we can add objects to the list at any time using the Add() function or the + operator.
+
+Example:
+
+.. code-block:: ring
+
+       alist = [new point, new point, new point]       # create list contains three objects 
+
+       alist + [1,2,3]                                 # add another item to the list
+
+       see "Item 4 is a list contains 3 items" + nl
+       see alist[4] 
+
+       add(alist , new point)
+       alist + new point
+
+       alist[5] { x = 100 y = 200 z = 300 }
+       alist[6] { x = 50 y = 150 z = 250 }
+
+       see "Object inside item 5" + nl
+       see alist[5]
+       see "Object inside item 6" + nl
+       see alist[6]
+
+       class point x y z
+
+Output:
+
+.. code-block:: ring
+
+       Item 4 is a list contains 3 items
+       1
+       2
+       3
+       Object inside item 5
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       Object inside item 6
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+.. index:: 
+       pair: Declarative Programming; Return object by reference
+
+Composition and Returning Objects and Lists by Reference
+========================================================
+
+When we use composition and have object as one of the class attributes, when we return that object it will be returned by reference.
+
+if the caller used the assignment operator, another copy of the object will be created.
+
+The caller can avoid using the assignment operator and use the returned reference directly to access the object.
+
+The same is done also if the attribute is a list (not object).
+
+.. note:: Objects and Lists are treated using the same rules. When you pass them to function they are passed by reference, 
+       when you return them from functions they are returned by value except if it's an object attribute where a return by reference 
+       will be done.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Container
+       myobj = o1.addobj()     # the assignment will create another copy
+       myobj.x = 100
+       myobj.y = 200
+       myobj.z = 300
+       see o1.aobjs[1]         # print the object inside the container 
+       see myobj               # print the copy
+
+       Class Container
+               aObjs = []
+               func addobj
+                       aobjs + new point
+                       return aobjs[len(aobjs)]        # return object by reference
+
+       Class point 
+               x  = 10
+               y  = 20
+               z  = 30
+
+Output:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+
+Example(2):
+
+.. code-block:: ring
+
+       func main
+               o1 = new screen  {
+                       content[point()] { 
+                               x = 100 
+                               y = 200
+                               z = 300         
+                       }
+                       content[point()] { 
+                               x = 50 
+                               y = 150
+                               z = 250         
+                       }
+               }
+               see o1.content[1]
+               see o1.content[2]
+
+       Class Screen
+               content = []
+               func point
+                       content + new point
+                       return len(content)
+
+       Class point 
+               x  = 10
+               y  = 20
+               z  = 30
+
+Output:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+Example(3):
+
+.. code-block:: ring
+
+       func main
+               o1 = New Screen  {
+                       point() {               # access the object using reference 
+                               x = 100 
+                               y = 200
+                               z = 300         
+                       }
+                       point() {               # access the object using reference 
+                               x = 50 
+                               y = 150
+                               z = 250         
+                       }
+               }
+               see o1.content[1]               
+               see o1.content[2]
+
+       Class Screen
+               content = []
+               func point
+                       content + new point
+                       return content[len(content)]    # return the object by reference
+
+       Class point x=10 y=20 z=30
+
+Output:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+
+.. index:: 
+       pair: Declarative Programming; executing code after the end of object access
+
+Executing code after the end of object access 
+=============================================
+
+We can access an object using { } to use object attributes and methods.
+
+if the object contains a method called BraceEnd(), it will be executed before the end of the object access.
+
+Example: 
+
+.. code-block:: ring
+
+       New Point { See "How are you?" + nl }
+
+       Class Point x y z
+               func braceend
+                       see "I'm fine, Thank you!" + nl
+
+Output:
+
+.. code-block:: ring
+
+       How are you?
+       I'm fine, Thank you!
+
+
+.. index:: 
+       pair: Declarative Programming; Declarative programming on the top of Object-Oriented
+
+Declarative Programming on the top of Object-Oriented
+=====================================================
+
+The next features enable us to build and use declartive programming environment using nested structures on the top of object oriented 
+
+* using {} to access the object attributes and methods
+* BraceEnd() Method
+* returning objects by reference
+* Setter/Getter Methods (optional)
+
+Example: 
+
+.. code-block:: ring
+
+       # Declartive Programming (Nested Structures)
+
+       Screen() 
+       {
+
+               point() 
+               {                       
+                       x = 100 
+                       y = 200
+                       z = 300         
+               }
+
+               point() 
+               {                        
+                       x = 50 
+                       y = 150
+                       z = 250         
+               }
+       }
+
+       # Functions and Classes
+
+       Func screen return new screen
+
+       Class Screen
+
+               content = []
+
+               func point
+                       content + new point
+                       return content[len(content)]    
+
+               func braceend
+                       see "I have " + len(content) + " points!"
+
+       Class point 
+
+               x=10 y=20 z=30
+
+               func braceend           
+                       see self        
+
+Output:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+       I have 2 points!
+
+.. index:: 
+       pair: Declarative Programming; More Beatiful Code
+
+More beautiful Code
+===================
+
+We can get better results and a more beautiful code when we can avoid writing () after the method name
+when the methods doesn't take parameters.
+This feature is not provided directly by the Ring language because there is a difference between object methods
+and object attributes. We can get a similar effect on the syntax of the code when we define a getter method for
+the object attribute. For example instead of defining the point() method. we will define the point attribute then
+the getpoint() method that will be executed once you try to get the value of the point attribute.
+since we write the variable name direcly without () we can write point instead of point() and the method getpoint()
+will create the object and return the object reference for us.
+
+Example:
+
+.. code-block:: ring
+
+       new Container 
+       {
+               Point 
+               { 
+                       x=10 
+                       y=20 
+                       z=30 
+               }
+       }
+
+       Class Container
+               aObjs = []
+               point
+               func getpoint
+                       aObjs + new Point
+                       return aObjs[len(aObjs)]
+
+       Class Point x y z
+               func braceend
+                       see "3D Point" + nl + x + nl + y + nl + z + nl
+
+Output
+
+.. code-block:: ring
+
+       3D Point
+       10
+       20
+       30
+
diff --git a/docs/en/target/demo.txt b/docs/en/target/demo.txt
new file mode 100644 (file)
index 0000000..d6ed7d5
--- /dev/null
@@ -0,0 +1,200 @@
+.. index:: 
+       single: Demo Programs; Introduction
+
+=============
+Demo Programs
+=============
+
+In this chapter we will see simple demo programs
+
+* Language Shell
+* Main Menu
+
+.. index:: 
+       pair: Demo Programs; Language Shell
+
+Language Shell
+==============
+
+We can create simple interactive programming environment using the next program
+
+.. code-block:: ring
+
+       while true 
+               see nl + "code:> "
+               give cCode 
+               try
+                       eval(cCode) 
+               catch
+                       see cCatchError
+               done
+       end
+
+Output:
+
+.. code-block:: ring
+
+       code:> see "hello world"
+       hello world
+       code:> for x = 1 to 10 see x + nl next
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+       code:> func test see "Hello from test" + nl
+
+       code:> test()
+       Hello from test
+
+       code:> bye
+
+.. index:: 
+       pair: Demo Programs; Main Menu
+
+Main Menu
+=========
+
+Example:
+
+.. code-block:: ring
+
+       # Demo Program
+
+       while true
+
+               see "
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               " give nMenu see nl
+
+               # we can use Switch-ON-Other-OFF instead of IF-BUT-ELSE-OK
+
+               Switch nMenu
+               On 1 sayhello() 
+               On 2 Sum()
+               On 3 Stars()
+               On 4 
+                       see "Enter Number : " give x
+                       see "Output : " 
+
+                       Try     
+                               see Fact(number(x))
+                       Catch
+                               see "Error in parameters!" + nl
+                       Done
+
+               On "5" return 
+               Other see "bad option" + nl
+               Off
+
+       end
+
+       func sayhello
+               see "Enter your name ? " give fname
+               see "Hello " + fname + nl
+
+       func sum
+               see "number 1 : " give num1 see "number 2 : " give num2
+               see "Sum : " see 0 + num1 + num2
+
+       func stars
+               for x = 1 to 10
+                       see space(8)
+                       for y = 1 to x see "*" next see nl
+               next
+
+       func fact x if x = 0 return 1 else return x * fact(x-1) ok
+
+       func space x y = "" for t=1 to x y += " " next return y
+
+Output:
+
+.. code-block:: ring
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               1
+
+       Enter your name ? Mahmoud Fayed
+       Hello Mahmoud Fayed
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               2
+
+       number 1 : 3
+       number 2 : 4
+       Sum : 7
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               3
+
+               *
+               **
+               ***
+               ****
+               *****
+               ******
+               *******
+               ********
+               *********
+               **********
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               4
+
+       Enter Number : 5
+       Output : 120
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               5
diff --git a/docs/en/target/deployincloud.txt b/docs/en/target/deployincloud.txt
new file mode 100644 (file)
index 0000000..47267d0
--- /dev/null
@@ -0,0 +1,199 @@
+.. index:: 
+       single: Deploying Web Applications in the Cloud; Introduction
+
+=======================================
+Deploying Web Applications in the Cloud
+=======================================
+
+In this chapter we will learn about deploying Ring Web Applications in the Cloud using Heroku
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Introduction
+
+Introduction
+============
+
+We created a new project and tutorial to explain how to deploy Ring web applications in the Cloud using Heroku
+
+Demo : http://testring.herokuapp.com/
+
+Project : https://github.com/ring-lang/RingWebAppOnHeroku
+
+Heroku Website : https://www.heroku.com/
+
+.. image:: ringincloud.png
+       :alt: Ring Web Application in the Cloud
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Usage
+
+Usage
+=====
+
+To use this project and deploy it on Heroku
+
+(1) Create Heroku account
+
+(2) Open your Heroku account and create new application
+
+Example : testring
+
+Note (You have to select a unique name for your application)
+
+(3) Open the command prompt, Create new folder : MyApp
+
+.. code-block:: none
+
+       md MyApp
+
+(4) Open the application folder
+
+.. code-block:: none
+
+       cd MyApp        
+
+(5) Clone this projet using Git (Don't forget the dot in the end to clone in the current directory)
+
+.. code-block:: none
+
+       git clone https://github.com/ring-lang/RingWebAppOnHeroku .
+
+(6) Login to Heroku (Enter your Email and Password)
+
+.. code-block:: none
+
+       heroku login
+
+(7) Add heroku (remote) to your Git project
+
+change testring to your application name
+
+.. code-block:: none
+
+       heroku git:remote -a testring
+
+(8) Set the buildpacks (So Heroku can know how to support your project)
+
+.. code-block:: none
+
+       heroku buildpacks:add --index 1 https://github.com/ring-lang/heroku-buildpack-apt
+       heroku buildpacks:add --index 2 https://github.com/ring-lang/heroku-buildpack-ring
+
+(9) Now build your project and deploy it
+
+.. code-block:: none
+
+       git push heroku master
+
+(10) Test your project (In the browser)
+
+.. code-block:: none
+
+       heroku open
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Ring source code files and permissions
+
+Ring source code files and permissions
+======================================
+
+To be able to run your new Ring scripts, Set the permission of the file to be executable using Git
+
+For example, if you created a file : myscript.ring
+
+.. code-block:: none
+
+       git update-index --chmod=+x myscript.ring 
+       git commit -m "Update file permission"  
+
+If you are using TortoiseGit, From windows explorer, select the file
+
+Right click ---> Properties ---> Git ---> Executable (+x)
+
+Then commit and deploy!
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Hello World program
+
+Hello World program
+===================
+
+file : ringapp/helloworld.ring
+
+To run it : http://testring.herokuapp.com/ringapp/helloworld.ring
+
+.. code-block:: ring
+
+       #!/app/runring.sh -cgi
+
+       see "content-type: text/html" +nl+nl    
+       see "Hello, World!" + nl
+
+file : ringapp/helloworld2.ring
+
+To run it : http://testring.herokuapp.com/ringapp/helloworld2.ring
+
+.. code-block:: ring
+
+       #!/app/runring.sh -cgi
+       load "weblib.ring"
+       import System.Web
+       new page {
+               text("Hello, World!")
+       }
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Application Database
+
+Application Database
+====================
+
+When you depoly the application, Everything will works directly!
+
+No change is required, but in practice, You will need to update the next files to use your database
+
+There are two scripts to interact with the database (We are using PostgreSQL in the cloud)
+
+You will need to update the connection string in these files if you will use another database
+
+* file: ringapp/database/newdb.ring (We run it using the browser for one time to create the tables)
+* file: ringapp/datalib.ring (Class: Database)
+
+In your practical projects, You can write better code (To be able to change the database)
+
+Also you can create configuration file (To write the connection string in one place)
+
+Database service : https://www.heroku.com/postgres
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Deploying after updates
+
+Deploying after updates
+=======================
+
+Just use Git and commit then push to heroku
+
+file: build.bat contains the next commands for quick tests
+
+.. code-block:: none
+
+       git add .
+       git commit -m "Update RingWebAppOnHeroku"
+       git push heroku master
+       heroku open
+
+.. index:: 
+       pair: Deploying Web Applications in the Cloud; Local Tests
+
+Local Tests
+===========
+
+Local tests using Ring Notepad on Windows (Using local Apache Web Server)
+
+Replace the first line in the file : ringapp/index.ring with
+
+.. code-block:: ring
+
+       #!ring -cgi 
+       
+Then run it from Ring Notepad (Ctrl+F6)
diff --git a/docs/en/target/distribute.txt b/docs/en/target/distribute.txt
new file mode 100644 (file)
index 0000000..6e8c277
--- /dev/null
@@ -0,0 +1,131 @@
+.. index:: 
+       single: Distributing Ring Application; Introduction
+
+==============================
+Distributing Ring Applications
+==============================
+
+In this chapter we will learn about distributing Ring applications.
+
+The next method is old and was used in Ring 1.5 and previous versions!
+
+Starting from Ring 1.6 we have a nice tool called Ring2EXE
+
+Using Ring2EXE we can distribute applications quickly for Windows, Linux and macOS 
+
+Check the Ring2EXE chapter for more information!
+
+
+.. index:: 
+       pair: Distributing Ring Application; Distributing Applications for Microsoft Windows
+
+Distributing Applications for Microsoft Windows
+===============================================
+
+Step 1:
+
+.. code-block:: none
+
+       Copy c:\ring\bin folder to be for example c:\myapp
+
+Step 2:
+
+.. code-block:: none
+
+       Rename c:\myapp\ring.exe to c:\myapp\myapp.exe
+
+Step 3:
+
+.. code-block:: none
+
+       Create a file c:\myapp\ring.ring 
+
+And write
+
+.. code-block:: ring
+
+       Load "myapp.ring"
+
+When you run myapp.exe the file ring.ring will be executed automatically
+
+So your file myapp.ring will be called and executed
+
+Or just rename myapp.ring to ring.ring
+
+It's a fast way to distribute applications.
+
+.. index:: 
+       pair: Distributing Ring Application; Protecting the Source Code
+
+Protecting the Source Code
+==========================
+
+Step 1:
+
+Execute the next command 
+
+.. code-block:: none
+
+       ring myapp.ring -go
+
+This will generate one object file (myapp.ringo) from the project files (*.ring)
+
+Step 2:
+
+.. code-block:: none
+
+       Rename myapp.ringo to ring.ringo
+
+When you run the executable file (ring.exe) or (myapp.exe) the file ring.ringo will be executed.
+
+.. index:: 
+       pair: Distributing Ring Application; The files ring.ring and ring.ringo
+
+The files ring.ring and ring.ringo
+==================================
+
+Ring will run ring.ring or ring.ringo only when
+
+(1) The file exist in the current directory
+(2) No file is passed to (ring.exe) to execute
+
+We added the support to ring.ring (and ring.ringo) for a way to distribute Ring apps (before Ring2EXE)
+
+.. index:: 
+       pair: Distributing Ring Application; Creating Windows Installer
+
+Creating Windows Installer
+==========================
+
+There are many tools that you can use to distribute your application.
+
+Check : nullsoft scriptable install system
+
+URL : http://nsis.sourceforge.net/Main_Page
+
+.. index:: 
+       pair: Distributing Ring Application; Using C/C++ Compiler and Linker
+
+Using C/C++ Compiler and Linker
+===============================
+
+Another method to distribute applications is to use a C/C++ compiler.
+
+Ring can be embedded in C/C++ projects, We can create executable files using a C/C++ compiler
+by embedding the Ring language in our project.
+
+Check the "Embedding Ring Language in C/C++ Programs" chapter.
+
+Using this way we will avoid using ring.ring or ring.ringo files.
+
+.. index:: 
+       pair: Distributing Ring Application; Distributing Applications and Games for Mobile
+
+Distributing Applications and Games for Mobile
+==============================================
+
+Ring can be embedded in a Qt projects or LibSDL projects to build Mobile applications and Games.
+
+You can build the Qt project or the LibSDL project and get the Android package directly (*.apk)
+
+Check Ring distributions for Mobile development using Qt or LibSDL.
\ No newline at end of file
diff --git a/docs/en/target/distribute_ring2exe.txt b/docs/en/target/distribute_ring2exe.txt
new file mode 100644 (file)
index 0000000..d52ff4f
--- /dev/null
@@ -0,0 +1,607 @@
+.. index:: 
+       single: Distributing Ring Application using Ring2EXE; Introduction
+
+=============================================
+Distributing Ring Applications using Ring2EXE
+=============================================
+
+In this chapter we will learn about distributing Ring applications.
+
+Starting from Ring 1.6 we have a nice tool called Ring2EXE (Written in Ring itself)
+
+Using Ring2EXE we can distribute applications quickly for Windows, Linux, macOS and Mobile devices
+
+.. note:: We can use the Distribute Menu in the Ring Notepad application (More Easy)
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Using Ring2EXE
+
+Using Ring2EXE
+==============
+
+.. code-block:: none
+
+               ring2exe filename.ring [Options]
+
+This will set filename.ring as input to the program    
+
+The next files will be generated 
+
+.. code-block:: none
+
+               filename.ringo          (The Ring Object File - by Ring Compiler)
+               filename.c              (The C Source code file
+                                        Contains the ringo file content
+                                        Will be generated by this program)
+               filename_buildvc.bat    (Will be executed to build filename.c using Visual C/C++)
+               filename_buildgcc.bat   (Will be executed to build filename.c using GNU C/C++)
+               filename_buildclang.bat (Will be executed to build filename.c using CLang C/C++)
+               filename.obj            (Will be generated by the Visual C/C++ compiler) 
+               filename.exe            (Will be generated by the Visual C/C++ Linker)
+               filename                (Executable File - On Linux & MacOS X platforms)
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; How Ring2EXE works?
+
+How Ring2EXE works?
+===================
+
+At first the Ring compiler will be used to generate the Ring object file (*.ringo)
+
+If we have a C compiler (optional), This object file will be embedded inside a C source code file
+
+Then using the C compiler and the Ring library (Contains the Ring Virtual Machine) the executable file
+
+will be generated!
+
+If we don't have a C compiler, the Ring executable will be copied and renamed to your application name
+
+And your Ring object file (*.ringo) will become ring.ringo to be executed at startup of the executable file.
+
+So it's better and easy to have a C compiler on your machine to be used by Ring2EXE. 
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Example
+
+Example 
+=======
+
+We have test.ring contains the next code
+
+.. code-block:: ring
+
+       see "Hello, World!" + nl
+
+To build the executable file for Windows, Linux or macOS
+
+.. code-block:: none
+       
+               ring2exe test.ring 
+
+To run the program (Windows)
+
+.. code-block:: none
+
+               test 
+
+To run the program (Linux and macOS)
+
+.. code-block:: none
+
+               ./test
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Options
+
+Options
+=======
+
+.. code-block:: none
+
+               -keep            : Don't delete Temp. Files
+               -static          : Build Standalone Executable File 
+                                  (Don't use ring.dll/ring.so/ring.dylib)
+               -gui             : Build GUI Application (Hide the Console Window)
+               -dist            : Prepare application for distribution 
+               -allruntime      : Include all libraries in distribution
+               -mobileqt        : Prepare Qt Project to distribute Ring Application for Mobile
+               -noqt            : Remove RingQt from distribution
+               -noallegro       : Remove RingAllegro from distribution
+               -noopenssl       : Remove RingOpenSSL from distribution
+               -nolibcurl       : Remove RingLibCurl from distribution
+               -nomysql         : Remove RingMySQL from distribution
+               -noodbc          : Remove RingODBC from distribution
+               -nosqlite        : Remove RingSQLite from distribution
+               -noopengl        : Remove RingOpenGL from distribution
+               -nofreeglut      : Remove RingFreeGLUT from distribution
+               -nolibzip        : Remove RingLibZip from distribution
+               -noconsolecolors : Remove RingConsoleColors from distribution
+               -nomurmuhash     : Remove RingMurmurHash from distribution
+               -nocruntime      : Remove C Runtime from distribution
+               -qt              : Add RingQt to distribution
+               -allegro         : Add RingAllegro to distribution
+               -openssl         : Add RingOpenSSL to distribution
+               -libcurl         : Add RingLibCurl to distribution
+               -mysql           : Add RingMySQL to distribution
+               -odbc            : Add RingODBC to distribution
+               -sqlite          : Add RingSQLite to distribution
+               -postgresql      : Add RingPostgreSQL to distribution
+               -opengl          : Add RingOpenGL to distribution
+               -freeglut        : Add RingFreeGLUT to distribution
+               -libzip          : Add RingLibZip to distribution
+               -libuv           : Add RingLibuv to distribution
+               -consolecolors   : Add RingConsoleColors to distribution
+               -murmurhash      : Add RingMurmurHash to distribution
+               -cruntime        : Add C Runtime to distribution
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building standalone console application
+
+Building standalone console application
+=======================================
+
+Using the "-static" option we can build executable console application
+
+So we don't have to use ring.dll, ring.so or ring.dylib 
+
+This avoid only the need to Ring dynamic link library
+
+If you are using another libraries, You will need to include it with your application. 
+
+.. code-block:: none
+
+               ring2exe test.ring -static
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Distributing RingAllegro Applications
+
+Distributing RingAllegro Applications
+=====================================
+
+We have test2.ring contains the next code
+
+.. code-block:: ring
+
+
+       # Just a simple program to test Ring2EXE Tool!
+       # Using RingAllegro
+
+       load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+               }     
+
+
+To build the executable file and prepare for distributing the Game
+
+We use "-dist" option and "-allruntime" to include all libraries
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -allruntime
+
+After executing the previous command
+
+On Windows we will have : target/windows folder
+
+On Linux we will have   : target/linux folder
+
+On macOS we will have   : target/macos folder
+
+The previous command will add all of the Ring runtime libraries to our distribution
+
+But we may need only RingAllegro, So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -allegro -cruntime
+
+This will produce smaller size distribution and will avoid the runtime files that we don't need!
+
+
+Also we could use the "-gui" option to hide the console window
+
+So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -gui -allegro -cruntime
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Distributing RingAllegro Applications
+
+Distributing RingQt Applications
+================================
+
+We have test3.ring contains the next code
+
+.. code-block:: ring
+
+       # Just a simple program to test Ring2EXE Tool!
+       # Using RingQt
+
+       load "guilib.ring"
+
+       new qApp {
+               new qWidget() {
+                       setwindowtitle("Hello, World!")
+                       resize(400,400)
+                       show()
+               }
+               exec()
+       }
+
+
+To build the executable file and prepare for distributing the GUI application
+
+We use "-dist" option and "-allruntime" to include all libraries
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -allruntime
+
+After executing the previous command
+
+On Windows we will have : target/windows folder
+
+On Linux we will have   : target/linux folder
+
+On macOS we will have   : target/macos folder
+
+The previous command will add all of the Ring runtime libraries to our distribution
+
+But we may need only RingQt, So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -qt -cruntime
+
+This will produce smaller size distribution and will avoid the runtime files that we don't need!
+
+Also we could use the "-gui" option to hide the console window
+
+So it's better to use the next command
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -gui -qt -cruntime
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Distributing Applications for Mobile using RingQt
+
+Distributing Applications for Mobile using RingQt
+=================================================
+
+To prepare a Qt project for your RingQt application (test3.ring) use the "-mobileqt" option
+
+Example :
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -mobileqt
+
+After executing the previous command, We will have the Qt project in target/mobile/qtproject folder
+
+The main project file will be project.pro which we can open using the Qt Creator IDE.
+
+Also we will have the resource file : project.qrc 
+
+Another important file is our C++ main file : main.cpp
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building the Cards Game for Mobile using RingQt
+
+Building the Cards Game for Mobile using RingQt
+===============================================
+
+For a better example, consider building an Android package for the Cards game that comes with the
+
+Ring language in this folder : ring/application/cards
+
+The Cards game folder contains three files
+
+cards.ring : The Game source code
+
+cards.jpg : The image file used by the game
+
+project.qrc : Resource file to be used with the Qt project
+
+The resource file contains the next content
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>cards.ringo</file>
+                       <file>cards.jpg</file>
+               </qresource>
+       </RCC>
+
+We have two files in the resource file
+
+The first file is cards.ringo (The Ring Object File) and the second file is cards.jpg (The image file)
+
+As a start, Ring2EXE will generate this resource file in target/mobile/qtproject/project.qrc
+
+But this file will contains only cards.ringo (That Ring2EXE will generate by calling Ring compiler)
+
+We need to update this resource file to add the image file : cards.jpg 
+
+After this update, we copy the resource file to the main application folder
+
+So when we use Ring2EXE again, Our updated resource file will be used!
+
+Now to build the cards game for Mobile
+
+(1) Run the next command
+
+.. code-block:: none
+
+       ring2exe cards.ring -dist -mobileqt
+
+(2) Open target/mobile/qtproject/project.pro using Qt creator
+
+(3) Build and Run using Qt Creator 
+
+
+How the Cards game will find the image file ?
+
+RingQt comes with a simple function : AppFile() that we can use to determine the files that we may
+
+access on Desktop or Mobile platforms
+
+The next code from cards.ring
+
+.. code-block:: ring
+
+       mypic = new QPixmap(AppFile("cards.jpg"))
+
+So all what you need is using AppFile() function around your image files!
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building the Weight History Application for Mobile using RingQt
+
+Building the Weight History Application for Mobile using RingQt
+===============================================================
+
+Another example to distribute your application for Mobile Devices using Ring2EXE and Qt
+
+consider building an Android package for the Weight History application that comes with the
+
+Ring language in this folder : ring/application/weighthistory 
+
+The Weight History application folder contains four files
+
+weighthistory.ring : The application source code
+
+weighthistory.db  : The SQLite database
+
+project.qrc : The resource file for the Qt project
+
+main.cpp : The main C++ source file for the Qt project
+
+To build the Weight History application for Mobile
+
+(1) Run the next command
+
+.. code-block:: none
+
+       ring2exe weighthistory.ring -dist -mobileqt
+
+(2) Open target/mobile/qtproject/project.pro using Qt creator
+
+(3) Build and Run using Qt Creator 
+
+The resource file (project.qrc) contains two files
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>weighthistory.ringo</file>
+                       <file>weighthistory.db</file>
+               </qresource>
+       </RCC>
+
+The first file is weighthistory.ringo (Ring Object File - Generated by Ring2EXE by calling Ring compiler)
+
+The database file : weighthistory.db
+
+The main.cpp contains the next little update, To copy the database file from resources to a writable location
+
+on the mobile device
+
+.. code-block:: none
+
+    QString path3 ;
+    path3 = path+"/weighthistory.db";
+    QFile::copy(":/weighthistory.db",path3);
+
+You will need to do this with database files only!
+
+When we use Ring2EXE, the tool will check for project.qrc and main.cpp, if they exist then your updated
+
+files will be used in target/mobile/qtproject instead of the default version generated by Ring2EXE
+
+So Use Ring2EXE to generate these files, Then copy them to your application folder when you update them.
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Building the Form Designer for Mobile using RingQt
+
+Building the Form Designer for Mobile using RingQt
+==================================================
+
+To build the Form Designer application (ring/applications/formdesigner) for Mobile
+
+(1) Run the next command
+
+.. code-block:: none
+
+       ring2exe formdesigner.ring -dist -mobileqt
+
+(2) Open target/mobile/qtproject/project.pro using Qt creator
+
+(3) Build and Run using Qt Creator 
+
+in the folder ring/application/formdesigner You will find the resource file : project.qrc
+
+It will be used automatically by Ring2EXE 
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>formdesigner.ringo</file>
+                       <file>image/allevents.png</file>
+                       <file>image/checkbox.png</file>
+                       <file>image/close.png</file>
+                       <file>image/combobox.bmp</file>
+                       <file>image/datepicker.bmp</file>
+                       <file>image/dial.png</file>
+                       <file>image/formdesigner.png</file>
+                       <file>image/frame.png</file>
+                       <file>image/grid.bmp</file>
+                       <file>image/hyperlink.png</file>
+                       <file>image/image.png</file>
+                       <file>image/label.png</file>
+                       <file>image/layout.png</file>
+                       <file>image/lcdnumber.png</file>
+                       <file>image/listview.png</file>
+                       <file>image/lock.png</file>
+                       <file>image/new.png</file>
+                       <file>image/open.png</file>
+                       <file>image/progressbar.png</file>
+                       <file>image/project.png</file>
+                       <file>image/pushbutton.png</file>
+                       <file>image/radiobutton.png</file>
+                       <file>image/save.png</file>
+                       <file>image/saveas.png</file>
+                       <file>image/select.png</file>
+                       <file>image/slider.png</file>
+                       <file>image/spinner.bmp</file>
+                       <file>image/statusbar.png</file>
+                       <file>image/tab.png</file>
+                       <file>image/textarea.png</file>
+                       <file>image/textfield.png</file>
+                       <file>image/timer.png</file>
+                       <file>image/toolbar.png</file>
+                       <file>image/tree.bmp</file>
+                       <file>image/videowidget.png</file>
+                       <file>image/webview.png</file>
+               </qresource>
+       </RCC>
+
+As we did in the Cards game, The Form Designer will use the AppFile() function to determine the
+name of the Image files.
+
+The next code from ring/applications/formdesigner/mainwindow/formdesignerview.ring
+
+.. code-block:: ring
+
+       func CreateToolBar
+               aBtns = [
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/new.png"))
+                                       setclickevent(Method(:NewAction))
+                                       settooltip("New File")
+                               } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/open.png"))
+                                       setclickevent(Method(:OpenAction))
+                                       settooltip("Open File")
+                               } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/save.png"))
+                                       setclickevent(Method(:SaveAction))
+                                       settooltip("Save")
+                                } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/saveas.png"))
+                                       setclickevent(Method(:SaveAsAction))
+                                       settooltip("Save As")
+                                } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/close.png"))
+                                       setclickevent(Method(:ExitAction))
+                                       settooltip("Exit")
+                               }
+                       ]
+
+               tool1 = win.addtoolbar("files")  {
+                       for x in aBtns { addwidget(x) addseparator() }
+               }
+
+From this example, We know that we can use sub folders for images.
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Creating the Qt resource file using Folder2qrc
+
+Creating the Qt resource file using Folder2qrc
+==============================================
+
+When we have large RingQt project that contains a lot of images and files, We need to add these files 
+to the resource file ( *.qrc ) when distributing applications for Mobile devices. 
+
+Instead of adding these files one by one, Ring 1.6 comes with a simple tool that save our time, It's
+called Folder2qrc.
+
+Example:
+
+.. code-block:: none
+
+       folder2qrc formdesigner.ring
+
+We determine the main source file while we are in the application folder, and Folder2qrc will check all
+of the files in the current folder and sub folders, Then add them to the resource file after the
+mainfile.ringo (In our example this will be formdesigner.ringo)
+
+The output file will be : project.qrc
+
+You can open it and remove the files that you don't need in the resources!
+
+
+.. index:: 
+       pair: Distributing Ring Application using Ring2EXE; Important Information about Ring2EXE
+
+Important Information about Ring2EXE
+====================================
+
+* Using Ring2EXE to prepare distribution will delete all of the files in the old distribution
+
+for example, if you have target/windows folder then used
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -allruntime
+
+The files in target/windows will be deleted before adding the files again
+
+This is important when you prepare a distribution for Mobile devices
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -mobileqt
+
+If you modified the resource file : project.qrc or the main file : main.cpp
+
+Don't forget to copy them to the application folder!
+
+So Ring2EXE can use the updated version if you tried the previous command again!
+
+* Ring2EXE is written in Ring, and you can read the source code from
+
+       https://github.com/ring-lang/ring/blob/master/ring2exe/ring2exe.ring
+
+* The libraries information are stored in a separated files, So these files can be updated in the future
+automatically to support new libraries
+
+       https://github.com/ring-lang/ring/blob/master/ring2exe/libs
+
diff --git a/docs/en/target/dssapp.png b/docs/en/target/dssapp.png
new file mode 100644 (file)
index 0000000..34b1e25
Binary files /dev/null and b/docs/en/target/dssapp.png differ
diff --git a/docs/en/target/editor1.png b/docs/en/target/editor1.png
new file mode 100644 (file)
index 0000000..57aeaf7
Binary files /dev/null and b/docs/en/target/editor1.png differ
diff --git a/docs/en/target/editor2.png b/docs/en/target/editor2.png
new file mode 100644 (file)
index 0000000..2301202
Binary files /dev/null and b/docs/en/target/editor2.png differ
diff --git a/docs/en/target/editor3.jpg b/docs/en/target/editor3.jpg
new file mode 100644 (file)
index 0000000..1db0ab1
Binary files /dev/null and b/docs/en/target/editor3.jpg differ
diff --git a/docs/en/target/editor4.jpg b/docs/en/target/editor4.jpg
new file mode 100644 (file)
index 0000000..dc00a5d
Binary files /dev/null and b/docs/en/target/editor4.jpg differ
diff --git a/docs/en/target/editor5.png b/docs/en/target/editor5.png
new file mode 100644 (file)
index 0000000..800a900
Binary files /dev/null and b/docs/en/target/editor5.png differ
diff --git a/docs/en/target/embedding.txt b/docs/en/target/embedding.txt
new file mode 100644 (file)
index 0000000..590eec7
--- /dev/null
@@ -0,0 +1,158 @@
+.. index:: 
+       single: Embedding Ring Language in C/C++ Programs; Introduction
+
+=============================================
+Embedding Ring Language in C/C++ Programs
+=============================================
+
+We can use the Ring language from C/C++ programs using the next functions
+
+.. code-block:: C
+
+       RingState *ring_state_init();
+       ring_state_runcode(RingState *pState,const char *cCode);
+       ring_state_delete(RingState *pState);
+
+.. index:: 
+       pair: Embedding Ring Language in C/C++ Programs; Ring State
+
+Ring State
+==========
+
+The idea is to use the ring_state_init() to create new state for the Ring Language
+then call the ring_state_runcode() function to execut Ring code using the same state.
+When we are done, we call the ring_state_delete() to free the memory.
+
+Example:
+
+.. code-block:: C
+
+       #include "ring.h"
+       #include "stdlib.h"
+       int main(int argc, char *argv[])
+       {       
+         RingState *pState = ring_state_init();
+         printf("welcome\n");
+         ring_state_runcode(pState,"see 'hello world from the ring programming language'+nl");
+         ring_state_delete(pState);
+       }
+
+Output:
+
+.. code-block:: C
+
+       welcome
+       hello world from the ring programming language
+
+.. index:: 
+       pair: Embedding Ring Language in C/C++ Programs; Ring State Functions
+
+Ring State Functions
+====================
+
+The Ring API comes with the next functions to create and delete the state.
+Also we have functions to create new variables and get variables values.
+
+.. code-block:: C
+
+       RingState * ring_state_init ( void ) ;
+       RingState * ring_state_delete ( RingState *pRingState ) ;
+       void ring_state_runcode ( RingState *pRingState,const char *cStr ) ;
+       List * ring_state_findvar ( RingState *pRingState,const char *cStr ) ;
+       List * ring_state_newvar ( RingState *pRingState,const char *cStr ) ;
+       void ring_state_main ( int argc, char *argv[] ) ;
+       void ring_state_runfile ( RingState *pRingState,const char *cFileName ) ;
+       void ring_state_runobjectfile ( RingState *pRingState,const char *cFileName ) ;
+
+.. index:: 
+       pair: Embedding Ring Language in C/C++ Programs; Ring State Variables
+
+Ring State Variables
+====================
+
+We can create more than one ring state in the same program and we can create and modify variable values.
+
+To get the variable list we can use the ring_state_findvar() function.
+
+To create new variable we can use the ring_state_newvar() function.
+
+Example:
+
+.. code-block:: C
+
+       #include "ring.h"
+       #include "stdlib.h"
+       
+       int main(int argc, char *argv[])
+       {
+         List *pList;
+
+         RingState *pState = ring_state_init();
+         RingState *pState2 = ring_state_init();
+
+         printf("welcome\n");
+         ring_state_runcode(pState,"see 'hello world from the ring programming language'+nl");
+
+         printf("Again from C we will call ring code\n");
+         ring_state_runcode(pState,"for x = 1 to 10 see x + nl next");
+
+         ring_state_runcode(pState2,"for x = 1 to 5 see x + nl next");
+
+         printf("Now we will display the x variable value from ring code\n");
+         ring_state_runcode(pState,"see 'x value : ' + x + nl ");
+         ring_state_runcode(pState2,"see 'x value : ' + x + nl ");
+
+         pList = ring_state_findvar(pState,"x");
+
+         printf("Printing Ring variable value from C , %.0f\n",
+                       ring_list_getdouble(pList,RING_VAR_VALUE));
+
+         printf("now we will set the ring variable value from C\n");
+         ring_list_setdouble(pList,RING_VAR_VALUE,20);
+
+         ring_state_runcode(pState,"see 'x value after update : ' + x + nl ");
+
+         pList = ring_state_newvar(pState,"v1");
+         ring_list_setdouble(pList,RING_VAR_VALUE,10); 
+
+         pList = ring_state_newvar(pState,"v2");
+         ring_list_setdouble(pList,RING_VAR_VALUE,20);
+
+         ring_state_runcode(pState,"see 'v1 + v2 = ' see v1+v2 see nl");
+
+         ring_state_runcode(pState,"see 'end of test' + nl");
+
+         ring_state_delete(pState);
+         ring_state_delete(pState2);
+       }
+
+Output:
+
+.. code-block:: ring
+
+       welcome
+       hello world from the ring programming language
+       Again from C we will call ring code
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       1
+       2
+       3
+       4
+       5
+       Now we will display the x variable value from ring code
+       x value : 11
+       x value : 6
+       Printing Ring variable value from C , 11
+       now we will set the ring variable value from C
+       x value after update : 20
+       v1 + v2 = 30
+       end of test
\ No newline at end of file
diff --git a/docs/en/target/empapp.png b/docs/en/target/empapp.png
new file mode 100644 (file)
index 0000000..14a8945
Binary files /dev/null and b/docs/en/target/empapp.png differ
diff --git a/docs/en/target/evaldebug.txt b/docs/en/target/evaldebug.txt
new file mode 100644 (file)
index 0000000..bb862fc
--- /dev/null
@@ -0,0 +1,204 @@
+.. index:: 
+       single: Eval() and Debugging; Introduction
+
+====================
+Eval() and Debugging
+====================
+
+In this chapter we are going to learn about
+
+* Error Handling using Try/Catch/Done
+
+* Eval() function
+
+* Raise() function
+
+* Assert() function
+
+.. index:: 
+       pair: Eval() and Debugging; Try/Carch/Done
+
+Try/Catch/Done
+==============
+
+Syntax:
+
+.. code-block:: ring
+
+       Try
+               Statements...
+       Catch
+               Statements...
+       Done
+
+The statements in the Try block will be executed, if any error happens then
+the statements in the catch block will be executed.
+
+Inside the catch block we can use the variable cCatchError to get the error message
+
+Example:
+
+.. code-block:: ring
+
+       Try
+               see 5/0
+       Catch
+               see "Catch!" + nl + cCatchError
+       Done
+
+Output:
+
+.. code-block:: ring
+
+       Catch!
+       Error (R1) : Cann't divide by zero !
+
+
+.. index:: 
+       pair: Eval() and Debugging; Eval()
+
+Eval() Function
+===============
+
+We can execute code during the runtime from string using the Eval() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Eval(cCode)
+
+Example:
+
+.. code-block:: ring
+
+       Eval("nOutput = 5+2*5 " )
+       See "5+2*5 = " + nOutput + nl                    
+       Eval("for x = 1 to 10 see x + nl next")          
+       Eval("func test see 'message from test!' ")      
+       test()
+
+Output:
+
+.. code-block:: ring
+
+       5+2*5 = 15
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       message from test!
+
+
+We can use the Return command to return a value
+
+Example:
+
+.. code-block:: ring
+
+       see Eval("return 5*5")
+
+Output:
+
+.. code-block:: ring
+
+       25
+
+.. index:: 
+       pair: Eval() and Debugging; Raise()
+
+Raise() Function
+================
+
+We can raise an exception using the Raise() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Raise(cErrorMessage)
+
+The function will display the error message then end the execution of the program.
+
+We can use Try/Catch/Done to avoid exceptions generated by raise() function.
+
+Example:
+
+.. code-block:: ring
+
+       nMode = 10
+
+       if nMode < 0 or nMode > 5
+               raise("Error : nMode not in the range 1:4")
+       ok
+
+Output:
+
+.. code-block:: ring
+
+       Line 4 Error : nMode not in the range 1:4
+       In raise in file tests\raise.ring
+
+Example:
+
+.. code-block:: ring
+
+       try 
+               testmode(6)
+       catch
+               see "avoid raise!"
+       done
+
+       testmode(-1)
+
+       func testmode nMode
+
+               if nMode < 0 or nMode > 5
+                       raise("Error : nMode not in the range 1:4")
+               ok
+
+Output:
+
+.. code-block:: ring
+
+       avoid raise!
+       Line 12 Error : nMode not in the range 1:4
+       In raise In function testmode() in file tests\raise2.ring
+       called from line 7  in file tests\raise2.ring
+
+.. index:: 
+       pair: Eval() and Debugging; Assert()
+
+Assert() Function
+=================
+
+We can use the Assert() function to test conditions before executing the code
+
+If the test fail the program will be terminated with an error message contains the assert condition.
+
+Syntax:
+
+.. code-block:: ring
+
+       Assert( condition )
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       assert( x = 10)
+       assert( x = 100 ) 
+
+Output:
+
+.. code-block:: ring
+
+       Line 3 Assertion Failed!
+       In assert in file tests\assert.ring
diff --git a/docs/en/target/ex10.jpg b/docs/en/target/ex10.jpg
new file mode 100644 (file)
index 0000000..c7d34b4
Binary files /dev/null and b/docs/en/target/ex10.jpg differ
diff --git a/docs/en/target/ex11.jpg b/docs/en/target/ex11.jpg
new file mode 100644 (file)
index 0000000..bd10d2e
Binary files /dev/null and b/docs/en/target/ex11.jpg differ
diff --git a/docs/en/target/ex12.jpg b/docs/en/target/ex12.jpg
new file mode 100644 (file)
index 0000000..d5587de
Binary files /dev/null and b/docs/en/target/ex12.jpg differ
diff --git a/docs/en/target/ex12r.jpg b/docs/en/target/ex12r.jpg
new file mode 100644 (file)
index 0000000..d7da373
Binary files /dev/null and b/docs/en/target/ex12r.jpg differ
diff --git a/docs/en/target/ex13.jpg b/docs/en/target/ex13.jpg
new file mode 100644 (file)
index 0000000..5bfbacc
Binary files /dev/null and b/docs/en/target/ex13.jpg differ
diff --git a/docs/en/target/ex14.jpg b/docs/en/target/ex14.jpg
new file mode 100644 (file)
index 0000000..fa8d512
Binary files /dev/null and b/docs/en/target/ex14.jpg differ
diff --git a/docs/en/target/ex15.jpg b/docs/en/target/ex15.jpg
new file mode 100644 (file)
index 0000000..576bbe8
Binary files /dev/null and b/docs/en/target/ex15.jpg differ
diff --git a/docs/en/target/ex16.jpg b/docs/en/target/ex16.jpg
new file mode 100644 (file)
index 0000000..c2c5051
Binary files /dev/null and b/docs/en/target/ex16.jpg differ
diff --git a/docs/en/target/ex17.jpg b/docs/en/target/ex17.jpg
new file mode 100644 (file)
index 0000000..4dc5b73
Binary files /dev/null and b/docs/en/target/ex17.jpg differ
diff --git a/docs/en/target/ex18.jpg b/docs/en/target/ex18.jpg
new file mode 100644 (file)
index 0000000..3d92b66
Binary files /dev/null and b/docs/en/target/ex18.jpg differ
diff --git a/docs/en/target/ex19.jpg b/docs/en/target/ex19.jpg
new file mode 100644 (file)
index 0000000..702808c
Binary files /dev/null and b/docs/en/target/ex19.jpg differ
diff --git a/docs/en/target/ex1_basicshapes.png b/docs/en/target/ex1_basicshapes.png
new file mode 100644 (file)
index 0000000..8f4fe48
Binary files /dev/null and b/docs/en/target/ex1_basicshapes.png differ
diff --git a/docs/en/target/ex20.jpg b/docs/en/target/ex20.jpg
new file mode 100644 (file)
index 0000000..fb03f57
Binary files /dev/null and b/docs/en/target/ex20.jpg differ
diff --git a/docs/en/target/ex21.jpg b/docs/en/target/ex21.jpg
new file mode 100644 (file)
index 0000000..360d3f2
Binary files /dev/null and b/docs/en/target/ex21.jpg differ
diff --git a/docs/en/target/ex21_2.jpg b/docs/en/target/ex21_2.jpg
new file mode 100644 (file)
index 0000000..9c7cb82
Binary files /dev/null and b/docs/en/target/ex21_2.jpg differ
diff --git a/docs/en/target/ex22.jpg b/docs/en/target/ex22.jpg
new file mode 100644 (file)
index 0000000..d3f0e6f
Binary files /dev/null and b/docs/en/target/ex22.jpg differ
diff --git a/docs/en/target/ex23.jpg b/docs/en/target/ex23.jpg
new file mode 100644 (file)
index 0000000..0ca8c02
Binary files /dev/null and b/docs/en/target/ex23.jpg differ
diff --git a/docs/en/target/ex24.jpg b/docs/en/target/ex24.jpg
new file mode 100644 (file)
index 0000000..4ba5ad6
Binary files /dev/null and b/docs/en/target/ex24.jpg differ
diff --git a/docs/en/target/ex24_2.jpg b/docs/en/target/ex24_2.jpg
new file mode 100644 (file)
index 0000000..74377d8
Binary files /dev/null and b/docs/en/target/ex24_2.jpg differ
diff --git a/docs/en/target/ex25.jpg b/docs/en/target/ex25.jpg
new file mode 100644 (file)
index 0000000..3d9c4de
Binary files /dev/null and b/docs/en/target/ex25.jpg differ
diff --git a/docs/en/target/ex26.jpg b/docs/en/target/ex26.jpg
new file mode 100644 (file)
index 0000000..925901d
Binary files /dev/null and b/docs/en/target/ex26.jpg differ
diff --git a/docs/en/target/ex28.jpg b/docs/en/target/ex28.jpg
new file mode 100644 (file)
index 0000000..d4735e8
Binary files /dev/null and b/docs/en/target/ex28.jpg differ
diff --git a/docs/en/target/ex4.jpg b/docs/en/target/ex4.jpg
new file mode 100644 (file)
index 0000000..82ec53d
Binary files /dev/null and b/docs/en/target/ex4.jpg differ
diff --git a/docs/en/target/ex5.jpg b/docs/en/target/ex5.jpg
new file mode 100644 (file)
index 0000000..ff19ab6
Binary files /dev/null and b/docs/en/target/ex5.jpg differ
diff --git a/docs/en/target/ex6.jpg b/docs/en/target/ex6.jpg
new file mode 100644 (file)
index 0000000..ea52801
Binary files /dev/null and b/docs/en/target/ex6.jpg differ
diff --git a/docs/en/target/ex7.jpg b/docs/en/target/ex7.jpg
new file mode 100644 (file)
index 0000000..e34e60d
Binary files /dev/null and b/docs/en/target/ex7.jpg differ
diff --git a/docs/en/target/ex8.jpg b/docs/en/target/ex8.jpg
new file mode 100644 (file)
index 0000000..4ea8d7c
Binary files /dev/null and b/docs/en/target/ex8.jpg differ
diff --git a/docs/en/target/ex9.jpg b/docs/en/target/ex9.jpg
new file mode 100644 (file)
index 0000000..d7bbac8
Binary files /dev/null and b/docs/en/target/ex9.jpg differ
diff --git a/docs/en/target/extension.txt b/docs/en/target/extension.txt
new file mode 100644 (file)
index 0000000..f3e482a
--- /dev/null
@@ -0,0 +1,720 @@
+.. index:: 
+       single: Extension; Introduction
+
+===================================
+Extension using the C/C++ languages
+===================================
+
+We can extend the Ring Virtual Machine (RingVM) by adding new functions written in the C programming language or C++. 
+The RingVM comes with many functions written in C that we can call like any Ring function.
+
+We can extend the language by writing new functions then rebuilding the RingVM again, or we can create shared 
+library (DLL/So) file to extend the RingVM without the need to rebuild it.
+
+The Ring language source code comes with two files to add new modules to the RingVM, ring_ext.h and ring_ext.c
+
+.. index:: 
+       pair: Extension; ring_ext.h
+
+ring_ext.h
+==========
+
+The file ring_ext.h contains constants that we can change to include/exclude modules during the build process.
+
+.. code-block:: C
+
+       #ifndef ringext_h
+       #define ringext_h
+       /* Constants */
+       #define RING_VM_LISTFUNCS       1
+       #define RING_VM_REFMETA         1
+       #define RING_VM_MATH            1
+       #define RING_VM_FILE            1
+       #define RING_VM_OS              1
+       #define RING_VM_MYSQL           1
+       #define RING_VM_ODBC            1
+       #define RING_VM_OPENSSL         1
+       #define RING_VM_CURL            1
+       #define RING_VM_DLL             1
+       #endif
+
+
+.. index:: 
+       pair: Extension; ring_ext.c
+
+ring_ext.c
+==========
+
+The file ring_ext.c check constants defined in ring_ext.h before calling the start-up function in each module.
+
+Each module contains a function that register the module functions in the RingVM.
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       void ring_vm_extension ( RingState *pRingState )
+       {
+               /* Reflection and Meta-programming */
+               #if RING_VM_REFMETA
+                       ring_vm_refmeta_loadfunctions(pRingState);
+               #endif
+               /* List Functions */
+               #if RING_VM_LISTFUNCS
+                       ring_vm_listfuncs_loadfunctions(pRingState);
+               #endif
+               /* Math */
+               #if RING_VM_MATH
+                       ring_vm_math_loadfunctions(pRingState);
+               #endif
+               /* File */
+               #if RING_VM_FILE
+                       ring_vm_file_loadfunctions(pRingState);
+               #endif
+               /* OS */
+               #if RING_VM_OS
+                       ring_vm_os_loadfunctions(pRingState);
+               #endif
+               /* MySQL */
+               #if RING_VM_MYSQL
+                       ring_vm_mysql_loadfunctions(pRingState);
+               #endif
+               /* ODBC */
+               #if RING_VM_ODBC
+                       ring_vm_odbc_loadfunctions(pRingState);
+               #endif
+               /* OPENSSL */
+               #if RING_VM_OPENSSL
+                       ring_vm_openssl_loadfunctions(pRingState);
+               #endif
+               /* CURL */
+               #if RING_VM_CURL
+                       ring_vm_curl_loadfunctions(pRingState);
+               #endif
+               /* DLL */
+               #if RING_VM_DLL
+                       ring_vm_dll_loadfunctions(pRingState);
+               #endif
+       }
+
+.. index:: 
+       pair: Extension; Module Organization
+
+Module Organization
+===================
+
+Each module starts by include the ring header file (ring.h).
+This files contains the Ring API that we can use to extend the RingVM.
+
+Each module comes with a function to register the module functions in the RingVM 
+The registration is done by using ring_vm_funcregister() function.
+
+
+The ring_vm_funcregister() function takes two parameters, the first is the function name
+that will be used by Ring programs to call the function. The second parameter is the 
+function pointer in the C program.
+
+for example, the ring_vmmath.c module contains the next code to register the module functions
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       void ring_vm_math_loadfunctions ( RingState *pRingState )
+       {
+               ring_vm_funcregister("sin",ring_vm_math_sin);
+               ring_vm_funcregister("cos",ring_vm_math_cos);
+               ring_vm_funcregister("tan",ring_vm_math_tan);
+               ring_vm_funcregister("asin",ring_vm_math_asin);
+               ring_vm_funcregister("acos",ring_vm_math_acos);
+               ring_vm_funcregister("atan",ring_vm_math_atan);
+               ring_vm_funcregister("atan2",ring_vm_math_atan2);
+               ring_vm_funcregister("sinh",ring_vm_math_sinh);
+               ring_vm_funcregister("cosh",ring_vm_math_cosh);
+               ring_vm_funcregister("tanh",ring_vm_math_tanh);
+               ring_vm_funcregister("exp",ring_vm_math_exp);
+               ring_vm_funcregister("log",ring_vm_math_log);
+               ring_vm_funcregister("log10",ring_vm_math_log10);
+               ring_vm_funcregister("ceil",ring_vm_math_ceil);
+               ring_vm_funcregister("floor",ring_vm_math_floor);
+               ring_vm_funcregister("fabs",ring_vm_math_fabs);
+               ring_vm_funcregister("pow",ring_vm_math_pow);
+               ring_vm_funcregister("sqrt",ring_vm_math_sqrt);
+               ring_vm_funcregister("unsigned",ring_vm_math_unsigned);
+               ring_vm_funcregister("decimals",ring_vm_math_decimals);
+               ring_vm_funcregister("murmur3hash",ring_vm_math_murmur3hash);
+       }
+
+.. tip:: Remember that the function ring_vm_math_loadfunctions() will be called by the 
+                ring_vm_extension() function (in the ring_ext.c file). 
+
+.. index:: 
+       pair: Extension; Function Structure
+
+Function Structure
+==================
+
+Each module function may contains the next steps
+
+1 - Check Parameters Count
+
+2 - Check Parameters Type
+
+3 - Get Parameters Values
+
+4 - Execute Code/Call Functions
+
+5 - Return Value
+
+The structure is very similar to any function (Input - Process - Output)
+But here we will use the Ring API for the steps 1,2,3 and 5.
+
+
+.. index:: 
+       pair: Extension; Check Parameters Count
+
+Check Parameters Count
+======================
+
+We can check the parameters count using the RING_API_PARACOUNT macro.
+
+We can compare RING_API_PARACOUNT with any numeric value using == or != operators.
+
+
+Example:
+
+.. code-block:: C
+
+       if ( RING_API_PARACOUNT != 1 ) {
+               /* code */
+       }
+
+       
+Example:
+
+.. code-block:: C
+
+       if ( RING_API_PARACOUNT == 1 ) {
+               /* code */
+       }
+
+.. index:: 
+       pair: Extension; Display Error Message
+
+Display Error Message
+=====================
+
+We can display error messages using the RING_API_ERROR() function.
+
+The function will display the error and end the execution of the program.
+
+.. note:: the behavior of this function can be changed by the Ring code 
+                 using Try/Catch/Done statements, so in your C code, use Return after this function.
+                 
+
+Syntax:
+
+.. code-block:: C
+
+       RING_API_ERROR(const char *cErrorMsg);
+       
+
+The Ring API comes with some of predefined error messages that we can use
+
+.. code-block:: C
+
+       #define RING_API_MISS1PARA "Bad parameters count, the function expect one parameter"
+       #define RING_API_MISS2PARA "Bad parameters count, the function expect two parameters"
+       #define RING_API_MISS3PARA "Bad parameters count, the function expect three parameters"
+       #define RING_API_MISS4PARA "Bad parameters count, the function expect four parameters"
+       #define RING_API_BADPARATYPE    "Bad parameter type!"
+       #define RING_API_BADPARACOUNT   "Bad parameters count!"
+       #define RING_API_BADPARARANGE   "Bad parameters value, error in range!"
+       #define RING_API_NOTPOINTER     "Error in parameter, not pointer!"
+       #define RING_API_NULLPOINTER    "Error in parameter, NULL pointer!"
+       #define RING_API_EMPTYLIST      "Bad parameter, empty list!"
+
+.. index:: 
+       pair: Extension; Check Parameters Type
+
+Check Parameters Type
+=====================
+
+We can check the parameter type using the next functions
+
+.. code-block:: C
+
+       int RING_API_ISNUMBER(int nParameterNumber);
+       int RING_API_ISSTRING(int nParameterNumber);
+       int RING_API_ISLIST(int nParameterNumber);
+       int RING_API_ISPOINTER(int nParameterNumber);
+
+The output of these functions will be 1 (True) or 0 (False).   
+
+.. index:: 
+       pair: Extension; Get Parameters Values
+
+Get Parameters Values
+=====================
+
+We can get parameters values using the next functions
+
+.. code-block:: C
+
+       double RING_API_GETNUMBER(int nParameterNumber);
+       const char *RING_API_GETSTRING(int nParameterNumber);
+       int RING_API_GETSTRINGSIZE(int nParameterNumber);
+       List *RING_API_GETLIST(int nParameterNumber);
+       void *RING_API_GETCPOINTER(int nParameterNumber, const char *cPoinerType);
+       int RING_API_GETPOINTERTYPE(int nParameterNumber);
+
+       
+.. index:: 
+       pair: Extension; Return Value
+
+Return Value
+============
+
+We can return values from our function using the next functions.
+
+.. code-block:: C
+
+       RING_API_RETNUMBER(double nValue);
+       RING_API_RETSTRING(const char *cString);
+       RING_API_RETSTRING2(const char *cString,int nStringSize);
+       RING_API_RETLIST(List *pList);
+       RING_API_RETCPOINTER(void *pValue,const char *cPointerType);
+       RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                       void (* pFreeFunc)(void *,void *))
+
+.. index:: 
+       pair: Extension; Function Prototype
+
+
+Function Prototype
+==================
+
+When we define new function to be used for RingVM extension, we use the next prototype
+
+.. code-block:: C
+
+       void my_function_name( void *pPointer );
+       
+or we can use the RING_FUNC() Macro
+
+.. code-block:: C
+
+       RING_FUNC(my_function_name);
+
+       
+.. index:: 
+       pair: Extension; Sin() Implementation
+
+Sin() Function Implementation
+=============================
+
+The next code represents the sin() function implementation using the Ring API and 
+the sin() C function.
+
+
+.. code-block:: C
+
+       void ring_vm_math_sin ( void *pPointer )
+       {
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISNUMBER(1) ) {
+                       RING_API_RETNUMBER(sin(RING_API_GETNUMBER(1)));
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+
+.. index:: 
+       pair: Extension; Fopen() and Fclose() Implementation
+
+Fopen() and Fclose() Functions Implementation
+=============================================
+
+The next code represents the fopen() function implementation 
+using the Ring API and the fopen() C Function.
+
+The function takes two parameters, the first parameter is the file name as string.
+The second parameter is the mode as string.
+
+In the file ring_vmfile.h we have some constants to use as the pointer type like
+
+.. code-block:: C
+
+       #define RING_VM_POINTER_FILE    "file"
+       #define RING_VM_POINTER_FILEPOS "filepos"
+
+The function implementation in ring_vmfile.c
+
+.. code-block:: C
+
+       void ring_vm_file_fopen ( void *pPointer )
+       {
+               FILE *fp  ;
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( RING_API_ISSTRING(1) && RING_API_ISSTRING(2) ) {
+                       fp = fopen(RING_API_GETSTRING(1),RING_API_GETSTRING(2));
+                       RING_API_RETCPOINTER(fp,RING_VM_POINTER_FILE);
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+
+The next code represents the fclose() function implementation
+
+.. code-block:: C
+
+       void ring_vm_file_fclose ( void *pPointer )
+       {
+               FILE *fp  ;
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISPOINTER(1) ) {
+                       fp = (FILE *) RING_API_GETCPOINTER(1,RING_VM_POINTER_FILE) ;
+                       if ( fp != NULL ) {
+                               RING_API_RETNUMBER(fclose(fp));
+                               RING_API_SETNULLPOINTER(1);
+                       }
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+From fopen() and fclose() implementation we learned
+
+1 - how to return C pointer using RING_API_RETCPOINTER() function
+
+2 - how to check if the parameter is a pointer using the RING_API_ISPOINTER() function
+
+3 - how to get C pointer value using the RING_API_GETCPOINTER() function
+
+4 - how to set the C pointer variable (in RingVM) to NULL using the RING_API_SETNULLPOINTER() function
+
+.. index:: 
+       pair: Extension; RING API - list Functions
+
+Ring API - List Functions
+=========================
+
+In this section we will learn about the list functions provided by the Ring API to create new lists and 
+manipulate the list items.
+
+.. code-block:: C
+
+       List * ring_list_new ( int nSize ) ;
+       void ring_list_newitem ( List *pList ) ;
+       Item * ring_list_getitem ( List *pList,int index ) ;
+       List * ring_list_delete ( List *pList ) ;
+       void ring_list_deleteitem ( List *pList,int index ) ;
+       void ring_list_print ( List *pList ) ;
+       int ring_list_gettype ( List *pList, int index ) ;
+       void ring_list_setint ( List *pList, int index ,int number ) ;
+       void ring_list_addint ( List *pList,int x ) ;
+       void ring_list_setpointer ( List *pList, int index ,void *pValue ) ;
+       void ring_list_addpointer ( List *pList,void *pValue ) ;
+       void ring_list_setfuncpointer ( List *pList, int index ,void (*pFunc)(void *) ) ;
+       void ring_list_addfuncpointer ( List *pList,void (*pFunc)(void *) ) ;
+       int ring_list_isfuncpointer ( List *pList, int index ) ;
+       void ring_list_setdouble ( List *pList, int index ,double number ) ;
+       void ring_list_adddouble ( List *pList,double x ) ;
+       void ring_list_setstring ( List *pList, int index ,const char *str ) ;
+       void ring_list_setstring2 ( List *pList, int index ,const char *str,int nStrSize ) ;
+       void ring_list_addstring ( List *pList,const char *str ) ;
+       void ring_list_addstring2 ( List *pList,const char *str,int nStrSize ) ;
+       List * ring_list_newlist ( List *pList ) ;
+       List * ring_list_getlist ( List *pList, int index ) ;
+       void ring_list_setlist ( List *pList, int index ) ;
+       void ring_list_setactiveitem ( List *pList, Items *pItems, int index ) ;
+       void ring_list_copy ( List *pNewList, List *pList ) ;
+       int ring_list_isnumber ( List *pList, int index ) ;
+       int ring_list_isstring ( List *pList, int index ) ;
+       int ring_list_islist ( List *pList, int index ) ;
+       int ring_list_ispointer ( List *pList, int index ) ;
+       void ring_list_deleteallitems ( List *pList ) ;
+       void ring_list_insertitem ( List *pList,int x ) ;
+       void ring_list_insertint ( List *pList,int nPos,int x ) ;
+       void ring_list_insertdouble ( List *pList,int nPos,double x ) ;
+       void ring_list_insertpointer ( List *pList,int nPos,void *pValue ) ;
+       void ring_list_insertstring ( List *pList,int nPos,const char *str ) ;
+       void ring_list_insertstring2 ( List *pList,int nPos,const char *str,int nStrSize ) ;
+       void ring_list_insertfuncpointer ( List *pList,int nPos,void (*pFunc)(void *) ) ;
+       List * ring_list_insertlist ( List *pList,int nPos ) ;
+       int ring_list_isiteminsidelist ( List *pList,Item *pItem ) ;
+       int ring_list_findstring ( List *pList,const char *str,int nColumn ) ;
+       int ring_list_finddouble ( List *pList,double nNum1,int nColumn ) ;
+       void ring_list_sortnum ( List *pList,int left,int right,int nColumn ) ;
+       void ring_list_sortstr ( List *pList,int left,int right,int nColumn ) ;
+       int ring_list_binarysearchnum ( List *pList,double nNum1,int nColumn ) ;
+       int ring_list_binarysearchstr ( List *pList,const char *cFind,int nColumn ) ;
+       void ring_list_swap ( List *pList,int x,int y ) ;
+       double ring_list_getdoublecolumn ( List *pList,int nIndex,int nColumn ) ;
+       char * ring_list_getstringcolumn ( List *pList,int nIndex,int nColumn ) ;
+       void ring_list_genarray ( List *pList ) ;
+       void ring_list_deletearray ( List *pList ) ;
+       void ring_list_genhashtable ( List *pList ) ;
+       void ring_list_genhashtable2 ( List *pList ) ;
+       void ring_list_refcopy ( List *pNewList, List *pList ) ;
+       void ring_list_clear ( List *pList ) ;
+       /* Macro */
+       ring_list_isdouble(pList,index)
+       ring_list_isint(pList,index) 
+       ring_list_deletelastitem(x)
+       ring_list_gethashtable(x) 
+       ring_list_getint(pList,index)
+       ring_list_getpointer(pList,index)
+       ring_list_getfuncpointer(pList,index)
+       ring_list_callfuncpointer(pList,index,x)
+       ring_list_getdouble(pList,index) 
+       ring_list_getstring(pList,index) 
+       ring_list_getstringobject(pList,index) 
+       ring_list_getstringsize(pList,index)
+       ring_list_getsize(x) (x->nSize)
+
+.. index:: 
+       pair: Extension; RING API - String Functions
+
+Ring API - String Functions
+===========================
+
+In this section we will learn about the string functions provided by the Ring API to create new string and 
+manipulate the string content.
+
+.. code-block:: C
+
+       String * ring_string_new ( const char *str ) ;
+       String * ring_string_new2 ( const char *str,int nStrSize ) ;
+       String * ring_string_delete ( String *pString ) ;
+       int ring_string_size ( String *pString ) ;
+       void ring_string_set ( String *pString,const char *str ) ;
+       void ring_string_set2 ( String *pString,const char *str,int nStrSize ) ;
+       void ring_string_add ( String *pString,const char *str ) ;
+       void ring_string_add2 ( String *pString,const char *str,int nStrSize ) ;
+       void ring_string_print ( String *pString ) ;
+       void ring_string_setfromint ( String *pString,int x ) ;
+       char * ring_string_lower ( char *cStr ) ;
+       char * ring_string_upper ( char *cStr ) ;
+       char * ring_string_lower2 ( char *cStr,int nStrSize ) ;
+       char * ring_string_upper2 ( char *cStr,int nStrSize ) ;
+       char * ring_string_find ( char *cStr1,char *cStr2 ) ;
+       char * ring_string_find2 ( char *cStr1,int nStrSize1,char *cStr2,int nStrSize2 ) ;
+       /* Macro */
+       ring_string_tolower(x)
+       ring_string_toupper(x)
+       ring_string_get(x)
+
+
+.. index:: 
+       pair: Extension; MySQL_Columns() Implementation
+
+MySQL_Columns() Function Implementation
+=======================================
+
+The next code presents the MySQL_Columns() function implementation.
+
+This function returns table columns information.
+
+.. code-block:: C
+
+       void ring_vm_mysql_columns ( void *pPointer )
+       {
+               MYSQL *con  ;
+               MYSQL_RES *result  ;
+               int nColumns,x  ;
+               MYSQL_ROW row  ;
+               MYSQL_FIELD *field  ;
+               List *pList, *pList2  ;
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISPOINTER(1) ) {
+                       con = (MYSQL *) RING_API_GETCPOINTER(1,RING_VM_POINTER_MYSQL) ;
+                       if ( con == NULL ) {
+                               return ;
+                       }
+                       result = mysql_store_result(con);
+                       if ( result == NULL ) {
+                               RING_API_RETNUMBER(0);
+                               return ;
+                       }
+                       pList = RING_API_NEWLIST ;
+                       nColumns = mysql_num_fields(result);
+                       if ( row = mysql_fetch_row(result) ) {
+                               while ( field = mysql_fetch_field(result) ) {
+                                       pList2 = ring_list_newlist(pList);
+                                       ring_list_addstring(pList2,field->name);
+                                       ring_list_adddouble(pList2,field->length);
+                                       ring_list_adddouble(pList2,field->type);
+                                       ring_list_adddouble(pList2,field->flags);
+                               }
+                       }
+                       mysql_free_result(result);
+                       RING_API_RETLIST(pList);
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+Lists are of type List, in the previoud function we declared two pointers of type List
+using List *pList, *pList2;
+       
+.. note:: The function uses RING_API_NEWLIST to create new list instead of ring_list_new()
+                 to create the list in Temp. Memory related to the function scope. This way we can
+                 return the list from the function. Also we don't delete the list, if it's stored in 
+                 a variable by Ring Code it will be saved, if not it will be automatically deleted by RingVM.
+                 
+
+The list can contains sub lists, we used the function ring_list_newlist() to create a sublist.
+
+The function ring_list_addstring() is used to add string items to the list/sublist.
+
+The function ring_list_adddouble() is used to add numeric items to the list/sublist.
+
+.. note:: All numeric items in lists returned from RingVM extension functions must be of type double
+          and added to the list using ring_list_adddouble() function.
+                 
+
+We return the list from the extension function using the RING_API_RETLIST() function.
+
+.. index:: 
+       pair: Extension; Shared Libraries
+
+Dynamic/Shared Libraries (DLL/So/Dylib) and LoadLib() function
+==============================================================
+
+Instead of rebuilding the RingVM after writing new functions using C/C++ and the Ring API, we can create
+a DLL/So/Dylib file and dynamically use the functions provided by this file in the runtime using the LoadLib() function.
+
+Dynamic library example in C
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       RING_DLL __declspec(dllexport) 
+
+       RING_FUNC(ring_ringlib_dlfunc)
+       {
+               printf("Message from dlfunc");
+       }
+
+       RING_DLL void ringlib_init(RingState *pRingState)
+       {
+               ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc); 
+       }
+
+the idea is to create the ringlib_init() function, this function will be called by the RingVM when we use the generated DLL 
+file though the LoadLib() function.
+
+Inside the ringlib_init() function we can register the module function or call a function that do the registration process
+for all of the module functions.
+
+The next Ring code demonstrates how to use the DLL library during the runtime.
+
+.. code-block:: ring
+
+       See "Dynamic DLL" + NL
+       LoadLib("ringlib.dll")
+       dlfunc()
+
+Output:
+
+.. code-block:: ring
+
+       Dynamic DLL
+       Message from dlfunc
+
+
+.. index:: 
+       pair: Extension; Using RING_API_RETMANAGEDCPOINTER()
+
+Using RING_API_RETMANAGEDCPOINTER()
+===================================
+
+Using RING_API_RETMANAGEDCPOINTER() the Ring extensions written in C/C++ languages can return a managed
+pointer to Ring. This pointer can be controlled by the Ring VM using reference counting.
+
+This is important to avoid the need to write code that free the unmanaged resources like QPixMap objects in RingQt.
+
+Also the Code Generator for extensions is updated to automatically use RING_API_RETMANAGEDCPOINTER() based on need.
+
+Syntax:
+
+.. code-block:: ring
+
+               RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                               void (* pFreeFunc)(void *,void *))
+
+Example:
+
+The next example from ring_qt.cpp - QPixMap Class - Scaled() Method.
+
+.. code-block:: none
+
+       RING_FUNC(ring_QPixmap_scaled)
+       {
+               QPixmap *pObject ;
+               if ( RING_API_PARACOUNT != 5 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               RING_API_IGNORECPOINTERTYPE ;
+               if ( ! RING_API_ISPOINTER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               pObject = (QPixmap *) RING_API_GETCPOINTER(1,"QPixmap");
+               if ( ! RING_API_ISNUMBER(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(3) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(4) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(5) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               {
+                       QPixmap *pValue ; 
+                       pValue = new QPixmap() ;
+                       *pValue = pObject->scaled( (int ) RING_API_GETNUMBER(2),
+                                (int ) RING_API_GETNUMBER(3),
+                                (Qt::AspectRatioMode )  (int) RING_API_GETNUMBER(4),
+                                (Qt::TransformationMode )  (int) RING_API_GETNUMBER(5));
+                       RING_API_RETMANAGEDCPOINTER(pValue,"QPixmap",ring_QPixmap_freefunc);
+               }
+       }
+
+The function that will free the memory takes two parameters (Ring State and the allocated Memory Pointer)
+
+Example:
+
+.. code-block:: none
+
+       void ring_QPixmap_freefunc(void *pState,void *pPointer)
+       {
+               QPixmap *pObject ; 
+               pObject = (QPixmap *) pPointer;
+               delete pObject ;
+       }
+
diff --git a/docs/en/target/extension_tutorial.txt b/docs/en/target/extension_tutorial.txt
new file mode 100644 (file)
index 0000000..ada700a
--- /dev/null
@@ -0,0 +1,1503 @@
+.. index:: 
+       single: Tutorial: Ring Extensions in C/C++; Tutorial: Ring Extensions in C/C++
+
+==================================
+Tutorial: Ring Extensions in C/C++
+==================================
+
+In this chapter we will see simple examples about using C code in Ring programs
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Hello World
+
+Hello World
+===========
+
+Sample : ring/extensions/tutorial/helloworld
+
+The file mylib.c contains
+
+.. code-block:: c
+
+       #include "ring.h"
+
+       #include "stdlib.h"
+
+       RING_FUNC(ring_myfunction)
+       {       
+               printf("Hello, World!");
+       }
+
+       RING_API void ringlib_init(RingState *pRingState)
+       {
+               ring_vm_funcregister("myfunction",ring_myfunction);
+       }
+
+As we see in the source code, we start with including the ring.h file which contains the definitions for Ring API
+
+Then we use the RING_FUNC macro to define new functions, it's a good idea to start the function definition with ring_ to make these definitions unique and different than normal C functions
+
+Then we have the function ringlib_init that will be called when the extension is loaded by the Ring VM
+
+In this function we use the ring_vm_funcregister() function to register the new functions in Ring VM
+
+Then we build the extension using :
+
+buildvc.bat
+
+The file buildvc.bat contains the next commands to build the extension using Visual C/C++
+
+
+.. code-block:: none
+
+       cls
+       call ../../../src/locatevc.bat
+       cl /c /DEBUG mylib.c -I"..\..\..\include"
+       link /DEBUG mylib.obj  ..\..\..\lib\ring.lib /DLL /OUT:mylib.dll /SUBSYSTEM:CONSOLE,"5.01" 
+       del mylib.obj
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       loadlib("mylib.dll")
+
+       ? "Calling a C Function"
+       myfunction()
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Build the extension on different platforms
+
+Build the extension on different platforms
+==========================================
+
+Sample : ring/extensions/tutorial/helloworld2
+
+This extension is the same as the first one but in this time, we support Windows, Linux and macOS.
+
+We will use the next files
+
+.. code-block:: none
+
+       buildvc.bat
+       buildgcc.sh
+       buildclang.sh
+
+Where we use buildvc.bat in Windows, buildgcc.sh in Linux and buildclang.sh in macOS
+
+The file buildgcc.sh contains the next commands
+
+.. code-block:: none
+
+       gcc -c -fpic mylib.c -I $PWD/../../../include 
+       gcc -shared -o libmylib.so mylib.o -L $PWD/../../../lib -lring
+       sudo cp libmylib.so /usr/lib
+       sudo cp libmylib.so /usr/lib64
+
+The file buildclang.sh contains 
+
+.. code-block:: none
+
+       clang -c -fpic mylib.c -I $PWD/../../../include
+       clang -dynamiclib -o libmylib.dylib mylib.o  -L $PWD/../../../lib  -lring
+       cp libmylib.dylib /usr/local/lib
+
+This time we use mylib.ring instead of using LoadLib() function directly
+
+In mylib.ring we have the next code
+
+.. code-block:: ring
+
+       if iswindows()
+               LoadLib("mylib.dll")
+       but ismacosx()
+               LoadLib("libmylib.dylib")
+       else
+               LoadLib("libmylib.so")
+       ok
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Sum Two Numbers
+
+Sum Two Numbers
+===============
+
+Sample : ring/extensions/tutorial/sumtwonumbers
+
+In this extension we learn how to create a C function to sum two numbers
+
+This extension is an update to the (Hello World 2) extension in : ring/extensions/tutorial/helloworld2 folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_sumtwonumbers)
+       {
+               double nNum1,nNum2,nSum;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! (RING_API_ISNUMBER(1) && RING_API_ISNUMBER(2)) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Sum Numbers 
+                       nNum1 = RING_API_GETNUMBER(1);
+                       nNum2 = RING_API_GETNUMBER(2);
+                       nSum  = nNum1 + nNum2 ;
+               // Return Output
+                       RING_API_RETNUMBER(nSum);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("sumtwonumbers",ring_sumtwonumbers);
+
+The previous code is written to check errors, and to be easy to understand
+
+We can write short code like
+
+.. code-block:: c
+
+               RING_API_RETNUMBER(RING_API_GETNUMBER(1) + RING_API_GETNUMBER(2));
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Say Hello
+
+Say Hello
+=========
+
+Sample : ring/extensions/tutorial/sayhello
+
+In this extension we learn how to create a C function that get a name as string then say hello.
+
+This extension is an update to the (sumtwonumbers) extension in : ring/extensions/tutorial/sumtwonumbers folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_sayhello)
+       {
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISSTRING(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               printf("Hello %s\n",RING_API_GETSTRING(1));
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("sayhello",ring_sayhello);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Sum List of Numbers
+
+Sum List of Numbers
+===================
+
+Sample : ring/extensions/tutorial/sumlist
+
+In this extension we learn how to create a C function that sum list of numbers.
+
+This extension is an update to the (sayhello) extension in : ring/extensions/tutorial/sayhello folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_sumlist)
+       {
+               List *pList;
+               int x,nSum;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISLIST(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Sum List Numbers 
+                       nSum = 0;
+                       pList = RING_API_GETLIST(1);
+                       for(x=1 ; x <= ring_list_getsize(pList) ; x++) {
+                               if ( ring_list_isdouble(pList,x) ) {
+                                       nSum += (int) ring_list_getdouble(pList,x) ;
+                               }
+                       }
+               // Return Output 
+                       RING_API_RETNUMBER(nSum);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("sumlist",ring_sumlist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Increment List Items
+
+Increment List Items
+====================
+
+Sample : ring/extensions/tutorial/incrementlist
+
+In this extension we learn how to create a C function that increment the list items.
+
+This extension is an update to the (sumlist) extension in : ring/extensions/tutorial/sumlist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_inclist)
+       {
+               List *pList;
+               int x,nSum;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Increment List Items
+                       nSum = 0;
+                       pList = RING_API_GETLIST(1);
+                       for(x=1 ; x <= ring_list_getsize(pList) ; x++) {
+                               if ( ring_list_isdouble(pList,x) ) {
+                                       ring_list_setdouble(pList,x,
+                                               ring_list_getdouble(pList,x)+
+                                               RING_API_GETNUMBER(2)) ;
+                               }       
+                       }
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("inclist",ring_inclist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: ring
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Filter List Items
+
+Filter List Items
+=================
+
+Sample : ring/extensions/tutorial/filterlist
+
+In this extension we learn how to create a C function that filter the list items.
+
+This extension is an update to the (incrementlist) extension in : ring/extensions/tutorial/incrementlist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_filterlist)
+       {
+               List *pList;
+               int x;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Filter List Items
+                       pList = RING_API_GETLIST(1);
+                       for(x = ring_list_getsize(pList) ; x >= 1 ; x--) 
+                               if ( ring_list_isdouble(pList,x) ) 
+                                       if ( ! (ring_list_getdouble(pList,x) >
+                                                        RING_API_GETNUMBER(2)) )
+                                               ring_list_deleteitem(pList,x) ;
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("filterlist",ring_filterlist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Replicate List Items
+
+Replicate List Items
+====================
+
+Sample : ring/extensions/tutorial/replicatelist
+
+In this extension we learn how to create a C function that add more items to the list.
+
+This extension is an update to the (filterlist) extension in : ring/extensions/tutorial/filterlist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_replicatelist)
+       {
+               List *pList;
+               int x,y,nTimes,nSize;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Replicate List Items
+                       pList = RING_API_GETLIST(1);
+                       nSize = ring_list_getsize(pList);
+                       nTimes = (int) RING_API_GETNUMBER(2);
+                       if (nTimes < 1) {
+                               RING_API_ERROR("Error: The second parameter must be >= 1 \n");
+                               return;
+                       }
+                       for(x = 1 ; x <= nTimes ; x++) 
+                               for(y = 1 ; y <= nSize ; y++) 
+                                       if ( ring_list_isdouble(pList,y) ) 
+                                               ring_list_adddouble(pList,
+                                                       ring_list_getdouble(pList,y));
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("replicatelist",ring_replicatelist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Generate List
+
+Generate List
+=============
+
+Sample : ring/extensions/tutorial/generatelist
+
+In this extension we learn how to create a C function that create new list and add items to the list.
+
+This extension is an update to the (replicatelist) extension in : ring/extensions/tutorial/replicatelist folder
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_generatelist)
+       {
+               List *pList;
+               int x,nSize;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISNUMBER(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Create the List
+                       pList = RING_API_NEWLIST;
+               // Generate List Items
+                       nSize = (int) RING_API_GETNUMBER(1);
+                       if (nSize < 1) {
+                               RING_API_ERROR("Error: The list size must be >= 1 \n");
+                               return;
+                       }
+                       for(x = 1 ; x <= nSize ; x++) 
+                               ring_list_adddouble(pList,(double) x);
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("generatelist",ring_generatelist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Display List
+
+Display List
+============
+
+Sample : ring/extensions/tutorial/displaylist
+
+In this extension we learn how to create a C function that display all of the list items including nested lists
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       void mylib_displaylist(List *pList);
+
+       RING_FUNC(ring_displaylist)
+       {
+               List *pList;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! RING_API_ISLIST(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Get the List
+                       pList = RING_API_GETLIST(1);
+               // Display the List Items including Nested Lists
+                       mylib_displaylist(pList);
+       }
+
+       void mylib_displaylist(List *pList) {
+               int x;
+               for (x=1; x <= ring_list_getsize(pList); x++) {
+                       if ( ring_list_isdouble(pList,x) ) {
+                               printf("Number : %f \n", ring_list_getdouble(pList,x) ) ;
+                       } else if ( ring_list_isstring(pList,x) ) {
+                               printf("String : %s \n", ring_list_getstring(pList,x) ) ;
+                       } else if ( ring_list_islist(pList,x) ) {
+                               printf("Sub List..\n");
+                               mylib_displaylist( ring_list_getlist(pList,x) );                
+                       }
+               }
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("displaylist",ring_displaylist);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Update Table
+
+Update Table
+============
+
+Sample : ring/extensions/tutorial/updatetable
+
+In this extension we learn how to create a C function that update a table contains rows and columns
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_updatetable)
+       {
+               List *pList, *pRow;
+               int nRow,nCol;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Get the List (Represent a Table)
+                       pList = RING_API_GETLIST(1);
+               // Update the Table Rows and Columns
+               for (nRow = 1 ; nRow <= ring_list_getsize(pList) ; nRow++ ) {
+                       if ( ring_list_islist(pList,nRow) ) {
+                       pRow = ring_list_getlist(pList,nRow);
+                       for (nCol = 1 ; nCol <= ring_list_getsize(pRow) ; nCol++ ) {
+                               if ( ring_list_isdouble(pRow,nCol) ) {
+                                       ring_list_setdouble(pRow,nCol,RING_API_GETNUMBER(2));
+                               } else {
+                                       RING_API_ERROR("Error : We expect numbers!\n");
+                                       return ;
+                               }
+                       }
+                       } else {
+                               RING_API_ERROR("Error : The parameter is not a table! \n");
+                               return ;
+                       }
+               }
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("updatetable",ring_updatetable);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+       ? ""
+
+       ? "Create List (2,2)"
+       aList = newList(2,2)
+       ? "Update the list using C code - set all cells to 10"
+       UpdateTable(aList,10)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       Create List (2,2)
+       Update the list using C code - set all cells to 10
+       aList[1][1] : 10
+       aList[1][2] : 10
+       aList[2][1] : 10
+       aList[2][2] : 10
+
+.. index:: 
+       pair: Tutorial: Ring Extensions in C/C++; Create Table
+
+Create Table
+============
+
+Sample : ring/extensions/tutorial/createtable
+
+In this extension we learn how to create a C function that create a table contains rows and columns
+
+In mylib.c we update the file to add
+
+.. code-block:: c
+
+       RING_FUNC(ring_createtable)
+       {
+               List *pList, *pRow;
+               int x,y,nRows,nCols;
+               // Check Parameters Count
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // Check Parameters Type
+                       if ( ! ( RING_API_ISNUMBER(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // Create the List
+                       pList = RING_API_NEWLIST;
+               // Create the table items
+                       nRows = (int) RING_API_GETNUMBER(1);
+                       nCols = (int) RING_API_GETNUMBER(2);
+                       if ( (nRows < 1) || (nCols < 1) ) {
+                       RING_API_ERROR("Error: The table rows and columns must be >= 1 \n");
+                       return;
+                       }
+                       for(x = 1 ; x <= nRows ; x++) {
+                               pRow = ring_list_newlist(pList);
+                               for(y = 1 ; y <= nCols ; y++) 
+                                       ring_list_adddouble(pRow,0.0);
+                       }
+               // Return Output
+                       RING_API_RETLIST(pList);
+       }
+
+Then we register the new function
+
+.. code-block:: c
+
+       ring_vm_funcregister("createtable",ring_createtable);
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+       ? ""
+
+       ? "Create List (2,2)"
+       aList = newList(2,2)
+       ? "Update the list using C code - set all cells to 10"
+       UpdateTable(aList,10)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+       ? ""
+
+       ? "Create List (3,3) using C code"
+       aList = CreateTable(3,3)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[1][3] : " + aList[1][3]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+       ? "aList[2][3] : " + aList[2][3]
+       ? "aList[3][1] : " + aList[3][1]
+       ? "aList[3][2] : " + aList[3][2]
+       ? "aList[3][3] : " + aList[3][3]
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+Output
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       Create List (2,2)
+       Update the list using C code - set all cells to 10
+       aList[1][1] : 10
+       aList[1][2] : 10
+       aList[2][1] : 10
+       aList[2][2] : 10
+
+       Create List (3,3) using C code
+       aList[1][1] : 0
+       aList[1][2] : 0
+       aList[1][3] : 0
+       aList[2][1] : 0
+       aList[2][2] : 0
+       aList[2][3] : 0
+       aList[3][1] : 0
+       aList[3][2] : 0
+       aList[3][3] : 0
diff --git a/docs/en/target/faq.txt b/docs/en/target/faq.txt
new file mode 100644 (file)
index 0000000..4fa2f8e
--- /dev/null
@@ -0,0 +1,2248 @@
+.. index:: 
+       single: Frequently Asked Questions; Introduction
+
+================================
+Frequently Asked Questions (FAQ)
+================================
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why do we need Yet Another Programming Language (YAPL)?
+
+Why do we need Yet Another Programming Language (YAPL)?
+=======================================================
+
+The language comes with better support for natural language programming and declarative
+programming. The innovation comes in supporting these paradigms with new practical techniques
+on the top of object-oriented programming and functional programming. Ring provides the programmers
+with the tools required to build a natural language like Supernova or a declarative language
+like REBOL and QML without the need to know anything about (compilers and parsing). You get
+the language constructs ready for use to create domain-specific languages in a fraction of time.
+
+Take a look at the Supernova programming language, in this language you can type: 
+(I want window and the window title is hello world.) and it will create a GUI window 
+with "Hello, World!" as the window title. When I created Supernova language in 2010, i discovered
+that using the natural code can be (similar to English and without limits and we can use the power
+of human language in programming) but to implement that you need a new language that has: 
+
+(1) General Purpose 
+
+(2) Practical 
+
+(3) Can create natural languages very quickly. 
+
+So we can get a system that can increase ease of use and productivity to the maximum level. 
+
+So I created Ring because it was the best way to achieve this goal.
+
+Supernova was just a test of the idea, it helped getting a better view of the advantages and
+the disadvantages of the idea. And After testing the new ideas you are provided with something
+practical. So now we have Ring after Supernova. A story that is maybe similar to having Python 
+after ABC.Where Python avoids the problems of ABC, but keeps the advantages of ABC. Also, Ring
+learns from Ruby and ROR's story. The language power could appear in frameworks better than the
+direct usage as a general purpose language. Also Ring comes with a clear goal/motivation; 
+(Creating a new version of the PWCT Software) something that was learned from the design the 
+C language in a certain way to create the Unix Operating System. In other words, you have a 
+goal that directs you in each design decision.
+
+You will understand the value of our decisions once you start trying to solve the problem
+that we will use Ring to solve. The questions is: could you enable any one in the world 
+without knowledge about computer programming concepts to create very powerful software?
+Scientifically the answer is (visual Programming) and (natural Programming). 
+In practice we are still away from switching to these paradigms without introducing 
+other problems. Ring is designed to solve this problem.
+It is designed to provide natural programming in a practical way. And to create a powerful 
+visual programming tool. Ring is designed to be a new world of programming after 10 years 
+of research in visual programming and natural languages.
+
+The Ring Programming Language (Compiler+VM) is developed 100% using visual programming without
+writing a single line of code. I used my tool (Programming Without Coding Technology) to design
+everything and get the C code generated for me. 
+
+Advantages ? 
+
+(1) Faster 
+
+(2) No Syntax Errors 
+
+(3) Easy to understand and manage the code because the abstraction level is higher
+
+(4) No critical disadvantages because you can control everything as writing your code.
+
+Using my experience in using visual programming for 10 years and natural programming for 5 years,
+I designed Ring to move the knowledge to mainstream programmers by providing a practical language 
+that supports these ideas.
+
+
+I agree that each programmer/developer has the freedom to form his opinions about any software
+including programming languages. Ring is not an exception but you may miss the idea behind the 
+language. It is innovative and may help you to think differently about how to solve your problems.
+Maybe this is not clear to many programmers because It is a practical language and includes many
+features known to programmers and when a programmer looks at the language they maight think that 
+nothing new because it's familiar. I created Ring to solve problems in a different way. Where I
+will start programming just by describing the software using new natural interfaces that I will
+implement later when I move from the design stage to the implementation stage. 
+(I don't determine the time to switch between stages, You are free to use Agile methods). 
+Since Ring is a new language you have 3 options:
+
+(1) To not care at all for now.
+
+(2) Think of the future of the language and help us if you understand the idea and want to contribute.
+
+(3) Wait and come back again in the future to use it. 
+
+Summary:
+
+* Ring is designed based on a need to develop a new version of the PWCT software. 
+Once we finish PWCT 2.0 we will have good and large software developed using Ring.
+
+* We will push declarative and natural paradigms many steps forward. Also in next versions 
+we have a plan to present a new paradigm for network programming and concurrency. We tested this
+new paradigm through simple prototypes during the last years and we will integrate it with Ring 
+in future releases.
+
+.. index:: 
+       pair: Frequently Asked Questions; Why is Ring weakly typed?
+
+Why is Ring weakly typed?
+=========================
+
+Because it's faster and more natural, and this is important for the language's goals. One
+of the rules is: the data type at the beginning affects the final result. 
+For example, when you type "Print : " + 5 , The String comes first, so 5
+will be converted to a String. While when you type 5 + "10" The number comes first so "10"
+will be converted to 10. This helps a lot to quickly convert between numbers and strings using
+the same operator. If you want to prevent conversion (Write code that prevent conversion) In
+these cases you will notice that what you are writing is less code (And can be removed). 
+
+Weakly typed = automatic conversion and *automatic* is *good thing* and is better than *manual*
+if you know how to use it correctly.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over Lisp or Smalltalk?
+
+What are the advantages to using Ring over Lisp or Smalltalk?
+====================================================================
+
+Smalltalk and Lisp are GREAT languages. I like many of the concepts behind them but I'm sure
+that selecting the right programming language is based on the problem and comes after the problem's
+definition. I have a problem that I want to solve and these GREAT languages are not ideal for 
+this problem so I designed Ring.
+
+When you design a new language, You can learn from the past but you must look forward and live
+in the future. What you know about natural programming maybe based on the *old knowledge* about
+the power of these paradigms in the practical world and I agree with you but I see other
+techniques that can be applied to get this to work in practice. What you miss about
+*natural language* is that they are *context sensitive* and this means we can use it and think
+differently about how we can express our ideas. 
+
+Example : I want window contains 3 buttons. 
+
+In one sentence I created 4 objects (The window and the three buttons) and added the buttons
+to the window. The idea of natural programming is to get many things done like that.
+
+.. index:: 
+       pair: Frequently Asked Questions; Why is Ring largely focussed on UI creation?
+
+Why is Ring largely focussed on UI creation?
+============================================
+
+Yes UI creation is one of the important things in the language features because it is designed
+to create a visual programming tool, But the language is a multi-paradigm language where we can
+select the programming paradigm based on the problem.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Is Ring some sort of an improvement of PHP?
+
+Is Ring some sort of an improvement of PHP?
+==========================================
+
+Ring is not designed to replace PHP, Lua or Smalltalk. Ring's support for declarative
+programming and natural language programming is very innovative and much better than staying 
+with procedural, object-oriented and functional languages. Ring see the future in programming
+without code (using natural languages) and is designed to support that.
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages of using Ring over native C or C++?
+
+What are the advantages of using Ring over native C or C++?
+===========================================================
+
+Ring provides a better way to mix between different programming paradigms in solving problems.
+
+The different programming paradigms play well together in the same language. 
+
+(1) It's easy to switch from one programming paradigm to another one because the language constructs use similar syntax for similar concepts.
+
+(2) The paradigms are provided to interact and used together in different layers in the software. 
+
+for example you can create a game engine using object-oriented programming but write the game code using declarative programming or natural programming and behind the scenes your declarative or natural code will use the object-oriented classes.
+
+(3) Ring is more productive and natural than C/C++.
+
+(4) Ring is a dynamic language. We can generate and execute code during the runtime. Ring is dynamically typed and weakly typed for flexibility.
+
+(5) The Garbage collector is generational (escape analysis) and also uses reference counting. it's very fast and still provides control to the programmer who can delete memory at any time.
+
+(6) Ring's compiler and virtual machine are just 20,000 lines of ANSI C code that can be compiled and used in any platform.
+
+(7) You can use C/C++ libraries and Ring comes with code generator to create wrappers from C functions or C++ classes. so when you need more performance or when you need to use more libraries you can easily do that.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What is the difference between Ring and Python? And is Ring Open Source?
+
+What is the difference between Ring and Python? And is Ring Open Source?
+========================================================================
+
+Yes the language is Open Source (MIT license)
+
+In general I like Python and Ruby but I was looking for a language more suitable for creating the next version of
+the Programming Without Coding Technology (PWCT) software so I started the Ring design.
+
+Some simple changes that matters for my goal are 
+
+(1) Not case sensitive
+
+(2) The list index start from 1
+
+(3) You can call functions before definition
+
+(4) Don't use Python syntax like (indentation, using self, :, pass & _) 
+
+(5) Weakly typed (convert automatically between types based on context)
+
+(6) The programs follow simple and constant structure (Statements then functions then packages and classes)
+
+(7) Using the '=' operator for assignment and for testing values
+
+Critical changes are
+
+(1) Small Language : The Ring compiler + Virtual Machine = 15K lines of C code , the other 500K lines are related to libraries and are optional when we go for using the language in C/C++ programs.
+
+(2) The Garbage collector : Uses Escape Analysis/Reference counting and give the programmer the ability to determine when to delete memory using the assignment operator
+
+(3) Compact Syntax : Ring is not line sensitive, you don't need to write ; or press ENTER to separate between statements
+
+(4) Using { } to access the object then using the object attributes and methods directly
+
+(5) Natural Programming : It's very easy to create natural interfaces using Ring based on OOP
+
+(6) Declarative Programming using Nested Structure
+
+The Ring programming language is designed based on my experience from using many other
+languages like C, C++, C#, Lua, PHP, Python, Ruby, Harbour, Basic and Supernova
+And the language comes with innovative features added to achieve the language goal
+
+* Applications programming language.
+* Productivity and developing high quality solutions that can scale.
+* Small and fast language that can be embedded in C/C++ projects.
+* Simple language that can be used in education and introducing Compiler/VM concepts.
+* General-Purpose language that can be used for creating domain-specific libraries, frameworks and tools.
+* Practical language designed for creating the next version of the Programming Without Coding Technology software.
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over Python and Ruby?
+
+What are the advantages to using Ring over Perl, PHP, Python or Ruby?
+=====================================================================
+
+(1) Ring is New and Innovative. The language will let you think different about programming.
+
+(2) Ring is Smaller. (Lessons learned from the Lua language)
+
+(3) Ring is Simple. (Lessons learned from the BASIC and Clipper/Harbour languages)
+
+(4) Ring is more Natural. (Lessons learned from the Supernova language)
+
+(5) Ring is more Declarative. (Lessons learned from REBOL and QML languages)
+
+(6) Ring Implementation is Transparent, Visual and comes with Rich Features.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over Tcl and Lua?
+
+What are the advantages to using Ring over Tcl or Lua?
+======================================================
+
+(1) Clean Code (More Natural)
+
+(2) More Features (A lot of useful programming paradigms)
+
+.. index:: 
+       pair: Frequently Asked Questions; What are the advantages to using Ring over C# or Java?
+
+What are the advantages to using Ring over C# or Java?
+======================================================
+
+(1) Compact Code (Clean and Natural), More Productivity and Flexibility.
+
+(2) Better support for Declarative Programming and Natural Programming
+
+
+.. index:: 
+       pair: Frequently Asked Questions; The documentation says functional programming is supported, but then this happens?
+
+
+The documentation says functional programming is supported, but then this happens?
+==================================================================================
+
+The question was about this code
+
+.. code-block:: ring
+
+       f = func {
+           a = 42
+           return func { return a }
+       }
+       innerF = call f()
+       call innerF()
+
+Output:
+
+.. code-block:: none
+
+       Using uninitialized variable : a In function _ring_anonymous_func_16601()
+
+The Answer:
+
+* It's Anonymous Functions, i.e. Not Closures.
+
+* Many developers asked about supporting Closures and during language development we may add new features that doesn't go against the language goals or spirit.
+
+* You can use classes and objects when you want to merge between the state and functions to provide a clear solution.
+
+* You can use Lists and put the anonymous function inside the List then return the list that contains the state and the function. Pass the list to the function when you use it.
+
+* You can use eval() and substr() to add the variable value directly to the anonymous function before return.
+
+* We protect you from other scopes when you define the function. In Ring we provided the Three Scopes Rule where at each point you have only at maximum three scopes (Global, Object Scope and Local Scope).
+
+* We don't get everything from everywhere to be like others! We don't need to do that. If we will think like that then we will create a very complex language or we will save our time and use other languages.
+
+* When you think about learning or studying a new language concentrate about (What is new?) and (What is better in this language?) to know when to use it. Don't compare a new language just released little months ago with languages started many years ago and expect to find everything that you used to have.
+
+* Each programming language miss features in other languages. The idea is not the Features. it's the spirit and ability behind all of the features together.
+
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why the ability to define your own languages Instead of just handing over the syntax so you can parse it using whatever code you like?
+
+Why the ability to define your own languages Instead of just handing over the syntax so you can parse it using whatever code you like?
+======================================================================================================================================
+
+It's innovation - You create natural statements without the need to learn about parsing. 
+You just use Classes which is intelligent decision (where later we can mix between classes to
+support more statements based on the context - We can change and translate the defined 
+statements and many more!). Also the statements are added in Ring World where you can use
+any Ring statement.
+
+.. index:: 
+       pair: Frequently Asked Questions; Why you can specify the number of loops you want to break out of?
+
+Why you can specify the number of loops you want to break out of?
+=================================================================
+
+The language supports programming in the small and programming in the large. The selection
+of what features to use is based on what are you going to do. Any programmer can write 
+poorly code in any language if he/she wants to do that. The idea is what must be done in 
+the language design to prevent errors without causing other problems like killing flexibility.
+
+Read some source code in the Linux Kernel and Ruby Implementation for example, You will find good
+usage for GOTO as a practical example that General Rules are not for All Use Cases and great
+programmers know when to break the rules. I'm not saying go and use GOTO or saying Ring add
+things like that. But the ability to break more than one loop and/or the ability to break the
+loop from sub functions is practical for small programs.
+
+Anyway these are some of the small new things added by the language (Not the big idea).
+
+.. index:: 
+       pair: Frequently Asked Questions; Why Ring uses 'See', 'Give', 'But' and 'Ok' Keywords?
+
+Why Ring uses 'See', 'Give', 'But' and 'Ok' Keywords?
+=====================================================
+
+See and Give are selected not to be "opposite actions" but to reflect what I want to do as a programmer.
+
+When I want to see something on the screen I use 'See'.
+
+When I want to give some input to the program I use 'Give'.
+
+My selection of "but" and "ok" is based on selecting keywords that can be written quickly.
+
+Also using "but" is easy to remember than elseif/elif/elsif where each language select a different keyword.
+
+In Ring 1.1 and later versions All of this is just an option.
+
+You can use 'Put' and 'Get' instead of 'See' and 'Give'
+
+You can use 'elseif' and 'end' insetad of 'But' and 'Ok'
+
+It's your choice. In Ring we have syntax flexibility where we provide more than one style.
+
+Also you can change the language keywords and operators.
+
+Also you can define new natural languages too.
+
+.. index:: 
+       pair: Frequently Asked Questions; Philosophy behind data types in Ring
+
+What is the philosophy behind data types in Ring?
+=================================================
+
+The Ring programming language is designed to be SMALL. 
+The language provides the basic constructs that you need to do anything!
+One of the goals is to keep the basic constructs simple and small as possible.
+
+Using Lists in Ring you can
+
+* Create Arrays (one data type)
+* Create Lists (Mix of data types)
+* Create Tree (Nested arrays)
+* Use String Index (Looks like Dictionary/Hash Table)
+
+The same principle is applied to Numbers
+
+* You can use the number for int value
+* You can use the number for double value
+* You can use the number for Boolean value (True/False)
+
+The sample principle is applied for Strings
+
+* You can use the string for storing one character 
+* You can use the string for storing text (one or many lines)
+* You can use the string for storing binary data
+* You can use the string for storing date
+* You can use the string for storing time
+* You can use the string for storing NULL values (empty strings)
+
+And we have Object Oriented Support + Operator Overloading where the programmer
+can define new data types and use them as default types defined by the language
+
+So We have
+
+* A small and simple language that someone can pick in little days
+* A fast language that provide primitive types (String - Number - List - Object)
+* A flexible language that can be extended using OOP to add new types according to the application domain
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What about the Boolean values in Ring?
+
+What about the Boolean values in Ring?
+======================================
+
+
+You can use true for 1 and false for 0
+
+when you test the result of Boolean expressions in your code.
+
+Just when you print the value using the see command you will see 1 for (true) and 0 for (false)
+
+Why ?
+
+Because Ring contains only 4 types of variables
+
+(1) Number
+
+(2) String
+
+(3) List
+
+(4) Object
+
+The first type (Number) is used to represent int, double and Boolean values.
+
+The second type (String) is used to represent char, array of characters, date and time.
+
+The third type (List) is used to represent Arrays of one type, Arrays of more than one type, Hash (Dictionary), Tree, etc.
+
+The object can be an object created from a Ring class (Any Class) or just a C Pointer that we get from calling a C/C++ function/method.
+
+Why ?
+
+The Ring is designed to give the programmer/developer the most simple constructs that can be used to do everything.
+The programmer/developer can customize the language by creating new classes (and use operator overloading) to get more types that he care about according to the problem domain.
+
+Why ?
+
+Because simple is better, and easy to learn and remember!
+And this provide flexibility to convert between high level types that can be represented using the same basic type
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Goal of including the "Main" function in Ring
+
+What is the goal of including the "Main" function in Ring?
+==========================================================
+
+The main function is very important, you need it when you want to write statements that uses 
+local variables instead of the Global scope.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       myfunc()
+       See "X value = " + X  # here I expect that x will be (10)
+                             # but I will get another value (6) because myfunc() uses x !
+       Func myfunc
+          for x = 1 to 5
+              See x + nl
+          next
+
+Output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       X value = 6
+
+Now using the Main function
+
+.. code-block:: ring
+
+       Func Main 
+          x = 10
+          myfunc()
+          See "X value = " + X                         
+
+       Func myfunc
+          for x = 1 to 5
+              See x + nl
+          next
+
+Output
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       X value = 10
+
+.. index:: 
+       pair: Frequently Asked Questions; List index start from 1
+
+Why the list index start from 1 in Ring?
+========================================
+
+It\'s about how we count in the real world, when we have three apples in our hand
+
+we say 1 2 3 
+
+We don\'t start from 0
+
+The question must be why the other languages start from 0 ?
+
+The answer is, because this is related to the machine and how we deal with values and memory address.
+
+Example
+
+we have array called myarray[5]
+
+In memory : myarray will have an address
+
+The first item will be stored in that address
+
+The second item will come after that address and so on
+
+Now when we need to point to the first item we need the address of myarray
+
+So we type myarray[0] because myarray + 0 result will still point to the first item
+
+for the second item myarray[1] because myarray + 1 result will point to the second item and so on
+
+In Low Level languages or languages near to the machine it\'s good to be like this
+
+But for high level language designed for applications it\'s better to be natural
+
+Example
+
+.. code-block:: ring
+
+       mylist = [1,2,3,4,5]
+       for x = 1 to len(mylist)
+               see x + nl
+       next
+
+In the previous example we start from 1 to the length of the array
+if the index starts from 0 we will write
+
+.. code-block:: ring
+
+       for x = 0 to len(mylist)-1
+
+or remember the for loop in other languages
+
+.. code-block:: ring
+
+       for(x=0 ; x<nMax ; x++ )
+
+You will use the < operator !
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why Ring is not case-sensitive
+
+Why Ring is not case-sensitive?
+===============================
+
+(1) To be more human-friendly
+
+(2) Like Ada, SQL, Pascal, Delphi, Visual Basic, Visual FoxPro, etc. 
+
+(3) To help in supporting Natural Language Programming.
+
+(4) To be able to select your favorite style when writing the language keywords
+
+.. code-block:: ring
+
+       see "lower case!"
+
+.. code-block:: ring
+
+       SEE "UPPER case!"
+
+.. code-block:: ring
+
+       See "First Letter is UPPER case!"
+
+(5) To avoid getting error message when writing quick tests then type "variable" instead of "Variable".
+
+(6) To avoid getting error message when you type "Dosomething()" instead of "doSomething()"
+
+(7) In Ring, No conflict between Variables, Method Names & Classes Names
+
+We can write person as variable name and Person as class name.
+
+.. code-block:: ring
+       
+       person = new Person     
+       class Person 
+               name address phone
+       
+
+.. index:: 
+       pair: Frequently Asked Questions; Why the Assignment operator uses Deep copy?
+
+Why the Assignment operator uses Deep Copy?
+===========================================
+
+"Because it's a poor tradeoff to add complexity for dubious performance gains, a good
+approach to deep vs. shallow copies is to prefer deep copies until proven otherwise."
+       , Steve McConnell, Code Complete 
+
+(1) It's more natural, When you use the assignment operator, You expect a deep copy.
+
+(2) If you don't need a deep copy, Just don't use it! 
+
+(3) The Ring language is designed to reduce references usage as much as possible.
+
+(4) The Ring language is designed to make using references simple and possible in special cases where this make sense.
+
+(5) We have references when this is natural, like passing lists and objects to functions,
+       creating objects (Like GUI Objects) from a C/C++ library, returning an object stored 
+       inside a list.
+
+(6) It is a feature, We can use it to create pure functions. The Value() function in the
+       stdlib uses this feature to pass lists & objects by value when we need this.
+
+(7) When we need references, It's recommended to create a class that manage sharing lists and objects.
+       
+(8) It's more safe at the application level to avoid many logical errors.
+
+(9) In Ring, we start without thinking about the little details and concentrate on the application, You
+       don't have to write the type (Dynamic Typing), You don't have to write explicit
+       conversions between numbers and strings (Weakly Typed) and you don't have to select
+       between using values or references, You don't have to write the scope (Lexical Scoping).
+
+(10) In Ring, we have smart garbage collector (Simple & Fast), We can delete the memory directly
+       at any time using the Assignment operator too. Reducing references usage or using them through
+       managers helps a lot to achieve this goal. by doing this we have full control.
+
+(11) If you want to create references and avoid creating a manager, 
+       You can use Object2Pointer() and Pointer2Object() functions
+       But It's not the Ring way "Spirit" to do things.
+
+.. index:: 
+       pair: Frequently Asked Questions; Constructor methods in Ring
+
+
+Is there constructor methods in Ring?
+=====================================
+
+When you create new object for example
+
+.. code-block:: ring
+
+       new point
+
+1 - Ring will allocate dynamic memory space to be used for the new object attributes that Ring doesn't know anything about them.
+
+2 - Ring will change the current local scope and the current object scope to use the object state created in step (1)
+
+3 - Ring will move the execution to the class Region (After the class name and before any methods)
+
+4 - Any Instructions/Code in the class region will be executed as any Ring code
+
+5 - Control is moved from the class region to the location of (new point) once we reach the end of the class region or we uses a Return command.
+
+So All attributes that added to the object are dynamic attributes, this mean that you can control what attributes will be added through the runtime.
+
+Example:
+
+.. code-block:: ring
+
+       $3D = False
+       see  new point 
+       $3D = True
+       see new point 
+
+       class point
+               x y
+               if not $3D return ok
+               z
+
+Output:
+
+.. code-block:: none
+
+       x: NULL
+       y: NULL
+       x: NULL
+       y: NULL
+       z: NULL
+
+You have an option to call init() method directly when you create a new object 
+
+This method can do anything with the object attributes as it will be called after creating the object and executing the class region code.
+
+
+.. code-block:: ring
+
+       p1 = new point3d(100,200,300)
+       see p1
+
+       class point3d
+               x y z
+               func init p1,p2,p3
+                       x=p1 y=p2 z=p3
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What happens when we create a new object?
+
+What happens when we create a new object?
+=========================================
+
+1- When you create an object, the class region code will be executed and you will have the object attributes based on the code in that region
+
+2- Ring don't care about the object methods until you start calling a method
+
+3- When you call a method, Ring will check the object class and the class parent (if you are using inheritance) and will collect the methods for you to be used now or later from any object that belong to the same class.
+
+4- Since methods are dynamic and each object get the method from the class, you can after creating objects, add new methods and use it with the object or any object created or will be created from the same class.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point {x=10 y=20 z=30}
+       o2 = new point {x=100 y=200 z =300}
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+       o2.print()
+
+       class point x y z
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       30
+       100
+       200
+       300
+
+.. index:: 
+       pair: Frequently Asked Questions; Getter and Setter Methods
+
+Can we use the attributes by accessing the Getter and Setter methods?
+=====================================================================
+
+Yes we can, The setter/getter methods are called automatically when you start using the attributes from outside the class
+Also you can call the methods instead of using the attributes. It's your choice.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Developer
+       o1.name = "Mahmoud"  see o1.name + nl
+       o1 { name = "Gal"  see name }
+       o1 { name = "Bert"  see name }
+
+       o1.setname("Marino")
+       see o1.getname()
+
+       Class Developer
+
+                       name language = "Ring Programming Language"
+
+                       func setname value
+                                       see "Message from SetName() Function!" + nl
+                                       name = value + " - " + language
+
+                       func getname
+                                       see "Message from GetName() Function!" + nl + nl
+                                       return "Mr. " + name + nl
+
+Output
+
+.. code-block:: none
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Mahmoud - Ring Programming Language
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Gal - Ring Programming Language
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Bert - Ring Programming Language
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Marino - Ring Programming Language
+
+.. index:: 
+       pair: Frequently Asked Questions; Search of global names while defining the class attributes
+
+Why should a search of global names be made while defining the class attributes?
+================================================================================
+
+The question is why we don't avoid conflicts with global variable names when we
+define the class attributes ?
+
+At first remember that using the optional $ mark in the global variables names solve
+the problem. Also using the Main function and avoiding global variables may help.
+
+The Answer:
+
+Ring is a dynamic language
+
+We can in the run-time determine the class attributes (Add/Remove) 
+
+We can execute (any code) while defining the class attributes
+
+Example (1)
+
+.. code-block:: ring
+
+       oPerson = new Person
+       Class Person
+          See "Welcome to the Ring language"
+
+Example (2)
+
+Customize attributes based on global variable value
+
+.. code-block:: ring
+
+       $debug = true
+       oPerson = new Person
+       see oPerson
+       Class Person
+           if $debug  date=date()  time=time() ok
+
+In the previous example when we have the $debug flag set to true, we will add the Date and Time
+attributes to the object state.
+
+Example (3)
+
+Store the object index based on global variable
+
+.. code-block:: ring
+
+       $ObjectsCount = 0
+       oPerson = new Person
+       see oPerson
+       oPerson2 = new Person
+       see oPerson2
+       Class Person
+             $ObjectsCount++
+             nIndex = $ObjectsCount
+
+Output:
+
+.. code-block:: ring
+
+       nindex: 1.000000
+       nindex: 2.000000
+
+Common Example: 
+
+* Connect to the database then get table columns (Using global Variable/Object).
+
+* Create class attributes based on the column names.
+
+* Later when you modify the database - you may don't need to modify your code.
+
+It's flexibility but remember that power comes with great responsibility.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Conflict between Global Variables and Class Attributes
+
+
+Why Ring doesn't avoid the conflict between Global Variables and Class Attributes Names?
+========================================================================================
+
+In this use case we have 
+
+1 - Global Variable defined without a special mark like $
+
+2 - Class contains Attributes defined using a special syntax (where we type the attribute name directly after the class)
+
+3 - The Attributes are defined in the class region that allows writing code and using global variables
+
+If I will accepted your proposal about changing how Ring find variables in the class region I must break one of the previous three features which will lead to more problems that are more important than this problem.
+
+I don't like changing the feature number (1) because I would like to keep Ring code more clean and let the programmer decide when to use $ or not.
+
+I don't like changing the feature number (2) because I like this feature and I don't like forcing the programmer to type
+self.attribute 
+
+I don't like changing the feature number (3) because it's very important in many applications to access global variables in the class region.
+
+So what was my decision ? 
+
+I decided to leave this case for the programmer who will decide what to do to avoid this special case
+
+1 - The programmer can avoid using global variables (Better) and can use the Main function (Optional)
+
+2 - The programmer can use $ before the variable name or any mark like global_ or g_
+
+3 - The programmer can use self.attribute after the class name to define the attributes 
+
+In general, for small programs you can use global variables and functions.
+For large programs, use classes and objects and small number of global variables or avoid them at all.
+
+.. index:: 
+       pair: Frequently Asked Questions; Where can I write a program and execute it?
+
+
+Where can I write a program and execute it?
+===========================================
+
+Run the Ring Notepad where you can write/execute programs.
+
+If you want to run programs using the command line
+
+Add Ring/bin folder to the path then
+
+.. code-block:: none
+       ring <filename.ring>|<filename.ringo>
+
+.. index:: 
+       pair: Frequently Asked Questions; How to get the file size using ftell() and fseek() functions?
+
+How to get the file size using ftell() and fseek() functions?
+=============================================================
+
+
+The next function can be used to get the file size without reading the file!
+
+.. code-block:: ring
+
+       func getFileSize fp
+              C_FILESTART = 0
+              C_FILEEND = 2
+              fseek(fp,0,C_FILEEND)
+              nFileSize = ftell(fp)
+              fseek(fp,0,C_FILESTART)
+              return nFileSize
+
+.. note:: The previous function take the fp (file pointer) as parameter, We can get the fp from opening the file using fopen() function.
+
+.. code-block:: ring
+
+       fp = fopen("filename","r")
+
+       see  "File Size : " + getFileSize(fp) + nl
+
+Another solution (Read the file)
+
+.. code-block:: ring
+
+       see len(read("filename"))
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to get the current source file path?
+
+How to get the current source file path?
+========================================
+
+We can use the next function to get the current source file path
+then we can add the path variable to the file name
+
+.. code-block:: ring
+
+       cPath = CurrentPath()
+       func currentpath
+               cFileName = filename()
+               for x = len(cFileName) to 1 step -1
+                       if cFileName[x] = "/"
+                               return left(cFileName,x-1)
+                       ok
+               next
+               return cFileName
+
+
+.. index:: 
+       pair: Frequently Asked Questions; What about predefined parameters or optional parameters in functions?
+
+What about predefined parameters or optional parameters in functions?
+=====================================================================
+
+if you want to use predefined parameters or optional parameters
+Just accept a list that works like hash/dictionary
+
+Example
+
+.. code-block:: ring
+
+       sum([ :a = 1, :b = 2])
+       sum([ :a = 1 ])
+       sum([ :b = 2 ])
+       func sum pList
+               if plist[:a] = NULL pList[:a] = 4 ok
+               if plist[:b] = NULL pList[:b] = 5 ok
+               see pList[:a] + pList[:b] + nl
+
+Output
+
+.. code-block:: none
+
+       3
+       6
+       6
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to print keys or values only in List/Dictionary?
+
+How to print keys or values only in List/Dictionary?
+====================================================
+
+
+If you want to print keys only or values only just select the index of the item (one or two).
+
+Example
+
+.. code-block:: ring
+
+
+       C_COUNTRY = 1
+       C_CITY = 2
+       mylist = [
+               :KSA = "Riyadh" ,
+               :Egypt = "Cairo"
+       ]
+
+       for x in mylist
+               see x[C_COUNTRY] + nl
+       next
+
+       for x in mylist
+               see x[C_CITY] + nl
+       next
+
+Output
+
+.. code-block:: none
+
+       ksa
+       egypt
+       Riyadh
+       Cairo
+
+.. index:: 
+       pair: Frequently Asked Questions; Why I get a strange result when printing nl with lists?
+
+Why I get a strange result when printing nl with lists?
+=======================================================
+
+In the next code
+
+.. code-block:: ring
+
+       list = 1:5        # list = [1,2,3,4,5]
+       see list + nl
+
+New Line will be added to the list then the list will be printed, the default print of the lists 
+will print a newline at the end, You added new newline and You have now 2 newlines to be printed.
+
+.. code-block:: ring   
+
+       See <Expr>
+
+The see command just print the final result of the expression, the expression will be evaluated as it
+
+.. code-block:: ring
+
+       nl = char(13) + char(10) # just a variable that you can change to anything !
+
+The + is an operator
+
+.. code-block:: none
+
+       string + string ---> new string
+       string + number ---> new string
+       number + number ---> new number
+       number + string ---> new number
+
+list + item ---> nothing new will be created but the item will be added to the same list
+
+Exception
+
+number + nl -> New String
+
+This exception is added to easily print numbers then new line.
+
+No need for this with printing lists because after printing the last item we already get a new line.
+
+.. index:: 
+       pair: Frequently Asked Questions; Could you explain the output of the StrCmp() function?
+
+Could you explain the output of the StrCmp() function?
+======================================================
+
+At first remember that you can check strings using '=' operator directly.
+
+.. code-block:: ring
+
+       see strcmp("hello","hello") + nl +
+       strcmp("abc","bcd") + nl +
+       strcmp("bcd","abc") + nl
+
+if the two strings are the same then it returns 0
+
+abc and bcd aren't the same. in the second line it returns -1 and in the third line it returns 1
+
+In the second line we compare between "abc" and "bcd"
+
+Not equal because the first letter in "abc" = "a" 
+and the first letter in "bcd" = "b"
+
+So we have "a" != "b" and "a" < "b"
+
+So we get output = -1
+
+In the third line we have "bcd" and "abc"
+
+the first letter in "bcd" is "b" and the first letter in "abc" is "a"
+
+So we have "b" != "a" and "b" > "a"
+
+So we get output = 1
+
+.. note:: ASCII("a") = 97 and ASCII("b") = 98 So "a" < "b" because 97 < 98
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to use many source code files in the project?
+
+How to use many source code files in the project?
+=================================================
+
+Example:
+
+I have the next folder
+
+.. code-block:: none
+
+       C:\LRing
+
+Contains the next files
+
+.. code-block:: none
+
+       C:\LRing\t1.ring
+       C:\LRing\mylib.ring
+       C:\LRing\libs\mylib2.ring
+
+The file t1.ring contains the next code
+
+.. code-block:: ring
+
+       load "mylib.ring"
+       load "libs\mylib2.ring"
+       myfunc()
+       test()
+
+The file mylib.ring contains the next code
+
+.. code-block:: ring
+
+       func myfunc
+               see "message from myfunc"+nl
+
+The file libs\mylib2.ring contains the next code
+
+.. code-block:: ring
+
+       func test
+               see "message from test" + nl
+
+from the folder C:\LRing
+
+If Ring is not added to the path you can add it or use the next command
+
+.. code-block:: none
+
+       set path=%path%;c:\ring\bin;
+
+Where c:\ring is the Ring folder
+
+Now run
+
+.. code-block:: none
+
+       Ring t1.ring
+
+Output
+
+.. code-block:: none
+
+       message from myfunc
+       message from test
+
+.. index:: 
+       pair: Frequently Asked Questions; Why this example use the GetChar() twice?
+
+Why this example use the GetChar() twice?
+=========================================
+
+The GetChar() function accept one character from the keyboard buffer
+
+In this example
+
+
+.. code-block:: ring
+
+
+       While True
+               See "
+                       Main Menu
+                       (1) Say Hello
+                       (2) Exit
+               "
+               Option = GetChar()
+               GetChar() GetChar()  # End of line
+               # the previous two lines can be replaced with the next line
+               # Give Option
+
+               if Option = 1
+                       see "Enter your name : " give cName
+                       see "Hello " + cName
+               else
+                       bye
+               ok
+       End
+
+We uses GetChar() Three times
+
+The first time we get the user option
+
+.. code-block:: ring
+
+       Option = GetChar()
+
+But in the second and the third times (We accept the new line characters from the buffer)
+
+.. code-block:: ring
+
+       GetChar() GetChar()  # End of line
+
+Example : when the user select the option number 1 then press ENTER
+
+We have Three Characters
+
+* The first character is : Number 1
+* The second character is : CHAR(13)
+* The third character is : CHAR(10)
+
+Because Windows uses CHAR(13) and CHAR(10) for each new line  ( i.e. CR+LF )
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to use NULL and ISNULL() function?
+
+How to use NULL and ISNULL() function?
+======================================
+
+when we try to use uninitialized variable in the Ring programming language, we get a clear runtime error message
+
+Example
+
+.. code-block:: ring
+
+       See x
+
+Output
+
+.. code-block:: none
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file tests\seeuninit.ring
+
+The same happens when you try to access uninitialized attributes
+
+Example
+
+.. code-block:: ring
+
+       o1 = new point
+       see o1
+       see o1.x
+       class point x y z
+
+Output
+
+.. code-block:: none
+
+       x: NULL
+       y: NULL
+       z: NULL
+
+       Line 3 Error (R24) : Using uninitialized variable : x
+       in file tests\seeuninit2.ring
+
+if you want to check for the error, just use Try/Catch/End
+
+.. code-block:: ring
+
+       Try
+               see x
+       Catch
+               See "Sorry, We can't use x!" + nl
+       Done
+
+Output
+
+.. code-block:: none
+
+       Sorry, We can't use x!
+
+Now we will talk about NULL and ISNULL()
+
+Since we get error message when we deal with uninitialized variables
+
+We can check these errors using Try/Catch/Done, So we uses NULL and ISNULL() for dealing with Strings.
+
+NULL is a variable contains an empty string
+
+ISNULL() is a function that returns true (1) if the input is an empty string or just a string contains "NULL"
+
+This because we need to test these values (empty strings) and strings contains "NULL" that sometimes come from external resource like DBMS.
+
+Example
+
+.. code-block:: ring
+
+       See IsNull(5) + nl +        # print 0
+       IsNull("hello") + nl +      # print 0
+       IsNull([1,3,5]) + nl +      # print 0
+       IsNull("") + nl +           # print 1
+       IsNull("NULL")              # print 1
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to print lists that contains objects?
+
+How to print lists that contains objects?
+=========================================
+
+In this example we will see how we can print a list contains objects.
+
+.. code-block:: ring
+
+       aList = [[1,2,3] , new point(1,2,3), new point(1,2,3)]
+       see "print the list" + nl
+       see alist
+       see "print the item (object)" + nl
+       see alist[2]
+       class point x y z
+               func init p1,p2,p3 x=p1 y=p2 z=p3
+
+Output
+
+.. code-block:: none
+
+       print the list
+       1
+       2
+       3
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+       print the item (object)
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to insert an item to the first position in the list?
+
+How to insert an item to the first position in the list?
+========================================================
+
+To insert an item we can use the insert(aList,nIndex,Value) function.
+
+.. code-block:: ring
+
+       aList = 1:5
+       insert(aList,0,0)
+       See aList # print numbers from 0 to 5
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to print new lines and other characters?
+
+How to print new lines and other characters?
+============================================
+
+To print new line we can use the nl variable.
+
+.. code-block:: ring
+
+       See "Hello" + nl
+
+or we can use multi-line literal as in the next example
+
+.. code-block:: ring
+
+       See "Hello
+       
+       "
+if we want to print other characters we can use the char(nASCII) function
+
+.. code-block:: ring
+
+       See char(109) + nl +    # print m
+           char(77)            # print M
+
+.. index:: 
+       pair: Frequently Asked Questions; Why we don't use () after the qApp class name?
+
+Why we don't use () after the qApp class name?
+==============================================
+
+When we use RingQt to create GUI application, we uses () after the 
+class name when we create new objects for example.
+
+.. code-block:: ring
+
+       new qWidget() { setWindowTitle("Hello World") resize(400,400) show() }
+
+but before doing that we create an object from the qApp class and we don't use () after that
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app = new qApp
+       {
+           win=new qWidget()
+           {
+               setwindowtitle(:test)
+               show()
+           }
+           exec()
+       }
+Using () after the class name means calling the init() method in the class and passing parameters to this method.
+
+If we used () while no init() method in the class we get the expected error message.
+
+The class qApp don't have this method while the other classes have it because they need it to 
+create an object using a function that return a pointer to that object and this pointer will
+be stored in an attribute called pObject, for more information see ring_qt.ring file
+which contains the classes.
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Why the window title bar is going outside the screen?
+
+Why the window title bar is going outside the screen?
+=====================================================
+
+When we write the next code
+
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app = new qApp
+       {
+               win=new qWidget()
+               {
+                     setwindowtitle(:test)
+                     setGeometry(0,0,200,200)
+                     show()
+               }
+               exec()
+       }
+I would expect that the window will run at the point (0,0) with (200,200) size but the actual 
+result is that the window title bar is going outside the screen.
+
+This is related to the behavior of Qt framework.
+
+The next code will avoid the problem
+
+.. code-block:: ring
+
+       load "guilib.ring"
+       new qApp {
+               new qWidget() {
+                       move(0,0)
+                       resize(200,200)
+                       show()
+               }
+               exec()
+       }
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to create an array of buttons in GUI applications?
+
+How to create an array of buttons in GUI applications?
+======================================================
+
+Check the next example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       App1 = new qApp {
+
+               win1 = new qWidget() {
+                       move(0,0)
+                       resize(500,500)
+                       new qPushButton(win1)
+                       {
+                               settext("OK")
+                               setclickevent("click()")
+                       }
+                       btn1 = new qPushButton(win1)
+                       {
+                               setgeometry(100,100,100,30)
+                               settext("Button1")
+                       }
+
+                       btn2 = new qPushButton(win1)
+                       {
+                               setgeometry(200,100,100,30)
+                               settext("Button2")
+                       }
+
+                       button = [btn1, btn2]
+                       show()
+               }
+
+               exec()
+
+       }
+
+       func click
+
+               button[1] { settext ("Button3") }
+               button[2] { settext ("Button4") }
+
+.. index:: 
+       pair: Frequently Asked Questions; How to Close a window then displaying another one?
+
+How to Close a window then displaying another one?
+==================================================
+
+This example demonstrates how to close a window and show another one
+
+.. code-block:: none
+
+       Load "guilib.ring"
+
+       app=new qApp
+       {
+               frmBefore=new Qwidget()
+               {
+                       setWindowTitle("before!")
+                       resize(300,320)
+                       move(200,200)
+
+                       button=new qPushButton(frmBefore)
+                       {
+                               setText("Close")
+                               setClickEvent("frmBefore.close() frmMain.show()")
+                       }
+
+                       show()
+               }
+
+               frmMain=new Qwidget()
+               {
+                       setWindowTitle("After!")
+                       resize(300,320)
+                       move(200,200)
+               }
+
+               exec()
+
+       }
+
+.. index:: 
+       pair: Frequently Asked Questions; How to create a Modal Window?
+
+How to create a Modal Window?
+=============================
+
+This example demonstrates how to create a modal window
+
+.. code-block:: ring
+
+       load "guilib.ring"
+       app=new qApp
+       {
+               frmStart=new Qwidget()
+               {
+                       setWindowTitle("The First Window")
+                       resize(300,320)
+                       move(200,200)
+               
+                       button=new qPushButton(frmStart)
+                       {
+                               setText("Show Modal Window")
+                               resize(200,30)
+                               setClickEvent("frmModal.show()")
+                       }
+
+                       new qPushButton(frmStart)
+                       {
+                               setText("Close Window")
+                               move(0,50)
+                               resize(200,30)
+                               setClickEvent("frmStart.Close()")
+                       }
+
+                       show()
+               }
+
+               frmModal =new Qwidget()
+               {
+                       setWindowTitle("Modal Window")
+                       resize(300,320)
+                       move(200,200)
+                       setparent(frmStart)
+                       setwindowmodality(true)
+                       setwindowflags(Qt_Dialog)
+               }
+
+               exec()
+
+       }
+
+Related Documents
+
+* http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html
+* http://doc.qt.io/qt-5/qt.html#WindowType-enum
+* http://doc.qt.io/qt-5/qwindow.html#setParent
+* http://doc.qt.io/qt-5/qt.html#WindowModality-enum
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How can I disable maximize button and resize window?
+
+How can I disable maximize button and resize window?
+====================================================
+
+Use the method setWindowFlags()
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app1 = new qapp {
+                       win1 = new qwidget() {
+                                       setwindowtitle("First")
+                                       setgeometry(100,100,500,500)
+
+                                       new qpushbutton(win1) {
+                                                       setgeometry(100,100,100,30)
+                                                       settext("close")
+                                                       setclickevent("app1.quit()")
+                                       }
+
+                                       new qpushbutton(win1) {
+                                                       setgeometry(250,100,100,30)
+                                                       settext("Second")
+                                                       setclickevent("second()")
+                                       }
+
+                                       showmaximized()
+                       }
+                       exec()
+       }
+
+       func second
+                       win2 = new qwidget() {
+                                       setwindowtitle("Second")
+                                       setgeometry(100,100,500,500)
+                                       setwindowflags(Qt_dialog)
+                                       show()
+                       }
+
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to use SQLite using ODBC?
+
+How to use SQLite using ODBC?
+=============================
+
+In Ring 1.1 and later versions we have native support for SQLite, so you don't need to use it through ODBC.
+
+Also we can access SQLite through RingQt.
+
+The answer to your question
+
+.. code-block:: ring
+
+       pODBC = odbc_init()
+       odbc_connect(pODBC,"DRIVER=SQLite3 ODBC Driver;Database=mydb.db;LongNames=0;"+
+                          "Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;")
+       odbc_execute(pODBC,"create table 'tel' ('ID','NAME','PHONE');")
+       odbc_execute(pODBC,"insert into 'tel' values ('1','Mahmoud','123456');")
+       odbc_execute(pODBC,"insert into 'tel' values ('2','Ahmed','123456');")
+       odbc_execute(pODBC,"insert into 'tel' values ('3','Ibrahim','123456');")
+       odbc_execute(pODBC,"select * from tel") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) 
+                       if x != nMax see " - " ok
+               next
+       end
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: none
+
+       Columns Count : 3
+
+       1 - Mahmoud - 123456
+       2 - Ahmed - 123456
+       3 - Ibrahim - 123456
+
+The program will create the file : mydb.db
+
+Note : when I print the odbc drivers I see the long list that includes
+
+.. code-block:: none
+
+       SQLite3 ODBC Driver - UsageCount=1
+       SQLite ODBC Driver - UsageCount=1       
+       SQLite ODBC (UTF-8) Driver - UsageCount=1
+
+And I'm using "SQLite3 ODBC Driver".
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Can I connect to dbase/harbour database?
+
+Can I connect to dbase/harbour database?
+========================================
+
+You can connect to any database using ODBC
+
+To connect to xbase files (*.DBF)
+
+.. code-block:: ring
+
+       See "Using DBF Files using ODBC" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"Driver={Microsoft dBase Driver (*.dbf)};"+
+                          "datasource=dBase Files;DriverID=277")
+       See "Select data" + nl
+       odbc_execute(pODBC,"select * from tel.dbf") 
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+                  See "Row data:" + nl
+                  for x = 1 to nMax
+                                  see odbc_getdata(pODBC,x) + " - "
+                  next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output 
+
+.. code-block:: none
+
+       Using DBF Files using ODBC
+       Connect to database
+       Select data
+       Columns Count : 3
+       Row data:
+       Ahmad - Egypt - 234567 - Row data:
+       Fady - Egypt - 345678 - Row data:
+       Shady - Egypt - 456789 - Row data:
+       Mahmoud - Egypt - 123456 - Close database...
+
+
+Also you can connect to a Visual FoxPro database (requires installing Visual FoxPro driver)
+
+.. code-block:: ring
+
+
+       See "ODBC test 6" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"Driver={Microsoft Visual FoxPro Driver};"+
+               "SourceType=DBC;SourceDB=C:\PWCT19\ssbuild\PWCTDATA\CH1\Data\mydata.dbc;") 
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from t38") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See "Row data:" + nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) + " - "
+               next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+.. index:: 
+       pair: Frequently Asked Questions; Why setClickEvent() doesn't see the object methods directly?
+
+Why setClickEvent() doesn't see the object methods directly?
+============================================================
+
+setClickEvent(cCode) take a string contains code. The code will be executed when the event happens.
+
+Ring support Many Programming Paradigms like Procedural, OOP, Functional and others.
+
+But when you support many paradigms at the language level you can't know which paradigm will be used so you have two options
+
+(1) Provide General Solutions that works with many programming paradigms.
+
+(2) Provide Many Specific solutions where each one match a specific paradigm.
+
+setClickEvent() and others belong to (General Solutions that works with many programming paradigms).
+
+You just pass a string of code that will be executed without any care about classes and objects.
+
+This code could be anything like calling a function, calling a method and setting variable value.
+
+Some other languages force you to use OOP and call methods for events.
+Also some other languages uses anonymous functions that may get parameters like the current object.
+
+Now we have the general solution (not restricted with any paradigm), In the future we may 
+add specific solutions that match specific paradigms (OOP, Functional, Declarative and Natural).
+
+.. index:: 
+       pair: Frequently Asked Questions; Why I get Calling Function without definition Error?
+
+Why I get Calling Function without definition Error?
+====================================================
+
+Each program follow the next order 
+
+1 - Loading Files
+2 - Global Variables and Statements
+3 - Functions
+4 - Packages, Classes and Methods
+
+So what does that mean ?
+
+(1) **** No Functions comes After Classes ****
+(2) **** No command is required to end functions/methods/classes/packages ****
+
+Look at this example
+
+.. code-block:: ring
+
+       See "Hello"
+       test()
+       func test 
+           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
+
+.. code-block:: ring
+
+       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
+
+.. code-block:: ring
+
+       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
+
+
+.. index:: 
+       pair: Frequently Asked Questions; Can Ring work on Windows XP?
+
+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 
+
+.. code-block:: none
+
+       /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
+
+
+.. index:: 
+       pair: Frequently Asked Questions; How to extend RingQt and add more classes?
+
+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)
+
+.. code-block:: c
+
+       #include "ring.h"
+
+       RING_FUNC(ring_ringlib_dlfunc)
+       {
+               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.
+
+.. code-block:: ring
+
+       See "Dynamic DLL" + NL
+       LoadLib("ringlib.dll")
+       dlfunc()
+
+Output
+
+.. code-block:: none
+
+       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
+
+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 
+
+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.
+
+.. index:: 
+       pair: Frequently Asked Questions; How to add Combobox and other elements to the cells of a QTableWidget?
+
+How to add Combobox and other elements to the cells of a QTableWidget?
+======================================================================
+
+Check the next code
+
+.. code-block:: ring
+
+       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()
+       }
+       
+.. index:: 
+       pair: Frequently Asked Questions; How to perform some manipulations on selected cells in QTableWidget?
+
+How to perform some manipulations on selected cells in QTableWidget?
+====================================================================
+
+Check the next sample
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       
+       New qApp {
+               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
+
+.. index:: 
+       pair: Frequently Asked Questions; Which of 3 coding styles are commonly used or recommended by the community?
+
+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
+
diff --git a/docs/en/target/fdeventcode.png b/docs/en/target/fdeventcode.png
new file mode 100644 (file)
index 0000000..7f8205c
Binary files /dev/null and b/docs/en/target/fdeventcode.png differ
diff --git a/docs/en/target/fdeventmethod.png b/docs/en/target/fdeventmethod.png
new file mode 100644 (file)
index 0000000..0751a58
Binary files /dev/null and b/docs/en/target/fdeventmethod.png differ
diff --git a/docs/en/target/fdlistitems.png b/docs/en/target/fdlistitems.png
new file mode 100644 (file)
index 0000000..7dad0a7
Binary files /dev/null and b/docs/en/target/fdlistitems.png differ
diff --git a/docs/en/target/fdms.png b/docs/en/target/fdms.png
new file mode 100644 (file)
index 0000000..5dfab69
Binary files /dev/null and b/docs/en/target/fdms.png differ
diff --git a/docs/en/target/fdsayhello1.png b/docs/en/target/fdsayhello1.png
new file mode 100644 (file)
index 0000000..2bf752b
Binary files /dev/null and b/docs/en/target/fdsayhello1.png differ
diff --git a/docs/en/target/fifteen2.png b/docs/en/target/fifteen2.png
new file mode 100644 (file)
index 0000000..3eb922c
Binary files /dev/null and b/docs/en/target/fifteen2.png differ
diff --git a/docs/en/target/files.txt b/docs/en/target/files.txt
new file mode 100644 (file)
index 0000000..de73593
--- /dev/null
@@ -0,0 +1,712 @@
+.. index:: 
+       single: Files; Introduction
+
+=====
+Files
+=====
+
+In this chapter we are going to learn about files functions.
+
+* Read()
+* Write()
+* Dir()
+* Rename()
+* Remove()
+* fopen()
+* fclose()
+* fflush()
+* freopen()
+* tempfile()
+* tempname()
+* fseek()
+* ftell()
+* rewind()
+* fgetpos()
+* fsetpos()
+* clearerr()
+* feof()
+* ferror()
+* perror()
+* fgetc()
+* fgets()
+* fputc()
+* fputs()
+* ungetc()
+* fread()
+* fwrite()
+* fexists()
+* Numbers and Bytes
+
+.. index:: 
+       pair: Files; Read File using Read()
+
+Read() Function
+===============
+
+We can read the file content using the Read() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Read(cFileName) ---> String contains the file content
+
+Example:
+
+.. code-block:: ring
+
+       see read("myfile.txt")
+
+The read function can read binary files too
+
+Example:
+
+.. code-block:: ring
+
+       see read("myapp.exe")
+
+
+.. index:: 
+       pair: Files; Write file using Write()
+
+Write() Function
+================
+
+We can write string to file using the Write() function
+
+The write function can write binary data to binary files.
+
+Syntax:
+
+.. code-block:: ring
+
+       Write(cFileName,cString)        # write string cString to file cFileName
+
+Example:
+
+.. code-block:: ring
+
+       # copy file
+       cFile = read("ring.exe")
+       write("ring2.exe",cFile)
+
+.. index:: 
+       pair: Files; Dir()
+
+Dir() Function
+==============
+
+We can get the folder contents (files & sub folders) using the Dir() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Dir(cFolderPath) ---> List contains files & sub folders.
+
+This function returns a list and each list item is a list of two items
+
+* File/sub folder name
+
+* Type (0 = File , 1 = Folder/Directory)
+
+Example:
+
+.. code-block:: ring
+
+       see "Testing DIR() " + nl
+       mylist = dir("C:\myfolder")
+       for x in mylist
+               if x[2] 
+                       see "Directory : " + x[1] + nl
+               else
+                       see "File : " + x[1] + nl
+               ok
+       next
+       see "Files count : " + len(mylist)
+
+.. index:: 
+       pair: Files; Rename()
+
+Rename() Function
+=================
+
+We can rename files using the Rename() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Rename(cOldFileName,cNewFileName) ---> Number ( Status: Success (0) , Error (-1) )
+
+Example:
+
+.. code-block:: ring
+
+       rename("file.txt","help.txt")
+
+.. index:: 
+       pair: Files; Remove()
+
+Remove() Function
+=================
+
+We can delete a file using the Remove() function
+
+
+Syntax:
+
+.. code-block:: ring
+
+       Remove(cFileName)
+
+Example:
+
+.. code-block:: ring
+
+       remove("test.txt")
+
+.. index:: 
+       pair: Files; Fopen()
+
+Fopen() Function
+================
+
+We can open a file using the Fopen() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fopen(cFileName,cMode) ---> File Handle
+
+=====  ==========================================
+Mode   Description
+=====  ==========================================
+"r"    Reading (The file must exist)
+"w"    Writing (create empty file / overwrite)
+"a"    Appends (create file if it doesn't exist)
+"r+"   update (reading/writing)
+"w+"   Create empty file (reading/writing)
+"a+"   reading & appending
+=====  ==========================================
+
+.. index:: 
+       pair: Files; Fclose()
+
+Fclose() Function
+=================
+
+When we open a file using fopen() function, we can close it
+using the Fclose() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fclose(file handle)
+
+.. index:: 
+       pair: Files; Fflush()
+
+Fflush() Function
+=================
+
+We can flushes the output buffer of a stream using the Fflush() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fflush(file handle)
+
+.. index:: 
+       pair: Files; Freopen()
+
+Freopen() Function
+==================
+
+We can open another file using the same file handle and at the same time close
+the old file 
+
+Syntax:
+
+.. code-block:: ring
+
+       Freopen(cFileName,cMode,file handle) ---> file handle
+
+Example:
+
+.. code-block:: ring
+
+       freopen("myprogoutput.txt","w+",stdout)
+       see "welcome" + nl
+       for x = 1 to 10
+               see x + nl
+       next
+
+       /*
+       ** Read : https://en.wikipedia.org/wiki/Device_file#Device_files
+       ** The next code is not portable, we can use iswindows() before 
+       ** using it and we can write special code for each operating system.
+       */
+
+       freopen("CON","w",stdout)       # For Microsoft Windows
+       see "Done" + nl                 # print to stdout again
+
+Output:
+
+.. code-block:: ring
+
+       # Output to stdout
+       Done
+
+       # Output to file : myprogoutput.txt
+       welcome
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: Files; Tempfile()
+
+Tempfile() Function
+===================
+
+The function Tempfile() creates a temp. file (binary).
+
+The file will be deleted automatically when the stream is closed
+
+Syntax:
+
+.. code-block:: ring
+
+       TempFile() ---> file handle
+
+.. index:: 
+       pair: Files; Tempname()
+
+Tempname() Function
+===================
+
+We can generate temp. file name using the Tempname() function
+
+The generated name will be different from the name of any existing file
+
+Syntax:
+
+.. code-block:: ring
+
+       Tempname() ---> generated file name as string
+
+.. index:: 
+       pair: Files; Fseek()
+
+Fseek() Function
+================
+
+We can set the file position of the stream using the Fseek() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fseek(file handle, nOffset, nWhence) ---> zero if successful
+
+The next table presents the nWhence values
+
+=====  ===============================
+Value  Description
+=====  ===============================
+0      Beginning of file
+1      Current position
+2      End of file
+=====  ===============================
+
+.. index:: 
+       pair: Files; Ftell()
+
+Ftell() Function
+================
+
+We can know the current file position of a stream using the Ftell() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Ftell(file handle) ---> file position as number
+
+.. index:: 
+       pair: Files; Rewind()
+
+Rewind() Function
+=================
+
+We can set the file position to the beginning of the file using the Rewind() function
+
+Syntax:
+
+.. code-block:: ring
+       
+       Rewind(file handle)
+
+.. index:: 
+       pair: Files; Fgetpos()
+
+Fgetpos() Function
+==================
+
+We can get handle to the current file position using the Fgetpos() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fgetpos(file handle) ---> position handle
+
+.. index:: 
+       pair: Files; Fsetpos()
+
+Fsetpos() Function
+==================
+
+We can set the current file position using the Fsetpos() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fsetpos(file handle,position handle)
+
+.. index:: 
+       pair: Files; Clearerr()
+
+Clearerr() Function
+===================
+
+We can clear the EOF error and the error indicators of a stream using the clearerr()
+function
+
+Syntax:
+
+.. code-block:: ring
+
+       Clearerr(file handle)
+
+.. index:: 
+       pair: Files; Feof()
+
+Feof() Function
+===============
+
+We can test the end-of-file indicator using the Feof() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Feof(file handle) ---> returns 1 if EOF and 0 if not
+
+.. index:: 
+       pair: Files; Ferror()
+
+Ferror() Function
+=================
+
+We can test the error indicator of a given stream using the Ferror() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Ferror(file handle) ---> returns 1 if error and 0 if not
+
+.. index:: 
+       pair: Files; Perror()
+
+Perror() Function
+=================
+
+We can print error message to the stderr using the Perror() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Perror(cErrorMessage)
+
+.. index:: 
+       pair: Files; Fgetc()
+
+Fgetc() Function
+================
+
+We can get the next character from the stream using the Fgetc() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fgetc(file handle) ---> returns character or EOF
+
+
+.. index:: 
+       pair: Files; Fgets()
+
+Fgets() Function
+================
+
+We can read new line from the stream using the Fgets() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fgets(file handle,nSize) ---> string
+
+The function stop when nSize characters are read, new line character is read or EOF.
+
+.. index:: 
+       pair: Files; Fputc()
+
+Fputc() Function
+================
+
+We can write a character to the stream using the Fputc() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fputc(file handle,cChar)
+
+.. index:: 
+       pair: Files; Fputs()
+
+Fputs() Function
+================
+
+We can write a string to the stream using the Fputs() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fputs(file handle,cString)
+
+
+.. index:: 
+       pair: Files; Ungetc()
+
+Ungetc() Function
+=================
+
+We can push a character to the stream using the Ungetc() function
+
+The character will be available for the next read
+
+Syntax:
+
+.. code-block:: ring
+
+       Ungetc(file handle,character)
+
+
+.. index:: 
+       pair: Files; Fread()
+
+Fread() Function
+================
+
+We can read data from a stream using the Fread() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fread(file handle,nSize)
+
+.. index:: 
+       pair: Files; Fwrite()
+
+Fwrite() Function
+=================
+
+We can write data to a stream using the Fwrite() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fwrite(file handle,cString)
+
+
+.. index:: 
+       pair: Files; Fexists()
+
+Fexists() Function
+==================
+
+We can check if a file exists using the Fexists() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Fexists(cFileName) ---> returns 1 if the file exists
+
+Example:
+
+.. code-block:: ring
+
+       see fexists("b:\mahmoud\apps\ring\ring.exe") + nl +
+           fexists("b:\mahmoud\apps\ring\ring2.exe") + nl 
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+
+.. index:: 
+       pair: Files; Example
+
+Example
+=======
+
+The next program test some of the file functions
+
+.. code-block:: ring
+
+       See "testing file functions" + nl
+
+       See "open file" + nl
+       fp = fopen(exefolder() + "../tests/scripts/s65.ring","r")
+
+       See "reopen" + nl
+       fp = freopen(exefolder() + "../tests/scripts/s78.ring","r",fp)
+       See "close file" + nl
+       fclose(fp)
+
+       see "temp file" + nl
+       fp = tempfile()
+       fclose(fp)
+
+       see "temp name" + nl
+       see tempname() + nl
+
+       remove(exefolder() + "../tests/scripts/mytest2.txt")
+       write(exefolder() + "../tests/scripts/tests1.txt","hello")
+       rename(exefolder() + "../tests/scripts/test1.txt",exefolder() +
+                                               "../tests/scripts/mytests2.txt")
+
+       see "print file" + nl
+       fp = fopen(exefolder() + "../samples/fromdoc/filefuncs.ring","r")
+       r = fgetc(fp)
+       while isstring(r)
+                       see r
+                       r = fgetc(fp)
+       end
+       fclose(fp)
+
+       see nl+"print line from the file" + nl
+       fp = fopen(exefolder() + "../samples/fromdoc/filefuncs.ring","r")
+       r = fgets(fp,33)
+       see r + nl
+       fclose(fp)
+       fp = fopen(exefolder() + "../tests/scripts/test78.txt","w+")
+       fseek(fp,0,2) # goto end of file
+       fputc(fp,"t")
+       fputc(fp,"e")
+       fputc(fp,"s")
+       fputc(fp,"t")
+       fputs(fp,"tests2")
+       fclose(fp)
+
+       see "print file" + nl
+       see read(exefolder() + "../tests/scripts/test78.txt")
+
+       fp = fopen(exefolder() + "../tests/scripts/test78.txt","r")
+       see "testing ungetc() " + nl
+       for x = 1 to 3
+                       r = fgetc(fp)
+                       see r + nl
+                       ungetc(fp,r)
+       next
+       fclose(fp)
+
+       see "testing fread() " + nl
+       fp = fopen(exefilename(),"rb")
+       r = fread(fp,100)
+       see r + nl
+       fclose(fp)
+
+       see "testing fwrite() " + nl
+       fp = fopen(exefolder() + "../tests/scripts/test1.txt","wb")
+       fwrite(fp,r)
+       fclose(fp)
+
+The next example print part of the content of a binary file
+
+.. code-block:: ring
+
+       see "Testing: fread()" +" FileName: "+ exefilename() +nl +nl
+       fp = fopen(exefilename(),"rb")
+       r = fread(fp,800)
+       for n =1 to len(r)
+               if isprint(substr(r, n, 1)) 
+                       see substr(r, n, 1) 
+               else
+                       see "." 
+               ok
+               ### 80 char per line
+               if n % 80 = 0  
+                       see nl
+               ok
+       next
+       fclose(fp)
+
+.. index:: 
+       pair: Files; Numbers and Bytes
+
+Numbers and Bytes
+=================
+
+The next functions to convert between Numbers and Bytes.
+
+* Int2Bytes()
+* Float2Bytes()
+* Double2Bytes()
+* Bytes2Int()
+* Bytes2Float()
+* Bytes2Double()
+
+Example:
+
+.. code-block:: ring
+
+       see "Test Int2Bytes() and Bytes2Int() - Value : 77" + nl
+       r = Int2Bytes(77)
+       see "Int Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Int(r) + nl
+       see "Test Float2Bytes() and Bytes2Float() - Value 77.12" + nl
+       r = Float2Bytes(77.12)
+       see "Float Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Float(r) + nl
+       see "Test Double2Bytes() and Bytes2Double() - Value 9999977.12345" + nl
+       r = Double2Bytes(9999977.12345)
+       see "Double Size : " + len(r) + nl
+       see r + nl
+       decimals(5)
+       see Bytes2Double(r) + nl
diff --git a/docs/en/target/findinfiles.png b/docs/en/target/findinfiles.png
new file mode 100644 (file)
index 0000000..5cb26be
Binary files /dev/null and b/docs/en/target/findinfiles.png differ
diff --git a/docs/en/target/flappybird.png b/docs/en/target/flappybird.png
new file mode 100644 (file)
index 0000000..073a20a
Binary files /dev/null and b/docs/en/target/flappybird.png differ
diff --git a/docs/en/target/formdesigner.png b/docs/en/target/formdesigner.png
new file mode 100644 (file)
index 0000000..edd4a37
Binary files /dev/null and b/docs/en/target/formdesigner.png differ
diff --git a/docs/en/target/formdesigner.txt b/docs/en/target/formdesigner.txt
new file mode 100644 (file)
index 0000000..0063c70
--- /dev/null
@@ -0,0 +1,204 @@
+.. index:: 
+       single: Form Designer; Introduction
+
+=======================
+Using the Form Designer
+=======================
+
+In this chapter we will learn about using the Form Designer.
+
+We can run the From Designer from Ring Notepad
+
+From the Menubar in Ring Notepad - View Menu - We can Show/Hide the Form Designer window.
+
+.. image:: rnotefd.png
+       :alt: Form Designer - Inside Ring Notepad
+
+Also we can run the Form Designer in another window.
+
+From the Ring Notepad - Tools Menu - Select the Form Designer.
+
+.. image:: formdesigner.png
+       :alt: Form Desigenr
+
+.. index:: 
+       pair: Form Designer; The Designer Windows
+
+The Designer Windows
+====================
+
+* Toolbox : To select controls to be added to the window.
+
+* Properties : To set the properties of the active window or controls.
+
+* Design Region : To select, move and resize the window and the controls.
+
+.. index:: 
+       pair: Form Designer; The Designer Windows
+
+The Toolbox
+===========
+
+We have many buttons.
+
+* Lock : We can use it to draw many controls of the same type quickly.
+
+* Select : We can use it to select a control in the Design Region
+
+* Controls Buttons : Select a control to be added to the window.
+
+.. index:: 
+       pair: Form Designer; The Properties
+
+The Properties
+==============
+
+* When we select the window or one control, We will have the selected object properties.
+
+* Also In the properties window we have a combobox to select the active control.
+
+* Some properties provide a button next to the property value. We can click on the button to get more options.
+
+* When we select more than one control, We will have options for multi-selection
+
+.. image:: fdms.png
+       :alt: Form Designer - Multiple-Selection
+
+.. index:: 
+       pair: Form Designer; Running Forms
+
+Running Forms
+=============
+
+When we save the form file (*.rform), The Form Designer will create two Ring files
+
+* The Controller Class
+* The View Class
+
+For example, if the form file is helloworld.rform 
+
+The form designer will generate two files
+
+* helloworldcontroller.ring
+* helloworldview.ring
+
+To run the program, Open the controller class file then click the Run button (CTRL+F5)
+
+.. tip:: When you open a form using Ring Notepad, the controller class will be opened automatically, So we can press (CTRL+F5) or click on the Run button while the form designer window is active.
+
+.. index:: 
+       pair: Form Designer; Events Code
+
+Events Code
+===========
+
+(1) Just type the method name in the event property. 
+
+.. image:: fdeventmethod.png
+       :alt: Form Designer - Event Method
+
+(2) Then write the method code in the
+controller class.
+
+.. image:: fdeventcode.png
+       :alt: Form Designer - Event Code
+
+In this example we write
+
+.. code-block:: ring
+
+       func CloseWindow
+               oView.win.close()
+
+Where inside the controller class, We uses the oView object to access the form.
+
+Another Example : 
+
+.. image:: fdsayhello1.png
+       :alt: Form Designer - Say Hello
+
+The Event Code
+
+.. code-block:: ring
+
+       func SayHello 
+               oView {
+                       LineEdit2.setText("Hello "+ LineEdit1.text() )
+               }
+
+
+.. index:: 
+       pair: Form Designer; Keyboard Shortcuts
+
+Keyboard Shortcuts
+==================
+
+After selecting one or group of controls
+
+* Use the Arrows (Up, Down, Left and Right) to move them around.
+* Shift + the Arrows (Up, Down, Left and Right) to Resize the controls.
+* Del button to delete the controls.
+* CTRL+SHIFT+V to Duplicate the controls.
+
+
+.. index:: 
+       pair: Form Designer; Menubar Designer
+
+Menubar Designer
+================
+
+From the Window properties we can open the Menubar Designer
+
+
+.. image:: menubardesigner.png
+       :alt: Form Designer - Menubar Designer
+
+.. index:: 
+       pair: Form Designer; Window Flags
+
+Window Flags
+============
+
+From the Window properties we can open the Window Flags window.
+
+
+.. image:: windowflags.png
+       :alt: Form Designer - Window Flags
+
+
+.. index:: 
+       pair: Form Designer; Entering Items
+
+Entering Items
+==============
+
+For some controls like the List Widget we can enter items separated by comma ','
+
+.. image:: fdlistitems.png
+       :alt: Form Designer - List Items
+
+
+.. index:: 
+       pair: Form Designer; Using Layouts
+
+Using Layouts
+=============
+
+(1) To use layouts, At first add the layout control to the window.
+
+(2) Use the window "Set Layout" property to determine the main layout.
+
+(3) From the layout properties determine the controls and the layout type.
+
+
+.. index:: 
+       pair: Form Designer; More Samples and Tests
+
+More Samples and Tests
+======================
+
+Check the folder : ring/applications/formdesigner/tests
+
+Online : https://github.com/ring-lang/ring/tree/master/applications/formdesigner/tests
+
+
diff --git a/docs/en/target/formdesignerandroid.png b/docs/en/target/formdesignerandroid.png
new file mode 100644 (file)
index 0000000..eac7ded
Binary files /dev/null and b/docs/en/target/formdesignerandroid.png differ
diff --git a/docs/en/target/formtranslation1.png b/docs/en/target/formtranslation1.png
new file mode 100644 (file)
index 0000000..992f34f
Binary files /dev/null and b/docs/en/target/formtranslation1.png differ
diff --git a/docs/en/target/foxringfuncsdoc.txt b/docs/en/target/foxringfuncsdoc.txt
new file mode 100644 (file)
index 0000000..27f22d4
--- /dev/null
@@ -0,0 +1,983 @@
+.. index:: 
+     single: FoxRing Functions Reference; Introduction
+
+===========================
+FoxRing Functions Reference
+===========================
+
+As a FoxPro developer, I started writing a class with some of the functions I used in FoxPro.
+
+The goal is to create as many functions as possible with the behavior similar to FoxPro functions.
+
+Developer: Jose Rosado
+
+.. index:: 
+     pair: FoxRing Functions Reference; FoxRing functions
+
+FoxRing functions
+=================
+
++-----------------------+-----------------------------------------------------------------------------------------------+
+| Function Name                |                               Description                                                     |
++=======================+===============================================================================================+
+| frAbs()              | Returns the absolute value of the specified numeric expression.                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAddBs()            | Adds a backslash (if needed) to a path expression.                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frALines()           | Creates an Array with the content of the specified string.                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAllTrim()          | Removes all leading and trailing spaces of the specified string.                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAsc()              | Returns the ANSI value for the leftmost character in a character expression.                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAt()               | Searches a character expression for the occurrence                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | of another character expression.                                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAtC()              | Searches a character expression for the ocurrence of another character expression without     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | regard for the case of these two expressions.                                                 |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frBetween()          | Determines whether the value of an expression is inclusively between the values of two        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | expressions of the same type.                                                                 |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frChr()              | Returns the character associated with the specified numeric ANSI code.                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frEmpty()            | Determines whether an expression evaluates to empty.                                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frFile()             | Checks if a file exists on disk.                                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frFileToStr()                | Returns the contents of a file as a character string.                                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frForceExt()         | Returns a string with the old file name extension replaced by a new extension.                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frForcePath()                | Returns a file name with a new path name substituted for the old one.                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frIif()              | Returns one of two values depending on the value of a logical expression.                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frInList()           | Determines whether an expression matches another expression in a list.                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frInt()              | Evaluates a numeric expression and returns the integer portion of the expression.             |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustDrive()                | Returns the drive letter from a complete path.                                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustExt()          | Returns the characters of a file extension from a complete path.                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustFName()                | Returns the file name portion of a complete path and file name.                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustPath()         | Returns the path portion of a complete path and file name.                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustStem()         | Returns the stem name (the file name before the extension)                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | from a complete path and file name.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frLen()              | Determines the number of characters in a character expression,                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | indicating the length of the expression.                                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frListToString()     | Creates a string with the string elements of an Array.                                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frLTrim()            | Removes all leading spaces or parsing characters from the                                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | specified character expression.                                                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frPadL()             | Returns a string from an expression, padded with spaces or characters to a                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | specified length on the left side.                                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frPadR()             | Returns a string from an expression, padded with spaces or characters to a                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | specified length on the right side.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frProper()           | Returns from a character expression a string capitalized as                                   |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | appropriate for proper names.                                                                 |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frReplicate()                | Returns a character string that contains a specified character                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | expression repeated a specified number of times.                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frRTrim()            | Removes all trailing spaces or parsing characters from                                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | the specified character expression.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSetIfEmpty()       | Set a Value into a variable if the variable value is empty, null or zero.                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSetSeparatorTo()   | Specifies the character for the numeric place separator.                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSpace()            | Returns a character string composed of a specified number of spaces.                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStr()              | Returns the character equivalent of a numeric expression.                                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStringToList()     | Creates a List with the content of the specified string.                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStrTran()          | Searches a character expression for a second character expression and                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | replaces each occurrence with a third character expression.                                   |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStuff()            | Returns a new character string replaced by a specified number of                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | characteres in a character expression with another character expression.                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSubStr()           | Returns a character string from the given character expression,                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | starting at a specified position in the character                                             |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | expression and continuing for a specified number of characters.                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frTransform()                | Returns a character string from an expression in a                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                      | format determined by a format code.                                                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frVal()              | Returns a numeric value from a character expression composed of numbers.                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frVarType()          | Returns the data type of an expression.                                                       |
++-----------------------+-----------------------------------------------------------------------------------------------+
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAbs() function
+
+frAbs() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lnReturnValue = frAbs(tnExpression)
+        * Description  : Returns the absolute value of the specified numeric expression.
+        *              :
+        * Arguments    : <tnExpression>
+        *              : Specifies the numeric expression whose absolute value frAbs()
+        *              : returns.
+        * Returns      : <lnReturnValue>
+        *              : Returns the absolute value of the specified numeric expression.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAsc() function
+
+frAsc() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lnReturnValue = frAsc(tcExpression)
+        * Description  : Returns the ANSI value for the leftmost character in
+        *              : a character expression.
+        * Arguments    : <tcExpression>
+        *              : Specifies the character expression containing the character 
+        *              : whose ANSI value frAsc() 
+        *              : returns. Any characters after the first character in 
+        *              : tcExpression are ignored by frAsc().
+        * Returns      : <lnReturnValue>
+        *              : returns the position of the character in the character 
+        *              : table of the current code page. 
+        *              : Every character has a unique ANSI value in the 
+        *              : range from 0 to 255.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAddBs() function
+
+frAddBs() function
+==================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frAddBs(tcPath)
+        * Description  : Adds a backslash (if needed) to a path expression.
+        *              :
+        * Arguments    : <tcPath>
+        *              : Specifies the path name to which to add the backslash.
+        *              :
+        * Returns      : <lcReturnValue> The path with the backslash.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAt() function
+
+frAt() function
+===============
+
+.. code-block:: none
+
+        * Syntax       : lnPos = frAt(tcToSearch, tcString, tnOccurrence)
+        * Description  : Searches a character expression for the occurrence of 
+        *              : another character expression. 
+        *              : The search performed by frAt() is case-sensitive.
+        *              :
+        * Arguments    : <tcToSearch>
+        *              : Specifies the character expression to search 
+        *              : for in <tcString>.
+        *              : <tcString> 
+        *              : Specifies the character expression to search 
+        *              : for <tcToSearch>. 
+        *              : <tnOccurrence> 
+        *              : Specifies which occurrence, first, second, third, 
+        *              : and so on, of <tcToSearch> to search for 
+        *              : in <tcString>. 
+        *              : By default, frAt() searches for the first occurrence 
+        *              : of <tcToSearch> (tnOccurrence = 1). 
+        * Returns      : Numeric. frAt() returns an integer indicating the 
+        *              : position of the first character for a 
+        *              : character expression or memo field within another 
+        *              : character expression or memo field, 
+        *              : beginning from the leftmost character. If the 
+        *              : expression or field is not found, or if 
+        *              : <tnOccurrence> is greater than the number of 
+        *              : times <tcToSearch> occurs in  <tcString>, frAt() 
+        *              : returns 0.
+
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAtC() function
+
+frAtC() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lnPos = frAtC(tcToSearch, tcString, tnOccurrence)
+        * Description  : Searches a character expression for the occurrence 
+        *              : of another character expression 
+        *              : without regard for the case of these two expressions.
+        *              :
+        * Arguments    : <tcToSearch>
+        *              : Specifies the character expression to search 
+        *              : for in <tcString>.
+        *              : <tcString> 
+        *              : Specifies the character expression to search 
+        *              : for <tcToSearch>. 
+        *              : <tnOccurrence> 
+        *              : Specifies which occurrence, first, second, third, 
+        *              : and so on, of <tcToSearch> to search for
+        *              : in tcString. 
+        *              : By default, frAtC() searches for the first occurrence 
+        *              : of <tcToSearch> (tnOccurrence = 1). 
+        * Returns      : Numeric. frAtC() returns an integer indicating the 
+        *              : position of the first character for a 
+        *              : character expression or memo field within 
+        *              : another character expression or memo field, 
+        *              : beginning from the leftmost character. If the 
+        *              : expression or field is not found, or if 
+        *              : <tnOccurrence> is greater than the number of 
+        *              : times <tcToSearch> occurs in <tcString>, frAtC()
+        *              : returns 0.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frChr() function
+
+frChr() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frChr(tnExpression)
+        * Description  : Returns the character associated with the specified numeric
+        *              :  ANSI code.
+        * Arguments    : <tnExpression>
+        *              : Specifies a number between 0 and 255 whose equivalent ANSI 
+        *              : character frChr() returns.
+        * Returns      : <lcReturnValue>
+        *              : Returns a single character corresponding to the numeric 
+        *              : position of the character in the
+        *              : character table of the current code page.
+        *              :
+        * Remarks      : tnExpression must be between 0 and 255
+
+.. index:: 
+     pair: FoxRing Functions Reference; frEmpty() function
+
+frEmpty() function
+==================
+
+.. code-block:: none
+
+        * Syntax       : llReturnValue = frEmpty(tuExpression)
+        * Description  : Determines whether an expression evaluates to empty.
+        *              :
+        * Arguments    : <tuExpression>
+        *              : Specifies the expression that EMPTY() evaluates. 
+        *              : You can specify an expression with Character, 
+        *              : Numeric, or logical type.
+        *              :
+        * Returns      : <llReturnValue> Logical
+
+.. index:: 
+     pair: FoxRing Functions Reference; frFile() function
+
+frFile() function
+================
+
+.. code-block:: none
+
+        * Syntax       : llReturnValue = frFile(tcFileName, tnFlag)
+        * Description  : Checks if the specified file exists on disk.
+        *              :
+        * Arguments    : <tcFileName>
+        *              : Specifies the name of the file to check. 
+        *              : tcFileName must include 
+        *              : the file extension. You can include a path with 
+        *              : the file name to 
+        *              : search for a file in a directory or on a drive 
+        *              : other than the current directory or drive. 
+        *              : 
+        *              : <tnFlag> 
+        *              : tnFlag was included for future compatibility.
+        *              : In this version, It always returns true whenever 
+        *              : the file exists on disk.
+        * Returns      : <llReturnValue> Logical
+        *              : True if file exists on disk.
+        *              : False if file doesn't exist on disk.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frFileToStr() function
+
+frFileToStr() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frFileToStr(tcFileName)
+        * Description  : Returns the contents of a file as a character string.
+        *              :
+        * Arguments    : <tcFileName>
+        *              : Specifies the name of the file whose contents are 
+        *              : returned as a character 
+        *              : string. If the file is in a directory other than 
+        *              : the current default directory, 
+        *              : include a path with the file name.
+        *              :
+        * Returns      : <lcReturnValue> 
+        *              : A character string with the content of the specified file.
+        *              :
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStr() function
+
+frStr() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frStr(tnValue, tnLen, tnDec)
+        * Description  : Returns the character equivalent of a numeric expression.
+        *              :
+        * Arguments    : <tnValue>
+        *              : Specifies the numeric expression to evaluate.
+        *              : 
+        *              : <tnLen>
+        *              : Specifies the length of the character string returned. 
+        *              : If tnLen is 0, tnLen defaults to 10 characters. 
+        *              : If tnLen < 0 returns one string with same length as the number.
+        *              : Note  
+        *              : If the expression contains a decimal point, 
+        *              : the length includes one character for
+        *              : the decimal point and one character 
+        *              : for each digit in the character string.
+        *              : 
+        *              : <tnDec> 
+        *              : Specifies the number of decimal places in the 
+        *              : character string returned. 
+        *              : To specify the number of decimal places using 
+        *              : tnDec, you must include nLength. If nDecimalPlaces is omitted,
+        *              : the number of decimal places defaults to zero (0). 
+        *              : 
+        * Returns      : Character data type. frStr() returns a character string 
+        *              : equivalent to the specified numeric expression. 
+        *              : Depending on certain conditions, frStr() can return the following: 
+        *              : If you specify fewer decimal places than exist in tnValue, 
+        *              : the return value is rounded up. To round results to the nearest 
+        *              : decimal place instead of upward, include the ROUND( ) function. 
+        *              : For more information, see ROUND( ) Function.
+        *              : If nExpression is an integer, and nLength is less than 
+        *              : the number of digits in nExpression, frStr( ) returns a string of 
+        *              : asterisks, indicating numeric overflow.
+        *              : If nExpression contains a decimal point, and nLength is equal 
+        *              : to or less than the number of digits to the left of the decimal
+        *              : point, frStr( ) returns a string of asterisks, 
+        *              : indicating numeric overflow.
+        *              : If nLength is greater than the length of the value evaluated 
+        *              : by nExpression, frStr( ) returns a character string padded with
+        *              : leading spaces.
+        *              : If nExpression has Numeric or Float type, and nLength 
+        *              : is less than the number of digits in nExpression, and , frStr( ) 
+        *              : returns a value using scientific notation. 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSetIfEmpty() function
+
+frSetIfEmpty() function
+=======================
+
+.. code-block:: none
+
+        * Syntax       : tuReturnValue = frSetIfEmpty(tuValue, tuNewValue)
+        * Description  : Set a Value into a variable if the variable 
+        *              : value is empty, null or zero.
+        * Arguments    : <tuValue>
+        *              : The value to evaluate.
+        *              :
+        *              : <tuNewValue>
+        *              : The value to set if tuValue is empty.
+        *              :
+        * Returns      : tuNewValue if tuValue is empty, otherwise 
+        *              : returns the original value.
+        * Remarks      : This function doesn't exist in VFP.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSpace() function
+
+frSpace() function
+================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frSpace(tnSpaces)
+        * Description  : Returns a character string composed of a 
+        *              : specified number of spaces.
+        * Arguments    : <tnSpaces>
+        *              : Specifies the number of spaces that frSpace() returns.
+        *              :
+        * Returns      : <lcReturnValue> 
+        *              : Character
+
+.. index:: 
+     pair: FoxRing Functions Reference; frInList() function
+
+frInList() function
+===================
+
+.. code-block:: none
+
+        * Syntax       : llReturnValue = frInList(tuExpression, taList)
+        * Description  : Determines whether an expression matches another 
+        *              : expression in a set of expressions.
+        * Arguments    : <tuExpression>
+        *              : Specifies the expression frInList() searches for in the List.
+        *              :
+        *              : <taList>
+        *              : Specifies the List of expressions to search. 
+        *              : You must include at least one element in the list.
+        *              : The expressions in the list of expressions needn't to be 
+        *              : of the same data type. 
+        *              :
+        * Returns      : <luReturnValue> Null or logical value.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frForcePath() function
+
+frForcePath() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frForcePath(tcFileName, tcPath)
+        * Description  : Returns a file name with a new path name 
+        *              : substituted for the old one.
+        * Arguments    : <tcFileName>
+        *              : Specifies the file name (with or without a path or extension), 
+        *              : which will get a new path.
+        *              : <tcPath>
+        *              : Specifies the new path for tcFileName.
+        *              :
+        * Returns      : <lcReturnValue> 
+        *              : Returns a file name with a new path name 
+        *              : substituted for the old one.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frAllTrim() function
+
+frAllTrim() function
+====================
+
+.. code-block:: none
+
+       Syntax  : lcReturnValue = frAllTrim(tcExpression, tcCharacter)
+
+
+.. index:: 
+     pair: FoxRing Functions Reference; frLTrim() function
+
+frLTrim() function
+==================
+
+.. code-block:: none
+
+       Syntax  : lcRet = frLTrim(tcExpression, tcCharacter)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustDrive() function
+
+frJustDrive() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frJustDrive(tcPath)
+        * Description  : Returns the drive letter from a complete path.
+        *              :
+        * Arguments    : <tcPath>
+        *              : Specifies the complete path name for 
+        *              : which you want only the drive.
+        * Returns      : <lcReturnValue> 
+        *              : Returns the drive letter from a complete path.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustExt() function
+
+frJustExt() function
+====================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frJustExt(tcPath)
+        * Description  : Returns the characters of a file extension 
+        *              : from a complete path.
+        * Arguments    : <tcPath>
+        *              : Specifies the name, which may include the full path, 
+        *              : of the file for which you want only the extension. 
+        * Returns      : <lcReturnValue> 
+        *              : Returns the drive characters of a file extension
+        *              : from a complete path.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustStem() function
+
+frJustStem() function
+=====================
+
+.. code-block:: none
+
+        * Syntax       : lcReturnValue = frJustStem(tcPath)
+        * Description  : Returns the stem name (the file name before the extension)
+        *              : from a complete path and file name.
+        * Arguments    : <tcPath>
+        *              : Specifies the name (including path) of the file 
+        *              : for which you want only the stem. 
+        * Returns      : <lcReturnValue> 
+        *              : Returns the stem name of a file from a complete path.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frRTrim() function
+
+frRTrim() function
+==================
+
+.. code-block:: none
+
+        Syntax : lcRet = frRTrim(tcExpression, tcCharacter)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustPath() function
+
+frJustPath() function
+=====================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frJustPath(tcExpression)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frForceExt() function
+
+frForceExt() function
+=====================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frForceExt(tcFileName, tcNewExtension)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frALines() function
+
+frALines() function
+===================
+
+.. code-block:: none
+
+       Syntax  : tnReturnValue = frALines(taList, tcExpression, tcSeparator)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frJustFName() function
+
+frJustFName() function
+================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frJustFName(tcExpression)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frPadL() function
+
+frPadL() function
+=================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frPadL(tcString, tnLen, tcChar)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frPadR() function
+
+frPadR() function
+=================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frPadR(tcString, tnLen, tcChar)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frProper() function
+
+frProper() function
+===================
+
+.. code-block:: none
+
+        * Syntax       : tcReturnValue = frProper(tcExpression)
+        * Description  : Returns from a character expression a string 
+        *              : capitalized as appropriate for proper names.
+        * Arguments    : <tcExpression>
+        *              : Specifies the character expression from which 
+        *              : frProper() returns a capitalized character string.
+        * Returns      : <tcReturnValue> 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frReplicate() function
+
+frReplicate() function
+======================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frReplicate(tcString, tnTimes)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frLen() function
+
+frLen() function
+================
+
+.. code-block:: none
+
+       Syntax  : tnReturnValue = frLen(tcString)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStuff() function
+
+frStuff() function
+==================
+
+.. code-block:: none
+
+        * Syntax       : tcReturnValue = frStuff(tcExpression, tnStartRep,
+                                                 tnCharRep, tcToReplace)
+        * Description  : Returns a new character string replaced by a 
+        *              : specified number of characters in a character 
+        *              : expression with another character expression.
+        *              :
+        * Arguments    : <tcExpression>
+        *              : Specify the character expression in which the replacement occurs.
+        *              : 
+        *              : <tnStartRep>
+        *              : Specify the position in <tcExpression> where the replacement begins.
+        *              : 
+        *              : <tnCharRep>
+        *              : Specifies the number of characters to be replaced.
+        *              : If <tnCharRep> is 0, the replacement string 
+        *              : <tcToReplace> is inserted into <tcExpression>.
+        *              : 
+        *              : <tcToReplace>
+        *              : Specifies the replacement character expression. 
+        *              : If <tcToReplace> is an empty string, the number of 
+        *              : characters specified by <tnCharRep> are removed from <tcExpression>.
+        *              :
+        * Returns      : Character 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSubStr() function
+
+frSubStr() function
+===================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frSubStr(tcString, tnInitialPosition, tnNumberBytes)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStrTran() function
+
+frStrTran() function
+====================
+
+.. code-block:: none
+
+       Syntax  : tcReturnValue = frStrTran(tcString, tcOldString, tcNewString)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frListToString() function
+
+frListToString() function
+=========================
+
+.. code-block:: none
+
+        * Syntax       : lcRet = frListToString(taList)
+        * Remarks      : This function doesn't exist in VFP.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frInt() function
+
+frInt() function
+================
+
+.. code-block:: none
+
+       Syntax          : lnInt = frInt(tnExpression)
+
+.. index:: 
+     pair: FoxRing Functions Reference; frStringToList() function
+
+frStringToList() function
+=========================
+
+.. code-block:: none
+
+        * Syntax       : laList = frStringToList(tcExpression)
+        * Remarks      : This function doesn't exist in VFP.
+
+.. index:: 
+     pair: FoxRing Functions Reference; frIIf() function
+
+frIIf() function
+================
+
+.. code-block:: none
+
+        * Syntax       : luReturnValue = frIIf(tlExpression, tuReturnIfTrue, tuReturnIfFalse)
+        * Description  : Returns one of two values depending on the 
+        *              : value of a logical expression.
+        * Arguments    : <tlExpression>
+        *              : Specifies the logical expression that frIIf() evaluates.
+        *              :
+        *              : <tuReturnTrue>, <tuReturnFalse>
+        *              : If tlExpression evaluates to True, tuReturnIfTrue is 
+        *              : returned and tuReturnIfFalse is not evaluated. 
+        *              : If tlExpression evaluates to False or Null, tuReturnIfFalse is 
+        *              : returned and tuReturnIfTrue is not evaluated.
+        *              : 
+        * Returns      : <luReturnValue> Defined by <tuReturnIfTrue> or <tuReturnIfFalse>
+
+.. index:: 
+     pair: FoxRing Functions Reference; frVal() function
+
+frVal() function
+================
+
+.. code-block:: none
+
+        * Syntax       : luReturnValue = frVal(tcExpression)
+        * Description  : Returns a numeric value from a character expression
+        *              : composed of numbers
+        * Arguments    : <tcExpression>
+        *              : Specifies a character expression composed of up to 16 numbers.
+        *              :
+        * Returns      : <tnValue>
+        *              : Return a numeric value. 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frBetween() function
+
+frBetween() function
+====================
+
+.. code-block:: none
+
+        * Syntax       : luReturnValue = frBetween(tuTestValue, tuLowValue, tuHighValue)
+        * Description  : Determines whether the value of an expression 
+        *              : is inclusively between the 
+        *              : values of two expressions of the same type.
+        *              :
+        * Arguments    : <tuTestValue>
+        *              : Specifies an expression to evaluate.
+        *              :
+        *              : <tuLowValue>
+        *              : Specifies the lower value in the range.
+        *              :
+        *              : <tuHighValue>
+        *              : Specifies the higher value in the range.
+        *              :
+        * Returns      : <luReturnValue>
+        *              : Returns a logical oder null value. 
+
+.. index:: 
+     pair: FoxRing Functions Reference; frSetSeparatorTo() function
+
+frSetSeparatorTo() function
+===========================
+
+.. code-block:: none
+
+        * Syntax       : frSetSeparatorTo(tuExpression)
+        * Description  : Specifies the character for the numeric place separator.
+        *              :
+        * Arguments    : <tuExpression>
+        *              : Specifies the character for the numeric place separator. 
+        *              :
+        *              : Use frSetSeparatorTo() to change the numeric place 
+        *              : separator from de default, for example space " " or a comma ",".
+        *              : Issue frSetSeparatorTo(Null) to reset the value to its default.
+        *              :
+        * Returns      : None
+
+.. index:: 
+     pair: FoxRing Functions Reference; frTransform() function
+
+frTransform() function
+======================
+
+.. code-block:: none
+
+        * Syntax       : tcReturnValue = frTransform(tuExpression, tcFormatCodes)
+        * Description  : Returns a character string from an expression in a 
+        *              : format determined by a format code.
+        * Arguments    : <tuExpression>
+        *              : Specifies the expression to format.
+        *              :
+        *              : <tcFormatCodes>               
+        *              : Specifies one or more format codes that determine how to
+        *              : format the expression. 
+        *              : 
+        * Returns      : <tcReturnValue>
+
+The following table lists the available format codes for tcFormatCodes.
+
+.. code-block:: none
+
+        --------------------------------------------------------------------------
+         Format Code   Description
+        --------------------------------------------------------------------------
+         @!            Converts an entire character string to uppercase.
+         @T            Trims leading and trailing spaces from character values.
+         @B            Left-justifies Numeric data within the display region.
+         @L            Pads numeric and string data with leading zeros.
+         @C            Appends CR to positive numeric values to indicate a credit.
+         @X            Appends DB to negative numeric values to indicate a debit.
+        --------------------------------------------------------------------------
+
+.. index:: 
+     pair: FoxRing Functions Reference; frVarType() function
+
+frVarType() function
+====================
+
+.. code-block:: none
+
+        * Syntax       : lcRet = frVarType(tuExpression)
+        * Description  : Returns the data type of an expression.
+        *              :
+        * Arguments    : <tuExpression>
+        *              : Expecifies the expression for which the data type is returned.
+        *              :  frVartype() returns a
+        *              : single character indicating the data type of the expression. 
+        *              : The following table lists the characteres that frVarType() 
+        *              : returns for each data type.
+        *              :
+        *              : -------------------   -------------------------------------
+        *              : Return Value          Data Type
+        *              : -------------------   -------------------------------------
+        *              : C                     Character
+        *              : N                     Numeric
+        *              : A                     List 
+        *              : O                     Object 
+        *              : U                     Undefined type
+        *              : -------------------   -------------------------------------
+        *              :
+        * Returns      : Character 
+
+.. index:: 
+     pair: FoxRing Functions Reference; Example
+
+Example
+=======
+
+.. code-block:: ring
+
+       Load "foxring.ring"
+
+
+       mf = new frFunctions
+
+       /*----------------------------------------------------------*/
+        * frProper() samples
+       /*----------------------------------------------------------*/
+
+       lcStr1 = "ring is a good language"
+       ?mf.frProper(lcStr1)
+       ?mf.frProper(Upper(lcStr1))
+
+
+       /*----------------------------------------------------------*/
+        * frStuff() samples
+       /*----------------------------------------------------------*/
+
+       lcStr1 = "abcdefghijklm"
+       lcStr2 = "12345" 
+
+       // insert
+       ?mf.frStuff(lcStr1, 4, 0, lcStr2)     
+       // replace
+       ?mf.frStuff(lcStr1, 4, 3, lcStr2)     
+       // delete
+       ?mf.frStuff(lcStr1, 4, 6, "")     
+       // replace and insert
+       ?mf.frStuff(lcStr1, 4, 1, lcStr2)     
+       // replace and delete
+       ?mf.frStuff(lcStr1, 4, 4, lcStr2)     
+       // replace, delete rest
+       ?mf.frStuff(lcStr1, 4, Len(lcStr1), lcStr2)   
+
+       /*----------------------------------------------------------*/
+
+
+
+       ?mf.frAbs(-45)      
+       ?mf.frAbs(10-30)    
+       ?mf.frAbs(30-10)    
+
+       lcNumber1 = 40
+       lcNumber2 = 2
+
+       ?mf.frAbs(lcNumber2-lcNumber1)  
+
+
+
+
+       lcCompletFileName = "C:\ring\docs\source\contribute.txt"
+
+       ?mf.frFile(lcCompletFileName, Null)
+       if mf.frFile(lcCompletFileName, Null) {
+         ?mf.frFileToStr(lcCompletFileName)
+       else
+         ?"File does not exist"
+       }
+
+       lcNewPath = "C:\ring_2\docs\source\"
+       ?mf.frJustExt(lcCompletFileName)
+       ?mf.frJustDrive(lcCompletFileName)
+       ?mf.frJustStem(lcCompletFileName)
+       ?mf.frForcePath(lcCompletFileName, lcNewPath)
+       ?mf.frTransform("    Ring is a good language    ", 
+                       "@! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") 
+       ?mf.frAllTrim("    Ring is a good language    ", Null) 
+       ?mf._version
+       lnValue = 3125.54
+       ?mf.frTransform(lnValue, "@B")+ "Euros"
+       ?mf.frTransform(lnValue, "@C 9999,999,999,999.999")
+       mf.frSetSeparatorTo(" ")
+       ?mf.frTransform(lnValue, "9999,999,999,999.999")
+       ?mf.frInt(lnValue)
+       ?mf.frForceExt("teste", "dbf")
+       // Format "@L" Added into frTransform() function
+       ?mf.frTransform("123", "@L 999999")
+       ?mf.frTransform(123, "@L 999999")
+
diff --git a/docs/en/target/fp.txt b/docs/en/target/fp.txt
new file mode 100644 (file)
index 0000000..43658c8
--- /dev/null
@@ -0,0 +1,293 @@
+.. index:: 
+       single: Functional Programming; Introduction
+
+======================
+Functional Programming
+======================
+
+In previous chapters we learned about Functions and Recursion.
+
+In this chapter we are going to learn about more Functional Programming (FP) concepts like
+
+* Pure Functions
+* First-class functions
+* Higher-order functions
+* Anonymous and nested functions.
+* Equality of functions
+
+.. index:: 
+       pair: Functional Programming; Pure Functions
+
+
+Pure Functions
+==============
+
+We can create pure functions (functions that doesn't change the state) by the help of the assignment operator to
+copy variables (Lists & Objects) by value to create new variables instead of working on the original data that are passed
+to the function by reference.
+
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3,4,5]
+               aList2 = square(aList)
+               see "aList" + nl
+               see aList
+               see "aList2" + nl
+               see aList2
+
+       Func Square aPara
+               a1 = aPara              # copy the list
+               for x in a1
+                       x *= x
+               next
+               return a1               # return new list
+               
+Output:
+
+.. code-block:: ring
+
+       aList
+       1
+       2
+       3
+       4
+       5
+       aList2
+       1
+       4
+       9
+       16
+       25
+
+
+.. index:: 
+       pair: Functional Programming; First-Class Functions
+
+First-class Functions
+=====================
+
+Functions inside the Ring programming language are first-class citizens, you can pass functions as parameters, return them as
+value or store them in variables.
+
+We can pass/return the function by typing the function name as literal like "FunctionName" or :FunctionName for example.
+
+We can pass/return functions using the variable that contains the function name.
+
+We can call function from variables contains the function name using the Call command
+
+Syntax:
+
+.. code-block:: ring
+
+       Call Variable([Parameters])
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               see "before test2()" + nl
+               f = Test2(:Test)
+               see "after test2()" + nl
+               call f()
+
+       Func Test
+               see "Message from test!" + nl
+
+       Func Test2 f1
+               call f1()
+               See "Message from test2!" + nl
+               return f1       
+
+Output:
+
+.. code-block:: ring
+
+       before test2()
+       Message from test!
+       Message from test2!
+       after test2()
+       Message from test!
+
+.. index:: 
+       pair: Functional Programming; Higher-order Functions
+
+Higher-order Functions
+======================
+
+Higher-order functions are the functions that takes other functions as parameters.
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               times(5,:test)
+
+       Func Test
+               see "Message from the test function!" + nl
+
+       Func Times nCount,F
+
+               for x = 1 to nCount
+                       Call F()
+               next    
+
+Output:
+
+.. code-block:: ring
+
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+
+.. index:: 
+       pair: Functional Programming; Anonymous and Nested Functions
+
+Anonymous and Nested Functions
+==============================
+
+Anonymous Functions are functions without names that can be passed as parameters to other functions or stored in variables.
+
+Syntax:
+
+.. code-block:: ring
+
+       Func [Parameters] { [statements] }
+
+Example:
+
+.. code-block:: ring
+
+       test( func x,y { 
+                               see "hello" + nl
+                               see "Sum : " + (x+y) + nl
+                      } )
+
+       new great { f1() }
+
+       times(3, func { see "hello world" + nl } )
+
+       func test x
+               call x(3,3)
+               see "wow!" + nl
+
+       func times n,x
+               for t=1 to n
+                       call x()
+               next
+
+       Class great
+               func f1
+                       f2( func { see "Message from f1" + nl } )
+
+               func f2 x
+                       call x()
+
+Output:
+
+.. code-block:: ring
+
+       hello
+       Sum : 6
+       wow!
+       Message from f1
+       hello world
+       hello world
+       hello world
+
+Example:
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3,4]
+               Map (aList , func x { 
+                                       return x*x 
+                                   } )
+               see aList
+               aList = [4,9,14,25]
+               Map(aList, :myfilter )
+               see aList
+               aList = [11,12,13,14]
+               Map (aList , func x {
+                       if x%2=0
+                               return "even"
+                       else
+                               return "odd"
+                       ok
+               })
+               see aList
+
+       Func myfilter x
+               if x = 9
+                       return "True"
+               else
+                       return "False"
+               ok
+
+       Func Map aList,cFunc
+               for x in aList
+                       x = call cFunc(x)
+               next
+
+Output:
+
+.. code-block:: ring
+
+       1
+       4
+       9
+       16
+       False
+       True
+       False
+       False
+       odd
+       even
+       odd
+       even
+
+.. index:: 
+       pair: Functional Programming; Equality of functions
+
+Equality of functions
+=====================
+
+We can test if function = function or not using the '=' or '!=' operators
+
+Example:
+
+.. code-block:: ring
+
+       f1 = func { see "hello" + nl }
+
+       f2 = func { see "how are you?" + nl }
+
+       f3 = f1
+
+       call f1()
+       call f2()
+       call f3()
+
+       see (f1 = f2) + nl
+       see (f2 = f3) + nl
+       see (f1 = f3) + nl
+
+Output:
+
+.. code-block:: ring
+
+       hello
+       how are you?
+       hello
+       0
+       0
+       1
+
diff --git a/docs/en/target/freeglutshot1.png b/docs/en/target/freeglutshot1.png
new file mode 100644 (file)
index 0000000..51d4040
Binary files /dev/null and b/docs/en/target/freeglutshot1.png differ
diff --git a/docs/en/target/freeglutshot2.png b/docs/en/target/freeglutshot2.png
new file mode 100644 (file)
index 0000000..e054661
Binary files /dev/null and b/docs/en/target/freeglutshot2.png differ
diff --git a/docs/en/target/freeglutshot3.png b/docs/en/target/freeglutshot3.png
new file mode 100644 (file)
index 0000000..66d9fc3
Binary files /dev/null and b/docs/en/target/freeglutshot3.png differ
diff --git a/docs/en/target/freeglutshot4.png b/docs/en/target/freeglutshot4.png
new file mode 100644 (file)
index 0000000..5bdf74c
Binary files /dev/null and b/docs/en/target/freeglutshot4.png differ
diff --git a/docs/en/target/freeglutshot5.png b/docs/en/target/freeglutshot5.png
new file mode 100644 (file)
index 0000000..79b7697
Binary files /dev/null and b/docs/en/target/freeglutshot5.png differ
diff --git a/docs/en/target/freeglutshot6.png b/docs/en/target/freeglutshot6.png
new file mode 100644 (file)
index 0000000..b1f5134
Binary files /dev/null and b/docs/en/target/freeglutshot6.png differ
diff --git a/docs/en/target/freeglutshot7.png b/docs/en/target/freeglutshot7.png
new file mode 100644 (file)
index 0000000..3314f08
Binary files /dev/null and b/docs/en/target/freeglutshot7.png differ
diff --git a/docs/en/target/freeglutshot8.png b/docs/en/target/freeglutshot8.png
new file mode 100644 (file)
index 0000000..3a62168
Binary files /dev/null and b/docs/en/target/freeglutshot8.png differ
diff --git a/docs/en/target/functions.txt b/docs/en/target/functions.txt
new file mode 100644 (file)
index 0000000..86c513b
--- /dev/null
@@ -0,0 +1,230 @@
+.. index:: 
+       single: Functions - First Style; Introduction
+
+=======================
+Functions - First Style 
+=======================
+
+In this chapter we are going to learn about the next topics :-
+
+* Define functions
+
+* Call functions
+
+* Declare parameters
+
+* Send parameters
+
+* Main Function
+
+* Variables Scope
+
+* Return Value
+
+* Recursion
+
+.. index:: 
+       pair: Functions - First Style; Define Functions
+
+
+Define Functions
+================
+
+To define new function 
+
+Syntax:
+
+.. code-block:: ring
+
+       func <function_name> [parameters]
+               Block of statements
+
+.. note:: No keyword is required to end the function definition.
+
+
+Example:
+
+.. code-block:: ring
+
+       func hello
+               see "Hello from function" + nl
+
+
+.. index:: 
+       pair: Functions - First Style; Call Functions
+
+Call Functions
+==============
+
+To call function without parameters, we type the function name then ()
+
+.. tip:: We can call the function before the function definition and the function code.
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+
+       func hello
+               see "Hello from function" + nl
+
+
+Example:
+
+.. code-block:: ring
+
+       first()  second()
+
+       func first   see "message from the first function" + nl
+
+       func second  see "message from the second function" + nl
+
+.. index:: 
+       pair: Functions - First Style; Declare parameters
+
+Declare parameters
+==================
+
+To declare the function parameters, after the function name type the list of parameters as a group
+of identifiers separated by comma.
+
+Example:
+
+.. code-block:: ring
+
+       func sum x,y
+               see x+y+nl
+
+.. index:: 
+       pair: Functions - First Style; Send Parameters
+
+Send Parameters
+===============
+
+To send parameters to function, type the parameters inside () after the function name
+
+Syntax:
+
+.. code-block:: ring
+
+       funcname(parameters)
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** 8
+       ** 3000
+       */
+
+       sum(3,5) sum(1000,2000)
+
+       func sum x,y see x+y+nl
+
+.. index:: 
+       pair: Functions - First Style; Main Function
+
+Main Function
+=============
+
+Using the Ring programming language, the Main Function is optional, 
+when it's defined, it will be executed after the end of other statements.
+
+if no other statements comes alone, the main function will be the first `entry point <http://en.wikipedia.org/wiki/Entry_point>`_ 
+
+Example:
+
+.. code-block:: ring
+
+       # this program will print the hello world message first then execute the main function
+
+       See "Hello World!" + nl
+
+       func main
+               see "Message from the main function" + nl
+
+.. index:: 
+       pair: Functions - First Style; Variables Scope
+
+Variables Scope
+===============
+
+The Ring programming language uses `lexical scoping <http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scope_vs._dynamic_scope>`_ to
+determine the scope of a variable.
+Variables defined inside functions (including function parameters) are local variables.
+Variables defined outside functions (before any function) are global variables.
+
+Inside any function we can access the variables defined inside this function beside the global variables.
+
+Example:
+
+.. code-block:: ring
+
+       # the program will print numbers from 10 to 1
+
+       x = 10                          # x is a global variable.
+
+       func main
+
+               for t = 1 to 10         # t is a local variable
+                       mycounter()     # call function
+               next
+
+       func mycounter
+
+               see x + nl              # print the global variable value
+               x--                     # decrement
+
+
+.. note:: Using the main function before the for loop declare the t variable as a local variable,
+         It's recommended to use the main functions instead of typing the instructions directly to set the scope
+         of the new variables to local.
+
+.. index:: 
+       pair: Functions - First Style; Return Value
+
+Return Value
+============
+
+The function can return a value using the Return command.
+
+Syntax:
+
+.. code-block:: ring
+
+       Return [Expression]
+
+.. tip:: the Expression after the return command is optional and we can use the return command
+        to end the function execution without returning any value.
+        
+.. note:: if the function doesn't return explicit value, it will return NULL (empty string = "" ).
+
+Example:
+
+.. code-block:: ring
+
+       if novalue() = NULL     
+               See "the function doesn't return a value" + nl
+       ok
+
+       func novalue
+
+.. index:: 
+       pair: Functions - First Style; Recursion
+
+Recursion
+=========
+
+The Ring programming language support `Recursion <http://en.wikipedia.org/wiki/Recursion_%28computer_science%29>`_
+and the function can call itself using different parameters.
+
+Example:
+
+.. code-block:: ring
+
+       see fact(5)     # output = 120
+
+       func fact x if x = 0 return 1 else return x * fact(x-1) ok
diff --git a/docs/en/target/functions2.txt b/docs/en/target/functions2.txt
new file mode 100644 (file)
index 0000000..bda4781
--- /dev/null
@@ -0,0 +1,234 @@
+.. index:: 
+       single: Functions - Second Style; Introduction
+
+=========================
+Functions  - Second Style
+=========================
+
+In this chapter we are going to learn about the next topics :-
+
+* Define functions
+
+* Call functions
+
+* Declare parameters
+
+* Send parameters
+
+* Main Function
+
+* Variables Scope
+
+* Return Value
+
+* Recursion
+
+.. index:: 
+       pair: Functions - Second Style; Define Functions
+
+
+Define Functions
+================
+
+To define new function 
+
+Syntax:
+
+.. code-block:: ring
+
+       def <function_name> [parameters]
+               Block of statements
+       [end]
+
+.. note:: the keyword 'end' is optional.
+
+
+Example:
+
+.. code-block:: ring
+
+       def hello
+               put "Hello from function" + nl
+       end
+
+
+.. index:: 
+       pair: Functions - Second Style; Call Functions
+
+Call Functions
+==============
+
+To call function without parameters, we type the function name then ()
+
+.. tip:: We can call the function before the function definition and the function code.
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+
+       def hello
+               put "Hello from function" + nl
+       end
+
+
+Example:
+
+.. code-block:: ring
+
+       first()  second()
+
+       def first   put "message from the first function" + nl
+
+       def second  put "message from the second function" + nl
+
+.. index:: 
+       pair: Functions - Second Style; Declare parameters
+
+Declare parameters
+==================
+
+To declare the function parameters, after the function name type the list of parameters as a group
+of identifiers separated by comma.
+
+Example:
+
+.. code-block:: ring
+
+       def sum x,y
+               put x+y+nl
+       end
+
+.. index:: 
+       pair: Functions - Second Style; Send Parameters
+
+Send Parameters
+===============
+
+To send parameters to function, type the parameters inside () after the function name
+
+Syntax:
+
+.. code-block:: ring
+
+       funcname(parameters)
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** 8
+       ** 3000
+       */
+
+       sum(3,5) sum(1000,2000)
+
+       def sum x,y put x+y+nl
+
+.. index:: 
+       pair: Functions - Second Style; Main Function
+
+Main Function
+=============
+
+Using the Ring programming language, the Main Function is optional, 
+when it's defined, it will be executed after the end of other statements.
+
+if no other statements comes alone, the main function will be the first `entry point <http://en.wikipedia.org/wiki/Entry_point>`_ 
+
+Example:
+
+.. code-block:: ring
+
+       # this program will print the hello world message first then execute the main function
+
+       put "Hello World!" + nl
+
+       def main
+               put "Message from the main function" + nl
+       end
+
+.. index:: 
+       pair: Functions - Second Style; Variables Scope
+
+Variables Scope
+===============
+
+The Ring programming language uses `lexical scoping <http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scope_vs._dynamic_scope>`_ to
+determine the scope of a variable.
+Variables defined inside functions (including function parameters) are local variables.
+Variables defined outside functions (before any function) are global variables.
+
+Inside any function we can access the variables defined inside this function beside the global variables.
+
+Example:
+
+.. code-block:: ring
+
+       # the program will print numbers from 10 to 1
+
+       x = 10                          # x is a global variable.
+
+       def main
+               for t = 1 to 10         # t is a local variable
+                       mycounter()     # call function
+               end
+       end
+
+       def mycounter
+               put x + nl              # print the global variable value
+               x--                     # decrement
+       end
+
+.. note:: Using the main function before the for loop declare the t variable as a local variable,
+         It's recommended to use the main functions instead of typing the instructions directly to set the scope
+         of the new variables to local.
+
+.. index:: 
+       pair: Functions - Second Style; Return Value
+
+Return Value
+============
+
+The function can return a value using the Return command.
+
+Syntax:
+
+.. code-block:: ring
+
+       Return [Expression]
+
+.. tip:: the Expression after the return command is optional and we can use the return command
+        to end the function execution without returning any value.
+        
+.. note:: if the function doesn't return explicit value, it will return NULL (empty string = "" ).
+
+Example:
+
+.. code-block:: ring
+
+       if novalue() = NULL     
+               put "the function doesn't return a value" + nl
+       end
+
+       def novalue
+
+.. index:: 
+       pair: Functions - Second Style; Recursion
+
+Recursion
+=========
+
+The Ring programming language support `Recursion <http://en.wikipedia.org/wiki/Recursion_%28computer_science%29>`_
+and the function can call itself using different parameters.
+
+Example:
+
+.. code-block:: ring
+
+       put fact(5)     # output = 120
+
+       def fact x if x = 0 return 1 else return x * fact(x-1) end
diff --git a/docs/en/target/functions3.txt b/docs/en/target/functions3.txt
new file mode 100644 (file)
index 0000000..aa768e1
--- /dev/null
@@ -0,0 +1,248 @@
+.. index:: 
+       single: Functions - Third Style; Introduction
+
+========================
+Functions  - Third Style
+========================
+
+In this chapter we are going to learn about the next topics :-
+
+* Define functions
+
+* Call functions
+
+* Declare parameters
+
+* Send parameters
+
+* Main Function
+
+* Variables Scope
+
+* Return Value
+
+* Recursion
+
+.. index:: 
+       pair: Functions - Third Style; Define Functions
+
+
+Define Functions
+================
+
+To define new function 
+
+Syntax:
+
+.. code-block:: ring
+
+       func <function_name> [parameters] ['{']
+               Block of statements
+       ['}']
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       func hello {
+               print("Hello from function \n")
+       }
+
+
+.. index:: 
+       pair: Functions - Third Style; Call Functions
+
+Call Functions
+==============
+
+To call function without parameters, we type the function name then ()
+
+.. tip:: We can call the function before the function definition and the function code.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       hello()
+
+       func hello {
+               print("Hello from function \n")
+       }
+
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       first()  second()
+
+       func first {  print("message from the first function \n")  }
+
+       func second { print("message from the second function \n") }
+
+.. index:: 
+       pair: Functions - Third Style; Declare parameters
+
+Declare parameters
+==================
+
+To declare the function parameters, after the function name type the list of parameters as a group
+of identifiers separated by comma.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       func sum(x,y) {
+               print(x+y)
+       }
+
+.. index:: 
+       pair: Functions - Third Style; Send Parameters
+
+Send Parameters
+===============
+
+To send parameters to function, type the parameters inside () after the function name
+
+Syntax:
+
+.. code-block:: ring
+
+       funcname(parameters)
+
+Example:
+
+.. code-block:: ring
+
+       /* output
+       ** 8
+       ** 3000
+       */
+
+       load "stdlib.ring"
+
+       sum(3,5) sum(1000,2000)
+
+       func sum(x,y) { print(x+y) } 
+
+.. index:: 
+       pair: Functions - Third Style; Main Function
+
+Main Function
+=============
+
+Using the Ring programming language, the Main Function is optional, 
+when it's defined, it will be executed after the end of other statements.
+
+if no other statements comes alone, the main function will be the first `entry point <http://en.wikipedia.org/wiki/Entry_point>`_ 
+
+Example:
+
+.. code-block:: ring
+
+       # this program will print the hello world message first then execute the main function
+
+       load "stdlib.ring"
+
+       print("Hello, World! \n")
+
+       func main {
+               print("Message from the main function \n")
+       }
+
+.. index:: 
+       pair: Functions - Third Style; Variables Scope
+
+Variables Scope
+===============
+
+The Ring programming language uses `lexical scoping <http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scope_vs._dynamic_scope>`_ to
+determine the scope of a variable.
+Variables defined inside functions (including function parameters) are local variables.
+Variables defined outside functions (before any function) are global variables.
+
+Inside any function we can access the variables defined inside this function beside the global variables.
+
+Example:
+
+.. code-block:: ring
+
+       # the program will print numbers from 10 to 1
+       
+       load "stdlib.ring"
+
+       x = 10                          # x is a global variable.
+
+       func main {
+               for t = 1 to 10 {       # t is a local variable
+                       mycounter()     # call function
+               }
+       }
+
+       func mycounter {
+               print("#{x}\n")         # print the global variable value
+               x--                     # decrement
+       }
+
+.. note:: Using the main function before the for loop declare the t variable as a local variable,
+         It's recommended to use the main functions instead of typing the instructions directly to set the scope
+         of the new variables to local.
+
+.. index:: 
+       pair: Functions - Third Style; Return Value
+
+Return Value
+============
+
+The function can return a value using the Return command.
+
+Syntax:
+
+.. code-block:: ring
+
+       Return [Expression]
+
+.. tip:: the Expression after the return command is optional and we can use the return command
+        to end the function execution without returning any value.
+        
+.. note:: if the function doesn't return explicit value, it will return NULL (empty string = "" ).
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       if novalue() = NULL {
+               print("the function doesn't return a value\n")
+       }
+
+       func novalue { }
+
+.. index:: 
+       pair: Functions - Third Style; Recursion
+
+Recursion
+=========
+
+The Ring programming language support `Recursion <http://en.wikipedia.org/wiki/Recursion_%28computer_science%29>`_
+and the function can call itself using different parameters.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       print( fact(5) )        # output = 120
+
+       func fact(x) { if x = 0 { return 1 else return x * fact(x-1) } }
diff --git a/docs/en/target/functionslist.png b/docs/en/target/functionslist.png
new file mode 100644 (file)
index 0000000..2b7d9d5
Binary files /dev/null and b/docs/en/target/functionslist.png differ
diff --git a/docs/en/target/game2048_shot1.png b/docs/en/target/game2048_shot1.png
new file mode 100644 (file)
index 0000000..7a7defd
Binary files /dev/null and b/docs/en/target/game2048_shot1.png differ
diff --git a/docs/en/target/gameengine.txt b/docs/en/target/gameengine.txt
new file mode 100644 (file)
index 0000000..b6db92a
--- /dev/null
@@ -0,0 +1,2450 @@
+.. index:: 
+       single: Game Engine for 2D Games; Introduction
+
+=======================================
+Demo Project - Game Engine for 2D Games
+=======================================
+
+In this chapter we will learn about using the different programming paradigms in the same project.
+
+We will create a simple Game Engine for 2D Games.
+
+You can use the Engine directly to create 2D Games for Desktop or Mobile.
+
+.. index:: 
+       pair: Game Engine for 2D Games; Project Layers
+
+Project Layers
+==============
+
+The project contains the next layers
+
+* Games Layer (Here we will use declarative programming)
+* Game Engine Classes (Here we will use the Object-Oriented Programming paradigm)
+* Interface to graphics library (Here we will use procedural programming)
+* Graphics Library bindings (Here we have RingAllegro and RingLibSDL)
+
+.. index:: 
+       pair: Game Engine for 2D Games; Graphics Library Bindings
+
+Graphics Library bindings
+=========================
+
+We already have RingAllegro to use the Allegro game programming library and we have RingLibSDL
+to use the LibSDL game programming library.
+
+Both of RingAllegro and RingLibSDL are created using the C language with the help of the 
+Ring code generator for extensions.
+
+Each of them is over 10,000 lines of C code which is generated after writing simple configuration
+files (That are processed by the code generator).
+
+Each configuration file determines the functions names, structures information and constants
+then the generator process this configuration file to produce the C code and the library
+that can be loaded from Ring code.
+
+Using RingAllegro and RingLibSDL is very similar to using Allegro and LibSDL from C code where
+you have the same functions but we can build on that using the Ring language features
+
+* RingAllegro Source Code : https://github.com/ring-lang/ring/tree/master/extensions/ringallegro
+* RingLibSDL Source Code : https://github.com/ring-lang/ring/tree/master/extensions/ringsdl
+
+.. index:: 
+       pair: Game Engine for 2D Games; Interface to graphics library
+
+Interface to graphics library
+=============================
+
+In this layer we have gl_allegro.ring and gl_libsdl.ring
+
+Each library provides the same functions to be used with interacting with the Graphics Library.
+
+This layer hides the details and the difference between RingAllegro and RingLibSDL.
+
+You have the same functions, Just use it and you can switch between Allegro and LibSDL at anytime.
+
+Why ?
+
+Allegro is very simple, we can use it to quickly create 2D games for Windows, Linux and MacOS X.
+
+In Ring 1.0 we started by supporting Allegro.
+
+Also LibSDL is very powerful and popular, very easy to use for Mobile Development.
+
+Ring 1.1 comes with support for LibSDL so we can quickly create games for Mobile.
+
+.. note:: We can use just one library for Desktop and Mobile development.
+
+* gl_allegro.ring source code : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gl_allegro.ring
+* gl_libsdl.ring source code : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gl_libsdl.ring
+
+.. index:: 
+       pair: Game Engine for 2D Games; Game Engine Classes
+
+Game Engine Classes
+===================
+
+The Engine comes with the next classes
+
+* GameBase class
+* Resources class
+* Game class
+* GameObject class
+* Sprite class
+* Text class
+* Animate class
+* Sound class
+* Map class
+
+* Source Code : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gameengine.ring
+
+.. index:: 
+       pair: Game Engine for 2D Games; Games Layer
+
+Games Layer
+===========
+
+In this layer we create our games using the Game Engine classes
+
+The classes are designed to be used through Declarative Programming.
+
+In our games we will use the next classes
+
+* Game class
+* Sprite class
+* Text class
+* Animate class
+* Sound class
+* Map class
+
+.. note:: Other classes in the engine are for internal use by the engine.
+
+We will introduce some examples and three simple games :-
+
+* Stars Fighter Game
+* Flappy Bird 3000 Game
+* Super Man 2016 Game
+
+.. index:: 
+       pair: Game Engine for 2D Games; Game Class
+
+Game Class
+==========
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+ FPS           Number determines how many times the draw() method will be called per second.
+ FixedFPS      Number determines how many times the animate() method will be called per second.
+ Title         String determines the window title of the game. 
+ aObjects      List contains all objects in the game
+ shutdown      True/False value to end the game loop
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+refresh()              Delete objects.
+settitle(cTitle)       Set the window title using a string parameter.
+shutdown()             Close the application.
+find(cName)            Find an object using the object name
+remove(nID)            Remove an object using the object ID
+================       =================================================================================
+
+The next table present a group of keywords defined by the class.
+
+================       =================================================================================
+Keyword                        Description
+================       =================================================================================
+sprite                         Create new Sprite object and add it to the game objects.
+text                   Create new Text object and add it to the game objects.
+animate                Create new Animate object and add it to the game objects.
+sound                  Create new Sound object and add it to the game objects.
+map                    Create new Map object and add it ot the game objects.
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; GameObject Class
+
+GameObject Class
+================
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+enabled                True/False determine the state of the object (Active/Not Active)
+x              Number determine the x position of the object.
+y              Number determine the y position of the object.
+width          Number determine the width of the object.
+height         Number determine the height of the object.
+nIndex         Number determine the ID of the object.
+name           String represent the object name.
+animate                True/False to animate the object or not.
+move           True/False to move the object using the keyboard or not.
+Scaled         True/False to scale the object image or not.
+draw           Function to be called when drawing the object.
+state          Function to be called for object animation.
+keypress       Function to be called when a key is pressed.
+mouse          Function to be called when a mouse event happens.
+============   =================================================================================
+
+The next table present the class methods.
+
+============================== ================================================================
+Method                         Description
+============================== ================================================================
+keyboard(oGame,nkey)           Check Keyboard Events 
+mouse(oGame,nType,aMouseList)  Check Mouse Events
+rgb(r,g,b)                     Return new color using the RGB (Red, Green and Blue) Values.
+============================== ================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Class
+
+Sprite Class
+============
+
+Parent Class : GameObject Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+image          String determine the image file name.
+point          Number determine the limit of automatic movement of the object.
+direction      Number determine the direction of movement. 
+nstep          Number determine the increment/decrement during movement.
+type           Number determine the object type in the game (Optional).
+transparent    True/False value determine if the image is transparent.
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+Draw(oGame)            Draw the object
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Text Class
+
+Text Class
+==========
+
+Parent Class : Sprite Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+size           Number determine the font size
+font           String determine the font file name
+text           String determine the text to be displayed
+color          Number determine the color
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+Draw(oGame)            Draw the object
+================       =================================================================================
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animate Class
+
+Animate Class
+=============
+
+Parent Class : Sprite Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+frames         Number determine the number of frames 
+frame          Number determine the active frame
+framewidth     Number determine the frame width.
+animate                True/False determine using animate or not.
+scaled         True/False determine scaling image or not.
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+Draw(oGame)            Draw the object
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sound Class
+
+Sound Class
+===========
+
+Parent Class : GameObject Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+file           String determine the sound file name.
+once           True/False determine to play the file one time or not (loop).
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+playsound()            Play the sound file
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Map Class
+
+Map Class
+=========
+
+Parent Class : Sprite Class
+
+The next table present the class attributes.
+
+============   =================================================================================
+Attributes             Description
+============   =================================================================================
+aMap           List determine the map content using numbers.
+aImages                List determine the image used for each number in the map.
+BlockWidth     Number determine the block width (default = 32).
+BlockHeight    Number determine the block height (default = 32).
+Animate                True/False determine the animation status.
+============   =================================================================================
+
+The next table present the class methods.
+
+================       =================================================================================
+Method                 Description
+================       =================================================================================
+getvalue(x,y)          Return the item value in the Map according to the visible part
+================       =================================================================================
+
+.. index:: 
+       pair: Game Engine for 2D Games; Creating the Game Window
+
+Using the Game Engine - Creating the Game Window
+================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+               }                       # Start the Events Loop 
+
+.. note:: if you want to define global variables, this must be before load "gameengine.ring"
+         because this instruction will give the control to the game engine.
+
+Screen Shot:
+
+.. image:: gameengineshot1.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Drawing Text
+
+Using the Game Engine - Drawing Text
+====================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      
+                       }
+               }               # Start the Events Loop 
+
+
+Screen Shot:
+
+.. image:: gameengineshot2.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Moving Text
+
+Using the Game Engine - Moving Text
+===================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # Color = black 
+                       }
+                       text {
+                               x = 10  y=150
+                               # Animation Part =====================================
+                               animate = true                  # Use Animation
+                               direction = GE_DIRECTION_INCVERTICAL    # Increase y
+                               point = 400                     # Continue until y=400
+                               nStep = 3                       # Each time y+= 3
+                               #=====================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)            # Color = Blue  
+                       }
+               }                                       # Start the Events Loop 
+
+Screen Shot:
+
+.. image:: gameengineshot3.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Playing Sound
+
+Using the Game Engine - Playing Sound
+=====================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # Color = black 
+                       }
+                       text {
+                               x = 10  y=150
+                               # Animation Part ======================================
+                               animate = true                          # Use Animation
+                               direction = GE_DIRECTION_INCVERTICAL    # Increase y
+                               point = 400             # Continue until y=400
+                               nStep = 3               # Each time y+= 3
+                               #======================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)    # Color = Blue  
+                       }
+                       Sound {                                 # Play Sound
+                               file = "sound/music1.wav"       # Sound File Name
+                       }               
+               }                                       # Start the Events Loop 
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animation
+
+Using the Game Engine - Animation
+=================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+         oGame = New Game      # Create the Game Object
+         {
+               title = "My First Game"
+
+               animate {
+                 file = "images/fire.png"
+                 x = 100
+                 y = 200
+                 framewidth = 40
+                 height = 42
+                 nStep = 3      # Used for delay
+                 transparent = true
+                 state = func oGame,oSelf {  # Called by engine each frame
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13      # we have 13 frames in animation
+                                 frame++   # move to next frame
+                               else
+                                 oGame.remove(oself.nIndex)   # remove object
+                               ok
+                         ok
+                       }
+                 }
+                }    
+               
+
+         }          # Start the Events Loop  
+
+
+.. image:: gameengineshot5.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animation and Functions
+
+Using the Game Engine - Animation and Functions
+===============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+         oGame = New Game      # Create the Game Object
+         {
+               title = "My First Game"
+               for x = 70 to 700 step 50
+                 for y = 70 to 500 step 50
+                       showfire(oGame,x,y)
+                 next
+               next
+
+         }          # Start the Events Loop  
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3      # Used for delay
+                 transparent = true
+                 state = func oGame,oSelf {  # Called by engine each frame
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13      # we have 13 frames in animation
+                                 frame++   # move to next frame
+                               else
+                                 frame=1
+                               ok
+                         ok
+                       }
+                 }
+                }  
+         }
+
+.. image:: gameengineshot6.png
+       :alt: screen shot
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Automatic Movement
+
+Using the Game Engine - Sprite - Automatic Movement using Keyboard
+==================================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=true       # we can move it using keyboard arrows
+                               Scaled=true
+                       }
+               }                                       # Start the Events Loop 
+
+.. image:: gameengineshot7.png
+       :alt: screen shot
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Keypress Event
+
+Using the Game Engine - Sprite - Keypress event
+===============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # Custom Movement
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite Mouse Event
+
+Using the Game Engine - Sprite - Mouse event
+============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # Custom Movement
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                               mouse = func oGame,oSelf,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               oSelf {
+                                                       x = aMouseList[GE_MOUSE_X]
+                                                       y = aMouseList[GE_MOUSE_Y]
+                                               }
+                                       ok
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+.. index:: 
+       pair: Game Engine for 2D Games; Sprite State Event
+
+Using the Game Engine - Sprite - State event
+============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # Just for our usage
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # Custom Movement
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                               mouse = func oGame,oSelf,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               oSelf {
+                                                       x = aMouseList[GE_MOUSE_X]
+                                                       y = aMouseList[GE_MOUSE_Y]
+                                               }
+                                       ok
+                               }
+                               state = func oGame,oSelf {
+                                       oself {
+                                               if x < 0 x = 0 ok
+                                               if y < 0 y = 0 ok
+                                               if x > ogame.width-width  
+                                                       x= ogame.width - width ok
+                                               if y > ogame.height-height 
+                                                       y=ogame.height - height ok
+                                       }
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Animate Events
+
+Using the Game Engine - Animate - Events
+========================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+
+                       animate {
+
+                               file = "images/fbbird.png"
+                               x = 10
+                               y = 10
+                               framewidth = 20
+                               scaled = true
+                               height = 50
+                               width = 50
+                               nStep = 3
+                               transparent = true
+
+                               state = func oGame,oSelf {
+                                       oSelf {
+
+                                               # Animation
+                                                       nStep--
+                                                       if nStep = 0
+                                                               nStep = 3
+                                                               if frame < 3
+                                                                       frame++
+                                                               else
+                                                                       frame=1
+                                                               ok
+                                                       ok
+
+                                               # Move Down
+                                                       y += 3
+                                                       if y > 550 y=550 ok
+
+                                       }
+
+                               }
+
+                               keypress = func ogame,oself,nKey {
+                                       oself {
+                                               if nkey = key_space
+                                                       y -= 55
+                                                       if y<=0 y=0 ok
+                                               ok
+                                       }
+                               }
+
+                               mouse = func ogame,oself,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               cFunc = oself.keypress
+                                               call cFunc(oGame,oSelf,Key_Space)
+                                       ok
+                               }
+                       }
+               }                                       # Start the Events Loop 
+
+Screen Shot:
+
+.. image:: gameengineshot11.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Map
+
+
+Using the Game Engine - Map
+===========================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"        # Give control to the game engine
+
+       func main          # Called by the Game Engine
+
+       oGame = New Game      # Create the Game Object
+       {
+         title = "My First Game"
+
+         Map {
+
+               blockwidth = 80
+               blockheight = 80
+
+               aMap = [
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+               ]
+
+               aImages = ["images/fbwall.png",
+                        "images/fbwallup.png",
+                        "images/fbwalldown.png"]
+
+               state = func oGame,oSelf {
+                 oSelf {
+                       x -= 3
+                       if x < - 2100  x = 0  ok
+                 }
+               }
+
+         }
+       }          # Start the Events Loop  
+
+
+Screen Shot:
+
+.. image:: gameengineshot12.png
+       :alt: screen shot
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Map Events
+
+Using the Game Engine - Map Events
+==================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"        # Give control to the game engine
+
+       func main          # Called by the Game Engine
+
+         oGame = New Game      # Create the Game Object
+         {
+               title = "My First Game"
+
+               Map {
+
+                 blockwidth = 80
+                 blockheight = 80
+
+                 aMap = [
+                          [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+                 ]
+
+                 aImages = ["images/fbwall.png",
+                                "images/fbwallup.png",
+                                "images/fbwalldown.png"]
+
+                 state = func oGame,oSelf {
+                       oSelf {
+                         x -= 3
+                         if x < - 2100  x = 0  ok
+                       }
+                 }
+
+                 mouse = func ogame,oself,nType,aMouseList {
+                       if nType = GE_MOUSE_UP
+                         oSelf {
+                               mX = aMouseList[GE_MOUSE_X]
+                               mY = aMouseList[GE_MOUSE_Y]
+                               nValue = GetValue(mX,mY)
+                               nRow = GetRow(mX,mY)
+                               nCol = GetCol(mX,mY)
+                               Switch nValue
+                               On 1  aMap[nRow][nCol] = 0
+                               On 2  aMap[nRow][nCol] = 0
+                               On 3  aMap[nRow][nCol] = 0
+                               On 0  aMap[nRow][nCol] = 1
+                               Off
+                         }
+                       ok
+                 }
+
+               }
+         }          # Start the Events Loop  
+
+Screen Shot:
+
+.. image:: gameengineshot13.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Object and Drawing
+
+Using the Game Engine - Object and Drawing
+==========================================
+
+We can use the Object keyword (defined by the game engine) to create objects from the GameObject class.
+
+Example:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       Object {
+                               x = 0 y=300 width = 200 height=200
+                               draw = func oGame,oSelf {
+                                       oSelf {
+                                               for t = 1 to 210
+                                                       gl_draw_circle(x,y,t,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                               next
+                                       }
+                               }
+                               state = func oGame,oSelf {
+                                       oSelf { 
+                                               if x <= 800 
+                                                       x+= 3 
+                                               else
+                                                       x=0
+                                               ok
+                                       }
+                               }
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+
+               }                                       # Start the Events Loop 
+
+Screen Shot:
+
+.. image:: gameengineshot14.png
+       :alt: screen shot
+
+Example:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # Give control to the game engine
+
+       func main                                       # Called by the Game Engine
+
+               oGame = New Game                        # Create the Game Object
+               {
+                       title = "My First Game"
+                       Object {
+                               x = 400 y=300 width = 200 height=200
+                               draw = func oGame,oSelf {
+                                       oSelf {
+                                               for t = 1 to 210
+                                                       gl_draw_rectangle(x+t,y+t,
+                                                       x+t*2,y+t*2,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                                       gl_draw_rectangle(x+t*2,y+t*2,
+                                                       x-t*2,y-t*2,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                               next
+                                       }
+                               }
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+
+               }                                       # Start the Events Loop 
+
+
+Screen Shot:
+
+.. image:: gameengineshot15.png
+       :alt: screen shot
+
+.. index:: 
+       pair: Game Engine for 2D Games; Stars Fighter Game
+
+Stars Fighter Game
+==================
+
+The Stars Fighter source code
+
+.. code-block:: ring
+
+       # The Ring Standard Library
+       # Game Engine for 2D Games
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       load "gameengine.ring"
+
+       func main
+
+         oGame = New Game
+
+         while true
+
+                 oGameState = new GameState
+
+                 oGame {
+                       title = "Stars Fighter!"
+                       sprite
+                       {
+                         file = "images/menu1.jpg"
+                         x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                         keypress = func ogame,oself,nKey {
+                               if nkey = key_esc or nKey = GE_AC_BACK
+                                 ogame.shutdown()
+                               but nKey = key_space
+                                 oGameState.startplay=true
+                                 ogame.shutdown=true
+                               ok
+                         }
+                         mouse = func ogame,oself,nType,aMouseList {
+                               if nType = GE_MOUSE_UP
+                                 oGameState.startplay=true
+                                 ogame.shutdown=true
+                               ok
+                         }
+                       }
+                       text {
+                         animate = false
+                         size = 35
+                         file = "fonts/pirulen.ttf"
+                         text = "Stars Fighter"
+                         x = 10  y=50
+                       }
+                       text {
+                         animate = false
+                         size = 25
+                         file = "fonts/pirulen.ttf"
+                         text = "Version 1.0"
+                         x = 80  y=100
+                       }
+                       text {
+                         animate = false
+                         size = 16
+                         file = "fonts/pirulen.ttf"
+                         text = "(C) 2016, Mahmoud Fayed"
+                         x = 45  y=140
+                       }
+
+                       text {
+                         animate = false
+                         size = 25
+                         file = "fonts/pirulen.ttf"
+                         text = "Press Space to start"
+                         x = 190  y=470
+                       }
+                       text {
+                         animate = false
+                         size = 20
+                         file = "fonts/pirulen.ttf"
+                         text = "Press Esc to Exit"
+                         x = 260  y=510
+                       }
+                       Sound {
+                         file = "sound/music1.wav"
+                       }
+                 }
+
+                 if oGameState.startplay
+                       oGame.refresh()
+                       playstart(oGame)
+                       oGame.refresh()
+                 ok
+
+         end
+
+       func playstart oGame
+
+         oSound = New Sound {
+               file = "sound/music2.wav"
+         }
+
+         while true
+               play(oGame)
+               if ogame.shutdown = true and oGameState.value = 0
+                 exit
+               ok
+               ogame.refresh()
+         end
+
+         oSound.Delete()
+
+       func play oGame
+
+         oGame
+         {
+               FPS = 60
+               FixedFPS = 120
+               title = "Stars Fighter!"
+               sprite
+               {
+                 file = "images/stars.jpg"
+                 x = 0
+                 y = 0
+                 point = -370
+                 direction = ge_direction_dec
+                 type = ge_type_background
+                 state = func ogame,oself {
+                         oself {
+                               if x < -350
+                                 direction = ge_direction_inc
+                                 point = 370
+                               but x = 0 and direction = ge_direction_inc
+                                 direction = ge_direction_dec
+                                 point = -370
+                               ok
+                         }
+                       }
+               }
+               sprite
+               {
+                 file = "images/player.png"
+                 transparent = true
+                 type = ge_type_player
+                 x = 400 y =400 width=100 height=100
+                 animate=false move=true Scaled=true
+                 mouse = func ogame,oself,nType,aMouseList {
+
+                       if not ( aMouseList[GE_MOUSE_X] >= oSelf.x and 
+                                        aMouseList[GE_MOUSE_X] <= oSelf.x+oSelf.width and
+                                        aMouseList[GE_MOUSE_Y] >= oself.y and 
+                                        aMouseList[GE_MOUSE_Y] <= oSelf.y+oSelf.height )
+
+                         if nType = GE_MOUSE_DOWN
+                               if aMouseList[1] < oSelf.X  # left
+                                 oSelf.X -= 100
+                               else
+                                 oSelf.X += 100
+                               ok
+                               if aMouseList[2] < oSelf.Y  # up
+                                 oSelf.Y -= 100
+                               else
+                                 oSelf.Y += 100
+                               ok
+                         ok
+
+                       else
+                         if nType = GE_MOUSE_UP
+                               cFunc = oself.keypress
+                               call cFunc(oGame,oSelf,Key_Space)
+                         ok
+                       ok
+                 }
+                 keypress = func oGame,oself,nkey {
+                       if nkey = key_space
+                         ogame {
+                               sprite {
+                                 type = ge_type_fire
+                                 file  = "images/rocket.png"
+                                 transparent = true
+                                       x = oself.x + 30
+                                 y = oself.y - 30
+                                 width = 30
+                                 height = 30
+                                 point = -30
+                                 nstep = 20
+                                 direction = ge_direction_decvertical
+                                 state = func oGame,oSelf {
+                                       for x in oGame.aObjects
+                                         if x.type = ge_type_enemy
+                                               if oself.x >= x.x and oself.y >= x.y and
+                                                 oself.x <= x.x + x.width and
+                                                 oself.y <= x.y + x.height
+                                                 showfire(oGame,x.x+40,x.y+40)
+                                                 ogame.remove(x.nindex)
+                                                 oGameState.score+=10
+                                                 oGameState.enemies--
+                                                 checkwin(oGame)
+                                                 exit
+                                               ok
+                                         ok
+                                       next
+                                 }
+                               }
+                         }
+                       but nkey = key_esc or nKey = GE_AC_BACK ogame.shutdown()
+                       ok
+                 }
+                 state = func oGame,oSelf {
+                       oself {
+                         if x < 0 x = 0 ok
+                         if y < 0 y = 0 ok
+                         if x > ogame.screen_w-width  x= ogame.screen_w - width ok
+                         if y > ogame.screen_h-height y=ogame.screen_h-height ok
+                       }
+                 }
+               }
+               for g = 1 to oGameState.enemies
+                 sprite
+                 {
+                       type = ge_type_enemy
+                       file = "images/enemy.png"
+                       transparent = true
+                       x = g*random(50) y =g width=100 height=100
+                       animate=true Scaled=true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oself {
+                               if x < 0 x = 0 ok
+                               if y < 0 y = 0 ok
+                               if x > ogame.screen_w-width  x= ogame.screen_w - width ok
+                               if y > ogame.screen_h-height y=ogame.screen_h-height ok
+                         }
+                         if random(100) = 1
+                               ogame {
+                                 sprite {
+                                       type = ge_type_fire
+                                       file  = "images/rocket2.png"
+                                       transparent = true
+                                       x = oself.x + 30
+                                       y = oself.y + oself.height+ 30
+                                       width = 30
+                                       height = 30
+                                       point = ogame.screen_h+30
+                                       nstep = 10
+                                       direction = ge_direction_incvertical
+                                       state = func oGame,oSelf {
+                                         x =  oGame.aObjects[oGameState.playerindex]
+                                         if oself.x >= x.x and oself.y >= x.y and
+                                                oself.x <= x.x + x.width and
+                                                oself.y <= x.y + x.height
+                                                if oGameState.value > 0
+                                                  oGameState.value-=10
+                                                ok
+                                                ogame.remove(oself.nindex)
+                                                checkgameover(oGame)
+                                         ok
+                                       }
+                                 }
+                               }
+                         ok
+                       }
+                 }
+               next
+               text {
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Destroy All Enemies!"
+                 nstep = 3
+                 color = GE_COLOR_GREEN
+                 x = 100  y=50
+                 direction = ge_direction_incvertical
+                 point = 500
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=10
+                 state = func oGame,oSelf { oSelf { text = "Score : " + oGameState.score } }
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Energy : " + oGameState.value
+                 x = 500  y=50
+                 state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } }
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Level : " + oGameState.level
+                 x = 500  y=90
+               }
+         }
+
+
+       func checkwin ogame
+         if oGameState.gameresult  return ok
+         if oGameState.enemies = 0
+               oGameState.gameresult = true
+               oGame {
+                 if oGameState.level < 30
+                 text {
+                       point = 400
+                       size = 30
+                       file = "fonts/pirulen.ttf"
+                       text = "Level Completed!"
+                       nStep = 3
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.level++
+                               oGameState.enemies = oGameState.level
+                               oGameState.gameresult = false
+                         ok
+                       }
+                 }
+                 else
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "You Win !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.value = 0
+                         ok
+                       }
+                 }
+                 ok
+               }
+         ok
+
+       func checkgameover ogame
+         if oGameState.gameresult  return ok
+         if oGameState.value <= 0
+               oGameState.gameresult = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "Game Over !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                         ok
+                       }
+                 }
+               }
+               showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40,
+                                oGame.aObjects[oGameState.PlayerIndex].y+40)
+               oGame.aObjects[oGameState.PlayerIndex].enabled = false
+               oGame.remove(oGameState.PlayerIndex)
+         ok
+
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13
+                                 frame++
+                               else
+                                 frame=1
+                                 oGame.remove(oself.nIndex)
+                               ok
+                         ok
+                       }
+                 }
+               }
+         }
+
+
+       class gamestate
+         score = 0
+         level = 1
+         enemies = 1
+         value = 100
+         playerindex = 2
+         gameresult = false
+         startplay=false
+
+Screen Shot:
+
+.. image:: starsfighter.png
+       :alt: Stars Fighter
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Flappy Bird 3000 Game
+
+Flappy Bird 3000 Game
+=====================
+
+The Flappy Bird 3000 Game source code
+
+.. code-block:: ring
+
+       # The Ring Standard Library
+       # Game Engine for 2D Games
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       Load "gameengine.ring"
+
+       func main
+
+         oGame = New Game  
+
+
+         while true
+
+               oGameState = New GameState
+
+               oGame {
+                 title = "Flappy Bird 3000"
+                 sprite
+                 {
+                       file = "images/fbback.png"
+                       x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                       keypress = func ogame,oself,nKey {
+                         if nkey = key_esc or nKey = GE_AC_BACK
+                               ogame.shutdown()
+                         but nKey = key_space
+                               oGameState.startplay=true
+                               ogame.shutdown=true
+                         ok
+                       }
+                       mouse = func ogame,oself,nType,aMouseList {
+                         if nType = GE_MOUSE_UP
+                               cFunc = oself.keypress
+                               call cFunc(oGame,oSelf,Key_Space)
+                         ok
+                       }
+                 }
+                 text {
+                       animate = false
+                       size = 35
+                       file = "fonts/pirulen.ttf"
+                       text = "Flappy Bird 3000"
+                       x = 150  y=50
+                 }
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Version 1.0"
+                       x = 280  y=100
+                 }
+                 text {
+                       animate = false
+                       size = 16
+                       file = "fonts/pirulen.ttf"
+                       text = "(C) 2016, Mahmoud Fayed"
+                       x = 245  y=140
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "To Win Get Score = 3000"
+                       x = 150  y=270
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Space to start"
+                       x = 190  y=470
+                 }
+                 text {
+                       animate = false
+                       size = 20
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Esc to Exit"
+                       x = 260  y=510
+                 }
+
+                 animate {
+                       file = "images/fbbird.png"
+                       x = 200
+                       y = 200
+                       framewidth = 20
+                       scaled = true
+                       height = 50
+                       width = 50
+                       nStep = 3
+                       transparent = true
+                       animate = true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oSelf {
+                               nStep--
+                               if nStep = 0
+                                 nStep = 3
+                                 if frame < 3
+                                       frame++
+                                 else
+                                       frame=1
+                                 ok
+                               ok
+                               if x <= 0 x=0 ok
+                               if y <= 0 y=0 ok
+                               if x >= 750 x= 750 ok
+                               if y > 550 y=550 ok
+                         }
+                       }
+                 }
+
+                 Sound {
+                       file = "sound/music2.wav"
+                 }
+               }
+               if oGameState.startplay
+                 oGame.refresh()
+                 playstart(oGame)
+                 oGame.refresh()
+               ok
+
+         end
+
+
+       func playstart oGame
+
+         oGame {
+               FPS = 60
+               FixedFPS = 120
+               Title = "Flappy Bird 3000"
+               Sprite {
+                 file = "images/fbback.png"
+                 x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                 keypress = func ogame,oself,nKey {
+                       if nkey = key_esc or nKey = GE_AC_BACK
+                         ogame.shutdown()
+                       ok
+                 }
+               }
+
+               Map {
+                 blockwidth = 80
+                 blockheight = 80
+                 aMap = [
+                          [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+                       ]
+                 newmap(aMap)
+                 aImages = ["images/fbwall.png","images/fbwallup.png",
+                         "images/fbwalldown.png"]
+                 state = func oGame,oSelf {
+                       if oGameState.gameresult = false
+                         px = oGame.aObjects[3].x
+                         py = oGame.aObjects[3].y
+                         oSelf {
+                               x -=  3
+                               if x < - 2100
+                                 x = 0
+                                 newmap(aMap)
+                               ok
+                               nCol =  getcol(px,0)
+                               if nCol=11 or nCol=15 or nCol=19 or nCol=23 or nCol=27
+                                 if nCol != oGameState.lastcol
+                                       oGameState.lastcol = nCol
+                                       oGameState.Score += 100
+                                       oGame { Sound {
+                                         once = true
+                                         file = "sound/sfx_point.wav"
+                                       } }
+                                       checkwin(oGame)
+                                 ok
+                               ok
+                         }
+                         if  oSelf.getvalue(px+40,py) != 0 or
+                                 oSelf.getvalue(px+40,py+40) != 0 or
+                                 oSelf.getvalue(px,py) != 0 or
+                                 oSelf.getvalue(px,py+40) != 0
+                               oGameState.gameresult = true
+                               oGame {
+                                 text {
+                                       point = 550
+                                       size = 30
+                                       nStep = 3
+                                       file = "fonts/pirulen.ttf"
+                                       text = "Game Over !!!"
+                                       x = 500  y=10
+                                       state = func ogame,oself {
+                                         if oself.y >= 550
+                                                 ogame.shutdown = true
+                                         ok
+                                               if oself.y = 90
+                                               ogame {
+                                                 Sound {
+                                                       once = true
+                                                       file = "sound/sfx_die.wav"
+                                                 }
+                                               }
+                                         ok
+                                       }
+                                 }
+                                 Sound {
+                                       once = true
+                                       file = "sound/sfx_hit.wav"
+                                 }
+                               }
+                         ok
+                       ok
+                 }
+               }
+
+               animate {
+                 file = "images/fbbird.png"
+                 x = 10
+                 y = 10
+                 framewidth = 20
+                 scaled = true
+                 height = 50
+                 width = 50
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 3
+                                 frame++
+                               else
+                                 frame=1
+                               ok
+                         ok
+                       }
+
+                       if not oGameState.playerwin
+                         oGameState.down --
+                         if oGameState.down = 0
+                               oGameState.down = 3
+                               oself {
+                                 y += 25
+                                 if y > 550 y=550 ok
+                               }
+                         ok
+                       ok
+
+                 }
+                 keypress = func ogame,oself,nKey {
+                       if oGameState.gameresult = false
+                         oself {
+                               if nkey = key_space
+                                 y -= 55
+                                 oGameState.down = 60
+                                 if y<=0 y=0 ok
+                               ok
+                         }
+                       ok
+                 }
+                 mouse = func ogame,oself,nType,aMouseList {
+                       if nType = GE_MOUSE_UP
+                         cFunc = oself.keypress
+                         call cFunc(oGame,oSelf,Key_Space)
+                       ok
+                 }
+               }
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=10
+                 state = func oGame,oSelf {
+                       oSelf { text = "Score : " + oGameState.score }
+                 }
+               }
+
+         }
+
+       func newmap aMap
+         aV = [
+         [1,1,3,0,0,2,1,1],
+         [1,3,0,0,0,2,1,1],
+         [1,1,1,3,0,2,1,1],
+         [1,1,1,3,0,0,0,0],
+         [0,0,0,0,2,1,1,1],
+         [0,0,2,1,1,1,1,1],
+         [0,0,0,2,1,1,1,1],
+         [1,1,1,3,0,2,1,1],
+         [1,1,1,1,1,3,0,0],
+         [3,0,0,2,1,1,1,1],
+         [3,0,0,2,3,0,0,2]
+         ]
+         for x = 10 to 24 step 4
+               aVar = aV[ (random(10)+1) ]
+               for y = 1 to 8
+                 aMap[y][x] = aVar[y]
+               next
+         next
+
+       func checkwin ogame
+         if oGameState.score = 3000
+               oGameState.gameresult = true
+               oGameState.playerwin = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "You Win !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.value = 0
+                         ok
+                       }
+                 }
+               }
+         ok
+
+       Class GameState
+         down = 3
+         gameresult = false
+         Score = 0
+         startplay=false
+         lastcol = 0
+         playerwin = false
+
+Screen Shot:
+
+.. image:: flappybird.png
+       :alt: Flappy Bird 300
+
+
+.. index:: 
+       pair: Game Engine for 2D Games; Super Man 2016 Game
+
+Super Man 2016 Game
+===================
+
+The Super Man 2016 Game source code
+
+.. code-block:: ring
+
+       # The Ring Standard Library
+       # Game Engine for 2D Games
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       Load "gameengine.ring"
+
+       func main
+
+         oGame = New Game
+
+         while true
+
+               oGameState = new GameState
+
+               oGame {
+                 title = "Super Man 2016"
+                 sprite
+                 {
+                       file = "images/superman.jpg"
+                       x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                       keypress = func ogame,oself,nKey {
+                         if nkey = key_esc or nKey = GE_AC_BACK
+                               ogame.shutdown()
+                         but nKey = key_space
+                               oGameState.startplay=true
+                               ogame.shutdown=true
+                         ok
+                       }
+                       mouse = func ogame,oself,nType,aMouseList {    
+                         if nType = GE_MOUSE_UP
+                               oGameState.startplay=true 
+                               ogame.shutdown=true 
+                         ok
+                       }
+                       state = func ogame,oself {
+                         oself {
+                               if x > -500
+                                 x-=1
+                                 y-=1
+                                 width +=1
+                                 height +=4
+                               ok
+                         }
+                       }
+                 }
+                 text {
+                       animate = false
+                       size = 35
+                       file = "fonts/pirulen.ttf"
+                       text = "Super Man 2016"
+                       x = 20  y=30
+                 }
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Version 1.0"
+                       x = 20  y=80
+                 }
+                 text {
+                       animate = false
+                       size = 16
+                       file = "fonts/pirulen.ttf"
+                       text = "(C) 2016, Mahmoud Fayed"
+                       x = 20  y=120
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Space to start"
+                       x = 190  y=470
+                 }
+                 text {
+                       animate = false
+                       size = 20
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Esc to Exit"
+                       x = 260  y=510
+                 }
+
+                 animate {
+                       file = "images/superman.png"
+                       x = 200
+                       y = 200
+                       framewidth = 68
+                       scaled = true
+                       height = 86
+                       width = 60
+                       nStep = 10
+                       transparent = true
+                       animate = true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oSelf {
+                               nStep--
+                               if nStep = 0
+                                 nStep = 10
+                                 if frame < 1
+                                       frame++
+                                 else
+                                       frame=1
+                                 ok
+                               ok
+                               if x <= 0 x=0 ok
+                               if y <= 0 y=0 ok
+                               if x >= 750 x= 750 ok
+                               if y > 550 y=550 ok
+                         }
+                       }
+                 }
+
+                 Sound {
+                       file = "sound/music2.wav"
+                 }
+               }
+               if oGameState.startplay
+                 oGame.refresh()
+                 playstart(oGame)
+                 oGame.refresh()
+               ok
+
+         end
+
+
+       func playstart oGame
+
+         oGame {
+               FPS = 60
+               FixedFPS = 15
+               Title = "Super Man 2016"
+               Sprite {
+                 file = "images/supermancity.jpg"
+                 x = 0 y=0 width=800 height = 600 scaled = true animate = false
+               }
+               Map {
+                 blockwidth = 80
+                 blockheight = 80
+                 aMap = [
+                         [0,0,0,4,4,4,0,0,0,1,0,0,0,1,4,4,0,1,0,0,0,0,4,4,0,1,4,
+       4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,1,0,0,0,1,0,3,3,3,5,3,3,3,3,0],
+                         [0,0,4,0,4,0,4,0,0,1,0,0,0,3,4,4,4,1,0,0,0,0,4,4,0,1,4,
+       4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,1,4,1,0,0,0,1,0,0,0,1,0,4,4,4,4,4,4,4,4,0],
+                         [0,0,0,4,4,4,0,0,0,1,0,0,0,4,4,4,4,1,0,0,0,0,0,0,0,3,4,
+       4,4,0,0,4,0,0,0,0,0,0,4,2,0,0,4,1,4,1,4,2,4,1,0,2,0,1,0,4,4,4,4,4,4,4,4,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
+       0,0,0,0,4,4,4,4,4,4,4,4,1,0,0,4,1,4,1,4,1,4,1,0,1,0,1,0,2,2,2,2,2,2,2,2,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
+       0,0,0,0,2,0,0,0,0,0,2,0,3,0,0,0,1,4,1,4,1,4,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,4,3,4,1,4,3,0,1,0,3,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,2,0,0,2,0,0,2,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,1,0,0,1,0,0,1,3,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0]
+                       ]
+                 aImages = ["images/smwall.png","images/smwallup.png",
+                         "images/smwalldown.png","images/smstar.png",
+                         "images/smkey.png","images/smstar2.png"]
+               }
+
+               sprite {
+                 type = ge_type_enemy
+                 animate = false
+                 file  = "images/smhome.png"
+                 x = 5000
+                 y = 400
+                 width = 290
+                 height = 200
+                 transparent = true
+
+                 state = func oGame,oSelf {
+                       oself {
+                         x = 5000 +  oGame.aObjects[2].x
+                         if x < 0 or x > SCREEN_W return ok
+                       }
+                       if oGameState.gameresult or oGameState.DoorKey = false  return ok
+                       if oGame.aObjects[oGameState.playerindex].x > oself.x + 100 and
+                         oGame.aObjects[oGameState.playerindex].y > oself.y + 50
+                         oGameState.gameresult = true
+                         oGame {
+                               sprite {
+                                 file = "images/smwin.jpg"
+                                 x=0 y=0 width=800 height=600
+                                 scaled = true animate=false
+                                 state = func ogame,oself {
+                                       oself {
+                                         x-=5
+                                         y-=5
+                                         width +=10
+                                         height +=10
+                                         if x = -300
+                                               ogame.shutdown = true
+                                         ok
+                                       }
+                                 }
+                               }
+                         }
+                       ok
+                 }
+
+               }
+
+               animate {
+                 file = "images/superman.png"
+                 x = 0
+                 y = 0
+                 framewidth = 60
+                 scaled = true
+                 height = 86
+                 width = 60
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+
+                       checkstarskeycol(oGame,oSelf)
+
+                       if not oGameState.playerwin
+                               oself {
+                                 file = "images/superman.png"
+                                 height = 86
+                                 width = 60
+                                 for t=1 to 8
+                                       if checkwall2(oGame,oSelf,0,5,[2,1])
+                                         y += 5
+                                       else
+                                         exit
+                                       ok
+                                 next
+                                 if y > 500 y=500 ok
+                               }
+                       ok
+
+                 }
+                 keypress = func ogame,oself,nKey {
+                       if oGameState.gameresult = false
+
+                         oself {
+                               if nkey = key_up  and checkwall(oGame,oSelf,0,-40)
+                                 oGameState.value -= 1
+                                 checkgameover(oGame)
+                                 file = "images/supermanup.png"
+                                 height = 123
+                                 dotransparent()
+                                 y -= 40
+                                 oGameState.down = 10
+                                 if y<=0 y=0 ok
+                               but nkey = key_down and checkwall(oGame,oSelf,0,40)
+                                 file = "images/supermandown.png"
+                                 dotransparent()
+                                 y += 40
+                                 if y>=500 y=500 ok
+                               but nKey = key_right and checkwall(oGame,oSelf,10,0)
+                                 file = "images/supermanright.png"
+                                 dotransparent()
+                                 x += 10
+                                 if x >= 440
+                                       if oGame.aObjects[2].x > -4500
+                                         oGame.aObjects[2].x -= 50
+                                         callenemystate(oGame)
+                                       else
+                                         if x <= 750
+                                               if  checkwall(oGame,oSelf,10,0)
+                                                 x += 10
+                                               ok
+                                         else
+                                               if  checkwall(oGame,oSelf,-10,0)
+                                                 x -= 10
+                                               ok
+                                         ok
+                                         return
+                                       ok
+                                       x=400
+                                 ok
+                               but nKey = key_left and checkwall(oGame,oSelf,-10,0)
+                                 file = "images/supermanleft.png"
+                                 dotransparent()
+                                 x -= 10
+                                 if x <= 0
+                                       x += 10
+                                       if oGame.aObjects[2].x != 0
+                                         oGame.aObjects[2].x += 50
+                                         callenemystate(oGame)
+                                         x += 50
+                                       ok
+                                 ok
+                               but nkey = key_esc or nKey = GE_AC_BACK
+                                 ogame.shutdown()
+                               ok
+                         }
+                       ok
+                 }
+                 mouse = func ogame,oself,nType,aMouseList {  
+                       if nType = GE_MOUSE_DOWN
+                         oGameState.moveplayer = TRUE
+                       But nType = GE_MOUSE_UP
+                         oGameState.moveplayer = FALSE
+                       ok
+                       if oGameState.moveplayer = TRUE
+                         if aMouseList[GE_MOUSE_X] < oSelf.X  # left
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_left)
+                         else
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_right)
+                         ok
+                         if aMouseList[GE_MOUSE_Y] < oSelf.Y  # up
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_up)
+                         else
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_down)
+                         ok
+                       ok        
+                 }
+               }
+
+               addenemy(oGame,600)
+               addenemy(oGame,900)
+               addenemy(oGame,1550)
+               addenemy(oGame,2350)
+               addenemy(oGame,3350)
+               addenemy(oGame,3500)
+               addenemy(oGame,3670)
+               addenemy(oGame,3840)
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=0
+                 state = func oGame,oSelf {
+                       oSelf { text = "Score : " + oGameState.score }
+                 }
+               }
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Energy : " + oGameState.value
+                 x = 10  y=0
+                 state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } }
+               }
+         }
+
+
+       func inlist nValue,aList
+         for x in aList
+               if x = nValue
+                 return true
+               ok
+         next
+         return false
+
+       func checkwall oGame,oself,diffx,diffy
+         alist = [1,2,3]
+         return checkwall2(oGame,oself,diffx,diffy,aList)
+
+       func checkwall2 oGame,oself,diffx,diffy,aList
+         xPos = oSelf.x + diffx
+         yPos = oSelf.y + diffy
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx
+         yPos = oSelf.y + diffy + oSelf.height
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx + oSelf.width
+         yPos = oSelf.y + diffy
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx + oSelf.width
+         yPos = oSelf.y + diffy + oSelf.height
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         return nValue
+
+       func checkopenwall oGame
+         if oGameState.score = 900
+               oGame.aObjects[2].aMap[3][10] = 3
+               oGame.aObjects[2].aMap[4][10] = 0
+               oGame.aObjects[2].aMap[5][10] = 0
+               oGame.aObjects[2].aMap[6][10] = 0
+               oGame.aObjects[2].aMap[7][10] = 0
+               oGame.aObjects[2].aMap[8][10] = 0
+         but oGameState.score = 1800
+               oGame.aObjects[2].aMap[3][18] = 3
+               oGame.aObjects[2].aMap[4][18] = 0
+               oGame.aObjects[2].aMap[5][18] = 0
+               oGame.aObjects[2].aMap[6][18] = 0
+               oGame.aObjects[2].aMap[7][18] = 0
+               oGame.aObjects[2].aMap[8][18] = 0
+         but oGameState.score = 5500
+               oGame.aObjects[2].aMap[1][44] = 0
+               oGame.aObjects[2].aMap[2][44] = 0
+               oGame.aObjects[2].aMap[3][44] = 2
+         ok
+
+
+       func checkgameover ogame
+         if oGameState.gameresult  return ok
+         if oGameState.value <= 0
+               oGameState.value = 0
+               oGameState.gameresult = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 9
+                       file = "fonts/pirulen.ttf"
+                       text = "Game Over !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                         ok
+                       }
+                 }
+               }
+               showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40,
+                        oGame.aObjects[oGameState.PlayerIndex].y+40)
+               oGame.aObjects[oGameState.PlayerIndex].enabled = false
+               oGame.remove(oGameState.PlayerIndex)
+         ok
+
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13
+                                 frame++
+                               else
+                                 frame=1
+                                 oGame.remove(oself.nIndex)
+                               ok
+                         ok
+                       }
+                 }
+               }
+         }
+
+       func addenemy oGame,xPos
+         oGame {
+               lbraceend = false
+               sprite {
+                       type = ge_type_enemy
+                       file = "images/smenemy.png"
+                       transparent = true
+                       x = xPos y =10 width=100 height=100
+                       animate=true Scaled=true
+                       direction = GE_DIRECTION_NOMOVE
+                       temp = xPos
+                       state = func oGame,oSelf {
+                         oself {
+                               x = oSelf.temp +  oGame.aObjects[2].x
+                               if y < 0 y = 0 ok
+                               if y > 100 y=100 ok
+                               if x > SCREEN_W or x < 0 return ok
+                         }
+
+                         if random(10) = 1
+                               if oGameState.gameresult return ok
+                               ogame {
+                                 sprite {
+                                       type = ge_type_fire
+                                       file  = "images/smrocket.png"
+                                       scaled  = true
+                                       transparent = true
+                                       x = oself.x + 30
+                                       y = oself.y + oself.height+ 30
+                                       width = 30
+                                       height = 30
+                                       point = ogame.screen_h+30
+                                       nstep = 30
+                                       direction = ge_direction_incvertical
+                                       xvalue =  oGame.aObjects[2].x
+                                       temp = oself.x + 30 - xvalue
+                                       state = func oGame,oSelf {
+                                         oself { x = oSelf.temp +  oGame.aObjects[2].x  }
+                                         x =  oGame.aObjects[oGameState.playerindex]
+                                         if oself.x >= x.x and oself.y >= x.y and
+                                                oself.x <= x.x + x.width and
+                                                oself.y <= x.y + x.height
+                                                if oGameState.value > 0
+                                                  oGameState.value-=1000
+                                                ok
+                                                ogame.remove(oself.nindex)
+                                                checkgameover(oGame)
+                                         ok
+                                       }
+                                 }
+                               }
+                         ok
+                       }
+                 }
+         }
+         ogame.lbraceend = true
+
+
+       func checkstarskey oGame,oSelf,nValue,nRow,nCol
+         switch nValue
+               on 4
+                 oGame.aObjects[2].aMap[nRow][nCol] = 6
+                 oGameState.Score += 100
+                 checkopenwall(oGame)
+                 oGame { Sound {
+                       once = true
+                       file = "sound/sfx_point.wav"
+                 } }
+               on 5
+                 oGame.aObjects[2].aMap[nRow][nCol] = 0
+                 oGameState.DoorKey = true
+                 oGameState.Score += 500
+                 checkopenwall(oGame)
+                 oGame { Sound {
+                       once = true
+                       file = "sound/sfx_point.wav"
+                 } }
+         off
+
+       func checkstarskeycol oGame,oSelf
+         nValue = oGame.aObjects[2].getvalue(oSelf.x,oSelf.y)
+         nRow = oGame.aObjects[2].getrow(oSelf.x,oSelf.y)
+         nCol = oGame.aObjects[2].getcol(oSelf.x,oSelf.y)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         nRow = oGame.aObjects[2].getrow(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         nCol = oGame.aObjects[2].getcol(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x+oSelf.width,oSelf.y)
+         nRow = oGame.aObjects[2].getrow(oSelf.x+oSelf.width,oSelf.y)
+         nCol = oGame.aObjects[2].getcol(oSelf.x+oSelf.width,oSelf.y)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x,oSelf.y+oSelf.height)
+         nRow = oGame.aObjects[2].getrow(oSelf.x,oSelf.y+oSelf.height)
+         nCol = oGame.aObjects[2].getcol(oSelf.x,oSelf.y+oSelf.height)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+       func callenemystate oGame
+         for t in oGame.aObjects
+               t {
+                 if type = GE_TYPE_ENEMY
+                       call state(oGame,t)
+                 ok
+               }
+         next
+
+       Class GameState
+
+         down = 3
+         gameresult = false
+         Score = 0
+         startplay=false
+         lastcol = 0
+         playerwin = false
+         DoorKey = false
+         playerindex = 4
+         value = 1000
+         moveplayer = false
+
+Screen Shot:
+
+.. image:: superman.png
+       :alt: Super Man 2016
+
+
diff --git a/docs/en/target/gameengineandorid.txt b/docs/en/target/gameengineandorid.txt
new file mode 100644 (file)
index 0000000..2a798ae
--- /dev/null
@@ -0,0 +1,110 @@
+.. index:: 
+       single: Building Games For Android; Introduction
+
+==========================
+Building Games For Android
+==========================
+
+In this chapter we will learn about Building RingLibSDL Games for Mobile.
+
+So we can create packages (*.apk) for the applications that are developed using Ring Game Engine for 2D Games.
+
+
+.. index:: 
+       pair: Building Games For Android; Download Requirements and Update the Android SDK
+
+Download Requirements and Update the Android SDK
+================================================
+
+* The Android SDK Tools
+
+       https://developer.android.com/studio/index.html
+
+* The Android NDK (Tested using android-ndk-r10c)
+
+               https://developer.android.com/ndk/index.html
+
+* Apache Ant v1.8 or later 
+
+               http://ant.apache.org/bindownload.cgi
+
+* Java SE Development Kit (JDK) v6 or later
+
+               http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
+
+* Update the Android SDK to get the API and tools packages required for development
+
+       Tested using Android 4.4.2 (API 19)
+
+* In Windows - Define the next Environment Variables based on your system.
+
+(1) JAVA_HOME
+
+.. code-block:: ring
+       
+       For Example : C:\Program Files (x86)\Java\jdk1.8.0_05 
+
+(2) ANDROID_HOME       
+
+.. code-block:: ring
+
+       For Example : B:\mahmoud\Tools\Java-Android\adt-bundle-windows-x86-20140702\sdk
+
+.. index:: 
+       pair: Building Games For Android; Project Folder
+
+Project Folder
+==============
+
+Open the project folder : ring/android/ringlibsdl/project
+
+.. image:: ringlibsdlandroid_shot1.png
+       :alt: RingLibSDL for Android
+
+You can add the source code (*.ring) and Images/Sound Files to the assets folder.
+
+.. image:: ringlibsdlandroid_shot2.png
+       :alt: RingLibSDL for Android
+
+You will find the Flappy Bird 3000 Game ready for building.
+
+The execution starts from the start.ring file
+
+.. code-block:: ring
+
+       load "game2.ring"
+
+.. index:: 
+       pair: Building Games For Android; Building the project
+
+Building the project
+====================
+
+Move to the ring/android/ringlibsdl/project folder 
+
+We can build using the next command (We need to do this for one time only).
+
+.. code-block:: none
+
+       ndk-build
+
+Then we can create the package (*.apk) using the next command.
+
+.. code-block:: none
+
+       ant debug
+
+We can write a batch file for building the project (file: build.bat)
+
+.. code-block:: none
+
+       rem You will need to modify this batch file based on your environment
+
+       set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.8.0_05
+       set ANDROID_HOME=B:\mahmoud\Tools\JavaAndroid\adt-bundle-windows-x86-20140702\sdk
+       set NDK_ROOT=B:\mahmoud\Tools\JavaAndroid\android-ndk-r10c
+
+       set path=%path%;B:\mahmoud\Tools\JavaAndroid\android-ndk-r10c
+       set path=%path%;B:\mahmoud\Tools\JavaAndroid\apache-ant-1.9.4\bin
+
+       ndk-build
\ No newline at end of file
diff --git a/docs/en/target/gameengineshot1.png b/docs/en/target/gameengineshot1.png
new file mode 100644 (file)
index 0000000..2259b19
Binary files /dev/null and b/docs/en/target/gameengineshot1.png differ
diff --git a/docs/en/target/gameengineshot11.png b/docs/en/target/gameengineshot11.png
new file mode 100644 (file)
index 0000000..a77376e
Binary files /dev/null and b/docs/en/target/gameengineshot11.png differ
diff --git a/docs/en/target/gameengineshot12.png b/docs/en/target/gameengineshot12.png
new file mode 100644 (file)
index 0000000..6511780
Binary files /dev/null and b/docs/en/target/gameengineshot12.png differ
diff --git a/docs/en/target/gameengineshot13.png b/docs/en/target/gameengineshot13.png
new file mode 100644 (file)
index 0000000..611a642
Binary files /dev/null and b/docs/en/target/gameengineshot13.png differ
diff --git a/docs/en/target/gameengineshot14.png b/docs/en/target/gameengineshot14.png
new file mode 100644 (file)
index 0000000..04a8127
Binary files /dev/null and b/docs/en/target/gameengineshot14.png differ
diff --git a/docs/en/target/gameengineshot15.png b/docs/en/target/gameengineshot15.png
new file mode 100644 (file)
index 0000000..e4e3498
Binary files /dev/null and b/docs/en/target/gameengineshot15.png differ
diff --git a/docs/en/target/gameengineshot2.png b/docs/en/target/gameengineshot2.png
new file mode 100644 (file)
index 0000000..15500e7
Binary files /dev/null and b/docs/en/target/gameengineshot2.png differ
diff --git a/docs/en/target/gameengineshot3.png b/docs/en/target/gameengineshot3.png
new file mode 100644 (file)
index 0000000..1de7f0c
Binary files /dev/null and b/docs/en/target/gameengineshot3.png differ
diff --git a/docs/en/target/gameengineshot5.png b/docs/en/target/gameengineshot5.png
new file mode 100644 (file)
index 0000000..b689297
Binary files /dev/null and b/docs/en/target/gameengineshot5.png differ
diff --git a/docs/en/target/gameengineshot6.png b/docs/en/target/gameengineshot6.png
new file mode 100644 (file)
index 0000000..2a1c4c3
Binary files /dev/null and b/docs/en/target/gameengineshot6.png differ
diff --git a/docs/en/target/gameengineshot7.png b/docs/en/target/gameengineshot7.png
new file mode 100644 (file)
index 0000000..41d3551
Binary files /dev/null and b/docs/en/target/gameengineshot7.png differ
diff --git a/docs/en/target/gameoflife.jpg b/docs/en/target/gameoflife.jpg
new file mode 100644 (file)
index 0000000..96050f4
Binary files /dev/null and b/docs/en/target/gameoflife.jpg differ
diff --git a/docs/en/target/generalinfo.txt b/docs/en/target/generalinfo.txt
new file mode 100644 (file)
index 0000000..2b460f2
--- /dev/null
@@ -0,0 +1,229 @@
+.. index:: 
+       single: General Information; Introduction
+
+===================
+General Information
+===================
+
+This chapter contains general information about the Ring programming language
+
+(1) Ring Architecture
+(2) Memory Management
+(3) Data Representation
+
+.. index:: 
+       pair: General Information; Ring Architecture
+
+Ring Architecture
+=================
+
+We have the next architecture
+
+(1) Ring Applications (Your Code)  - Written in Ring - See folder : ring/applications
+(2) Ring Libraries (StdLib, WebLib, GameEngine, etc) - Written in Ring - See folder : ring/ringlibs
+(3) Ring Extensions (RingAllegro, RingQt, etc) - Written in C/C++ (may include Ring code) - See folder : ring/extensions
+(4) Ring Virtual Machine (Ring VM) - Written in C language
+(5) Operating System (Current Platform) - (Windows, Linux, macOS, Android, etc)
+
+The extensions are just dynamic libraries (DLL, So, Dylib)
+You can update the extensions without the need to update your code.
+
+
+Folder (ring\libdepwin) ====> C libraries used for building Ring Extensions (written in C) on Windows platform.
+
+Folder (ring\ringlibs)  ====> Ring libraries written in Ring itself (StdLib, WebLib, GameEngine, etc)
+
+Folder (ring\rnoteexe)  ====> Just C source file to create executable file that will run rnote.ring
+
+Folder (ring\visualsrc) ====> The Visual Source Code of the Ring Compiler & Ring VM developed using Programming Without Coding Technology (PWCT)
+
+We use the term Ring Library ---> When the library code is written in Ring
+We use the term Ring Extension ---> When the library code is Written in C or C++
+
+.. index:: 
+       pair: General Information; Memory Management
+
+Memory Management
+=================
+
+(1) When we call function, we get a new scope for this function, inside this scope we store variables.
+
+Also we get Temp. memory for this function. Inside this temp. memory we store temp. lists
+
+All of this will be deleted directly after the end of the function call (end of scope)
+
+(2) In Ring to delete memory, you have the next options
+
+2.1 Wait until the end of the function scope
+
+2.2 Use the Assignment operator
+
+2.3 Use callgc() function (delete temp. lists only)
+
+(3) Ring Garbage Collector uses Escape Analysis and Reference Counting
+
+In 90% of cases, the Escape Analysis is used so we don't waste time in running the garbage collector
+We directly know what will be deleted and what will remain in the memory.
+
+https://en.wikipedia.org/wiki/Escape_analysis
+
+In 10% of cases (or less than that) Ring may use Reference Counting.
+
+For example when we pass a list and sub list to a function
+Ring will pass the lists by reference, but what will happens if we deleted the Parent List?
+In this case, the Sub List will use reference counting, and when deleting the Parent List, it will stay in memory until the end of the function.
+
+Remember that Ring encourage us to avoid using references, and the
+Assignment Operator will copy lists by value, so Ring usage of reference counting is
+very limited to special cases and in most cases the Escape Analysis is enough which is very fast.
+
+Starting from Ring 1.9 we extended the Reference Counting support to Ring Extensions and low level C pointers.
+So we don't have to care about using fclose() when we use fopen() for example. and the same for
+other extensions like RingODBC, RingSQLite, RingMySQL, RingQt, etc.
+
+All of the allocated resources will be cleaned by the Garbage Collector when we finish using it (when we lost the last reference).
+
+
+.. index:: 
+       pair: General Information; Data Representation
+
+Data Representation
+===================
+
+(1) In Ring, The String is just (Array of bytes)
+
+Ring is 8-bit clean, Each character in the string is 8 bits (1 byte)
+
+So these functions (Int2Bytes(), Float2Bytes() and Double2Bytes()) just return a string.
+
+Also we can store binary data in strings
+
+.. code-block:: ring
+
+       mystring = read("myfile.exe")
+
+(2) Remember this, when you think about variables
+
+* Value ---> What we have (What we are storing in the computer memory as data) - Low Level Concept
+* Type  ---> What we can do with what we have or how we do things with what we have (Just a Logical Concept)
+
+Computer memory ----> Just store [Bytes] - Each byte is 8-bit - (Here we avoid the memory word concept)
+
+These bytes could be grouped together when moved between the memory and the processor registers.
+Here we have (The register size) and things like 32-bit and 64-bit for example.
+Also we have the bytes order.
+
+Programming Languages ----> Add Types (Just as a concept) to these bytes so we can determine what to do with them and how operations should be done.
+
+And programming language could allow (Type Conversion) ---> Because the Type is a logical concept in most cases, What we really have is just data (Bytes, Bytes Count, Bytes Order, etc)
+
+Ring Stings ----> You have these bytes (each byte is 8-bit) and Ring know the string size (stored as number in the String structure) 
+
+So we don't check the NULL character or add it to the end of the string (Not Required)
+
+All operations inside Ring VM, will check the Ring size and deal with the string as binary data (each character is 8-bit)
+
+In the C language ---> The normal case is adding NULL character (\0) to the end of each string
+
+And the string functions check this character, This is not suitable for binary data.
+
+Signed vs Unsigned ---> Is a logical concept which is important when you do arithmetic operations on the data, but when storing the data, if you will include all of the (8-bits) and will not ignore any of them ---> Then don't care.
+
+In Ring, don't think about these details, we are hiding it from you, so you can focus on your application and what you will do.
+
+Think in C when you write C code which could be (based on need) low level code to have control on everything.
+ ----> Good for performance and memory management
+
+Think in Ring when you write Ring code which let you ignore a lot of details and concentrate only on the result
+-----> Good for productivity and delivering software quickly
+
+The good news (We can mix between Ring and C in our projects)
+
+
+(3) The functions Int2Bytes(), Float2Bytes() and Double2Bytes()
+
+These function take input as (Number) ---> Convert it to group of bytes based on the number type (int|float|double) ---> Then return a Ring string that contains these bytes
+
+Int2Bytes() ---> Ring string (Group of bytes) and the string size = sizeof(int)
+
+Float2Bytes() ---> Ring string (Group of bytes) and the string size = sizeof(float)
+
+Double2Bytes() ---> Ring string (Group of bytes) and the string size = sizeof(double)
+
+Example:
+
+.. code-block:: ring
+
+       ? len( int2bytes(1) )
+       ? len( float2bytes(1) )
+       ? len( double2bytes(1) )
+
+Output:
+
+.. code-block:: none
+
+       4
+       4
+       8
+
+(4) Storing Numbers
+
+When we use a number, Ring always use the (Double) data type for representing these numbers in memory.
+This is important to know when we do arithmetic operations on numbers.
+
+But when we convert the number to a String using "" + number  or using string(number) we get a string where each digit is represented in 1 byte (Not good idea for storage, but useful for string processing)
+
+If you need the number to be represented in specific size (int|float|double) for storage then use bytes2int() , bytes2float() and bytes2double() when writing the data to binary files.
+
+Ring Number (double) ----> int2bytes()  - will cast the number from double to int then return the bytes ----> 4 bytes (Ring String)
+
+Ring Number (double) ----> float2bytes()  - will cast the number from double to float then return the bytes ----> 4 bytes (Ring String)
+
+Ring Number (double) ----> double2bytes()  - will use the number (double) to return the bytes ----> 8 bytes (Ring String)
+The (int) type is used only for internal Ring operations, but Ring applications|code will use only the (double) type for numbers.
+
+(5) The Unsigned() Function
+
+The function unsigned() expect the first and the second parameters as numbers
+
+.. code-block:: ring
+
+       unsigned(nNumber1,nNumber2,cOperator)
+
+We can use the bytes2int() function to convert the bytes to a number
+
+Example:
+
+.. code-block:: ring 
+
+       B = list(4)
+
+       for k=1 to 4
+       {  
+               B[k]= Space(4)
+               for kk=1 to 4 { B[k][kk]= char(60+4*k +kk) }
+               ? " B" +k +": " +B[k]
+       }
+
+       A12= Space(4)     A12= bytes2int(B[1]) ^ bytes2int(B[2])                
+       ? "A12: " +string(A12)  
+       A34= Space(4)     A34= bytes2int(B[3]) ^ bytes2int(B[4])                
+       ? "A34: " +string(A34)
+       A12= space(4)     A12= Unsigned(bytes2int(B[1]),bytes2int(B[2]),"^")    
+       ? "unsigned A12: " +A12
+       A34= space(4)     A34= Unsigned(bytes2int(B[3]),bytes2int(B[4]),"^")    
+       ? "unsigned A34: " +A34
+
+Output:
+
+.. code-block:: none
+
+       B1: ABCD
+       B2: EFGH
+       B3: IJKL
+       B4: MNOP
+       A12: 201589764
+       A34: 470025220
+       unsigned A12: 201589764
+       unsigned A34: 470025220
diff --git a/docs/en/target/getinput.txt b/docs/en/target/getinput.txt
new file mode 100644 (file)
index 0000000..0a0e312
--- /dev/null
@@ -0,0 +1,101 @@
+.. index:: 
+       single: Getting Input; Introduction
+
+=============
+Getting Input
+=============
+
+We can get input from the keyboard using 
+
+* The Give Command
+* The GetChar() Function
+* The Input() Function
+
+.. index:: 
+       pair: Getting Input; Give Command
+
+Give Command
+============
+
+Syntax:
+
+.. code-block:: ring
+
+       Give VariableName
+
+Example:
+
+.. code-block:: ring
+
+       See "Enter the first number : " Give nNum1
+       See "Enter the second number : " Give nNum2
+       See "Sum : " + ( 0 + nNum1 + nNum2 )
+Output:
+
+.. code-block:: ring
+
+       Enter the first number : 3
+       Enter the second number : 4
+       Sum : 7
+
+.. index:: 
+       pair: Getting Input; GetChar()
+
+GetChar() Function
+==================
+
+We can get one character from the standard input using the GetChar() function
+
+Syntax:
+
+.. code-block:: ring
+
+       GetChar() ---> Character
+
+Example:
+
+.. code-block:: ring
+
+       While True
+               See "
+                       Main Menu
+                       (1) Say Hello
+                       (2) Exit
+                   " 
+               Option = GetChar()
+               GetChar() GetChar()  # End of line
+
+               # the previous two lines can be replaced with the next line
+               # Give Option
+
+               if Option = 1
+                       see "Enter your name : " give cName 
+                       see "Hello " + cName
+               else
+                       bye
+               ok
+       End
+
+.. index:: 
+       pair: Getting Input; Input()
+
+Input() Function
+================
+
+We can get input from the keyboard using the Input() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Input(nCount) ---> string
+
+The function will wait until nCount characters (at least) are read
+
+Example:
+
+.. code-block:: ring
+
+       See "Enter message (30 characters) : " cMsg = input(30)
+       See "Message : " + cMsg
diff --git a/docs/en/target/getquotesmac.png b/docs/en/target/getquotesmac.png
new file mode 100644 (file)
index 0000000..b30f3dc
Binary files /dev/null and b/docs/en/target/getquotesmac.png differ
diff --git a/docs/en/target/getting_started.txt b/docs/en/target/getting_started.txt
new file mode 100644 (file)
index 0000000..f90bf3a
--- /dev/null
@@ -0,0 +1,186 @@
+.. index:: 
+       single: Getting Started - First Style; Introduction
+
+=============================
+Getting Started - First Style
+=============================
+
+.. index:: 
+       pair: Getting Started - First Style; Hello World
+
+Hello World
+===========
+
+The next program prints the Hello World message on the screen (std-out).
+
+.. code-block:: ring
+
+       see "Hello World"
+
+.. index:: 
+       pair: Getting Started - First Style; Run the program
+
+Run the program
+===============
+
+to run the program, save the code in a file, for example : hello.ring
+then from the command line or terminal, run it using Ring
+
+.. code-block:: ring
+
+       ring hello.ring
+
+
+.. index:: 
+       pair: Getting Started - First Style; Create Executable File
+
+Create Executable File
+======================
+
+Using Ring2EXE we can create executable file for our application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+.. index:: 
+       pair: Getting Started - First Style; Not Case-Sensitive
+
+Not Case-Sensitive
+==================
+
+Since the Ring language is not case-sensitive, the same program can
+be written in different styles
+
+.. tip:: It's better to select one style and use it in all of the program source code
+
+.. code-block:: ring
+
+       SEE "Hello World"
+
+.. code-block:: ring
+
+       See "Hello World"
+
+
+.. index:: 
+       pair: Getting Started - First Style; Multi-Line literals
+
+Multi-Line literals
+===================
+
+Using Ring we can write multi-line literal, see the next example
+
+.. code-block:: ring
+
+       See "
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           "
+
+Also you can use the nl variable to insert new line
+and you can use the + operator to concatenate strings
+
+As we have NL for new lines, we have Tab and CR (Carriage return) too!
+
+.. note:: nl value means a new line and the actual codes that
+        represent a newline is different between operating systems
+
+.. code-block:: ring
+
+       See "Hello" + nl + "Welcome to the Ring programming language" + 
+           nl + "How are you?"
+
+.. index:: 
+       pair: Getting Started - First Style; Getting Input
+
+Getting Input
+=============
+
+You can get the input from the user using the give command
+
+.. code-block:: ring
+
+       See "What is your name? "
+       Give cName
+       See "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - First Style; No Explicit End For Statements
+
+No Explicit End For Statements
+==============================
+
+You don't need to use ';' or press ENTER to separate statements.
+The previous program can be written in one line.
+
+.. code-block:: ring
+
+       See "What is your name? " give cName see "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - First Style; Using ? to print expression then new line
+
+Using ? to print expression then new line
+=========================================
+
+It's common to print new line after printing an expression, We can use the ? operator to do that!
+
+Example:
+
+.. code-block:: ring
+
+       ? "Hello, World!"
+       for x = 1 to 10
+               ? x
+       next
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: Getting Started - First Style; Writing Comments
+
+Writing Comments
+================
+
+We can write one line comments and multi-line comments
+
+The comment starts with # or //
+
+Multi-lines comments are written between /* and */
+
+.. code-block:: ring
+
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2016.09.09
+               Author       : Mahmoud Fayed
+       */
+
+       See "What is your name? "       # print message on screen
+       give cName                      # get input from the user
+       see "Hello " + cName            # say hello!
+
+       // See "Bye!"
+
+.. note:: Using // to comment a lines of code is just a code style.
+
+
+
diff --git a/docs/en/target/getting_started2.txt b/docs/en/target/getting_started2.txt
new file mode 100644 (file)
index 0000000..d5e5d58
--- /dev/null
@@ -0,0 +1,149 @@
+.. index:: 
+       single: Getting Started - Second Style; Introduction
+
+==============================
+Getting Started - Second Style
+==============================
+
+.. index:: 
+       pair: Getting Started - Second Style; Hello World
+
+Hello World
+===========
+
+The next program prints the Hello World message on the screen (std-out).
+
+.. code-block:: ring
+
+       put "Hello World"
+
+.. index:: 
+       pair: Getting Started - Second Style; Run the program
+
+Run the program
+===============
+
+to run the program, save the code in a file, for example : hello.ring
+then from the command line or terminal, run it using Ring
+
+.. code-block:: ring
+
+       ring hello.ring
+
+.. index:: 
+       pair: Getting Started - Second Style; Create Executable File
+
+Create Executable File
+======================
+
+Using Ring2EXE we can create executable file for our application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+.. index:: 
+       pair: Getting Started - Second Style; Not Case-Sensitive
+
+Not Case-Sensitive
+==================
+
+Since the Ring language is not case-sensitive, the same program can
+be written in different styles
+
+.. tip:: It's better to select one style and use it in all of the program source code
+
+.. code-block:: ring
+
+       PUT "Hello World"
+
+.. code-block:: ring
+
+       Put "Hello World"
+
+
+.. index:: 
+       pair: Getting Started - Second Style; Multi-Line literals
+
+Multi-Line literals
+===================
+
+Using Ring we can write multi-line literal, see the next example
+
+.. code-block:: ring
+
+       Put "
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           "
+
+Also you can use the nl variable to insert new line
+and you can use the + operator to concatenate strings
+
+As we have NL for new lines, we have Tab and CR (Carriage return) too!
+
+.. note:: nl value means a new line and the actual codes that
+        represent a newline is different between operating systems
+
+.. code-block:: ring
+
+       Put "Hello" + nl + "Welcome to the Ring programming language" + 
+           nl + "How are you?"
+
+.. index:: 
+       pair: Getting Started - Second Style; Getting Input
+
+Getting Input
+=============
+
+You can get the input from the user using the get command
+
+.. code-block:: ring
+
+       Put "What is your name? "
+       Get cName
+       Put "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - Second Style; No Explicit End For Statements
+
+No Explicit End For Statements
+==============================
+
+You don't need to use ';' or press ENTER to separate statements.
+The previous program can be written in one line.
+
+.. code-block:: ring
+
+       Put "What is your name? " get cName put "Hello " + cName
+
+.. index:: 
+       pair: Getting Started - Second Style; Writing Comments
+
+Writing Comments
+================
+
+We can write one line comments and multi-line comments
+
+The comment starts with # or //
+
+Multi-lines comments are written between /* and */
+
+.. code-block:: ring
+
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2016.09.09
+               Author       : Mahmoud Fayed
+       */
+
+       Put "What is your name? "       # print message on screen
+       get cName                       # get input from the user
+       put "Hello " + cName            # say hello!
+
+       // Put "Bye!"
+
+.. note:: Using // to comment a lines of code is just a code style.
\ No newline at end of file
diff --git a/docs/en/target/getting_started3.txt b/docs/en/target/getting_started3.txt
new file mode 100644 (file)
index 0000000..891bf4b
--- /dev/null
@@ -0,0 +1,179 @@
+.. index:: 
+       single: Getting Started - Third Style; Introduction
+
+==============================
+Getting Started - Third Style
+==============================
+
+.. index:: 
+       pair: Getting Started - Third Style; Hello World
+
+Hello World
+===========
+
+The next program prints the Hello World message on the screen (std-out).
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       print("Hello World")
+
+.. index:: 
+       pair: Getting Started - Third Style; Run the program
+
+Run the program
+===============
+
+to run the program, save the code in a file, for example : hello.ring
+then from the command line or terminal, run it using Ring
+
+.. code-block:: ring
+
+       ring hello.ring
+
+.. index:: 
+       pair: Getting Started - Third Style; Create Executable File
+
+Create Executable File
+======================
+
+Using Ring2EXE we can create executable file for our application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+The -static option will avoid the need to ring.dll|ring.so|ring.dylib
+
+But since the stdlib.ring load libraries like (LibCurl, OpenSSL, MySQL, etc)
+
+You will need these libraries!
+
+To avoid the need to these libraries (If you don't need stdlib classes)
+
+Use stdlibcore.ring instead of stdlib.ring as in the next example
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       print("Hello World")
+
+Using stdlibcore.ring You can access the stdlib functions but not the stdlib classes.
+
+if you want to use stdlib.ring and distribute your application
+
+.. code-block:: ring
+
+       ring2exe hello.ring -dist -allruntime -noqt -noallegro
+
+.. index:: 
+       pair: Getting Started - Third Style; Not Case-Sensitive
+
+Not Case-Sensitive
+==================
+
+Since the Ring language is not case-sensitive, the same program can
+be written in different styles
+
+.. tip:: It's better to select one style and use it in all of the program source code
+
+.. code-block:: ring
+
+       LOAD "stdlib.ring"
+       PRINT("Hello World")
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("Hello World")
+
+
+.. index:: 
+       pair: Getting Started - Third Style; Multi-Line literals
+
+Multi-Line literals
+===================
+
+Using Ring we can write multi-line literal, see the next example
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           ")
+
+Also you can use the \\n to insert new line
+and you can use #{variable_name} to insert variables values.
+
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print( "Hello\nWelcome to the Ring programming language\nHow are you?")
+
+.. index:: 
+       pair: Getting Started - Third Style; Getting Input
+
+Getting Input
+=============
+
+You can get the input from the user using the getstring() function
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("What is your name? ")
+       cName = GetString()
+       Print("Hello #{cName}")
+
+.. index:: 
+       pair: Getting Started - Third Style; No Explicit End For Statements
+
+No Explicit End For Statements
+==============================
+
+You don't need to use ';' or press ENTER to separate statements.
+The previous program can be written in one line.
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("What is your name? ") cName=getstring() print("Hello #{cName}")
+
+.. index:: 
+       pair: Getting Started - Third Style; Writing Comments
+
+Writing Comments
+================
+
+We can write one line comments and multi-line comments
+
+The comment starts with # or //
+
+Multi-lines comments are written between /* and */
+
+.. code-block:: ring
+
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2016.09.09
+               Author       : Mahmoud Fayed
+       */
+
+       Load "stdlib.ring"
+
+       Print("What is your name? ")    # print message on screen
+       cName=GetString()               # get input from the user
+       print("Hello #{cName}")         # say hello!
+
+       // print("Bye!")
+
+.. note:: Using // to comment a lines of code is just a code style.
+
diff --git a/docs/en/target/gm800lefd.png b/docs/en/target/gm800lefd.png
new file mode 100644 (file)
index 0000000..4252a81
Binary files /dev/null and b/docs/en/target/gm800lefd.png differ
diff --git a/docs/en/target/gmleveleditor.png b/docs/en/target/gmleveleditor.png
new file mode 100644 (file)
index 0000000..f0e76ef
Binary files /dev/null and b/docs/en/target/gmleveleditor.png differ
diff --git a/docs/en/target/gmshot1.png b/docs/en/target/gmshot1.png
new file mode 100644 (file)
index 0000000..88caabf
Binary files /dev/null and b/docs/en/target/gmshot1.png differ
diff --git a/docs/en/target/gmshot2.png b/docs/en/target/gmshot2.png
new file mode 100644 (file)
index 0000000..3c5e51a
Binary files /dev/null and b/docs/en/target/gmshot2.png differ
diff --git a/docs/en/target/gmshot3.png b/docs/en/target/gmshot3.png
new file mode 100644 (file)
index 0000000..527382b
Binary files /dev/null and b/docs/en/target/gmshot3.png differ
diff --git a/docs/en/target/go.png b/docs/en/target/go.png
new file mode 100644 (file)
index 0000000..dbbadb9
Binary files /dev/null and b/docs/en/target/go.png differ
diff --git a/docs/en/target/goldmagic800.txt b/docs/en/target/goldmagic800.txt
new file mode 100644 (file)
index 0000000..f9ab836
--- /dev/null
@@ -0,0 +1,107 @@
+.. index:: 
+       single: The Gold Magic 800 Game; Introduction
+
+=======================
+The Gold Magic 800 Game
+=======================
+
+In this chapter we will learn about the Gold Magic 800 Game
+
+The game is developed using Ring, RingAllegro and RingOpenGL
+
+You will find the game in ring/applications/goldmagic800 folder
+
+.. index:: 
+       pair: The Gold Magic 800 Game; The Game Story
+
+The Game Story
+==============
+
+Your friend discovered a unique and special box, created by the best wizard in the world 7000 years ago,
+when you close this box and move it; you will find a new gold under the box, it's an infinite source
+of gold. 
+The Box exists in a special environment full of puzzles, no one can enter this environment 
+because it's protected by the magic. 
+Your friend created a new robot using nanotechnology that can move the box using a remote control device.
+Your mission is to solve all of these puzzles and get this box forever to be the richest people in the world.
+
+.. index:: 
+       pair: The Gold Magic 800 Game; How to play?
+
+How to play?
+============
+
+The Gold Magic 800 is a puzzle game that will teach your unconscious mind to think like an entrepreneur.
+
+The game is based on moving your box around to get gold score (=800) to open the 
+First Door (Box Number 1) Then directly put your box on the Door (this will open the next door), 
+Then continue to put your box on all of the next doors in the level, You need the score (800) only
+for the first door, The next doors doesn't require this condition, but your way of gold will be
+converted to a wall once you put the Box on any door, so select your path carefully. 
+
+.. index:: 
+       pair: The Gold Magic 800 Game; What will you learn?
+
+What will you learn?
+====================
+
+1- Plan First
+
+2- Move to your target directly then go to get the required resources
+
+3- Look to the future when you evaluate the different solutions
+
+4- Try to avoid mistakes, Also learn from them
+
+5- Respect the Cost (800)
+
+6- Focus and be careful
+
+7- Be patient and Enjoy!
+
+.. index:: 
+       pair: The Gold Magic 800 Game; Screen Shots
+
+Screen Shots
+============
+
+We can select the level
+
+.. image:: gmshot2.png
+       :alt: Gold Magic 800 - Screen Shot 2
+
+The next screen shot for level (1)
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 - Screen Shot 3
+
+The Gold Magic 800 Level Editor 
+
+.. image:: gmleveleditor.png
+       :alt: Gold Magic 800 Level Editor
+
+
+.. index:: 
+       pair: The Gold Magic 800 Game; Source Code
+
+Source Code
+===========
+
+You will find the Level Editor source code in this folder
+
+https://github.com/ring-lang/ring/tree/master/applications/goldmagic800/editor
+
+The user interface of the Level Editor is designed using the Ring Form Designer.
+
+.. image:: gm800lefd.png
+       :alt: Gold Magic 800 Level Editor
+
+The next file contains the Level Editor Controller Class
+
+https://github.com/ring-lang/ring/blob/master/applications/goldmagic800/editor/editorController.ring
+
+You will find the Game Engine source code in this folder
+
+https://github.com/ring-lang/ring/tree/master/applications/goldmagic800
+
+
diff --git a/docs/en/target/index.txt b/docs/en/target/index.txt
new file mode 100644 (file)
index 0000000..b6d0d92
--- /dev/null
@@ -0,0 +1,137 @@
+.. Ring documentation master file, created by
+   sphinx-quickstart on Sun May 03 10:07:42 2015.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to Ring's documentation!
+================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   Applications developed in little hours <ringapps>
+   Introduction <introduction>
+   Language Design <languagedesign>
+   What is new in Ring 1.12? <whatisnew12>
+   What is new in Ring 1.11? <whatisnew11>
+   What is new in Ring 1.10? <whatisnew10>
+   What is new in Ring 1.9? <whatisnew9>
+   What is new in Ring 1.8? <whatisnew8>
+   What is new in Ring 1.7? <whatisnew7>
+   What is new in Ring 1.6? <whatisnew6>
+   What is new in Ring 1.5? <whatisnew5>
+   What is new in Ring 1.4? <whatisnew4>
+   What is new in Ring 1.3? <whatisnew3>
+   What is new in Ring 1.2? <whatisnew2>
+   What is new in Ring 1.1? <whatisnew>
+   Building From Source Code <sourcecode>
+   How to contribute? <contribute>
+   Getting Started - First Style <getting_started>
+   Getting Started - Second Style <getting_started2>
+   Getting Started - Third Style <getting_started3>
+   Using Ring Notepad <ringnotepad>
+   Using Other Code Editors <codeeditors>
+   Variables <variables>
+   Operators <operators>
+   Control Structures - First Style <controlstructures>
+   Control Structures - Second Style <controlstructures2>
+   Control Structures - Third Style <controlstructures3>
+   Getting Input <getinput>
+   Functions - First Style <functions>
+   Functions - Second Style <functions2>
+   Functions - Third Style <functions3>
+   Program Structure <programstructure>
+   Lists <lists>
+   Strings <strings>
+   Date and Time <dateandtime>
+   Check Data Type and Conversion <checkandconvert>
+   Mathematical Functions <mathfunc>
+   Files <files>
+   System Functions <systemfunc>
+   Eval() and Debugging <evaldebug>
+   Demo Programs <demo>
+   ODBC Functions <odbc>
+   MySQL Functions <mysql>
+   SQLite Functions <sqlite>   
+   PostgreSQL Functions <postgresql>
+   Security and Internet Functions <secfunc>
+   Object Oriented Programming (OOP) <oop>
+   Functional Programming (FP) <fp>
+   Reflection and Meta-programming <metaprog>
+   Stdlib Functions <stdlib>
+   Stdlib Classes <stdlibclasses>
+   Declarative Programming using Nested Structures <declarative>
+   Natural language programming        <natural>
+   Using the Natural Library <naturallibrary>
+   Web Development (CGI Library) <web>
+   Deploying Web Applications in the Cloud <deployincloud>
+   Using RingLibCurl <libcurl>
+   Using RingZip <ringzip>
+   Using ZeroLib <zerolib>
+   Graphics and 2D Games programming using RingAllegro <allegro>       
+   Using RingLibSDL <libsdl>
+   Using Ringlibuv <libuv>
+   Demo Project - Game Engine for 2D Games <gameengine>        
+   Building Games For Android <gameengineandorid>
+   Using RingOpenGL and RingFreeGLUT for 3D Graphics <usingopengl>
+   Using RingOpenGL and RingAllegro for 3D Graphics <usingopengl2>
+   Demo Project - The Gold Magic 800 Game <goldmagic800>
+   Using RingRayLib <ringraylib>
+   Desktop and Mobile development using RingQt <qt>
+   Building RingQt Applications for Mobile <qtmobile>
+   Objects Library for RingQt Application <ringqtobjects>
+   Using the Form Designer <formdesigner>
+   Multi-language Applications <multilanguage>
+   Using Qt3D <qt3d>
+   Scope Rules for Variables and Attributes <scope>
+   Scope Rules for Functions and Methods <scope2>
+   Syntax Flexibility <syntaxflexibility>
+   The Type Hints Library <typehints>
+   Command Line Options        <compiler>
+   Performance Tips <performancetips>
+   Distributing Ring Applications <distribute>
+   Distributing Ring Applications using Ring2EXE <distribute_ring2exe>
+   The Ring Package Manager (RingPM) <ringpm>
+   Low Level Functions <lowlevel>
+   The Trace Library and the Interactive Debugger <debug>
+   Embedding Ring Language in Ring Programs <ringemb>
+   Tutorial: Ring Extensions in C/C++  <extension_tutorial>
+   Extension using the C/C++ languages <extension>
+   Embedding Ring Language in C/C++ Programs <embedding>
+   Code Generator for wrapping C/C++ Libraries <codegenerator>
+   Create your first extension <ringbeep>
+   Frequently Asked Questions (FAQ) <faq>
+   General Information <generalinfo>
+   Language Reference <reference>
+   RingQt Classes and Methods Reference <qtclassesdoc>
+   RingMurmurHash Functions Reference <ringmurmurhashfuncsdoc>
+   FoxRing Functions Reference <foxringfuncsdoc>
+   BigNumber Functions Reference <bignumber>
+   RingLibCurl Functions Reference <ringlibcurlfuncsdoc>
+   RingLibZip Functions Reference <ringlibzipfuncsdoc>
+   RingConsoleColors Functions Reference <ringconsolecolorsfuncsdoc>
+   RingAllegro Functions Reference <ringallegrofuncsdoc>
+   RingLibSDL Functions Reference <ringlibsdlfuncsdoc>
+   RingLibuv Functions Reference <ringlibuvfuncsdoc>
+   RingFreeGLUT Functions Reference <ringfreeglutfuncsdoc>
+   RingOpenGL (OpenGL 1.1) Functions Reference <ringopengl11funcsdoc>
+   RingOpenGL (OpenGL 1.2) Functions Reference <ringopengl12funcsdoc>
+   RingOpenGL (OpenGL 1.3) Functions Reference <ringopengl13funcsdoc>
+   RingOpenGL (OpenGL 1.4) Functions Reference <ringopengl14funcsdoc>
+   RingOpenGL (OpenGL 1.5) Functions Reference <ringopengl15funcsdoc>
+   RingOpenGL (OpenGL 2.0) Functions Reference <ringopengl20funcsdoc>
+   RingOpenGL (OpenGL 2.1) Functions Reference <ringopengl21funcsdoc>
+   RingOpenGL (OpenGL 3.0) Functions Reference <ringopengl30funcsdoc>
+   RingOpenGL (OpenGL 3.1) Functions Reference <ringopengl31funcsdoc>
+   RingOpenGL (OpenGL 3.2) Functions Reference <ringopengl32funcsdoc>
+   RingOpenGL (OpenGL 3.3) Functions Reference <ringopengl33funcsdoc>
+   RingOpenGL (OpenGL 4.0) Functions Reference <ringopengl40funcsdoc>
+   RingOpenGL (OpenGL 4.1) Functions Reference <ringopengl41funcsdoc>
+   RingOpenGL (OpenGL 4.2) Functions Reference <ringopengl42funcsdoc>
+   RingOpenGL (OpenGL 4.3) Functions Reference <ringopengl43funcsdoc>
+   RingOpenGL (OpenGL 4.4) Functions Reference <ringopengl44funcsdoc>
+   RingOpenGL (OpenGL 4.5) Functions Reference <ringopengl45funcsdoc>
+   RingOpenGL (OpenGL 4.6) Functions Reference <ringopengl46funcsdoc>
+   Resources <resources>
\ No newline at end of file
diff --git a/docs/en/target/introduction.txt b/docs/en/target/introduction.txt
new file mode 100644 (file)
index 0000000..b1f13b1
--- /dev/null
@@ -0,0 +1,300 @@
+.. index:: 
+       single: Introduction; Introduction
+
+============
+Introduction
+============
+
+.. image:: thering.jpg
+       :alt: The Ring Programming Language
+
+Welcome to the Ring programming language!
+
+Ring is an Innovative and practical general-purpose multi-paradigm language
+that can be embedded in C/C++ projects, extended using C/C++ code and/or used as standalone language.
+The supported programming paradigms are Imperative, Procedural, Object-Oriented, Functional,
+Meta programming, Declarative programming using nested structures, and Natural programming.
+The language is portable (Windows, Linux, macOS, Android, etc.) and can be used to create
+Console, GUI, Web, Games and Mobile applications. The language is designed to be Simple, Small,
+Flexible and Fast. Its Dynamic Language (Dynamic Typing and Weakly Typed) that compile the source
+code to byte code then execute it by the Ring Virtual Machine, which is integrated with the Ring
+Compiler in one program.
+
+In this chapter we are going to discuss the goals behind the language design and implementation.
+
+.. index:: 
+       pair: Introduction; Motivation
+
+Motivation
+==========
+
+In Nov. 2011, I started to think about creating a new version of the 
+`Programming Without Coding Technology (PWCT) <http://doublesvsoop.sf.net/>`_ software from scratch.
+
+I was interested in creating multi-platform edition of the software beside adding support for
+Web & Mobile development.
+Most of the PWCT source code was written in VFP and the software comes with a simple scripting language for creating the components called (RPWI). 
+The software contains components that support code generation in programming languages 
+like Harbour, C, Supernova & Python.
+
+What I was looking for is a programming language that can be used to build the development 
+environment, provides multi-platform support, more productivity, better performance, can be used for components 
+scripting & can be used for developing different kinds of applications.
+
+Instead of using a mix of programming languages, I decided to use one programming language 
+for creating the development environment, for components scripting & for creating the applications.
+
+I looked at many programming languages like C, C++, Java, C#, Lua, PHP, Python & Ruby. 
+I avoided using C or C++ directly because I want high-level of productivity more than the level
+provided by these languages, also a language behind visual programming environment for novice programmers
+or professionals must be easy to use & productive.
+
+Java & C# are avoided for some reason too!
+I wanted to use a dynamic programming language and these languages are static typing, Java is multi-platform, 
+also C# through Mono, but the use of huge number of classes and forcing the use of Object-Orientation, using
+a verbose language is not right for me. I need a small language, but fast and productive, also I need
+better control on the Garbage Collector (GC), I need a better one that is designed for fast applications.
+
+Lua is small and fast, but it's avoided because I need more powerful language for large applications.
+
+PHP is a Web programming language and it's syntax is very similar to C, this leads to a language not
+general as I want and not simple as I need to have.
+
+Python & Ruby are more like what I need, but I need something more simple, smaller, faster & productive.
+
+Python and Ruby are Case-Sensitive, the list index start counting from 0, you have to define the function
+before calling it, Ruby usage of Object-Orientation and message passing is more than what I need and 
+decrease performance, Python syntax (indentation, using self, :, pass & _) is not good for my goals.
+
+All of these languages are successful languages, and very good for their domains, but what I need 
+is a different language that comes with new ideas and intelligent implementation (Innovative, Ready, Simple, Small, Flexible and Fast).
+
+
+.. index:: 
+       pair: Introduction; Ring and other languages
+
+Ring and other languages
+========================
+
+Ring is an innovative programming language that comes with better support for Natural Language 
+Programming and Declarative Programming.
+The innovation comes in supporting these paradigms with new practical techniques on the top of 
+Object-Oriented Programming and Functional Programming.
+
+Also Ring is influenced by the next programming languages
+
+* Lua
+* Python
+* Ruby
+* C
+* C#
+* BASIC
+* QML
+* xBase
+* Supernova
+
+.. index:: 
+       pair: Introduction; Special Thanks
+
+Special Thanks to Matz
+======================
+
+Special Thanks to Matz (Yukihiro Matsumoto - The Creator of Ruby Programming Language) for spreading
+the word. 
+
+.. image:: matzring.png
+       :alt: Yukihiro Matsumoto tweet about the Ring language
+
+
+.. index:: 
+       pair: Introduction ; History
+
+History
+=======
+
+In Sept. 2013 I started the design and the implementation of the Ring programming language.
+After 21 months of development, In May 2015 the language Compiler & Virtual Machine were ready for use!
+
+After that I spent three months testing the language again, trying to discover any bug to fix, writing better tests,
+by the end of August 2015, all know bugs were fixed, Writing many tests and testing automation helped a lot in 
+getting a stable product.
+
+In September 12, 2015, most of the documentation was written. Before releasing the language I started the marketing by
+writing a post in Arabic language about it to my facebook profile page asking for contributors interested in the language 
+idea after reading a short description, In the same day I got a lot of emails from developers and friends interested to contribute!
+
+Ring 1.0 is released on January 25, 2016
+
+Ring 1.1 is released on October 6, 2016
+
+Ring 1.2 is released on January 25, 2017
+
+Ring 1.3 is released on May 15, 2017
+
+Ring 1.4 is released on June 29, 2017
+
+Ring 1.5 is released on August 21, 2017
+
+Ring 1.6 is released on November 30, 2017
+
+Ring 1.7 is released on January 25, 2018
+
+Ring 1.8 is released on June 25, 2018
+
+Ring 1.9 is released on October 6, 2018
+
+Ring 1.10 is released on January 25, 2019
+
+Ring 1.11 is released on September 15, 2019
+
+Ring 1.12 is released on January 25, 2020
+
+.. index:: 
+       pair: Introduction; Features
+
+Features
+========
+
+The Ring language comes with the next features
+
+.. tip:: The language is ready for production!
+
+* Free Open Source (MIT License)
+* Hybrid Implementation (Compiler + Virtual Machine) 
+* Declarative programming on the top of Object-Oriented programming
+* Natural Language Programming on the top of Object-Oriented programming
+* Natural Language Programming Library
+* Three different styles for writing the code and you can create your style 
+* Syntax Flexibility (You can change the language keywords and operators)
+* The language keywords can be translated from English to other languages (Arabic, French, etc)
+* Compact Syntax, No explicit end for statements (No ; or ENTER is required)
+* Using braces { } we can access objects and use attributes/methods as variables/functions
+* Transparent Implementation (See the Tokens, Grammar, and Byte Code for each program) 
+* Visual Implementation - Developed using Visual Programming (PWCT) 
+* Written in ANSI C (The code is generated + Looks identical to Handwritten Code)
+* A small language
+       * The compiler + The Virtual Machine (20,000 lines of C code)
+       * The other 500,000 lines of code are related to libraries!
+* Portable (Windows, Linux, macOS, Android, etc)
+* Comments (One line & Multi-lines)
+* Not Case-Sensitive
+* Dynamic Typing
+* Weakly typed (Automatic conversion between numbers and strings only)
+* Lexical Scoping (Global, Local & Object State)
+* Default scope for variables inside functions (Local)
+* Default scope for variables outside functions (global)
+* We can have separate global scope for each library or sub project
+* Garbage Collector - Automatic Memory Management (Escape Analysis and Reference Counting)
+* In most cases (90%) using Escape Analysis we don't need to run the Garbage Collector (Faster)
+* Structure Programming
+* Rich control structures & Operators
+* For in get item by reference not value, you can read/edit the item
+* Use exit to go outside from more than one loop (Use it for programming in the small only)
+* Procedures/Functions
+* Main Function (Optional - To avoid using the Global Scope)
+* Call Function before the definition (Top-Down Programming)
+* Recursion
+* Multi-line literals
+* Access (read/write) string letter by index
+* The list index start by 1
+* No keyword to end Functions/Classes/Packages
+* Range operator ex: 1:10 and "a":"z"
+* First Class Variables, Lists, Objects and Functions
+* Store/Copy Lists/Objects by value (Deep Copy)
+* Pass Lists/Objects by reference
+* Native Object-Oriented Support
+
+       * Encapsulation
+       * Setter/Getter (optional)
+       * private state (optional)
+       * Instantiation
+       * Polymorphism 
+       * Composition 
+       * Inheritance (Single Inheritance)
+       * Operator Overloading
+       * Packages
+
+* Reflection and Meta-programming
+* Clear program structure (Statements then functions then packages & classes)
+* Exception Handling
+* Eval() to execute code during run-time
+* 8-bit clean, work on binary data directly
+* I/O commands
+* Math functions
+* String functions
+* List functions
+* File processing functions
+* Database support (ODBC, SQLite, MySQL & PostgreSQL)
+* Security Functions (OpenSSL)
+* Internet Functions (LibCurl)
+* Zip Functions
+* CGI Library (Written in Ring)
+
+       * HTTP Get
+       * HTTP Post
+       * File upload
+       * Cookies
+       * URL Encode
+       * HTML Templates
+       * HTML Special Characters
+       * HTML Generation using Functions
+       * HTML Generation using Classes
+       * CRUD Example (using MVC)
+       * Users Example (Register, Login and Check)
+
+* Deploying web applications in the Cloud
+* Extension using C/C++ (Simple API)
+* Embedding the language in C/C++ programs
+* Embedding Ring in Ring
+* Comes with code generator (Written in Ring) to quickly wrap C/C++ Libraries
+       * Used to Support Allegro by creating RingAllegro
+       * Used to Support LibSDL by creating RingLibSDL
+       * Used to Support Qt by creating RingQt
+* Create 2D Games for Desktop and Mobile (Using the Allegro Library)
+* RingLibSDL Extension
+* Comes with simple Game Engine for 2D Games
+* RingOpenGL Extension
+* RingFreeGLUT Extension
+* RingRayLib Extension
+* Create GUI Applications for Desktop and Mobile (Using the Qt Framework)
+* Comes with IDE contains the Code Editor (Ring Notepad) and the Form Designer
+* RingREPL (Read-Eval-Print-Loop)
+* Tracing and Debugging
+* Type Hints Library
+* Comes with Ring2EXE to distribute applications
+* RingLibuv Extension
+* No Global Interpreter (VM) lock (No GIL) - Better for threads and concurrency (Faster)
+* Comes with RingPM (Package Manager)
+* Many Samples and Applications
+* Complete Documentation.
+
+License
+=======
+
+The Ring Programming Language
+
+http://ring-lang.net/
+
+Version 1.12
+
+The MIT License (MIT)
+
+Copyright (c) Mahmoud Fayed
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/docs/en/target/juliancalendar.png b/docs/en/target/juliancalendar.png
new file mode 100644 (file)
index 0000000..39d9f40
Binary files /dev/null and b/docs/en/target/juliancalendar.png differ
diff --git a/docs/en/target/knighttour.png b/docs/en/target/knighttour.png
new file mode 100644 (file)
index 0000000..ca88832
Binary files /dev/null and b/docs/en/target/knighttour.png differ
diff --git a/docs/en/target/languagedesign.txt b/docs/en/target/languagedesign.txt
new file mode 100644 (file)
index 0000000..c1c850e
--- /dev/null
@@ -0,0 +1,588 @@
+.. index:: 
+       single: Language Design; Introduction
+
+===============
+Language Design
+===============
+
+In this chapter we will learn about the basic concepts behind the language design.
+
+.. index:: 
+       pair: Language Design; Why Ring?
+
+Why Ring?
+=========
+
+The language is simple, trying to be natural, encourage organization and comes 
+with transparent and visual implementation. It comes with compact syntax and a
+group of features that enable the programmer to create natural interfaces and
+declarative domain-specific languages in a fraction of time. It is very small,
+fast and comes with smart garbage collector that puts the memory under the 
+programmer control. It supports many programming paradigms, comes with useful 
+and practical libraries. The language is designed for productivity and developing
+high quality solutions that can scale.
+
+.. index:: 
+       pair: Language Design; Designed for a clear goal
+
+Designed for a Clear Goal
+=========================
+
+* Applications programming language.
+* Productivity and developing high quality solutions that can scale.
+* Small and fast language that can be embedded in C/C++ projects.
+* Simple language that can be used in education and introducing Compiler/VM concepts.
+* General-Purpose language that can be used for creating domain-specific libraries, frameworks and tools.
+* Practical language designed for creating the next version of the Programming Without Coding Technology software.
+
+.. index:: 
+       pair: Language Design; Simple
+
+Simple
+======
+
+Ring is a very simple language, and has a very straightforward syntax. It encourages programmers to program without boilerplate code
+
+.. code-block:: ring
+
+       See "Hello, World!" 
+
+The Main function is optional and will be executed after the statements, and is useful for using the local scope.
+
+.. code-block:: ring
+
+       Func Main
+               See "Hello, World!" 
+               
+Uses Dynamic Typing and Lexical scoping. No $ is required before the variable name! 
+You can use the '+' operator for string concatenation and the language is weakly typed and will convert automatically between numbers and strings based on the context.
+
+.. code-block:: ring
+
+       nCount = 10     # Global variable
+       Func Main
+               nID = 1 # Local variable
+               See "Count = " + nCount + nl + " ID = " + nID
+
+.. index:: 
+       pair: Language Design; Trying to be natural
+
+Trying to be natural
+====================
+
+Ring is not case-sensitive
+
+.. code-block:: ring
+
+
+       See "Enter your name ? " 
+       Give name
+       See "Hello " + Name     # Name is the same as name 
+                       
+The list index starts from 1
+
+.. code-block:: ring
+
+       aList = ["one","two","three"]
+       See aList[1]    # print one
+                       
+Call functions before definition
+
+.. code-block:: ring
+
+
+       one() 
+       two() 
+       three()
+       Func one 
+               See "One" + nl
+       Func two 
+               See "two" + nl
+       Func three 
+               See "three" + nl
+                       
+The assignment operator uses Deep copy (no references in this operation)
+
+.. code-block:: ring
+
+       aList = ["one","two","three"]
+       aList2 = aList
+       aList[1] = 1
+       see alist[1]    # print 1
+       see aList2[1]   # print one
+                               
+Pass numbers and strings by value, but pass lists and objects by reference. 
+The for in loop can update the list items.
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3]
+               update(aList)
+               see aList       # print one two three
+
+       Func update aList
+               for x in aList
+                       switch x
+                       on 1 x = "one"
+                       on 2 x = "two"
+                       on 3 x = "three"
+                       off
+               next
+                       
+Using Lists during definition
+
+.. code-block:: ring
+
+       aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
+       see aList       # print 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
+                       
+Exit from more than one loop
+
+.. code-block:: ring
+
+       for x = 1 to 10
+                       for y = 1 to 10
+                                       see "x=" + x + " y=" + y + nl
+                                       if x = 3 and y = 5
+                                                       exit 2     # exit from 2 loops
+                                       ok
+                       next
+       next
+       
+.. index:: 
+       pair: Language Design; Encourage Organization
+
+Encourage Organization
+======================
+
+The language encourage organization, Forget bad days using languages where the programmer start with function then class then function and a strange mix between things! 
+
+Each source file follow the next structure 
+
+* Load Files
+* Statements and Global Variables
+* Functions
+* Packages and Classes
+
+This enable us to use Packages, Classes and Functions without the need to use a keyword to end these components. 
+
+We can write one line comments and multi-line comments 
+The comment starts with # or // 
+Multi-line comments are written between /* and */
+
+.. code-block:: ring
+
+       /* 
+               Program Name : My first program using Ring
+               Date         : 2015.05.08
+       */
+
+       See "What is your name? "       # print message on screen
+       give cName                      # get input from the user
+       see "Hello " + cName            # say hello!
+
+       // See "Bye!"
+                               
+
+.. index:: 
+       pair: Language Design; Compact Syntax
+
+Compact Syntax
+==============
+
+The language is not line sensitive, you don't need to write ; after statements, also you don't need to press ENTER or TAB, so we can write the next code
+
+.. code-block:: ring
+
+
+       See "The First Message" See " Another message in the same line! " + nl
+       See "Enter your name?" Give Name See "Hello " + Name
+                       
+The next code create a class called Point contains three attributes X,Y and Z. No keywords is used to end the package/class/function definition. Also, we can write the attributes names directly below the class name.
+
+.. code-block:: ring
+
+       Class Point X Y Z
+                       
+We can use classes and functions before their definition, In this example we will create new object, set the object attributes then print the object values.
+
+.. code-block:: ring
+
+       o1 = New point  o1.x=10    o1.y=20   o1.z=30    See O1  Class Point X Y Z
+                       
+Instead of using the dot '.' operator to access the object attributes and methods we can use braces { } to access the object, then we can use the object attributes and methods.
+
+.. code-block:: ring
+
+       o1 = New point { x=10 y=20 z=30 } See O1  Class Point X Y Z
+                        
+Now we will call a method after accessing the object using { }
+
+.. code-block:: ring
+
+        
+       oPerson = new Person
+       {
+               Name = "Somebody"
+               Address = "Somewhere"
+               Phone = "0000000"
+               Print()                 # here we call the Print() method
+       }
+       Class Person Name Address Phone
+               Func Print
+                       See "Name :" + name + nl +
+                               "Address :" + Address + nl +
+                               "Phone : " + phone + nl
+
+When we use { } to access the object then write any attribute name, the language will check the class for any setter/getter methods that will be called automatically.
+
+.. code-block:: ring
+
+
+       New Number {
+                       See one         # Execute GetOne()
+                       See two         # Execute GetTwo()
+                       See three       # Execute GetThree()
+       }
+       Class Number one two three
+               Func GetOne
+                       See "Number : One" + nl
+                       return 1
+               Func GetTwo
+                       See "Number : Two" + nl
+                       return 2
+               Func GetThree
+                       See "Number : Three" + nl
+                       return 3        
+                       
+.. index:: 
+       pair: Language Design; Define Natural Statements
+
+Define Natural Statements
+=========================
+
+After the object access using { } if the class contains a method called BraceEnd() it will be executed!
+
+.. code-block:: ring
+
+
+       TimeForFun = new journey
+       # The first surprise!
+       TimeForFun {
+               Hello it is me          # What a beautiful programming world!
+       }
+       # Our Class
+       Class journey
+               hello=0 it=0 is=0 me=0
+               func GetHello
+                       See "Hello" + nl
+               func braceEnd
+                       See "Goodbye!" + nl
+
+We can execute code written in strings using the Eval() function
+
+.. code-block:: ring
+
+
+       cCode = "See 'Code that will be executed later!' "
+       Eval(cCode)     # execute the code to print the message
+
+We can create a list then execute code generated from that list
+
+.. code-block:: ring
+
+       aWords = ["hello","it","is","me"]
+       for word in aWords cCode=word+"=0" eval(cCode) next
+
+We can read text files using the Read(cFileName) function and we can write files using the Write(cFileName,cString) function.
+
+.. code-block:: ring
+
+       See "Enter File Name:" Give cFileName See Read(cFileName) # Print the file content
+
+The next example presents how to create a class that defines two instructions
+The first instruction is : I want window
+The second instruction is : Window title = Expression 
+Also keywords that can be ignored like the ‘the’ keyword 
+
+.. code-block:: ring
+
+
+       New App
+       {
+               I want window
+               The window title = "hello world"
+       }
+
+       Class App
+
+               # Attributes for the instruction I want window
+                       i want window
+                       nIwantwindow = 0
+               # Attributes for the instruction Window title
+               # Here we don't define the window attribute again
+                       title
+                       nWindowTitle = 0
+               # Keywords to ignore, just give them any value
+                       the=0
+
+               func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+               func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+               func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+               func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+               
+To complete the previous example, use read() to get the content of a file that contains
+
+.. code-block:: ring
+
+       I want window
+       The window title = "hello world"
+
+Then use eval() to execute the content of that file!.
+Also, you can update the methods GetWindow() and SetTitle() to create Real windows using the GUI Library
+
+
+.. index:: 
+       pair: Language Design; Define Declarative Languages
+
+Define Declarative Languages
+============================
+
+
+We learned how to use Natural statements to execute our code and using the same features we can use nested structures to execute our code.
+
+The next example from the Web library, generate HTML document using the Bootstrap library. No HTML code is written directly in this example, we created a similar language (just as example) Then using this declarative language that uses nested structures, we generated the HTML Document.. 
+The idea in this example is that the GetDiv() and GetH1() methods return an object that we can access using {} and after each object access the method BraceEnd() will be executed to send the generated HTML to the parent object until we reach to the root where BraceEnd() will print the output.
+
+.. code-block:: ring
+
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+
+         BootStrapWebPage()
+         {
+               div
+               {
+                 classname = :container
+                 div
+                 {
+                       classname = :jumbotron
+                       H1 {   text("Bootstrap Page")   }
+                 }
+                 div
+                 {
+                       classname = :row
+                       for x = 1 to 3
+                         div
+                         {
+                           classname = "col-sm-4"
+                           H3 { html("Welcome to the Ring programming language") }
+                           P  { html("Using a scripting language is very fun!") }
+                         }
+                       next
+                 }
+               }
+         }
+
+The classes that power the declarative interface looks like this
+
+.. code-block:: ring
+
+       Class Link from ObjsBase
+               title  link
+               Func braceend                   
+                       cOutput = nl+GetTabs() + "<a href='" + 
+                                 Link + "'> "+ Title + " </a> " + nl                   
+
+       Class Div from ObjsBase 
+               Func braceend
+                       cOutput += nl+'<div'
+                       addattributes()
+                       AddStyle()
+                       getobjsdata()
+                       cOutput += nl+"</div>" + nl
+                       cOutput = TabMLString(cOutput)
+
+.. index:: 
+       pair: Language Design; Syntax Flexibility
+
+Syntax Flexibility
+==================
+
+Ring comes with many styles for writing your source code!
+
+Also you can change the language keywords and operators and create your custom style!
+
+        
+.. index:: 
+       pair: Language Design; Transparent Implementation
+
+Transparent Implementation
+==========================
+
+Ring comes with transparent implementation. We can know what is happening in each compiler stage and what is going on during the run-time by the Virtual Machine Example : ring helloworld.ring -tokens -rules -ic
+
+.. code-block:: ring
+
+       See "Hello, World!" 
+                       
+Output
+
+.. code-block:: ring
+
+
+       ==================================================================
+       Tokens - Generated by the Scanner
+       ==================================================================
+
+          Keyword : SEE
+          Literal : Hello, World!
+          EndLine
+
+       ==================================================================
+
+       ==================================================================
+       Grammar Rules Used by The Parser
+       ==================================================================
+
+       Rule : Program --> {Statement}
+
+       Line 1
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       ==================================================================
+
+
+
+       ==================================================================
+       Byte Code - Before Execution by the VM
+       ==================================================================
+
+                PC      OPCode        Data
+
+                 1     FuncExE
+                 2       PushC   Hello, World!
+                 3       Print
+                 4  ReturnNull
+
+       ==================================================================
+
+       Hello, World!
+                               
+.. index:: 
+       pair: Language Design; Visual Implementation
+
+Visual Implementation
+=====================
+
+The Ring programming language is designed using the PWCT visual programming tool 
+and you will find the visual source of the language in the folder "visualsrc" - *.ssf 
+files and the generated source code (In the C Language) in the src folder and 
+the include folder.
+
+The next screen shot from the ring_vm.ssf file (Generate ring_vm.c and ring_vm.h) 
+
+.. image:: visualsrc1.jpg
+
+The next screen shot from the ring_list.ssf file (Generate ring_list.c and ring_list.h) 
+
+.. image:: visualsrc2.JPG
+
+.. index:: 
+       pair: Language Design; Smart Garbage Collector
+
+Smart Garbage Collector
+=======================
+
+Avoid memory problems :- 
+
+* Invalid Memory Access
+* Memory leaks
+* Uninitialized Memory Access
+* Dangling pointer
+
+Rules :- 
+
+* Global variables always stay in the memory, until you delete these variables using the assignment statement.
+* Local variables always deleted after the end of the function.
+* The programmer have full control on when to delete the variable from the memory using the Assignment statement.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [1,2,3,4,5]
+       aList = "nice"
+                       
+After the second line directly, The list [1,2,3,4,5] will be deleted from the memory and we will have a string "nice" 
+
+* The programmer can call the function callgc() to force running the garbage collector.
+* If we have a reference to a variable (when we pass objects and lists to functions), then deleting variables will be based on reference counting, if no references everything will be deleted, but if we have a reference, the data will stay in memory.
+
+
+.. index:: 
+       pair: Language Design; No Global Interpreter (VM) Lock - No GIL
+
+No Global Interpreter (VM) Lock - No GIL
+========================================
+
+When we use threads in Ring applications, We don't have global interpreter (VM) lock (No GIL)
+
+So threads can work in parallel and execute Ring instructions at the same time
+
+This is better for threads and concurrency (More Faster!)
+
+.. index:: 
+       pair: Language Design; Fast Enough For Many Applications
+
+Fast Enough For Many Applications
+=================================
+
+Ring is designed to be a simple, small and flexible language in the first place, but also it is fast enough for many applications.
+
+Ring can do each of the next tasks in around 1 second using normal computers in the market during the last 5 years
+
+(1) Compiling 100,000 lines of code
+(2) Executing empty loop that count from 1 to 10,000,000
+(3) Executing 1000 search operation using linear search in a list contains 100,000 items, trying to find the last item (The worst case)
+(4) Creating list contains 1,000,000 items then summing all of the list items
+(5) Adding 20,000 items to the ListWidget in GUI applications
+(6) Adding 5,000 nodes to the TreeWidget in GUI applications
+(7) Printing 10,000 messages to the terminal in Console applications
+
+Also when we need more speed we can use C/C++ extensions! 
\ No newline at end of file
diff --git a/docs/en/target/libcurl.txt b/docs/en/target/libcurl.txt
new file mode 100644 (file)
index 0000000..4bb3ace
--- /dev/null
@@ -0,0 +1,209 @@
+.. index:: 
+       single: RingLibCurl; Introduction
+
+=================
+Using RingLibCurl
+=================
+
+In this chapter we will learn about using RingLibCurl
+
+.. index:: 
+       pair: RingLibCurl; Get Request
+
+Get Request
+===========
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"     
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_URL, "http://ring-lang.sf.net")
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+
+.. index:: 
+       pair: RingLibCurl; Post Request
+
+Post Request
+============
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       cPostThis = "page=4&Number1=4&Number2=5"
+       curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3")
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+.. index:: 
+       pair: RingLibCurl; Facebook Login
+
+Facebook Login 
+==============
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       see "Enter Email : " give $login_email 
+       See "Enter Password : " give $login_pass
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_URL, 'https://www.facebook.com/login.php')
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS,'charset_test=j u s t a t e s t'+
+       ' &email='+urlencode($login_email)+'&pass='+
+       urlencode($login_pass)+'&login=Login')
+       curl_easy_setopt(curl, CURLOPT_POST, 1)
+       curl_easy_setopt(curl, CURLOPT_HEADER, 0)
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt")
+       curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt")
+       curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U;"+
+       " Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3")
+       curl_easy_setopt(curl, CURLOPT_REFERER, "http://www.facebook.com")
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE)
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2)
+
+       mylist = curl_slist_append(NULL,'Accept-Charset: utf-8')
+       curl_slist_append(mylist,'Accept-Language: en-us,en;q=0.7,bn-bd;q=0.3')
+       curl_slist_append(mylist,'Accept: text/xml,application/xml,'+
+       'application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5')
+       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, mylist)
+
+       curl_easy_setopt(curl, CURLOPT_COOKIESESSION, false)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+       Func URLEncode cStr
+               cOut = ""
+               for x in cStr
+                       if isalnum(x)
+                               cOut += x
+                       but x = " "
+                               cOut += "+"
+                       else
+                               cOut += "%"+str2hex(x)
+                       ok
+               next
+               return cOut     
+
+.. index:: 
+       pair: RingLibCurl; Save output to string
+
+Save Output to String
+=====================
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_URL, "http://ring-lang.sf.net")
+
+       cOutput = curl_easy_perform_silent(curl)
+
+       See "Output:" + nl
+       see cOutput
+
+       curl_easy_cleanup(curl)
+
+.. index:: 
+       pair: RingLibCurl; Get Stock Data From Yahoo
+
+Get Stock Data From Yahoo
+=========================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libcurl.ring"
+
+       ### Part 1 --- Get Crumb and Cookie -----------------------------------------
+
+       See "Start curl_easy_init(): "+ nl
+       curl = curl_easy_init()                     ### >>> HANDLE >>> 01006BD0  CURL  0
+
+               curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+               curl_easy_setopt(curl, CURLOPT_COOKIEJAR,  "cookies.txt")
+               curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt")
+               curl_easy_setopt(curl, CURLOPT_URL, "https://finance.yahoo.com/quote/AMZN/history")
+
+               ###  HTML Data >>> STDOUT Window,  Use curl_easy_perform_silent >>> String
+
+       cOutput = curl_easy_perform_silent(curl)    ### GO Get Data >>> String
+
+
+       ###   Extract Crumb from data
+       ###  "CrumbStore":{"crumb":"abcdefghijk"},
+
+       if cOutput != NULL
+
+               newStr1     = substr(cOutput, substr(cOutput, '"CrumbStore":{"crumb":"' ), 48 )
+                       nPosS   = substr(newStr1, ':"' ) ;  ### Start of crumb -2
+                       nPosE   = substr(newStr1, '"}' ) ;  ### End   of crumb
+                       nCount  = nPosE - nPosS -2          ### size  of crumb
+               myCrumb     = substr(newStr1, nPosS +2, nCount)
+
+               See "myCrumb.: |"+ myCrumb +"|" +nl
+               
+               ### UniCode "\u002F" replace it with "/"
+                       if substr( myCrumb, "\u002F")
+                          myCrumb = substr( myCrumb, "\u002F", "/")
+                          See "myCrumb2: |"+ myCrumb +"|"+ nl
+                       ok
+
+       else
+               See "No Connectivity to Yahoo. Looking for Cookie and Crumb." +nl +nl
+       ok
+
+                                       
+       ### Part 2 --- Send URL with Crumb, and Cookie -----------------------------------------
+
+               ### Send URL+Crumb to Yahoo to fetch 1st stock history data,
+
+               $url = "https://query1.finance.yahoo.com/v7/finance/download/AMZN"+
+                       "?period1=1277856000&period2=1498777545&interval=1wk" + 
+                       "&events=history&crumb=" + myCrumb
+
+               curl_easy_setopt(curl, CURLOPT_URL, $url);
+               cStr = curl_easy_perform_silent(curl)
+               See cStr 
+
+       curl_easy_cleanup(curl)  ### REMEMBER to CLOSE  CURL   
+
+
+Output:
+
+.. code-block:: ring
+
+       myCrumb.: |sEEeW97mxvN|
+       Date,Open,High,Low,Close,Adj Close,Volume
+       2010-07-05,110.650002,117.480003,109.000000,117.260002,117.260002,21000400
+       2010-07-12,117.809998,124.879997,117.320000,118.489998,118.489998,29407300
+       2010-07-19,118.379997,121.250000,105.800003,118.870003,118.870003,74252100
diff --git a/docs/en/target/libsdl.txt b/docs/en/target/libsdl.txt
new file mode 100644 (file)
index 0000000..5d269be
--- /dev/null
@@ -0,0 +1,387 @@
+.. index:: 
+       single: RingLibSDL; Introduction
+
+=================
+Using RingLibSDL
+=================
+
+In this chapter we will learn about using RingLibSDL to create games based on the
+LibSDL, SDLImage, SDLTTF and SDLMixer libraries.
+
+.. tip:: RingLibSDL is not distributed with the binary releases for desktop which uses RingAllegro
+
+.. note:: To use RingLibSDL, Check ring/android/ringlibsdl folder.
+
+.. index:: 
+       pair: RingLibSDL; Create Window
+
+Create Window
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       SDL_Delay(2000)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Display Image
+
+Display Image
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = SDL_LoadBMP("hello.bmp")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy2(ren,tex)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyTexture(tex)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Switch Between Two Images
+
+Switch between two images
+=========================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = SDL_LoadBMP("hello.bmp")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       bmp = SDL_LoadBMP("hello2.bmp")
+       tex2 = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+
+       for x = 1 to 10 showtex(tex) showtex(tex2) next
+
+       SDL_DestroyTexture(tex)
+       SDL_DestroyTexture(tex2)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+       func showtex oTex
+               SDL_RenderClear(ren)
+               SDL_RenderCopy2(ren,oTex)
+               SDL_RenderPresent(ren)
+               SDL_Delay(200)
+
+.. index:: 
+       pair: RingLibSDL; Draw Rectangle
+
+Draw Rectangle
+==============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       SDL_RenderClear(ren)
+       rect = sdl_new_sdl_rect()
+       sdl_set_sdl_rect_x(rect,10)
+       sdl_set_sdl_rect_y(rect,10)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_SetRenderDrawColor(ren,255,255,255,255)
+       SDL_RenderDrawRect(ren,rect)
+       sdl_destroy_sdl_rect(rect)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Display PNG Images
+
+Display PNG Images
+==================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = IMG_Load("hello3.png")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy2(ren,tex)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyTexture(tex)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Use TTF Fonts
+
+Use TTF Fonts
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       SDL_RenderClear(ren)
+
+       TTF_Init()
+       font = TTF_OpenFont("pirulen.ttf", 16)
+       color = sdl_new_sdl_color()
+       sdl_set_sdl_color_r(color,0)
+       sdl_set_sdl_color_g(color,255)
+       sdl_set_sdl_color_b(color,0)
+       text = TTF_RenderText_Solid(font,"Welcome to the Ring language",color)
+       surface = SDL_GetWindowSurface(win)
+       SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+       SDL_UpdateWindowSurface(win)
+       SDL_Delay(2000)
+
+       SDL_Destroy_SDL_Color(color)
+       SDL_FreeSurface(text)
+       TTF_CloseFont(font)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Display Transparent Images
+
+Display Transparent Images
+==========================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+
+       flags = IMG_INIT_JPG | IMG_INIT_PNG
+       IMG_Init(flags)
+
+       win = SDL_CreateWindow("Hello World!", 100, 100, 800, 600, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+
+       bmp = IMG_Load("stars.jpg")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy(ren,tex,nullpointer(),nullpointer())
+       SDL_DestroyTexture(tex)
+
+       bmp = IMG_Load("player.png")
+       # Image - Set Transparent color (white)
+       myformat = sdl_get_sdl_surface_format(bmp)
+       white = SDL_MapRGB(myformat, 255, 255, 255)
+       SDL_SetColorKey(bmp, SDL_True, white)
+
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       rect = sdl_new_sdl_rect()
+       sdl_set_sdl_rect_x(rect,0)
+       sdl_set_sdl_rect_y(rect,0)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_RenderCopy(ren,tex,nullpointer(),rect)
+
+       SDL_SetTextureBlendMode(tex,2)
+       SDL_SetTextureAlphaMod(tex,255)
+       sdl_set_sdl_rect_x(rect,200)
+       sdl_set_sdl_rect_y(rect,200)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_RenderCopy(ren,tex,nullpointer(),rect)
+
+       SDL_DestroyTexture(tex)
+       SDL_Destroy_SDL_Rect(rect)
+
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Close Window Event
+
+Close Window Event
+==================
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               thevent = sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on sdl_get_sdl_quit()
+                               exit
+                       on sdl_get_sdl_keydown()
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok
+                               
+               off
+       end
+
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; Mouse Events
+
+Mouse Events
+============
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+
+       win = SDL_CreateWindow("Mouse Events ", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+
+       TTF_Init()
+       font = TTF_OpenFont("pirulen.ttf", 16)
+       color = sdl_new_sdl_color()
+       sdl_set_sdl_color_r(color,0)
+       sdl_set_sdl_color_g(color,255)
+       sdl_set_sdl_color_b(color,0)
+
+       surface = SDL_GetWindowSurface(win)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               cMsg = ""
+               sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on SDL_QUIT
+                               exit
+                       on SDL_KEYDOWN
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok
+                       on SDL_MOUSEBUTTONDOWN
+                               if sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_LEFT
+                                       SDL_SETWINDOWTITLE(win, " Button_Left_Down " )
+                               but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_MIDDLE
+                                       SDL_SETWINDOWTITLE(win,  " Button_Middle_Down " )
+                               but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_RIGHT
+                                       SDL_SETWINDOWTITLE(win,  " Button_Right_Down " )
+                               ok
+                       on SDL_MOUSEMOTION
+                               sdl_fillrect(surface,nullpointer(),0)
+                               if sdl_get_sdl_event_motion_xrel(myevent) < 0
+                                       cMsg += " Left "
+                               else
+                                       cMsg += " Right "
+                               ok                      
+                               if sdl_get_sdl_event_motion_yrel(myevent) < 0
+                                       cMsg += " Up "
+                               else
+                                       cMsg += " Down "
+                               ok      
+                               cMsg += " x = " + sdl_get_sdl_event_motion_x(myevent)
+                               cMsg += " y = " + sdl_get_sdl_event_motion_y(myevent)
+                               showmsg(cMsg)   
+               off
+       end
+
+       SDL_Destroy_SDL_Color(Color)
+       TTF_CloseFont(font)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+       func showmsg mymsg
+               text = TTF_RenderText_Solid(font,mymsg,color)
+               SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+               SDL_UpdateWindowSurface(win)
+               SDL_FreeSurface(text)
+
+.. index:: 
+       pair: RingLibSDL; Play Sound
+
+Play Sound
+==========
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT , 2, 10000)
+       Mix_AllocateChannels(4)
+       sound = Mix_LoadWav( "sound.wav" )
+       Mix_VolumeChunk(sound,1)
+       Mix_PlayChannel(1,sound,0)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               thevent = sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on sdl_get_sdl_quit()
+                               exit
+                       on sdl_get_sdl_keydown()
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok                     
+               off
+       end
+
+       Mix_FreeChunk( sound )
+       Mix_CloseAudio()
+       Mix_Quit()
+       SDL_DestroyWindow(win)
+       SDL_Quit()
\ No newline at end of file
diff --git a/docs/en/target/libuv.txt b/docs/en/target/libuv.txt
new file mode 100644 (file)
index 0000000..e02844a
--- /dev/null
@@ -0,0 +1,507 @@
+.. index:: 
+       single: RingLibuv; Introduction
+
+===============
+Using RingLibuv
+===============
+
+In this chapter we will learn about using RingLibuv
+
+.. note:: To use RingLibuv, Check ring/extensions/ringlibuv folder.
+
+Information from the library website: http://libuv.org/
+
+Libuv is a multi-platform support library with a focus on asynchronous I/O. 
+
+Feature highlights
+
+* Full-featured event loop backed by epoll, kqueue, IOCP, event ports.
+* Asynchronous TCP and UDP sockets
+* Asynchronous DNS resolution
+* Asynchronous file and file system operations
+* File system events
+* ANSI escape code controlled TTY
+* IPC with socket sharing, using Unix domain sockets or named pipes (Windows)
+* Child processes
+* Thread pool
+* Signal handling
+* High resolution clock
+* Threading and synchronization primitives
+
+.. index:: 
+       pair: RingLibuv; First Application using RingLibuv
+
+First Application using RingLibuv
+=================================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       func main
+
+               myloop = new_uv_loop_t()
+               uv_loop_init(myloop)
+               ? "Now quitting"
+               uv_run(myloop, UV_RUN_DEFAULT)
+               uv_loop_close(myloop)
+               destroy_uv_loop_t(myloop)
+
+Output:
+
+.. code-block:: none
+
+       Now quitting
+
+
+.. index:: 
+       pair: RingLibuv; The Events Loop
+
+The Events Loop
+===============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       counter = 0
+       idler = NULL 
+
+       func main
+               idler = new_uv_idle_t()
+               uv_idle_init(uv_default_loop(), idler)
+               uv_idle_start(idler, "wait()")
+               ? "Idling..."
+               uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+               uv_loop_close(uv_default_loop());
+               destroy_uv_idle_t(idler)
+
+       func wait
+               counter++
+               if counter >= 100000
+                       uv_idle_stop(idler)
+               ok
+
+Output:
+
+.. code-block:: none
+
+       Idling...
+
+.. index:: 
+       pair: RingLibuv; Server Example
+
+Server Example
+==============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Server Side"
+
+       DEFAULT_PORT    = 13370
+       DEFAULT_BACKLOG = 1024
+
+       addr    = new_sockaddr_in()
+       server  = NULL
+       client  = NULL
+       myloop  = NULL
+
+       func main
+               myloop = uv_default_loop()
+               server = new_uv_tcp_t()
+               uv_tcp_init(myloop, server)
+               uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+               uv_tcp_bind(server, addr, 0)
+               r = uv_listen(server, DEFAULT_BACKLOG, "newconnection()")
+               if r 
+                       ? "Listen error " + uv_strerror(r)
+                       return 1
+               ok
+               uv_run(myloop, UV_RUN_DEFAULT)
+               destroy_uv_tcp_t(server)
+               destroy_uv_sockaddr_in(addr)
+
+       func newconnection
+               ? "New Connection"
+               aPara   = uv_Eventpara(server,:connect)
+               nStatus = aPara[2]
+               if nStatus < 0
+                       ? "New connection error : " + nStatus 
+                       return 
+               ok
+               client = new_uv_tcp_t()
+               uv_tcp_init(myloop, client)
+               if uv_accept(server, client) = 0 
+                               uv_read_start(client, uv_myalloccallback(), "echo_read()")
+               ok
+
+       func echo_read 
+               aPara = uv_Eventpara(client,:read)
+               nRead = aPara[2]
+               buf   = aPara[3]
+               if nRead > 0
+                       req = new_uv_write_t()
+                               wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                       uv_write(req, client, wrbuf, 1, "echo_write()")
+                       ? uv_buf2str(wrbuf)
+                       message = "message from the server to the client"
+                       buf = new_uv_buf_t()
+                       set_uv_buf_t_len(buf,len(message))
+                       set_uv_buf_t_base(buf,varptr("message","char *"))
+                       uv_write(req, client, buf, 1, "echo_write()")
+               ok
+
+       func echo_write
+               aPara = uv_Eventpara(client,:read)
+               req   = aPara[1]
+
+Output:
+
+When we run the client, We will see the message "New Connection"
+
+Then the message "hello from the client"
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side
+       New Connection
+       hello from the client
+
+.. index:: 
+       pair: RingLibuv; Client Example
+
+Client Example
+==============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Client Side"
+
+       DEFAULT_PORT    = 13370
+       DEFAULT_BACKLOG = 1024
+
+       addr    = new_sockaddr_in()
+       connect = NULL
+       buffer  = null
+       socket  = null
+
+       func main
+               myloop  = uv_default_loop()
+               Socket  = new_uv_tcp_t()
+               connect = new_uv_connect_t()
+               uv_tcp_init(myloop, Socket)
+               uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+               uv_tcp_connect(connect,Socket, addr, "connect()")
+               uv_run(myloop, UV_RUN_DEFAULT)
+               destroy_uv_tcp_t(socket)
+               destroy_uv_connect_t(connect)
+
+       func connect 
+               ? "Client: Start Connection"
+               aPara   = uv_Eventpara(connect,:connect)
+               req     = aPara[1]
+               nStatus = aPara[2]
+               if nStatus = -1
+                       ? "Error : on_write_end "
+                       return 
+               ok
+               buf = new_uv_buf_t()
+               message = "hello from the client"
+               set_uv_buf_t_len(buf,len(message))
+               set_uv_buf_t_base(buf,varptr("message","char *"))
+               tcp       = get_uv_connect_t_handle(req)
+               write_req = new_uv_write_t()
+               buf_count = 1
+               uv_write(write_req, tcp, buf, buf_count, "on_write_end()")
+
+       func on_write_end
+                       uv_read_start(socket, uv_myalloccallback(), "echo_read()")
+
+       func echo_read 
+               aPara = uv_Eventpara(socket,:read)
+               nRead = aPara[2]
+               buf   = aPara[3]
+               if nRead > 0
+                               wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread);
+                       ? uv_buf2str(wrbuf)
+               ok
+
+Output:
+
+We will run the client after the server
+
+.. code-block:: none
+
+       Testing RingLibuv - Client Side
+       Client: Start Connection
+       hello from the client
+       message from the server to the client
+
+.. index:: 
+       pair: RingLibuv; Server Example using Classes
+
+Server Example Using Classes
+============================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Server Side - Using Classes"
+
+       open_object(:MyServer)
+
+       class MyServer from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               server  = NULL
+               client  = NULL
+               myloop  = NULL
+               
+               func start
+                       myloop = uv_default_loop()
+                       server = new_uv_tcp_t()
+                       uv_tcp_init(myloop, server)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_bind(server, addr, 0)
+                       r = uv_listen(server, DEFAULT_BACKLOG, Method(:newconnection) )
+                       if r 
+                               ? "Listen error " + uv_strerror(r)
+                               return 1
+                       ok
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(server)
+                       destroy_uv_sockaddr_in(addr)
+               
+               func newconnection
+                       ? "New Connection"
+                       aPara   = uv_Eventpara(server,:connect)
+                       nStatus = aPara[2]
+                       if nStatus < 0
+                               ? "New connection error : " + nStatus 
+                               return 
+                       ok
+                       client = new_uv_tcp_t()
+                       uv_tcp_init(myloop, client)
+                       if uv_accept(server, client) = 0 
+                                       uv_read_start(client, uv_myalloccallback(), 
+                                                               Method(:echo_read))
+                       ok
+               
+               func echo_read 
+                       aPara = uv_Eventpara(client,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                               req = new_uv_write_t()
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                               uv_write(req, client, wrbuf, 1, Method(:echo_write))
+                               ? uv_buf2str(wrbuf)
+                               message = "message from the server to the client"
+                               buf = new_uv_buf_t()
+                               set_uv_buf_t_len(buf,len(message))
+                               set_uv_buf_t_base(buf,varptr("message","char *"))
+                               uv_write(req, client, buf, 1, Method(:echo_write))
+                       ok
+               
+               func echo_write
+                       aPara = uv_Eventpara(client,:read)
+                       req   = aPara[1]
+       
+
+Output:
+
+When we run the client, We will see the message "New Connection"
+
+Then the message "hello from the client"
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side - Using Classes
+       New Connection
+       hello from the client
+
+
+.. index:: 
+       pair: RingLibuv; Client Example - Using Classes
+
+Client Example Using Classes
+============================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Client Side - Using Classes"
+
+       open_object(:MyClient)
+
+       Class MyClient from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               connect = NULL
+               buffer  = null
+               socket  = null
+               
+               func start
+                       myloop  = uv_default_loop()
+                       Socket  = new_uv_tcp_t()
+                       connect = new_uv_connect_t()
+                       uv_tcp_init(myloop, Socket)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_connect(connect,Socket, addr, Method(:connect))
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(socket)
+                       destroy_uv_connect_t(connect)
+               
+               func connect 
+                       ? "Client: Start Connection"
+                       aPara   = uv_Eventpara(connect,:connect)
+                       req     = aPara[1]
+                       nStatus = aPara[2]
+                       if nStatus = -1
+                               ? "Error : on_write_end "
+                               return 
+                       ok
+                       buf = new_uv_buf_t()
+                       message = "hello from the client"
+                       set_uv_buf_t_len(buf,len(message))
+                       set_uv_buf_t_base(buf,varptr("message","char *"))
+                       tcp       = get_uv_connect_t_handle(req)
+                       write_req = new_uv_write_t()
+                       buf_count = 1
+                       uv_write(write_req, tcp, buf, buf_count, Method(:on_write_end))
+               
+               func on_write_end
+                               uv_read_start(socket, uv_myalloccallback(), Method(:echo_read))
+               
+               func echo_read 
+                       aPara = uv_Eventpara(socket,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread);
+                               ? uv_buf2str(wrbuf)
+                       ok
+
+Output:
+
+We will run the client after the server
+
+.. code-block:: none
+
+       Testing RingLibuv - Client Side - Using Classes
+       Client: Start Connection
+       hello from the client
+       message from the server to the client
+
+
+       
+
+.. index:: 
+       pair: RingLibuv; Threads Example
+
+Threads Example
+===============
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Threads"
+
+       func main
+               one_id = new_uv_thread_t()
+               two_id = new_uv_thread_t()
+               uv_thread_create(one_id, "one()")
+               uv_thread_create(two_id, "two()")
+               uv_thread_join(one_id)
+               uv_thread_join(two_id)
+               destroy_uv_thread_t(one_id)
+               destroy_uv_thread_t(two_id)
+
+       func one
+               ? "Message from the First Thread!"
+
+       func two
+               ? "Message from the Second Thread!"
+
+Output:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads
+       Message from the First Thread!
+       Message from the Second Thread!
+    
+
+.. index:: 
+       pair: RingLibuv; Threads Example - Using Classes
+
+Threads Example - Using Classes
+===============================
+
+Example:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Threads - Using Classes"
+
+       open_object(:MyThreads)
+
+       class MyThreads from ObjectControllerParent
+
+               func Start
+                       one_id = new_uv_thread_t()
+                       two_id = new_uv_thread_t()
+                       uv_thread_create(one_id, Method(:One))
+                       uv_thread_create(two_id, Method(:Two))
+                       uv_thread_join(one_id)
+                       uv_thread_join(two_id)
+                       destroy_uv_thread_t(one_id)
+                       destroy_uv_thread_t(two_id)
+               
+               func one
+                       ? "Message from the First Thread!"
+               
+               func Two
+                       ? "Message from the Second Thread!"
+               
+
+Output:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads - Using Classes
+       Message from the First Thread!
+       Message from the Second Thread!
+
diff --git a/docs/en/target/linuxmint.png b/docs/en/target/linuxmint.png
new file mode 100644 (file)
index 0000000..d18b9a5
Binary files /dev/null and b/docs/en/target/linuxmint.png differ
diff --git a/docs/en/target/lists.txt b/docs/en/target/lists.txt
new file mode 100644 (file)
index 0000000..6ce4e06
--- /dev/null
@@ -0,0 +1,745 @@
+.. index:: 
+       single: Lists; Introduction
+
+=====
+Lists
+=====
+
+In this chapter we are going to learn how to deal with lists.
+
+.. index:: 
+       pair: Lists; Create Lists
+
+Create Lists
+============
+
+We can create new lists by defining the list items inside square bracts.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [1,2,3,4,5]
+
+Also we can create new lists using the : operator
+
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:5
+       aList2 = "a":"z"
+
+Example:
+
+.. code-block:: ring
+
+       aList = 5:1
+       aList2 = "z":"a"
+
+Also we can create lists using the list() function
+
+Syntax:
+
+.. code-block:: ring
+
+       list = list(size)
+
+Example
+
+.. code-block:: ring
+
+       aList = list(10)        # aList contains 10 items
+
+.. note:: the list index start from 1 
+
+.. index:: 
+       pair: Lists; Add Items
+
+Add Items
+=========
+
+To add new items to the list, we can use the Add() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Add(List,Item)
+
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two"]
+       add(aList,"three")
+       see aList
+
+Also we can do that using the + operator.
+
+Syntax:
+
+.. code-block:: ring
+
+       List + item
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:10    # create list contains numbers from 1 to 10
+       aList + 11      # add number 11 to the list
+       see aList       # print the list
+
+.. index:: 
+       pair: Lists; Get List Size
+
+Get List Size
+=============
+
+We can get the list size using the len() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Len(List)
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:20  see len(aList)  # print 20
+
+.. index:: 
+       pair: Lists; Delete Item From List
+
+Delete Item From List
+=====================
+
+To delete an item from the list, we can use the del() function
+
+Syntax:
+
+.. code-block:: ring
+
+       del(list,index)
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two","other","three"]
+       Del(aList,3)    # delete item number three
+       see aList       # print one two three
+
+
+.. index:: 
+       pair: Lists; Get List Item
+       
+Get List Item
+=============
+
+To get an item from the list, we uses the next syntax
+
+.. code-block:: ring
+
+       List[Index]
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["Cairo","Riyadh"]
+       see "Egypt : " + aList[1] + nl +
+           "KSA   : " + aList[2] + nl
+
+.. index:: 
+       pair: Lists; Set List Item
+
+Set List Item
+=============
+
+To set the value of an item inside the list, we can use the next syntax
+
+.. code-block:: ring
+
+       List[Index] = Expression
+
+Example:
+
+.. code-block:: ring
+
+       aList = list(3) # create list contains three items
+       aList[1] = "one" aList[2] = "two" aList[3] = "three"
+       see aList
+
+.. index:: 
+       pair: Lists; Search
+
+Search
+======
+
+To find an item inside the list we can use the find() function
+
+Syntax:
+
+.. code-block:: ring
+
+       Find(List,ItemValue) ---> Item Index
+       Find(List,ItemValue,nColumn) ---> Search in nColumn, returns the Item Index 
+       Find(List,ItemValue,nColumn,cAttribute) ---> Item Index
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two","three","four","five"]
+       see find(aList,"three")         # print 3
+
+Example:
+
+.. code-block:: ring
+
+       mylist = [["one",1],
+                 ["two",2],
+                 ["three",3]]
+
+       see find(mylist,"two",1) + nl           # print 2
+       see find(mylist,2,2) + nl               # print 2
+
+Also we can use the binarysearch() function to search in sorted list.
+
+Syntax:
+
+.. code-block:: ring
+
+       BinarySearch(List,ItemValue) ---> Item Index
+       BinarySearch(List,ItemValue,nColumn) ---> Search in nColumn, returns the Item Index 
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["one","two","three","four","five"]
+       aList = sort(aList)
+       see binarysearch(aList,"three")
+
+Output:
+
+.. code-block:: ring
+
+       five
+       four
+       one
+       three
+       two
+       4
+
+.. index:: 
+       pair: Lists; Sort()
+
+Sort
+====
+
+We can sort the list using the sort() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Sort(List) ---> Sorted List
+       Sort(List,nColumn) ---> Sorted List based on nColumn 
+       Sort(List,nColumn,cAttribute) ---> Sorted List based on Object Attribute
+
+Example:
+
+.. code-block:: ring
+
+       aList = [10,12,3,5,31,15]
+       aList = sort(aList) see aList # print 3 5 10 12 15 31
+
+We can sort list of strings
+
+Example:
+
+.. code-block:: ring
+
+       mylist = ["mahmoud","samir","ahmed","ibrahim","mohammed"]
+       see mylist                # print list before sorting
+       mylist = sort(mylist)     # sort list
+       see "list after sort"+nl
+       see mylist                # print ahmed ibrahim mahmoud mohammed samir
+
+We can sort a list based on a specific column.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ ["mahmoud",15000] ,
+                 ["ahmed", 14000 ] ,
+                 ["samir", 16000 ] ,
+                 ["mohammed", 12000 ] ,
+                 ["ibrahim",11000 ] ]
+
+       aList2 = sort(aList,1)
+       see aList2
+
+Output:
+
+.. code-block:: ring
+
+       ahmed
+       14000
+       ibrahim
+       11000
+       mahmoud
+       15000
+       mohammed
+       12000
+       samir
+       16000
+
+
+.. index:: 
+       pair: Lists; Reverse()
+
+Reverse
+=======
+
+We can reverse a list using the reverse() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Reverse(List) ---> Reversed List
+
+Example:
+
+.. code-block:: ring
+
+       aList = [10,20,30,40,50]
+       aList = reverse(aList)
+       see aList       # print 50 40 30 20 10
+
+.. index:: 
+       pair: Lists; Insert()
+
+Insert Items
+============
+
+To insert an item in the list we can use the insert() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Insert(List,Index,Item)
+
+The inserted item will be AFTER the Index
+
+Example:
+
+.. code-block:: ring
+
+       aList = ["A","B","D","E"]
+       insert(aList,2,"C")    # Inserts AFTER Index 2, "C" into Position 3
+       see aList              # print A B C D E
+
+
+.. index:: 
+       pair: Lists; Nested Lists
+
+Nested Lists
+============
+
+The list may contain other lists
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ 1 , [10,20,30] , 5 , [100,1000,5000] ]
+       aList2 = [
+       "one","two", 
+       [3,4],
+       [20,30], ["three",
+                 "four",
+                 "five",[100,200,300]
+                 ]
+       ]
+       
+       see aList[2]            # print 10 20 30
+       see aList[4][3] + nl    # print 5000
+       see aList2[5][2] + nl   # print four
+       see aList2[5][4][3]     # print 300
+
+.. index:: 
+       pair: Lists; Copy Lists
+
+Copy Lists
+==========
+
+We can copy lists (including nested lists) using the Assignment operator.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [
+       "one","two", 
+       [3,4],
+       [20,30], ["three",
+                 "four",
+                 "five",[100,200,300]
+                 ]
+       ]
+
+       aList2 = aList          # Copy aList to aList2
+       aList2[5] = "other"     # modify item number five
+       see aList2[5] + nl      # print other
+       see aList[5]            # print three four five 100 200 300
+
+
+.. index:: 
+       pair: Lists; First-Class Lists
+
+First-class lists
+=================
+
+Lists are `first-class citizens <http://en.wikipedia.org/wiki/First-class_citizen>`_ where we can store
+lists in variables, pass lists to functions, and return lists from functions.
+
+Example:
+
+.. code-block:: ring
+
+       aList = duplicate( [1,2,3,4,5] )
+       see aList[10] + nl                # print 5
+
+       see mylist()                      # print 10 20 30 40 50
+       
+       func duplicate list
+               nMax = len(list)
+               for x = 1 to nMax
+                       list + list[x]
+               next
+               return list
+
+       func mylist return [10,20,30,40,50]
+
+.. index:: 
+       pair: Lists; Using Lists during definition
+               
+Using Lists during definition
+=============================
+
+We can use the list items while we are defining the list for the first time.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
+       see aList       # print 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
+       
+       
+.. index:: 
+       pair: Lists; Passing Lists to Functions
+
+Passing Lists to Functions
+==========================
+
+Lists are passed to functions by reference, This means that the called
+function will work on the same list and can modify it.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+               aList = [1,2,3,4,5]     # create list, local in function main
+               myfunc(aList)           # call function, pass list by reference
+               see aList               # print 1 2 3 4 5 6 7 8 9 10
+
+       func myfunc list
+               list + [6,7,8,9,10]
+
+
+.. index:: 
+       pair: Lists; Access List Items by String Index
+
+Access List Items by String Index
+=================================
+
+Instead of using numbers to determine the item index when we get item value or set item value,
+We can access items using string index if the item is a list contains two items and 
+the first item is a string.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ ["one",1] , ["two",2] , ["three",3] ]
+       see aList["one"] + nl +
+           aList["two"] + nl +
+           aList["three"]      # print 1 2 3
+
+This type of lists can be defined in a better syntax using the : and = operators.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [ :one = 1 , :two = 2 , :three = 3 ]
+       see aList["one"] + nl +
+           aList["two"] + nl +
+           aList["three"] + nl # print 1 2 3
+       see aList[1]            # print one 1
+
+.. tip:: using : before identifier (one word) means literal
+
+.. note:: using = inside list definition create a list of two items where
+         the first item is the left side and the second item is the right side.
+
+We can add new items to the list using the string index
+
+Example:
+
+.. code-block:: ring
+       
+       aList = []
+       aList["Egypt"] = "Cairo"
+       aList["KSA"] = "Riyadh"
+       see aList["Egypt"] + nl +       # print Cairo
+           aList["KSA"] + nl           # print Riyadh
+
+.. index:: 
+       pair: Lists; Passing Parameters or Arguments Using List
+
+Passing Parameters or Argumnents Using List
+===========================================
+       
+This type of lists is very good for passing parameters to functions
+Where the order of parameters will not be important (we can change the order).
+
+Also some parameters maybe optional.
+
+Example:
+
+.. code-block:: ring
+
+       myconnect (  [ :server = "myserver.com" , :port = 80 , 
+                       :username = "mahmoud" , :password = "password" ] ) 
+
+       func myconnect mypara
+       
+               # print connection details
+               see "User Name : " + mypara[:username] + nl +
+                   "Password  : " + mypara[:password] + nl +
+                    "Server    : " + mypara[:server] + nl +
+                    "Port      : " + mypara[:port]
+.. index:: 
+       pair: Lists; Passing Parameters Arguments Using List Array
+
+Passing Parameters or Argumnents Using List Array
+=================================================
+       
+Passing Arguments or Parmameters to a Function in an array format
+
+Example:
+
+.. code-block:: ring
+
+     myList = [5,7,3,9]    ### list with args or parms in  an array
+     result = sum(myList)
+     See "Sum result: "+ result +n
+
+     func sum(aList)
+       acc = 0
+       sizeList = len(aList)
+   
+       for i = 1 to sizeList
+          See aList[i] +nl
+          acc = acc + aList[i]
+       next
+     return acc
+
+.. index:: 
+       pair: Lists; Return as List or Hash Table
+
+Return Parameters as List or Hash Table
+=======================================
+       
+Return Parameters from a Function in an Array or Hash Format
+
+Example:
+
+.. code-block:: ring
+
+       sudoku = [  [2,9,0],
+                   [0,0,1],
+                   [0,0,0] ]
+
+       aOutput = myFunctionArray(sudoku)
+               See "Return Array: T/F: "+ aOutput[1] +" Row: "+ aOutput[2] +" Col: "+ aOutput[3] +nl
+
+       aOutput = myFunctionHash(sudoku)
+               See "Return Hash.: T/F: "+ aOutput[:lValue] +" Row: "+ aOutput[:nRow] +" Col: "+ aOutput[:nCol] +nl
+
+       ###----------------------------------
+       ### isSolvedSoduku - Return ARRAY
+
+       Func myFunctionArray(sudoku)
+           for Row = 1 to 9
+               for Col = 1 to 9
+                   if sudoku[Row][Col] = 0
+
+                       //----------------------------
+                       // Return Array with 3 fields       
+                       return [False, Row, Col]                    
+                   ok
+               next
+           next
+       return [True, Row, Col]
+
+       ###----------------------------------
+       ### isSolvedSoduku - Return HASH
+
+       Func myFunctionHash(sudoku)
+           for Row = 1 to 3
+               for Col = 1 to 3
+                   if sudoku[Row][Col] = 0
+
+                       //---------------------------------
+                       // Return Hash Table with 3 fields      
+                       return  [   :lValue = False, 
+                                   :nRow   = Row, 
+                                   :nCol   = Col   
+                               ]
+                   ok
+               next
+           next
+
+       return  [ :lValue = False, :nRow = Row, :nCol = Col ]           
+
+       ###-----------------------------
+
+     
+.. index:: 
+       pair: Lists; Create Multi Dimension Array  Using List and Recursion
+
+Creating a Multi-Dimensional Array using  List
+==============================================
+       
+A Multi-Dimensional Array of any size can be built using recursion in a  Function
+
+Example:
+
+.. code-block:: ring
+
+        ###---------------------------------------------------------
+        ### Create Array -- Dimensions Any Size:  3D, 4D, 5D etc
+
+        dimList = [4,3,4]
+        bList   = createDimList(dimList)
+       
+        ###---------------------------------------------------------
+        ### Populate the arrays using a counter 1 ,  4x4x4 = 256 , 2x3x4x5x6 = 720
+
+        Counter = 1
+
+        for Col=1 to dimList[1]
+          for Row=1 to dimList[2]
+            for Dep=1 to dimList[3]
+                    blist[Col][Row][Dep] = Counter
+                    Counter++
+            next
+          next
+        next
+
+        ###-----------------------------------------------
+        ### Print the array elements in block format
+
+        for Col=1 to dimList[1]
+          for Row=1 to dimList[2]
+            for Dep=1 to dimList[3]
+                    See bList[Col][Row][Dep] See " "
+            next
+           See nl
+          next
+            See nl
+        next
+
+        ###===========================
+        ### FUNCTIONS
+
+        ###-----------------------------------------------------------------------
+        ### Recursive Create a Dimension Array
+        ### Call by passing an array of dimesions: dimList = [2,3,4,5]
+        ### Drop the first entry every iteration call, making newParms
+        ###
+        ### Example:
+        ###    dimList = [4,2,3,2]                <<< Number and size of dimensions in array format
+        ###    bList   = createDimList(dimList)   <<< Call using the array as input
+
+        func createDimList(dimArray)
+
+             sizeList = len(dimArray)
+
+             newParms = []
+             for i = 2 to sizeList
+                Add(newParms, dimArray[i])
+             next
+
+             alist = list(dimArray[1])
+
+             if sizeList = 1
+                return aList
+             ok
+
+             for t in alist
+                 t = createDimList(newParms)
+             next
+
+        return alist
+       
+     
+.. index:: 
+       pair: Lists; Swap Items
+
+Swap Items
+==========
+
+We can swap the list items using the Swap() function.
+
+Example:
+
+.. code-block:: ring
+
+       aList = [:one,:two,:four,:three]
+       see aList
+       see copy("*",50) + nl
+       swap(aList,3,4)
+       see aList
+
+Output
+
+.. code-block:: ring
+
+       one
+       two
+       four
+       three
+       **************************************************
+       one
+       two
+       three
+       four
+
+
diff --git a/docs/en/target/lowlevel.txt b/docs/en/target/lowlevel.txt
new file mode 100644 (file)
index 0000000..7fb89cd
--- /dev/null
@@ -0,0 +1,1384 @@
+.. index:: 
+       single: Low Level Functions; Introduction
+
+===================
+Low Level Functions
+===================
+
+In this chapter we will learn about the low level functions provided by Ring
+
+* callgc()
+* varptr()
+* space()
+* nullpointer()
+* object2pointer()
+* pointer2object()
+* ispointer()
+* ptrcmp()
+* ringvm_cfunctionslist() 
+* ringvm_functionslist() 
+* ringvm_classeslist() 
+* ringvm_packageslist() 
+* ringvm_memorylist() 
+* ringvm_calllist() 
+* ringvm_fileslist()
+* ringvm_settrace()
+* ringvm_tracedata()
+* ringvm_traceevent()
+* ringvm_tracefunc()
+* ringvm_scopescount()
+* ringvm_evalinscope() 
+* ringvm_passerror()
+* ringvm_hideerrorMsg()
+* ringvm_callfunc()
+* ringvm_see()
+* ringvm_give()
+* ringvm_info()
+
+.. index:: 
+       pair: Low Level Functions; callgc()
+
+callgc() function
+=================
+
+Use this function to force calling the garbage collector during function execution when you
+use a loop that create temp. variables that you don't free using the assignment operation.
+
+It's very rare to need this function but it's useful when you create something like event-loop
+for your game engine and start creating lists on the fly when you call functions.
+
+Example 
+
+.. code-block:: ring
+
+       While True
+
+               # process events
+               # call functions using temp. lists like myfunc(["temp list"])
+
+               # call the garbage collector
+               callgc()
+       End
+
+.. tip:: In Ring the garbage collector works automatically in the end of function execution or
+        when you use the assignment statement.
+
+.. index:: 
+       pair: Low Level Functions; varptr()
+
+varptr() function
+=================
+
+Use the varptr() function when you need to pass a pointer to a C/C++ function.
+
+Syntax:
+
+       varptr(cVariableName,cPointerType) ---> Low Level Object (C Pointer)
+
+example:
+
+.. code-block:: ring
+
+       r = 10
+       z = 20
+       see r + nl
+       see varptr("r","int") 
+       see varptr("z","int")
+
+Output:
+
+.. code-block:: ring
+
+       10
+       00E3C740
+       int
+       2
+       00E3BEC0
+       int
+       2
+
+.. note:: the low level object is a list contains three items (The Pointer, The Type, The Status)
+
+
+.. index:: 
+       pair: Low Level Functions; space()
+
+space() function
+================
+
+Use the space function to allocate a specific number of bytes in Memory.
+
+Syntax:
+
+.. code-block:: ring
+
+       Space(nBytesCount) ---> String 
+
+Example:
+
+.. code-block:: ring
+
+       mystring = space(200)
+       See "String Size : " + len(mystring) + nl
+       See "String : " + mystring + nl
+       See "String Pointer : " 
+       See varptr("mystring","char *")
+
+Output:
+
+.. code-block:: ring
+
+       String Size : 200
+       String :                                                                                                                                                        
+       String Pointer : 00FF8FE8
+       char *
+       2
+
+.. note:: You may need the space() and VarPtr() functions to pass buffers to C functions.
+
+.. index:: 
+       pair: Low Level Functions; nullpointer()
+
+nullpointer() function
+======================
+
+You may need to pass the NULL pointer to a C function that may expect a pointer as parameter
+and accept NULL pointers for optional parameters.
+
+Example:
+
+The next example uses the SDL_BlitSurface() function from the LibSDL Library through RingSDL
+The function accept SDL_Rect pointers in the second and the last parameter.
+Also the function accept NULL pointers, so we can pass them using the NULLPointer() Function.
+
+.. code-block:: ring
+
+       SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+
+.. note:: The previous code doesn't work alone, you need to learn how to use RingSDL first.
+
+.. tip:: We can pass NULL as parameter instead of using NULLPointer()
+
+.. index:: 
+       pair: Low Level Functions; object2pointer()
+
+object2pointer() function
+=========================
+
+Use this function to get a C pointer for Ring lists and objects
+
+Syntax:
+
+.. code-block:: ring
+
+       object2pointer(List|Object) --> Low Level Object ( C Pointer )
+
+.. index:: 
+       pair: Low Level Functions; pointer2object()
+
+pointer2object() function
+=========================
+
+Use this function to get the Ring list and/or object from the low level object (C Pointer)
+
+Syntax:
+
+.. code-block:: ring
+
+       pointer2object(Low Level Object) ---> List|Object
+
+
+Example:
+
+.. code-block:: ring
+
+       # Create the list 
+       mylist = 1:5
+
+       # Create pointer to the list
+       x = object2pointer(mylist)
+       see x
+
+       see nl
+
+       # Add items to the list
+       mylist + "welcome"
+
+       # print the list items
+       y = pointer2object(x)
+       see y 
+
+Output:
+
+.. code-block:: ring
+
+       0069A5D8
+       OBJECTPOINTER
+       0
+
+       1
+       2
+       3
+       4
+       5
+       welcome
+
+.. note:: In Ring the assignment operator copy lists and objects by value, to copy by reference
+       Just use the object2pointer() and pointer2object() functions.
+
+.. tip:: The object2pointer() and pointer2object() are used in the stdlib - Tree Class implementation
+         to create a reference for the parent node (object) in the child node (another object).
+
+
+.. index:: 
+       pair: Low Level Functions; ispointer()
+
+ispointer() function
+====================
+
+Check if the parameter is a pointer (C Object) or not.
+
+Syntax:
+
+.. code-block:: none
+
+       IsPointer(vPara) ---> True|False
+
+Example :
+
+.. code-block:: ring
+
+       fp = fopen(filename(),"r")
+
+       ? type(fp)
+
+       ? ispointer(fp)
+
+Output :
+
+.. code-block:: none
+
+       file
+       1
+
+.. index:: 
+       pair: Low Level Functions; ptrcmp()
+
+ptrcmp() function
+=================
+
+We can compare between two pointers (C Objects) using the ptrcmp() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       ptrcmp(oObject1,oObject2) ---> value = 1 if oObject1 = oObject2
+                                      value = 0 if oObject1 != oObject2
+
+Example:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp.ring","r")
+       fp2 = fp
+       fp3 = fopen("ptrcmp.ring","r")
+
+       see ptrcmp(fp,fp2) + nl
+       see ptrcmp(fp,fp3) + nl
+
+       fclose(fp)
+       fclose(fp3)
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+
+.. index:: 
+       pair: Low Level Functions; RingVM_CFunctionsList()
+
+ringvm_cfunctionslist() function
+================================
+
+The Function return a list of functions written in C.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_CFunctionsList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       See RingVM_CFunctionsList()
+
+.. index:: 
+       pair: Low Level Functions; RingVM_FunctionsList()
+
+ringvm_functionslist() function
+===============================
+
+The Function return a list of functions written in Ring.
+
+Each List Member is a list contains the next items
+
+* Function Name
+* Program Counter (PC) - Function Position in Byte Code.
+* Source Code File Name
+* Private Flag (For Private Methods in Classes)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_FunctionsList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       test()
+
+       func test
+               see ringvm_functionslist()
+
+Output:
+
+.. code-block:: ring
+
+       test
+       8
+       B:/ring/tests/scripts/functionslist.ring
+       0
+
+.. index:: 
+       pair: Low Level Functions; RingVM_ClassesList()
+
+ringvm_classeslist() function
+=============================
+
+The Function return a list of Classes.
+
+Each List Member is a list contains the next items
+
+* Class Name
+* Program Counter (PC) - Class Position in Byte Code.
+* Parent Class Name
+* Methods List
+* Flag (Is parent class information collected)
+* Pointer to the package (or NULL if no package is used)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_ClassesList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       see ringvm_classeslist()
+
+       class class1
+               func f1
+       class class2 from class1
+       class class3 from class1
+
+Output:
+
+.. code-block:: ring
+
+       class1
+       9
+
+       f1
+       13
+       B:/ring/tests/scripts/classeslist.ring
+       0
+       0
+       00000000
+       class2
+       16
+       class1
+       0
+       00000000
+       class3
+       20
+       class1
+       0
+       00000000
+
+.. index:: 
+       pair: Low Level Functions; RingVM_PackagesList()
+
+ringvm_packageslist() function
+==============================
+
+The Function return a list of Packages.
+
+Each List Member is a list contains the next items
+
+* Package Name
+* Classes List
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_PackagesList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       see ringvm_packageslist()
+
+       package package1
+               class class1
+
+       package package2
+               class class1
+
+       package package3
+               class class1
+
+Output:
+
+.. code-block:: ring
+
+       package1
+       class1
+       11
+
+       0
+       00FEF838
+       package2
+       class1
+       17
+
+       0
+       00FEF978
+       package3
+       class1
+       23
+
+       0
+       00FEFF68
+
+.. index:: 
+       pair: Low Level Functions; RingVM_MemoryList()
+
+ringvm_memorylist() function
+============================
+
+The Function return a list of Memory Scopes and Variables.
+
+Each List Member is a list contains variables in a different scope.
+
+Each Item in the scope list is a list contains the next items
+
+* Variable Name
+* Variable Type
+* Variable Value
+* Pointer Type (List/Item) if the value is a list
+* Private Flag (if the variable is an attribute in a Class)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_MemoryList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       test()
+       func test
+               y = 20
+               see ringvm_memorylist()
+
+Output:
+
+.. code-block:: ring
+
+       true
+       2
+       1
+       0
+       0
+       false
+       2
+       0
+       0
+       0
+       nl
+       1
+
+
+       0
+       0
+       null
+       1
+
+       0
+       0
+       ring_gettemp_var
+       4
+       00000000
+       0
+       0
+       ccatcherror
+       1
+       NULL
+       0
+       0
+       ring_settemp_var
+       4
+       00000000
+       0
+       0
+       ring_tempflag_var
+       2
+       0
+       0
+       0
+       stdin
+       3
+       50512DB8
+       file
+       0
+       0
+       0
+       stdout
+       3
+       50512DD8
+       file
+       0
+       0
+       0
+       stderr
+       3
+       50512DF8
+       file
+       0
+       0
+       0
+       this
+       4
+       00000000
+       0
+       0
+       sysargv
+       3
+       B:\ring\bin/ring
+       B:/ring/tests/scripts/memorylist.ring
+       0
+       0
+       x
+       2
+       10
+       0
+       0
+       y
+       2
+       20
+       0
+       0
+
+.. index:: 
+       pair: Low Level Functions; RingVM_CallList()
+
+ringvm_calllist() function
+==========================
+
+The Function return a list of the functions call list.
+
+Each List Member is a list contains the next items
+
+* Function Type
+* Function Name
+* Program Counter (PC)
+* Stack Pointer (SP)
+* Temp. Memory List
+* Method or Function Flag
+* Caller PC
+* FuncExec Flag
+* ListStart Flag
+* Nested Lists Pointer
+* State List
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_CallList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+       func hello
+               test()
+
+       func test
+               mylist = ringvm_calllist()
+               for t in mylist see t[2] + nl next
+
+Output:
+
+.. code-block:: ring
+
+       function hello() in file B:/ring/tests/scripts/calllist.ring
+       called from line 1
+       function test() in file B:/ring/tests/scripts/calllist.ring
+       called from line 3
+       ringvm_calllist
+
+
+.. index:: 
+       pair: Low Level Functions; RingVM_FilesList()
+
+ringvm_fileslist() function
+===========================
+
+Function return a list of the Ring Files.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_FilesList() ---> List
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see ringvm_fileslist()
+
+Output:
+
+.. code-block:: ring
+
+       B:/ring/tests/scripts/fileslist.ring
+       B:\ring\bin\stdlib.ring
+       eval
+       stdlib.ring
+       stdlib.rh
+       stdclasses.ring
+       stdfunctions.ring
+       stdbase.ring
+       stdstring.ring
+       stdlist.ring
+       stdstack.ring
+       stdqueue.ring
+       stdmath.ring
+       stddatetime.ring
+       stdfile.ring
+       stdsystem.ring
+       stddebug.ring
+       stddatatype.ring
+       stdconversion.ring
+       stdodbc.ring
+       stdmysql.ring
+       stdsecurity.ring
+       stdinternet.ring
+       stdhashtable.ring
+       stdtree.ring
+
+.. index:: 
+       pair: Low Level Functions; ringvm_settrace()
+
+ringvm_settrace()
+=================
+
+The function ringvm_settrace() determine the Trace function name
+
+The trace function is a Ring 
+function that will be called for each event
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_SetTrace(cCode)
+
+.. index:: 
+       pair: Low Level Functions; ringvm_tracedata()
+
+ringvm_tracedata()
+==================
+
+Inside the function that we will use for tracing events
+
+We can use the ringvm_tracedata() function to get the event
+data.
+
+The event data is a list contains the next items
+
+* The Source Code Line Number
+* The Source File Name 
+* The Function/Method Name 
+* Method or Function (Bool : True=Method, False=Function/File)
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_TraceData() ---> aDataList
+
+.. index:: 
+       pair: Low Level Functions; ringvm_traceevent()
+
+ringvm_traceevent()
+===================
+
+Inside the function that we will use for tracing events
+
+We can use ringvm_traceevent() to know the event type
+
+* New Line
+* Before Function
+* After Function
+* Runtime Error
+* Before C Function
+* After C Function 
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_TraceEvent() ---> nTraceEvent
+
+.. index:: 
+       pair: Low Level Functions; ringvm_tracefunc()
+
+ringvm_tracefunc()
+==================
+
+The function return the name of the function that we
+are using for tracing events.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_TraceEvent() ---> cCode
+
+.. index:: 
+       pair: Low Level Functions; ringvm_scopescount()
+
+ringvm_scopescount()
+====================
+
+We can use the RingVM_ScopesCount() function to know
+the number of scopes used in the application.
+
+In the start of the program, We have the (global scope only)
+
+When we call a function, A new scope is created.
+
+When the function execution is done, the function scope is deleted.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_ScopesCount() ---> nScopes
+
+.. index:: 
+       pair: Low Level Functions; ringvm_evalinscope()
+
+ringvm_evalinscope() 
+====================
+
+The function ringvm_evalinscope() is similar to the eval() function
+
+Unlike eval() which execute the code in the current scope
+
+Using RingVM_EvalInScope() we can execute the scope in a specific scope.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_EvalInScope(nScope,cCode)
+
+.. index:: 
+       pair: Low Level Functions; ringvm_passerror()
+
+ringvm_passerror()
+==================
+
+When we have runtime error, After printing the Error message, Ring 
+will end the execution of the program.
+
+Using ringvm_passerror() we can avoid that, and continue the 
+execution of our program.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_PassError()
+
+.. index:: 
+       pair: Low Level Functions; ringvm_hideerrorMsg()
+
+ringvm_hideerrormsg()
+=====================
+
+We can disable/enable displaying the runtime error messages using the
+RingVM_HideErrorMsg() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_HideErrorMsg(lStatus)
+
+.. index:: 
+       pair: Low Level Functions; ringvm_callfunc()
+
+ringvm_callfunc()
+=================
+
+We can call a function from a string without using eval() using
+the ringvm_callfunc() 
+
+Syntax:
+
+.. code-block:: ring
+
+       RingVM_CallFunc(cFuncName)
+
+
+.. index:: 
+       pair: Low Level Functions; Example - Using the Trace Functions
+       
+Example - Using the Trace Functions
+===================================
+
+The next example use the Trace Functions to trace the program Events!
+
+In practical, We will use the Trace Library instead of 
+these low level functions!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       ringvm_settrace("mytrace()")
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+       mytest()
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       func mytrace
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+Output:
+
+.. code-block:: none
+
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 3
+       File Name   : test1.ring
+       Function Name : ringvm_settrace
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 5
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Hello, world!
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 6
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Welcome
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 7
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       How are you?
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 12
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       Message from mytest
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 14
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 43
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 44
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       Message from mymethod
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 11
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+
+
+.. index:: 
+       pair: Low Level Functions; Example - The Trace Library
+       
+Example - The Trace Library
+===========================
+
+The next example uses the Trace functions provided by the Ring language 
+to create the Trace library.
+
+Using the Trace library we have nice Tracing 
+tools and Interaction debugger too.
+
+.. code-block:: ring
+
+       # Trace Events
+       TRACEEVENT_NEWLINE      = 1
+       TRACEEVENT_NEWFUNC      = 2
+       TRACEEVENT_RETURN       = 3
+       TRACEEVENT_ERROR        = 4
+       TRACEEVENT_BEFORECFUNC  = 5
+       TRACEEVENT_AFTERCFUNC   = 6
+
+       # Trace Data
+       TRACEDATA_LINENUMBER    = 1
+       TRACEDATA_FILENAME      = 2
+       TRACEDATA_FUNCNAME      = 3
+       TRACEDATA_METHODORFUNC  = 4
+
+       # Method of Function
+       TRACEDATA_METHODORFUNC_METHOD           = TRUE
+       TRACEDATA_METHODORFUNC_NOTMETHOD        = FALSE
+
+       TRACE_BREAKPOINTS = TRUE
+
+       TRACE_TEMPLIST = []
+
+       func Trace cType
+               switch trim(lower(cType))
+               on :AllEvents
+                       ringvm_settrace("TraceLib_AllEvents()")
+               on :Functions 
+                       ringvm_settrace("TraceLib_Functions()")
+               on :PassError
+                       ringvm_settrace("TraceLib_PassError()")
+               on :Debugger 
+                       ringvm_settrace("TraceLib_Debugger()")
+               on :LineByLine
+                       ringvm_settrace("TraceLib_LineByLine()")
+               off
+
+       func TraceLib_AllEvents
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       func TraceLib_Functions
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on TRACEEVENT_NEWFUNC
+                               see "Open Func : " + 
+                               ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+                       on TRACEEVENT_RETURN
+                               see "Return to Func : " + 
+                               ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+               off
+
+       func TraceLib_PassError
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on  TRACEEVENT_ERROR
+                               see nl
+                               see "TraceLib : After Error !" + nl
+                               ringvm_passerror()
+               off
+
+       func TraceLib_Debugger
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on  TRACEEVENT_ERROR
+                               _BreakPoint()
+               off
+
+       func TraceLib_LineByLine
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring" or
+                       ringvm_TraceEvent() != TRACEEVENT_NEWLINE
+                       return 
+               ok
+               aList = ringvm_tracedata()
+               see "Before Line : " + aList[TRACEDATA_LINENUMBER] + nl 
+               _BreakPoint()
+
+       func BreakPoint
+               if not TRACE_BREAKPOINTS
+                       return 
+               ok
+               _BreakPoint()
+
+       func _BreakPoint 
+               see nl+nl+Copy("=",60) + nl +
+               Copy(" ",20)+"Interactive Debugger" + nl +
+               Copy("=",60) + nl +
+               "Command (Exit)        : End Program" + nl +
+               "Command (Cont)        : Continue Execution" + nl +
+               "Command (Locals)      : Print local variables names" + nl +
+               "Command (LocalsData)  : Print local variables data" + nl +
+               "Command (Globals)     : Print global variables names" + nl +
+               "We can execute Ring code" + nl +
+               Copy("=",60) + nl 
+               while true
+                               see nl + "code:> "
+                               give cCode
+                       cmd = trim(lower(cCode))
+                       if cmd = "exit" or cmd = "bye"
+                               shutdown()
+                       ok 
+                       nScope = ringvm_scopescount()-2
+                       switch cmd
+                               on "locals"                     
+                                       ringvm_EvalInScope(nScope,"see locals() callgc()")
+                                       loop
+                               on "localsdata"
+                                       PrintLocalsData(nScope)
+                                       loop
+                               on "globals"                    
+                                       ringvm_EvalInScope(nScope,"see globals() callgc()")
+                                       loop
+                               on "cont"
+                                       ringvm_passerror()
+                                       exit
+                       off
+                       Try
+                               ringvm_EvalInScope(nScope,cCode)
+                               catch
+                                               see cCatchError
+                               done
+               end
+
+       func NoBreakPoints
+               TRACE_BREAKPOINTS = FALSE
+
+
+       func PrintLocalsData nScope
+               if nScope = 1   # Global
+                       ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = globals()')
+               else
+                       ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = locals() callgc()')
+               ok
+               see nl 
+               aTempList = TRACE_TEMPLIST
+               TRACE_TEMPLIST = []
+               nSpaces = 5
+               for TRACE_ITEM in aTempList
+                       if len(TRACE_ITEM) + 5 > nSpaces
+                               nSpaces = len(TRACE_ITEM) + 5
+                       ok
+               next
+               for TRACE_ITEM in aTempList
+                       see "Variable : " +  TRACE_ITEM
+                       cVarName = TRACE_ITEM
+                       see copy(" ",nSpaces-len(cVarName)) + " Type : " 
+                       ringvm_Evalinscope(nScope,"see type(" +  TRACE_ITEM +")")
+                       ringvm_Evalinscope(nScope,"see Copy(' ',fabs(15-len(type(" +
+                                                 TRACE_ITEM +"))))")
+                       see " Value : " 
+                       ringvm_Evalinscope(nScope,"see " +  TRACE_ITEM)
+                       see nl
+               next
+
+
+.. index:: 
+       pair: Low Level Functions; ringvm_see() function
+
+ringvm_see() function
+=====================
+
+Using the ringvm_see() function we can redefine the behavior of the See command
+
+Also we can use ring_see() to have the original behavior
+
+Example:
+
+.. code-block:: ring
+
+       see "Hello world" + nl
+       see 123 + nl
+       see ["one","two","three"]
+       see new point {x=10 y=20 z=30} 
+
+       func ringvm_see t
+               ring_see("We want to print: ")
+               ring_See(t)
+
+       class point x y z
+
+Output:
+
+.. code-block:: none
+
+       We want to print: Hello world
+       We want to print: 123
+       We want to print: one
+       two
+       three
+       We want to print: x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+.. index:: 
+       pair: Low Level Functions; ringvm_give() function
+
+ringvm_give() function
+======================
+
+Using the ringvm_give() function we can redefine the behavior of the Give command
+
+Example:
+
+.. code-block:: ring
+
+       see "Name: " give name
+       see "Hello " + name
+
+       func ringvm_give
+               see "Mahmoud" + nl
+               return "Mahmoud"
+
+Output:
+
+.. code-block:: ring
+
+       Name: Mahmoud
+       Hello Mahmoud
+
+.. index:: 
+       pair: Low Level Functions; ringvm_info()
+
+ringvm_info() function
+======================
+
+The ringvm_info() is an internal function that return a list of information about the Ring VM structure.
+
+It's used only by the Ring Team in advanced tests to check the VM status.
+
+Syntax:
+
+.. code-block:: ring
+
+       ringvm_info() ---> List of information about the VM structure
+
diff --git a/docs/en/target/manycubes.png b/docs/en/target/manycubes.png
new file mode 100644 (file)
index 0000000..1af41df
Binary files /dev/null and b/docs/en/target/manycubes.png differ
diff --git a/docs/en/target/manytreeitems.png b/docs/en/target/manytreeitems.png
new file mode 100644 (file)
index 0000000..c3cc5a5
Binary files /dev/null and b/docs/en/target/manytreeitems.png differ
diff --git a/docs/en/target/mathfunc.txt b/docs/en/target/mathfunc.txt
new file mode 100644 (file)
index 0000000..7b5aad0
--- /dev/null
@@ -0,0 +1,351 @@
+.. index:: 
+       single: Mathematical Functions; Introduction
+
+======================
+Mathematical Functions
+======================
+
+In this chapter we are going to learn about the mathematical functions
+
+.. index:: 
+       pair: Mathematical Functions; list of functions
+
+List of functions
+=================
+
+The Ring programming language comes with the next mathematical functions
+
+===============                =============================================================================
+Function               Description
+===============                =============================================================================
+sin(x)                 Returns the sine of an angle of x radians
+cos(x)                 Returns the cosine of an angle of x radians
+tan(x)                 Returns the tangent of an angle of x radians
+asin(x)                        Returns the principal value of the arc sine of x, expressed in radians
+acos(x)                        Returns the principal value of the arc cosine of x, expressed in radians
+atan(x)                        Returns the principal value of the arc tangent of x, expressed in radians
+atan2(y,x)             Returns the principal arc tangent of y/x, in the interval [-pi,+pi] radians
+sinh(x)                        Returns the hyperbolic sine of x radians
+cosh(x)                        Returns the hyperbolic cosine of x radians
+tanh(x)                        Returns the hyperbolic tangent of x radians
+exp(x)                 Returns the value of e raised to the xth power
+log(x)                 Returns the natural logarithm of x
+log10(x)               Returns the common logarithm (base-10 logarithm) of x
+ceil(x)                        Returns the smallest integer value greater than or equal to x   
+floor(x)               Returns the largest integer value less than or equal to x
+fabs(x)                        Returns the absolute value of x.
+pow(x,y)               Returns x raised to the power of y 
+sqrt(x)                        Returns the square root of x
+random(x)              Returns a random number in the range [0,x]
+srandom(x)             Initialize random number generator
+unsigned(n,n,c)                Perform operation using unsigned numbers 
+decimals(n)            Determine the decimals digits after the point in float/double numbers
+===============        =============================================================================
+
+.. index:: 
+       pair: Mathematical Functions; Example
+
+Example
+========
+
+.. code-block:: ring
+
+       See "Mathematical Functions" + nl
+       See "Sin(0) = " + sin(0) + nl
+       See "Sin(90) radians = " + sin(90) + nl
+       See "Sin(90) degree = " + sin(90*3.14/180) + nl
+
+       See "Cos(0) = " + cos(0) + nl
+       See "Cos(90) radians = " + cos(90) + nl
+       See "Cos(90) degree = " + cos(90*3.14/180) + nl
+
+       See "Tan(0) = " + tan(0) + nl
+       See "Tan(90) radians = " + tan(90) + nl
+       See "Tan(90) degree = " + tan(90*3.14/180) + nl
+
+       See "asin(0) = " + asin(0) + nl
+       See "acos(0) = " + acos(0) + nl
+       See "atan(0) = " + atan(0) + nl
+       See "atan2(1,1) = " + atan2(1,1) + nl
+
+       See "sinh(0) = " + sinh(0) + nl
+       See "sinh(1) = " + sinh(1) + nl
+       See "cosh(0) = " + cosh(0) + nl
+       See "cosh(1) = " + cosh(1) + nl
+       See "tanh(0) = " + tanh(0) + nl
+       See "tanh(1) = " + tanh(1) + nl
+
+       See "exp(0) = " + exp(0) + nl
+       See "exp(1) = " + exp(1) + nl
+       See "log(1) = " + log(1) + nl
+       See "log(2) = " + log(2) + nl
+       See "log10(1) = " + log10(1) + nl
+       See "log10(2) = " + log10(2) + nl
+       See "log10(10) = " + log10(10) + nl
+
+       See "Ceil(1.12) = " + Ceil(1.12) + nl
+       See "Ceil(1.72) = " + Ceil(1.72) + nl
+
+       See "Floor(1.12) = " + floor(1.12) + nl
+       See "Floor(1.72) = " + floor(1.72) + nl
+
+       See "fabs(1.12) = " + fabs(1.12) + nl
+       See "fabs(1.72) = " + fabs(1.72) + nl
+
+       See "pow(2,3) = " + pow(2,3) + nl
+
+       see "sqrt(16) = " + sqrt(16) + nl
+
+
+Program Output:
+
+.. code-block:: ring
+
+       Mathematical Functions
+       Sin(0) = 0
+       Sin(90) radians = 0.89
+       Sin(90) degree = 1.00
+       Cos(0) = 1
+       Cos(90) radians = -0.45
+       Cos(90) degree = 0.00
+       Tan(0) = 0
+       Tan(90) radians = -2.00
+       Tan(90) degree = 1255.77
+       asin(0) = 0
+       acos(0) = 1.57
+       atan(0) = 0
+       atan2(1,1) = 0.79
+       sinh(0) = 0
+       sinh(1) = 1.18
+       cosh(0) = 1
+       cosh(1) = 1.54
+       tanh(0) = 0
+       tanh(1) = 0.76
+       exp(0) = 1
+       exp(1) = 2.72
+       log(1) = 0
+       log(2) = 0.69
+       log10(1) = 0
+       log10(2) = 0.30
+       log10(10) = 1
+       Ceil(1.12) = 2
+       Ceil(1.72) = 2
+       Floor(1.12) = 1
+       Floor(1.72) = 1
+       fabs(1.12) = 1.12
+       fabs(1.72) = 1.72
+       pow(2,3) = 8
+       sqrt(16) = 4
+
+.. index:: 
+       pair: Mathematical Functions; Random()
+
+Random() Function
+=================
+
+The Random() function generate a random number and we can set the maximum value (optional).
+
+Syntax:
+
+.. code-block:: ring
+
+       Random(x) ---> Random number in the range [0,x]
+
+Example:
+
+.. code-block:: ring
+
+       for x = 1 to 20
+               see  "Random number : " + random() + nl +
+                    "Random number Max (100) : " + random(100) + nl
+       next
+
+Program Output:
+
+.. code-block:: ring
+
+       Random number : 31881
+       Random number Max (100) : 80
+       Random number : 5573
+       Random number Max (100) : 63
+       Random number : 2231
+       Random number Max (100) : 43
+       Random number : 12946
+       Random number Max (100) : 39
+       Random number : 22934
+       Random number Max (100) : 48
+       Random number : 4690
+       Random number Max (100) : 52
+       Random number : 13196
+       Random number Max (100) : 65
+       Random number : 30390
+       Random number Max (100) : 87
+       Random number : 4327
+       Random number Max (100) : 77
+       Random number : 12456
+       Random number Max (100) : 17
+       Random number : 28438
+       Random number Max (100) : 13
+       Random number : 30503
+       Random number Max (100) : 6
+       Random number : 31769
+       Random number Max (100) : 94
+       Random number : 8274
+       Random number Max (100) : 65
+       Random number : 14390
+       Random number Max (100) : 90
+       Random number : 28866
+       Random number Max (100) : 12
+       Random number : 24558
+       Random number Max (100) : 70
+       Random number : 29981
+       Random number Max (100) : 77
+       Random number : 12847
+       Random number Max (100) : 63
+       Random number : 6632
+       Random number Max (100) : 60
+
+.. index:: 
+       pair: Mathematical Functions; SRandom()
+
+SRandom() Function
+==================
+
+The SRandom() function initialize random number generator.
+
+Syntax:
+
+.. code-block:: ring
+
+       SRandom(x) 
+
+.. index:: 
+       pair: Mathematical Functions; Unsigned()
+
+Unsigned() Function
+===================
+
+We can use unsigned numbers using the Unsigned() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Unsigned(nNum1,nNum2,cOperator) --> result of cOperator operation on nNum1,nNum2
+
+Example:
+
+.. code-block:: ring
+
+       see oat_hash("hello") + nl
+
+       # Jenkins hash function - https://en.wikipedia.org/wiki/Jenkins_hash_function
+       func oat_hash cKey      
+               h = 0
+               for x in cKey
+                       h = unsigned(h,ascii(x),"+")
+                       h = unsigned(h,unsigned(h,10,"<<"),"+")
+                       r = unsigned(h,6,">>")
+                       h = unsigned(h, r,"^")
+               next
+               h = unsigned(h,unsigned(h,3,"<<"),"+")
+               h = unsigned(h,unsigned(h,11,">>"),"^")
+               h = unsigned(h,unsigned(h,15,"<<"),"+")
+               return h  
+
+Output:
+
+.. code-block:: ring
+
+       3372029979.00
+
+.. index:: 
+       pair: Mathematical Functions; Decimals()
+
+Decimals() Functions
+====================
+
+We can determine the decimals numbers count after the point in float/double numbers using the decimals() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Decimals(nDecimalsCount)
+
+Example:
+
+.. code-block:: ring
+
+       x = 1.1234567890123
+       for d = 0 to 14
+               decimals(d)
+               see x + nl
+       next
+
+
+Output:
+
+.. code-block:: ring
+
+
+       1
+       1.1
+       1.12
+       1.123
+       1.1235
+       1.12346
+       1.123457
+       1.1234568
+       1.12345679
+       1.123456789
+       1.1234567890
+       1.12345678901
+       1.123456789012
+       1.1234567890123
+       1.12345678901230
+
+
+.. index:: 
+       pair: Mathematical Functions; Using _ in numbers
+
+Using _ in numbers
+==================
+
+We can use _ between numbers digits.
+
+Example:
+
+.. code-block:: ring
+
+       x = 1_000_000
+       see type(x)+nl
+       see x+1+nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
+       100000001
+
+.. index:: 
+       pair: Mathematical Functions; Using f after numbers
+
+Using f after numbers
+=====================
+
+We can use the 'f' letter after numbers.
+
+Example:
+
+.. code-block:: ring
+
+       x = 19.99f
+       see type(x) + nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
diff --git a/docs/en/target/matzring.png b/docs/en/target/matzring.png
new file mode 100644 (file)
index 0000000..0691352
Binary files /dev/null and b/docs/en/target/matzring.png differ
diff --git a/docs/en/target/maze.png b/docs/en/target/maze.png
new file mode 100644 (file)
index 0000000..9853d18
Binary files /dev/null and b/docs/en/target/maze.png differ
diff --git a/docs/en/target/menubardesigner.png b/docs/en/target/menubardesigner.png
new file mode 100644 (file)
index 0000000..3a5740f
Binary files /dev/null and b/docs/en/target/menubardesigner.png differ
diff --git a/docs/en/target/metaprog.txt b/docs/en/target/metaprog.txt
new file mode 100644 (file)
index 0000000..f7b18c0
--- /dev/null
@@ -0,0 +1,1263 @@
+.. index:: 
+       single: Reflection and Meta-programming; Introduction
+
+===============================
+Reflection and Meta-programming
+===============================
+
+Since the Ring programming language is a dynamic language, we can get answers about
+the program code and we can modify our code during the runtime.
+
+In this chapter we will learn about this and the available functions to use.
+
+* locals()
+* globals()
+* functions()
+* cfunctions()
+* islocal()
+* isglobal()
+* isfunction()
+* iscfunction()
+* packages()
+* ispackage()
+* classes()
+* isclass()
+* packageclasses()
+* ispackageclass()
+* classname()
+* objectid()
+* isobject() 
+* attributes()
+* methods()
+* isattribute()
+* isprivateattribute()
+* ismethod()
+* isprivatemethod()
+* addattribute()
+* addmethod()
+* getattribute()
+* setattribute()
+* mergemethods()
+* packagename()
+
+.. index:: 
+       pair: Reflection and Meta-programming; locals()
+
+locals() Function
+=================
+
+We can get a list of variables names in the current scope using the locals() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       locals() --> a list contains the variables names in the current scope
+
+Example:
+
+.. code-block:: ring
+
+       test("hello")
+
+       func test cMsg
+
+               see cMsg + nl
+
+               x = 10
+               y = 20
+               z = 30
+
+               see locals()
+
+Output:
+
+.. code-block:: ring
+
+       hello
+       cmsg
+       x
+       y
+       z
+
+.. index:: 
+       pair: Reflection and Meta-programming; globals()
+
+globals() Function
+==================
+
+We can get a list of variables names in the global scope using the globals() function.
+
+Syntax:
+
+.. code-block:: ring
+       
+       globals() --> a list contains variables names in the global scope
+
+Example:
+
+.. code-block:: ring
+
+       x=10 y=20 z=30
+       test()
+
+       func test
+               see "message from test()" + nl +
+                   "Global Variables:" + nl
+               see globals()
+
+Output:
+
+.. code-block:: ring
+
+
+       message from test()
+       Global Variables:
+       x
+       y
+       z
+
+.. index:: 
+       pair: Reflection and Meta-programming; functions()
+
+functions() Function
+====================
+
+We can get a list of functions names written in the Ring language using the functions() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       functions() --> a list contains functions names
+
+Example:
+
+.. code-block:: ring
+
+       see functions()
+
+       func f1
+               see "f1" + nl
+
+       func f2
+               see "f2" + nl
+
+       func f3 
+               see "f3" + nl
+
+Output:
+
+.. code-block:: ring
+
+       f1
+       f2
+       f3
+
+.. index:: 
+       pair: Reflection and Meta-programming; cfunctions()
+
+cfunctions() Function
+=====================
+
+We can get a list of functions names written in the C language using the cfunctions() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       cfunctions() --> a list contains functions names
+
+Example:
+
+.. code-block:: ring
+
+       aList =  cfunctions()
+       See "Count : " + len(aList) + nl
+       for x in aList
+               see x + "()" + nl
+       next
+
+Output:
+
+.. code-block:: ring
+
+       Count : 210
+       len() 
+       add() 
+       del() 
+       get() 
+       clock()
+       ...
+
+.. note:: The complete list is removed from the previous output.
+
+.. index:: 
+       pair: Reflection and Meta-programming; islocal()
+
+islocal() Function
+==================
+
+We can check if a variable is defined in the local scope or not using the islocal() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       islocal(cVariableName) --> returns 1 if the variable is defined in the local scope
+                                  returns 0 if the variable is not defined in the local scope
+
+Example:
+
+.. code-block:: ring
+
+       test()
+
+       func test
+               x=10 y=20
+               see islocal("x") + nl + 
+                   islocal("y") + nl + 
+                   islocal("z") + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+
+.. index:: 
+       pair: Reflection and Meta-programming; isglobal()
+
+isglobal() Function
+===================
+
+We can check if a variable is defined in the global scope or not using the isglobal() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       isglobal(cVariableName) --> returns 1 if the variable is defined in the global scope
+                                   returns 0 if the variable is not defined in the global scope
+
+Example:
+
+.. code-block:: ring
+
+       x=10 y=20
+
+       test()
+
+       func test
+               see isglobal("x") + nl + 
+                   isglobal("y") + nl + 
+                   isglobal("z") + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: Reflection and Meta-programming; isfunction()
+
+isfunction() Function
+=====================
+
+We can check if a Ring function is defined or not using the isfunction() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       isfunction(cFunctionName) --> returns 1 if the Ring function is defined
+                                     returns 0 if the Ring function is not defined
+
+Example:
+
+.. code-block:: ring
+
+       see isfunction("f1") + nl + 
+           isfunction("f2") + nl + 
+           isfunction("f3") + nl
+
+       func f1
+               see "message from f1()" + nl
+
+       func f2
+               see "message from f2()" + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: Reflection and Meta-programming; iscfunction()
+
+iscfunction() Function
+======================
+
+We can check if a C function is defined or not using the iscfunction() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       iscfunction(cFunctionName) --> returns 1 if the C function is defined
+                                      returns 0 if the C function is not defined
+
+Example:
+
+.. code-block:: ring
+
+       see iscfunction("len") + nl + 
+           iscfunction("add") + nl + 
+           iscfunction("test") + nl
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: Reflection and Meta-programming; packages()
+
+packages() Function
+===================
+
+We can get a list of packages names using the packages() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       packages() --> a list contains packages names
+
+Example:
+
+.. code-block:: ring
+
+       See packages()
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+
+       Package Package3
+               Class class1
+                       Func f1
+
+       Package Package4
+               Class class1
+                       Func f1
+
+Output:
+
+.. code-block:: ring
+
+       package1
+       package2
+       package3
+       package4
+
+.. index:: 
+       pair: Reflection and Meta-programming; ispackage()
+
+ispackage() Function
+====================
+
+We can check if a package is defined or not using the ispackage() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       ispackage(cPackageName) --> returns 1 if the Package is defined
+                                   returns 0 if the Package is not defined
+
+Example:
+
+.. code-block:: ring
+
+       See ispackage("package1") + nl + 
+           ispackage("package4") + nl + 
+           ispackage("package5") + nl +
+           ispackage("package3") + nl
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+
+       Package Package3
+               Class class1
+                       Func f1
+
+       Package Package4
+               Class class1
+                       Func f1
+
+Output:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; classes()
+
+classes() Function
+==================
+
+We can get a list of classes names using the classes() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       classes() --> a list contains classes names
+
+Example:
+
+.. code-block:: ring
+
+       See classes()
+
+       Class class1
+               Func f1
+
+       Class class2
+               Func f1
+
+       Class class3
+               Func f1
+
+Output:
+
+.. code-block:: ring
+
+       class1
+       class2
+       class3
+
+.. index:: 
+       pair: Reflection and Meta-programming; isclass()
+
+isclass() Function
+==================
+
+We can check if a class is defined or not using the isclass() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       isclass(cClassName) -->  returns 1 if the Class is defined
+                                returns 0 if the Class is not defined
+
+Example:
+
+.. code-block:: ring
+
+       see isclass("class4") + nl + 
+           isclass("class3") + nl +
+           isclass("class2") + nl
+
+       Class class1
+               func f1
+
+       class class2
+               func f1
+
+       class class3
+               func f1
+
+Output:
+
+.. code-block:: ring
+
+       0
+       1
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; packagesclasses()
+
+packageclasses() Function
+=========================
+
+We can get a list of classes names inside a package using the packageclasses() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       packageclasses(cPackageName) --> a list contains classes names inside the package
+
+Example:
+
+.. code-block:: ring
+
+       see "classes in Package1" + nl
+       see packageclasses("Package1")
+       see "classes in Package2" + nl
+       see packageclasses("Package2")
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+               Class class2
+                       Func f1
+               Class class3
+                       func f1
+
+
+Output:
+
+.. code-block:: ring
+
+       classes in Package1
+       class1
+       classes in Package2
+       class1
+       class2
+       class3
+
+.. index:: 
+       pair: Reflection and Meta-programming; ispackagesclass()
+
+ispackageclass() Function
+=========================
+
+We can check if a class is defined inside package or not using the ispackageclass() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       ispackageclass(cPackageName,cClassName) -->  returns 1 if the Class is defined  
+                                                    returns 0 if the Class is not defined 
+
+Example:
+
+.. code-block:: ring
+
+       see ispackageclass("package1","class1") + nl +
+           ispackageclass("package1","class2") + nl +
+           ispackageclass("package2","class1") + nl +
+           ispackageclass("package2","class2") + nl
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+               Class class2
+                       Func f1
+               Class class3
+                       func f1
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+       1
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; classname()
+
+classname() Function
+====================
+               
+We can know the class name of an object using the classname() function
+
+Syntax:
+
+.. code-block:: ring
+
+       classname(object) --> Returns the object class name
+
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+       o2 = new rect
+
+       see classname(o1) + nl          # print point
+       see classname(o2) + nl          # print rect
+
+       class point
+       class rect
+
+.. index:: 
+       pair: Reflection and Meta-programming; objectid()
+
+objectid() Function
+===================
+
+We can know the object id using the objectid() function
+
+Syntax:
+
+.. code-block:: ring
+
+       objectid(object) --> Returns the object id
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+       see objectid(o1) + nl
+       test(o1)
+
+       func test v
+               see objectid(v) + nl
+
+       Class point x y z
+
+Output:
+
+.. code-block:: ring
+
+       021B5808
+       021B5808
+               
+.. index:: 
+       pair: Reflection and Meta-programming; isobject()
+
+isobject() Function
+===================
+
+We can check the variable to know if it's an object or not using the isobject() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isobject(variable) --> Returns True if it's an object, False if it's not
+
+               
+.. index:: 
+       pair: Reflection and Meta-programming; attributes()
+
+attributes() Function
+=====================
+
+We can get the object attributes using the attributes() function
+
+Syntax:
+
+.. code-block:: ring
+
+       attributes(object) --> Returns a list contains the object attributes
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+       aList = attributes(o1)          # we can use see attributes(o1)
+       for t in aList see t next       # print xyz 
+       Class Point x y z
+               
+.. index:: 
+       pair: Reflection and Meta-programming; methods()
+
+methods() Function
+==================
+
+We can get the object methods using the methods() function
+
+Syntax:
+
+.. code-block:: ring
+
+       methods(object) --> Returns a list contains the object methods
+
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new test
+       aList = methods(o1)
+
+       for x in aList
+               cCode = "o1."+x+"()"
+               eval(cCode)
+       next
+
+       Class Test
+               func f1
+                       see "hello from f1" + nl
+               func f2
+                       see "hello from f2" + nl
+               func f3
+                       see "hello from f3" + nl
+               func f4
+                       see "hello from f4" + nl
+
+Output:
+
+.. code-block:: ring
+
+       hello from f1
+       hello from f2
+       hello from f3
+       hello from f4
+
+
+.. index:: 
+       pair: Reflection and Meta-programming; isattribute()
+
+isattribute() Function
+======================
+
+We can test if the object contains an attribute or not using the isattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isattribute(object,cAttributeName) --> Returns True if the object contains the attribute
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see isattribute(o1,"x") + nl    # print 1
+       see isattribute(o1,"t") + nl    # print 0
+       see isattribute(o1,"y") + nl    # print 1
+       see isattribute(o1,"z") + nl    # print 1
+
+       class point x y z
+
+.. index:: 
+       pair: Reflection and Meta-programming; isprivateattribute()
+
+isprivateattribute() Function
+=============================
+
+We can test if the object contains a private attribute or not using the isprivateattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isprivateattribute(object,cAttributeName) --> Returns True if the object 
+                                                     contains the private attribute
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person
+
+       see isprivateattribute(o1,"name") + nl + 
+           isprivateattribute(o1,"address") + nl + 
+           isprivateattribute(o1,"phone") + nl + 
+           isprivateattribute(o1,"job") + nl + 
+           isprivateattribute(o1,"salary")
+
+       Class Person
+               name address phone
+               private
+                       job salary
+
+Output:
+
+.. code-block:: ring
+
+       0
+       0
+       0
+       1
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; ismethod()
+       
+ismethod() Function
+===================
+
+We can test if the object class contains a method or not using the ismethod() function
+
+Syntax:
+
+.. code-block:: ring
+
+       ismethod(object,cMethodName) --> Returns True if the object class contains the method
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see ismethod(o1,"print") + nl           # print 1
+
+       mylist = []
+       mylist + new point
+
+       see ismethod(mylist[1],"print") + nl    # print 1
+
+       class point x y z
+               func print
+                       see x + nl + y + nl + z + nl
+
+.. index:: 
+       pair: Reflection and Meta-programming; isprivatemethod()
+
+isprivatemethod() Function
+==========================
+
+We can test if the object class contains a private method or not using the isprivatemethod() function
+
+Syntax:
+
+.. code-block:: ring
+
+       isprivatemethod(object,cMethodName) --> Returns True if the object class contains 
+                                               the private method
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Test
+
+       see isprivatemethod(o1,"f1") + nl +
+           isprivatemethod(o1,"f2") 
+
+       Class Test
+               func  f1
+                       see "message from f1()" + nl
+               private
+                       func f2
+                               see "message from f2()" + nl
+
+Output:
+
+.. code-block:: ring
+
+       0
+       1
+
+.. index:: 
+       pair: Reflection and Meta-programming; addattribute()
+
+addattribute() Function
+=======================
+
+We can add an attribute (or a group of attributes) to the object state (not the class) using
+the addattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       AddAttribute(object,cAttributeName|aAttributesList)
+
+Example(1):
+
+.. code-block:: ring
+
+       see new point {x=10 y=20 z=30}
+       Class Point 
+               AddAttribute(self,["x","y","z"])
+
+Example(2):
+
+.. code-block:: ring
+
+       o1 = new point
+       addattribute(o1,"x")
+       addattribute(o1,"y")
+       addattribute(o1,"z")
+       see o1 {x=10 y=20 z=30}
+       class point
+
+
+Output:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+
+.. index:: 
+       pair: Reflection and Meta-programming; addmethod()
+
+
+addmethod() Function
+====================
+
+We can add a method to the object class using the addmethod() function
+This method can be used with any object from the same class.
+
+Syntax:
+
+.. code-block:: ring
+
+       AddMethod(Object,cNewMethodName,cMethodName|AnonymousFunction)
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+
+       Class point
+               x y z
+       
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+
+Instead of using anonymous function to add new method to the class, we can use the function name
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+
+       myfunc = func { see x + nl + y + nl + z + nl }
+
+       addmethod(o1,"print", myfunc )
+       addmethod(o1,"display", myfunc )
+       addmethod(o1,"show", myfunc )
+
+       o1.print()
+       o1.display()
+       o1.show()
+
+       Class point
+               x y z
+
+
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+       10
+       20
+       30
+       10
+       20
+       30
+
+Since we add the method to the class, any object from that class can use this method
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+       o2 = new point { x=100 y=200 z=300 }
+       o3 = new point { x=50 y=150 z=250 }
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+       o2.print()
+       o3.print()
+
+       Class point
+               x y z
+
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+       100
+       200
+       300
+       50
+       150
+       250
+
+.. index:: 
+       pair: Reflection and Meta-programming; getattribute()
+
+getattribute() function
+=======================
+
+We can get the object attribute value using the getattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       GetAttribute(oObject,cAttributeName) ---> Attribute Value
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see getattribute(o1,"name") + nl +
+           getattribute(o1,"x") + nl +
+           getattribute(o1,"y") + nl + 
+           getattribute(o1,"z") + nl
+
+       Class Point
+               x=10 y=20 z=30
+               name = "3D-Point"
+       
+Output:
+
+.. code-block:: ring
+
+       3D-Point
+       10
+       20
+       30
+       
+
+Example:
+
+We can Find a Class List Member using GetAttribute() using a function findclass()
+The Find uses the member name, rather than the column number
+
+.. code-block:: ring
+
+       myList =
+                 [new Company {position=3 name="Mahmoud" symbol="MHD"},
+                  new Company {position=2 name="Bert" symbol="BRT"},
+                  new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+       
+       see myList
+       see nl +"=====================" + nl + nl
+       
+       for i = 1 to len(myList)
+            see  "Pos: "+ i +" | "+ myList[i].position +" | "+ myList[i].name +
+                 " | "+  myList[i].symbol    +" | "+ nl
+       next
+       
+       
+       See findclass(myList, "MHD", "symbol") +nl   ### Specify Member class name
+       
+       ###---------------------------------------
+       
+       func findclass classList, cValue, classMember
+       
+              See nl + "FindClass: "  +" "+ cValue + nl + nl
+       
+              for i = 1 to len(classList)
+                   result = getattribute( classList[i], classMember )
+                  
+                  See "Result-Attr: " + i +" "+  result +nl
+                  if result = cValue
+                      j = i
+                   ok      
+              next
+       return j
+       
+       ###--------------------------------------
+       
+       class company position name symbol
+
+Output:
+
+.. code-block:: ring
+
+       Pos: 1 | 3 | Mahmoud | MHD |
+       Pos: 2 | 2 | Bert | BRT |
+       Pos: 3 | 1 | Ring | RNG |
+       
+       FindClass:  MHD
+       
+       Result-Attr: 1 MHD
+       Result-Attr: 2 BRT
+       Result-Attr: 3 RNG
+       
+       1
+
+       
+.. index:: 
+       pair: Reflection and Meta-programming; setattribute()
+
+setattribute() function
+=======================
+
+We can set the object attribute value using the setattribute() function
+
+Syntax:
+
+.. code-block:: ring
+
+       SetAttribute(oObject,cAttributeName,Value)
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person
+       setattribute(o1,"cName","Mahmoud")
+       setattribute(o1,"nSalary",1000000)
+       setattribute(o1,"aColors",["white","blue","yellow"])
+
+       see o1
+       see o1.aColors
+
+       Class Person
+               cName
+               nSalary
+               aColors
+
+Output:
+
+.. code-block:: ring
+
+       cname: Mahmoud
+       nsalary: 1000000.000000
+       acolors: List...
+       white
+       blue
+       yellow
+
+.. index:: 
+       pair: Reflection and Meta-programming; mergemethods()
+
+mergemethods() Function
+=======================
+
+We can share methods between classes without inheritance using the MergeMethods() function
+
+This function merge class methods to another class.
+
+Syntax:
+
+.. code-block:: ring
+
+       MergeMethods(cClassNameDestination,cClassNameSource)
+
+Example:
+
+.. code-block:: ring
+
+       mergemethods("count","share")
+       mergemethods("count2","share")
+
+       o1 = new count  { test() }
+       o1 = new count2 { test() }
+
+       Class Share
+               func one
+                       see "one" + nl
+               func two
+                       see "two" + nl
+               func three
+                       see "three" + nl
+
+       Class Display
+               Func printline
+                       see copy("*",20) + nl
+
+       Class Count from Display
+               Func test
+                       printline()
+                       one()
+                       two()
+                       three()
+                       printline()
+
+       Class Count2 from Display
+               Func test
+                       three()
+                       two()
+                       one()
+                       printline()     
+
+Output:
+
+.. code-block:: ring
+
+       ********************
+       one
+       two
+       three
+       ********************
+       three
+       two
+       one
+       ********************
+
+.. index:: 
+       pair: Reflection and Meta-programming; packagename()
+
+packagename() Function
+====================
+               
+We can know the package name of the latest sucessful import command using the packagename() function
+
+Syntax:
+
+.. code-block:: ring
+
+       packagename() --> Returns the package name of the latest sucessful import
+
+
+Example:
+
+.. code-block:: ring
+
+       load "weblib.ring"
+       import System.web
+       see packagename()       # system.web
\ No newline at end of file
diff --git a/docs/en/target/minesweeper.png b/docs/en/target/minesweeper.png
new file mode 100644 (file)
index 0000000..57fc298
Binary files /dev/null and b/docs/en/target/minesweeper.png differ
diff --git a/docs/en/target/more3dsamples.jpg b/docs/en/target/more3dsamples.jpg
new file mode 100644 (file)
index 0000000..1f264be
Binary files /dev/null and b/docs/en/target/more3dsamples.jpg differ
diff --git a/docs/en/target/more3dsamples2.jpg b/docs/en/target/more3dsamples2.jpg
new file mode 100644 (file)
index 0000000..115494a
Binary files /dev/null and b/docs/en/target/more3dsamples2.jpg differ
diff --git a/docs/en/target/multilanguage.txt b/docs/en/target/multilanguage.txt
new file mode 100644 (file)
index 0000000..6e03f33
--- /dev/null
@@ -0,0 +1,121 @@
+.. index:: 
+     single: Multi-language applications; Introduction
+
+===========================
+Multi-language Applications
+===========================
+
+There are many ways to create multi-language Ring application!
+
+In this chapter we will learn about using the String2Constant tool
+
+.. index:: 
+     pair: Multi-language applications; Using String2Constant
+
+Using String2Constant
+=====================
+
+Starting from Ring 1.8 we have the String2Constant application
+
+You will find this tool in the ring/samples/tools/string2constant folder
+
+Using this tool we can convert the source code to be based on constants instead of string literals
+
+Then we can store constants in separate source code files that we can translate to different languages
+
+Where we can have special file for each language, like (English.ring, Arabic.ring and so on)
+
+Using this simple tool, the Form Designer is translated to Arabic language too just as an example.
+
+.. image:: string2constant.png
+       :alt: String2Constant 
+
+.. index:: 
+     pair: Multi-language applications; Form Designer Translation
+
+Form Designer Translation
+=========================
+
+You will find the form designer application in the ring/applications/formdesigner folder
+
+The files used for translation are stored in the ring/applications/formdesinger/translation folder
+
+You will find two files
+
+* Arabic.ring
+* English.ring
+
+You can check these files to get an idea about constants definition.
+
+The next section from the English.ring file
+
+.. code-block:: ring
+
+       T_LANGUAGE = "english"
+       T_LAYOUTDIRECTION = 0                   # Left to Right
+
+       T_FORMDESIGNER_FORMDESIGNER             = "Form Designer"
+       T_FORMDESIGNER_FORMTITLE                = "Form1"
+
+       T_FORMDESIGNER_FILE                     = "File"
+       T_FORMDESIGNER_NEW                      = "New"
+       T_FORMDESIGNER_OPEN                     = "Open"
+       T_FORMDESIGNER_SAVE                     = "Save"
+       T_FORMDESIGNER_SAVEAS                   = "Save As"
+       T_FORMDESIGNER_CLOSE                    = "Close"
+
+The form designer source code files will use these constants instead of typing the string literals 
+
+the next section from the formdesigner/mainwindow/formdesignerview.ring
+
+.. code-block:: ring
+
+               # Create the Main Window and use the Mdi Area
+                       win = new qMainwindow() {
+                               setWindowTitle(T_FORMDESIGNER_FORMDESIGNER) # "Form Designer"
+                               setcentralWidget(this.oArea)
+                               setLayoutDirection(T_LAYOUTDIRECTION)
+                       }
+
+* Using comments we can write the string literal to get more readable code.
+
+* Using setLayoutDirection() method we can set the window direction to be Right To Left.
+
+* Using the Load command, We can determine which translation file to use. 
+
+.. index:: 
+     pair: Multi-language applications; Forms Translation
+
+Forms Translation
+=================
+
+After creating the form using the Form Designer, the View class will be generated.
+
+We don't modify the view class, We just add the translation through the Controller class.
+
+For example, we have the form file : ring/formdesigner/selobjects/selobjects.rform
+
+.. image:: formtranslation1.png
+       :alt: Form Translation 
+
+
+And we add the translation through the Controller class using the next code
+
+And we define the constants in English.ring and Arabic.ring
+
+.. code-block:: ring 
+
+       class selobjectsController from windowsControllerParent
+
+               oView = new selobjectsView  {
+                       ListObjects.setselectionmode(QAbstractItemView_MultiSelection)
+                       win.setwindowmodality(2)
+                       # Translation
+                               win.setWindowTitle(T_FORMDESIGNER_SELOBJECTS_TITLE)
+                               win.setLayoutDirection(T_LAYOUTDIRECTION)
+                               labelobjects.setText(T_FORMDESIGNER_SELOBJECTS_OBJECTS)
+                               btnSelect.setText(T_FORMDESIGNER_SELOBJECTS_SELECT)
+                               btnClose.setText(T_FORMDESIGNER_SELOBJECTS_CLOSE)
+               }
+
+
diff --git a/docs/en/target/mysql.txt b/docs/en/target/mysql.txt
new file mode 100644 (file)
index 0000000..eb3ef70
--- /dev/null
@@ -0,0 +1,623 @@
+.. index:: 
+       single: MySQL Functions; Introduction
+
+===============
+MySQL Functions
+===============
+
+In this chapter we are going to learn about the MySQL functions provided by the Ring programming language.
+
+* MySQL_Info()
+* MySQL_Init()
+* MySQL_Error()
+* MySQL_Connect()
+* MySQL_Close()
+* MySQL_Query()
+* MySQL_Insert_ID()
+* MySQL_Result()
+* MySQL_Next_Result()
+* MySQL_Columns()
+* MySQL_Result2()
+* MySQL_Escape_String()
+* MySQL_AutoCommit()
+* MySQL_Commit()
+* MySQL_Rollback()
+
+Before using the next function load the mysqllib.ring library
+
+.. code-block:: ring
+
+       load "mysqllib.ring"
+       # Use MySQL functions
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Info()
+
+MySQL_Info() Function 
+=====================
+
+We can get the MySQL Client version using the MySQL_Info() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Info() ---> string contains the MySQL Client version
+
+Example:
+
+.. code-block:: ring
+
+       see "MySQL Client Version : " + mysql_info()
+
+Output:
+
+.. code-block:: ring
+
+       MySQL Client Version : 6.1.5
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Init()
+
+MySQL_Init() Function
+=====================
+
+We can start using MySQL Client through the MySQL_Init() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Init() ---> MySQL Handle
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Error()
+
+MySQL_Error() Function
+======================
+
+We can get the error message from the MySQL Client using the MySQL_Error() function.
+
+Syntax: 
+
+.. code-block:: ring
+
+       MySQL_Error(MySQL Handle) ---> Error message as string
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Connect()
+
+MySQL_Connect() Function
+========================
+
+We can connect to the MySQL database server using the MySQL_Connect() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Connect(MySQL Handle, cServer, cUserName, cPassword) ---> lStatus
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Close()
+
+MySQL_Close() Function
+======================
+
+We can close the connection to the MySQL database using the MySQL_Close() function
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Close(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Query()
+
+MySQL_Query() Function
+======================
+
+We can execute SQL queries using the MySQL_Query() function
+
+Syntax:
+
+.. code-block:: ring
+       
+       MySQL_Query(MySQL Handle, cSQLQuery)
+
+.. index:: 
+       pair: MySQL Functions; Create Database
+
+Create Database
+===============
+
+The next example connect to MySQL Server then create new database.
+
+.. code-block:: ring
+
+       See "MySQL Test - Create Database" + nl
+       con = mysql_init()
+
+       See "Connect" + nl
+       if mysql_connect(con,"localhost","root","root") = 0
+               see "Cann't connect" + nl
+               see "Error : " + mysql_error(con) + nl
+               mysql_close(con)
+               bye
+       ok
+
+       See "Create Database..." + nl
+       mysql_query(con,"CREATE DATABASE mahdb")
+
+       See "Close Connection" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       MySQL Test - Create Database
+       Connect
+       Create Database...
+       Close Connection
+
+.. index:: 
+       pair: MySQL Functions; Create Table and Insert Data
+
+Create Table and Insert Data
+============================
+
+The next example create new table and insert records 
+
+.. code-block:: ring
+
+       func main
+               see "Create Table and Insert Records" + nl
+               con = mysql_init()
+
+               see "Connect" + nl
+               if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
+                       system_error(con) 
+               ok
+
+               see "Drop table" + nl
+               if mysql_query(con, "DROP TABLE IF EXISTS Employee")  system_error(con) ok
+  
+               see "Create table" + nl
+               if mysql_query(con, "CREATE TABLE Employee(Id INT, Name TEXT, Salary INT)") 
+                  system_error(con) ok
+               see "Insert data" + nl 
+               if mysql_query(con, "INSERT INTO Employee VALUES(1,'Mahmoud',15000)") 
+                  system_error(con) ok
+  
+               if mysql_query(con, "INSERT INTO Employee VALUES(2,'Samir',16000)") 
+                  system_error(con) ok
+
+               if mysql_query(con, "INSERT INTO Employee VALUES(3,'Fayed',17000)")  
+                  system_error(con) ok
+
+               see "Close connection" + nl
+               mysql_close(con) 
+
+       func system_error con
+               see mysql_error(con)  mysql_close(con)  bye
+
+
+Output:
+
+.. code-block:: ring
+
+       Create Table and Insert Records
+       Connect
+       Drop table
+       Create table
+       Insert data
+       Close connection
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Inser_ID()
+
+MySQL_Insert_ID() Function
+==========================
+
+We can get the inserted row id using the MySQL_Insert_ID() function
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Insert_ID() ---> Inserted row id as number
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "connect to database" + nl
+       mysql_connect(con,"localhost","root","root","mahdb")
+       see "drop table" + nl
+       mysql_query(con, "DROP TABLE IF EXISTS Customers")
+       see "create table" + nl
+       mysql_query(con, "CREATE TABLE Customers(Id INT PRIMARY KEY AUTO_INCREMENT, Name TEXT)")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Mahmoud')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Samir')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Fayed')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Test 2015')")
+
+       see "inserted row id : " + mysql_insert_id(con) + nl
+       see "close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       connect to database
+       drop table
+       create table
+       insert record
+       insert record
+       insert record
+       insert record
+       inserted row id : 4
+       close database
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Result()
+
+MySQL_Result() Function
+=======================
+
+We can get the query result (data without column names) using the MySQL_Result() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Result(MySQL Handle) ---> List contains the query result  
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Next_Result()
+
+MySQL_Next_Result() Function
+============================
+
+We can move to the next query result using the MySQL_Next_Result() function.
+We use this function when we have multiple SQL statements in the same query.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Next_Result(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; Print Query Result
+
+Print Query Result
+==================
+
+The next example execute a query on the database then print the result.
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT Name FROM Employee WHERE Id=1;"+
+                        "SELECT Name FROM Employee WHERE Id=3")
+       see "Print Result" + nl 
+       see mysql_result(con)
+       mysql_next_result(con)
+       see mysql_result(con)
+       see "close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Print Result
+       Mahmoud
+       Fayed
+       close database
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Columns()
+
+MySQL_Columns() Function
+========================
+
+We can get a list of columns names using the MySQL_Columns() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Columns(MySQL Handle) ---> List contains columns information
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT * FROM Employee")
+       see "Result" + nl 
+       see mysql_columns(con)
+       see "Close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Result
+       Id
+       11
+       3
+       32768
+       Name
+       65535
+       252
+       16
+       Salary
+       11
+       3
+       32768
+       Close database
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Result2()
+
+MySQL_Result2() Function
+========================
+
+Instead of using MySQL_Result() to get the result data without columns names, we can use the MySQL_Result2() to get all of the
+column names then the query result in one list.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Result2(MySQL Handle) ---> List (query result starts with columns names)
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT * FROM Employee")
+       see "Print Result" + nl 
+       see mysql_result2(con)
+       see "Close database" + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Print Result
+       Id
+       Name
+       Salary
+       1
+       Mahmoud
+       15000
+       2
+       Samir
+       16000
+       3
+       Fayed
+       17000
+       Close database
+
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Escape_String()
+
+MySQL_Escape_String() Function
+==============================
+
+We can store binary data and special characters in the database after
+processing using MySQL_Escape_String() function
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Escape_String(MySQL Handle, cString) ---> String after processing
+
+.. index:: 
+       pair: MySQL Functions; Save Image Inside the Database
+
+Save Image inside the database
+==============================
+
+Example:
+
+.. code-block:: ring
+
+       See "Read file" + nl
+       cFile = read("tests\mahmoud.jpg")
+       con = mysql_init()
+       See "Connect to database..." + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       See "Escape string..." + nl
+       cFile = mysql_escape_string(con,cFile)
+       stmt = "INSERT INTO photo(id, data) VALUES(1, '" + cFile + "')"
+       See "Insert data..." + nl
+       mysql_query(con,stmt)
+       See "Close database..." + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Read file
+       Connect to database...
+       Escape string...
+       Insert data...
+       Close database...
+
+.. index:: 
+       pair: MySQL Functions; Restore Image From The Database
+
+Restore Image From The Database
+===============================
+
+Example:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       See "Connect to database..." + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       See "Read data from database..." + nl
+       mysql_query(con,"SELECT data FROM photo WHERE id=1")
+       See "Write new file" + nl
+       result = mysql_result(con)
+       write("tests\mahmoud2.jpg",result[1][1])
+       See "Close database..." + nl
+       mysql_close(con)
+
+Output:
+
+.. code-block:: ring
+
+       Connect to database...
+       Read data from database...
+       Write new file
+       Close database...
+
+
+.. index:: 
+       pair: MySQL Functions; MySQL_AutoCommit()
+
+MySQL_AutoCommit() Function
+===========================
+
+We can enable or disable the auto commit feature using the MySQL_AutoCommit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_AutoCommit(MySQL Handle, lStatus)  # lstatus can be True/False
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Commit()
+
+MySQL_Commit() Function
+=======================
+
+We can commit updates to the database using the MySQL_Commit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Commit(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; MySQL_Rollback()
+
+MySQL_Rollback() Function
+=========================
+
+We can rollback updates to the database using the MySQL_Rollback() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       MySQL_Rollback(MySQL Handle)
+
+.. index:: 
+       pair: MySQL Functions; Transaction Example
+
+Transaction Example
+===================
+
+The next example presents the usage of MySQL_Autocommit(), MySQL_Commit() 
+& MySQL_RollBack() functions.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+       
+               con = mysql_init()
+
+               see "Connect" + nl
+               if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
+                       system_error(con) ok
+
+               see "Drop table" + nl
+               if mysql_query(con, "DROP TABLE IF EXISTS Employee2") 
+                       system_error(con) ok
+  
+               see "Create table" + nl
+               if mysql_query(con, "CREATE TABLE Employee2(Id INT, Name TEXT, Salary INT)")
+                       system_error(con) ok
+               see "Insert data" + nl 
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(1,'Mahmoud',15000)") 
+                       system_error(con) ok
+  
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(2,'Samir',16000)")
+                       system_error(con) ok
+
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(3,'Fayed',17000)") 
+                       system_error(con) ok
+
+               mysql_autocommit(con,False)
+               mysql_query(con, "INSERT INTO Employee2 VALUES(4,'Ahmed',5000)")
+               mysql_query(con, "INSERT INTO Employee2 VALUES(5,'Ibrahim',50000)")
+               mysql_query(con, "INSERT INTO Employee2 VALUES(6,'Mohammed',50000)")
+               See "Save transaction (y/n) " give nChoice
+               if upper(nChoice) = "Y"
+                       mysql_commit(con)
+               else
+                       mysql_rollback(con)
+               ok
+
+               see "Close connection" + nl
+               mysql_close(con) 
+
+       func system_error con
+
+               see mysql_error(con)
+               mysql_close(con)
+               bye
+
+Output:
+
+.. code-block:: ring
+
+       Connect
+       Drop table
+       Create table
+       Insert data
+       Save transaction (y/n) y
+       Close connection
\ No newline at end of file
diff --git a/docs/en/target/natural.txt b/docs/en/target/natural.txt
new file mode 100644 (file)
index 0000000..c4916a7
--- /dev/null
@@ -0,0 +1,629 @@
+.. index:: 
+       single: Natural Language Programming; Introduction
+
+============================
+Natural Language Programming
+============================
+
+Using the Ring programming language, we can create Natural programming languages based
+on classes and objects.
+
+.. index:: 
+       pair: Natural Language Programming; History
+
+History
+=======
+
+In 2010, I developed a new programming language called Supernova (developed using PWCT).
+This language uses a code that looks similar to Natural Language statements to create simple GUI applications.
+Now after five years, In the Ring programming language, we can get similar results, but now we have the ability 
+to create/use code similar to Natural language statements in any domain that we like or need.
+
+The Ring programming language comes with the Supernova spirit, but with more generalization and with mix of other languages
+spirits.
+
+.. index:: 
+       pair: Natural Language Programming; Example
+
+Example
+=======
+
+The next example presents how to create a class that define two instructions 
+
+The first instruction is : I want window
+
+The second instruction is : Window title = <expr>
+
+Also keywords that can be ignored like the 'the' keyword
+
+.. code-block:: ring
+
+       New App 
+       {
+               I want window   
+               The window title = "hello world"
+       }
+
+       Class App
+
+               # Attributes for the instruction I want window
+                       i want window 
+                       nIwantwindow = 0
+               # Attributes for the instruction Window title
+               # Here we don't define the window attribute again
+                       title 
+                       nWindowTitle = 0
+               # Keywords to ignore, just give them any value
+                       the=0   
+
+               func geti
+                       if nIwantwindow = 0
+                               nIwantwindow++
+                       ok
+
+               func getwant
+                       if nIwantwindow = 1
+                               nIwantwindow++
+                       ok
+
+               func getwindow
+                       if nIwantwindow = 2
+                               nIwantwindow= 0
+                               see "Instruction : I want window" + nl
+                       ok
+                       if nWindowTitle = 0
+                               nWindowTitle++
+                       ok
+       
+               func settitle cValue
+                       if nWindowTitle = 1
+                               nWindowTitle=0
+                               see "Instruction : Window Title = " + cValue + nl
+                       ok
+               
+
+Output:
+
+.. code-block:: ring
+
+       Instruction : I want window
+       Instruction : Window Title = hello world
+
+
+.. index:: 
+       pair: Natural Language Programming; Change the Ring Keyword 'And'
+
+Change the Ring Keyword 'And'
+=============================
+
+What if we want to connect between the two instructions using 'and'
+
+We have a problem because in Ring 'and' is a keyword
+
+We can change that using the ChangeRingKeyword command.
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingKeyword  <oldkeyword>  <newkeyword>
+
+.. note:: remember to restore the keyword again 
+
+.. tip:: The ChangeRingKeyword command is executed in the scanner stage by the compiler (before parsing).
+       
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+
+       New App
+       {
+                       I want window and the window title = "hello world"
+       }
+
+       Class App
+
+                       # Attributes for the instruction I want window
+                                       i want window
+                                       nIwantwindow = 0
+                       # Attributes for the instruction Window title
+                       # Here we don't define the window attribute again
+                                       title
+                                       nWindowTitle = 0
+                       # Keywords to ignore, just give them any value
+                                       the=0  and=0
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+                       func getand
+                               see "Using : and" + nl
+
+
+
+Output:
+
+.. code-block:: ring
+
+       Instruction : I want window
+       Using : and
+       Instruction : Window Title = hello world
+                       
+
+.. index:: 
+       pair: Natural Language Programming; Change the Ring Operator '+'
+
+Change the Ring Operator '+'
+============================
+
+What if we want to define a new behavior for any operator like the "+" operator.
+
+We can do this change using the ChangeRingOperator command to hide operator (change it's name)
+
+Then we can use the operator as identifier that we can handle it's behaviour
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingOperator  <oldoperator>  <newoperator>
+
+.. note:: remember to restore the operator again 
+
+.. tip:: The ChangeRingOperator command is executed in the scanner stage by the compiler (before parsing).
+       
+Example:
+
+.. code-block:: ring
+
+       ChangeRingOperator + _+
+
+       New App {
+               +
+       }
+
+       Class App
+               + 
+               func get+
+                       see "Plus operator" 
+
+       ChangeRingOperator _+ +
+
+Output:
+
+.. code-block:: ring
+
+       Plus operator
+
+.. index:: 
+       pair: Natural Language Programming; Change the '=' operator to 'is'
+
+Change the '=' operator to 'is'
+===============================
+       
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+       ChangeRingOperator      =    is
+
+       New App
+       {
+                       I want window and the window title is "hello world"
+       }
+
+       ChangeRingOperator      is    =
+
+       Class App
+
+                       # Attributes for the instruction I want window
+                                       i want window
+                                       nIwantwindow = 0
+                       # Attributes for the instruction Window title
+                       # Here we don't define the window attribute again
+                                       title
+                                       nWindowTitle = 0
+                       # Keywords to ignore, just give them any value
+                                       the=0  and=0
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+
+.. index:: 
+       pair: Natural Language Programming; Using Eval() with our Natural Code
+
+Using Eval() with our Natural Code
+==================================
+
+Example:
+
+.. code-block:: ring
+
+       func Main
+
+         cProgram = ' I want window and the window title is "hello world" '
+
+         MyLanguage(cProgram)
+
+       Func MyLanguage cCode
+
+         # We add to the code the instructions that change keywords and operators 
+         # Because Eval() uses a new Compiler Object (the original keywords and operatos).
+         
+         cCode = '
+               ChangeRingKeyword  and  _and
+               ChangeRingOperator  =    is
+         ' + cCode
+
+         New App
+         {
+                 eval(cCode)
+         }
+
+
+         Class App
+
+                 # Attributes for the instruction I want window
+                         i want window
+                         nIwantwindow = 0
+                 # Attributes for the instruction Window title
+                 # Here we don't define the window attribute again
+                         title
+                         nWindowTitle = 0
+                 # Keywords to ignore, just give them any value
+                         the=0  
+
+                 ChangeRingKeyword  and  _and
+                         and=0
+                 ChangeRingKeyword  _and  and
+
+                 func geti
+                       if nIwantwindow = 0
+                         nIwantwindow++
+                       ok
+
+                 func getwant
+                       if nIwantwindow = 1
+                         nIwantwindow++
+                       ok
+
+                 func getwindow
+                       if nIwantwindow = 2
+                         nIwantwindow= 0
+                         see "Instruction : I want window" + nl
+                       ok
+                       if nWindowTitle = 0
+                         nWindowTitle++
+                       ok
+
+                 func settitle cValue
+                       if nWindowTitle = 1
+                         nWindowTitle=0
+                         see "Instruction : Window Title = " + cValue + nl
+                       ok
+
+               
+.. index:: 
+       pair: Natural Language Programming; BraceStart and BraceEnd Methods
+
+BraceStart and BraceEnd Methods
+===============================
+
+We can write code that will be executed before/after using { }
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new test {
+               see "Hello" + nl
+       }
+
+       o1 {}
+
+       class test
+
+               func bracestart
+                       see "start" + nl
+
+               func braceend
+                       see "end" + nl
+
+Output:
+
+.. code-block:: ring
+
+       start
+       Hello
+       end
+       start
+       end
+
+
+.. index:: 
+       pair: Natural Language Programming; BraceExprEval Method
+
+BraceExprEval Method
+====================
+
+The next example demonstrates how to use the "BraceExprEval" method to get expressions in
+Natural code.
+
+Example:
+
+.. code-block:: ring
+
+       new natural {
+               create 5
+       }
+
+       class natural
+               create=0
+               lkeyword = false
+               func braceexpreval r            
+                       if lkeyword lkeyword=false return ok
+                       see "expr eval" + nl
+                       see "type: " + type(r) see nl
+                       see "value : " see r see nl
+               func getcreate
+                       lkeyword = true
+                       see "create" + nl
+
+Output:
+
+.. code-block:: ring
+
+       create
+       expr eval
+       type: NUMBER
+       value : 5
+
+.. index:: 
+       pair: Natural Language Programming; Real Natual Code
+
+Real Natural Code
+=================
+
+The next example is a more advanced example 
+
+.. code-block:: ring
+
+       # Natural Code
+       new program {
+               Accept 2 numbers then print the sum
+       }
+
+       # Natural Code Implementation
+       class program
+               # Keywords
+                       Accept=0 numbers=0 then=0 print=0 the=0 sum=0
+
+               # Execution
+               func braceexpreval x
+                       value = x
+               func getnumbers
+                       for x=1 to value
+                               see "Enter Number ("+x+") :" give nNumber
+                               aNumbers + nNumber
+                       next
+               func getsum
+                       nSUm = 0
+                       for x in aNumbers nSum+= x next
+                       see "The Sum : " + nSum
+               private
+                       value=0 aNumbers=[]
+               
+Output: 
+
+.. code-block:: ring
+
+       Enter Number (1) :3
+       Enter Number (2) :4
+       The Sum : 7
+
+.. index:: 
+       pair: Natural Language Programming; BraceError() Method
+
+BraceError() Method
+===================
+
+The next examples demonstrates how to use the "BraceError" method to handle errors when accessing
+the object using braces {}.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+               o1 = new point {
+                       x=10 y=20 z=30
+                       TEST
+                       SEE test
+               }
+
+       class point x y z
+               func braceerror
+                       see "Handle Error!" + nl
+                       SEE "Message :" + cCatchError + nl
+                       if ( left(cCatchError,11) = "Error (R24)" ) and not isattribute(self,"test")
+                               see "add attribute" + nl
+                               addattribute(self,"test")
+                               test = 10
+                       ok
+                       see "done" + nl
+                       return 
+                       
+Output:
+
+.. code-block:: ring
+
+       Handle Error!
+       Message :Error (R24) : Using uninitialized variable : test
+       add attribute
+       done
+       10
+       
+Example:
+
+.. code-block:: ring
+
+       new point {
+               x=10 y=20 z=30
+               test()
+               see "mmm..." + NL
+       }
+
+       class point x y z
+               func braceerror
+                       see "Handle Error!" + nl
+                       see "Message :" + cCatchError + nl
+                       see self
+                       see "Done" + NL
+                       
+Output:
+
+.. code-block:: ring
+
+       Handle Error!
+       Message :Error (R3) : Calling Function without definition !: test
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       Done
+       mmm...
+       
+.. index:: 
+       pair: Natural Language Programming; Clean Natural Code
+
+Clean Natural Code
+==================
+
+Instead of typing the literal as "literal" we can accept the words directly.
+
+Example:
+
+The next example accept hello world instead of "hello world"
+
+But this example uses braceend() to check the end of the instruction
+
+This means that this class process only one natural statement that end with literal.
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+
+       New App
+       {
+                       I want window and the window title is hello world
+       }
+
+       Class App
+
+                       # Attributes for the instruction I want window
+                                       i want window
+                                       nIwantwindow = 0
+                       # Attributes for the instruction Window title
+                       # Here we don't define the window attribute again
+                                       title is 
+                                       nWindowTitle = 0
+                       # Keywords to ignore, just give them any value
+                                       the=0  and=0
+                       # Data
+                                       literal = ""
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func gettitle
+                               if nWindowTitle = 1
+                                       nWindowTitle=2
+                               ok
+                       
+                       func getis
+                               if nWindowTitle = 2
+                                       nWindowTitle=3
+                               ok                      
+
+                       func braceend
+                               if nWindowTitle = 3
+                                       see "Instruction : Window Title = " + literal + nl
+                                       nWindowTitle = 0
+                               ok
+
+                       func braceerror
+                               c= substr(cCatchError,":")
+                               while c > 0 
+                                       c= substr(cCatchError,":") 
+                                       cCatchError=substr(cCatchError,c+1)  
+                               end
+                               literal += substr(cCatchError,1)
diff --git a/docs/en/target/naturallibrary.txt b/docs/en/target/naturallibrary.txt
new file mode 100644 (file)
index 0000000..84b9f59
--- /dev/null
@@ -0,0 +1,448 @@
+.. index:: 
+       single: Using the Natural Library; Introduction
+
+=========================
+Using the Natural Library
+=========================
+
+In this chapter we will learn how to use the Natural Library to quickly define a language
+that contains a group of commands.
+
+To start using the library, We need to call naturallib.ring
+
+.. code-block:: ring
+
+       load "naturallib.ring"
+
+After loading the library, We can use the NaturalLanguage class that contains the 
+next methods :-
+
+* SetLanguageName(cLanguageName)
+* setCommandsPath(cFolder)
+* SetPackageName(cPackageName)
+* UseCommand(cCommandName)
+* SetOperators(cOperators)
+* RunFile(cFileName)
+* RunString(cString)
+
+.. index:: 
+       pair: Using the Natural Library; Natural Library - Demo Program
+
+Natural Library - Demo Program
+==============================
+
+We will write the natural code in a Text file, for example program.txt
+
+File: program.txt
+
+.. code-block:: none
+
+       Welcome to the Ring programming language!
+       What you are reading now is not comments, I swear!
+
+       After many years of programming I decided to think different about
+       programming and solve the problems in a better way. 
+
+       We are writing commands or code and the Ring language is reading
+       it to understand us! Sure, What you are seeing now is
+       just ***part of the code - Not the Complete Program***
+       You have to write little things before and after this 
+       part to be able to run it!
+
+       It is the natural part of our code where we can write in English, 
+       Arabic or any Natural Language Then we will tell the computer 
+       through the Ring language what must happens! in a way that we can scale 
+       for large frameworks and programs.
+
+       Just imagine what will happens to the world of programming once
+       we create many powerful frameworks using the Ring language that
+       uses this way (Natural Programming).
+
+       For example When we say Hello to the Machine, It can reply! and when we
+       say count from 1 to 5 it will understand us, Also if 
+       we said count from 5 to 1 it will
+       understand us too! You can see the Output window!
+
+       This Goal is not new, but the Ring language comes
+       with an innovative solution to this problem.    
+
+Output:
+
+.. code-block:: none
+
+       Hello, Sir!
+
+
+       The Numbers!
+
+       1
+
+       2
+
+       3
+
+       4
+
+       5
+
+       I will count Again!
+
+       5
+
+       4
+
+       3
+
+       2
+
+       1
+
+
+To execute the natural code, We have start.ring
+
+In start.ring we define the language and the commands.
+
+File: start.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               SetCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               RunFile("program.txt")
+       }
+
+
+We defined a language called MyLanguage, We have folder for the language commands.
+
+Each command will define a class that belong to the MyLanguage.Natural package.
+
+We will define two commands, Hello and Count.
+
+So we must have two files for defining the commands in the CurrentDir()+"/../command" folder
+
+File: hello.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeyword([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :hello, 
+               :Function = func {
+                       See  "Hello, Sir!" + nl + nl
+               }
+       ])
+
+File: count.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordNumberNumber([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :count, 
+               :Function = func {
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
+               }
+       ])
+
+
+.. index:: 
+       pair: Using the Natural Library; Defining Commands
+
+Defining Commands
+=================
+
+To define new command we can use the DefineNaturalCommand object
+
+This object provides the next methods :-
+
+* SyntaxIsKeyword(aPara)
+* SyntaxIsKeywordNumber(aPara)
+* SyntaxIsKeywordNumberNumber(aPara)
+* SyntaxIsKeywordNumbers(aPara,nCount)
+* SyntaxIsKeywordString(aPara)
+* SyntaxIsKeywordStringString(aPara)
+* SyntaxIsKeywordStrings(aPara,nCount)
+* SyntaxIsKeywordExpression(aPara)
+* SyntaxIsKeywordExpressionExpression(aPara)
+* SyntaxIsKeywordExpressions(aPara,nCount)
+* SyntaxIsCommand(aPara)
+* SyntaxIsCommandNumber(aPara)
+* SyntaxIsCommandNumberNumber(aPara)
+* SyntaxIsCommandNumbers(aPara,nCount)
+* SyntaxIsCommandString(aPara)
+* SyntaxIsCommandStringString(aPara)
+* SyntaxIsCommandStrings(aPara,nCount)
+* SyntaxIsCommandExpression(aPara)
+* SyntaxIsCommandExpressionExpression(aPara)
+* SyntaxIsCommandExpressions(aPara,nCount)
+
+File: mylanguage.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       MyLanguage = New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               setCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               UseCommand(:Print)
+               UseCommand(:IWantWindow)
+               UseCommand(:WindowTitleIs)
+               UseCommand(:IWantButton)
+       }
+
+
+Example (1)
+
+In the next example we will define the Print command.
+
+We will use the SyntaxIsKeywordExpression() Method.
+
+We pass list (as Hash) to the method. We determine the package name, the keyword and
+the function that will be executed.
+
+Inside this function we uses the Expr(nExprNumber) function to get the expression value that the
+user will write after the keyword.
+
+File: print.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordExpression([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :print, 
+               :Function = func {
+                       See  Expr(1)  
+               }
+       ])
+
+Usage:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               print "Hello, World!"
+       ')
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+
+Example (2)
+
+File: iwantwindow.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsCommand([
+               :Package = "MyLanguage.Natural",
+               :Command = "i want window", 
+               :Function = func {
+                       See  "Command: I want window" + nl
+               }
+       ])
+
+Usage:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               i want window
+       ')
+
+Output:
+
+.. code-block:: none
+
+       Command: I want window
+
+Example (3)
+
+File: windowtitleis.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsCommandString([
+               :Package = "MyLanguage.Natural",
+               :Command = "window title is", 
+               :Function = func {
+                       See  "Command: Window title is " + Expr(1) + nl
+               }       
+       ])
+
+Usage:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               I want window and the window title is "Hello World"
+       ')
+
+Output:
+
+.. code-block:: none
+
+       Command: I want window
+       Command: Window title is Hello World
+
+
+.. index:: 
+       pair: Using the Natural Library; Operators
+
+Natural Library - Operators
+===========================
+
+In the next example we uses the Count command without using operators
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString("
+               Hello   
+               Count 1 5
+               Count 5 1
+       ")
+
+We can add more description
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString("
+               Hello, Please   Count from 1 to 5 then count from 5 to 1
+       ")
+
+Also we can use operators like "(" and ")" around the instruction
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage {
+               SetOperators("()")
+               RunString("
+                       Here we will play and will try something
+                       that looks like Lisp Syntax
+                       (count  (count 1 5)  (count 20 15))
+                       Just for fun!
+               ")
+       }
+
+
+.. index:: 
+       pair: Using the Natural Library; Defining commands using classes
+
+Defining commands using classes
+===============================
+
+This section is related to the implementation details.
+
+When we define new command, Each command is defined by the Natural Library as a class.
+
+We have the choice to define commands using the simple interface provided by the
+DefineNaturalCommand object or by defining new class as in the next examples.
+
+If we used DefineNaturalCommand (More Simple), The class will be defined during the runtime.
+
+File: hello.ring
+
+.. code-block:: ring
+
+       Package MyLanguage.Natural
+
+       class Hello
+
+               func AddAttributes_Hello        
+                       AddAttribute(self,:hello)
+
+               func GetHello   
+                       See  "Hello, Sir!" + nl + nl
+
+
+File: count.ring
+
+.. code-block:: ring
+
+       Package MyLanguage.Natural
+
+       class Count
+           
+               func Getcount
+                       StartCommand()
+                       CommandData()[:name] = :Count
+                       CommandData()[:nExpr] = 0
+                       CommandData()[:aExpr] = []
+
+               func BraceExprEval_Count nValue
+                       if isCommand() and CommandData()[:name] = :Count {
+                               if isNumber(nValue) {
+                                       CommandData()[:nExpr]++     
+                                       CommandData()[:aExpr] + nValue
+                                       if CommandData()[:nExpr] = 2 {
+                                               Count_Execute()
+                                       }
+                               }
+                       }
+
+               func AddAttributes_Count        
+                       AddAttribute(self,:count)
+       
+               func Count_Execute
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
diff --git a/docs/en/target/newcalc.png b/docs/en/target/newcalc.png
new file mode 100644 (file)
index 0000000..f355727
Binary files /dev/null and b/docs/en/target/newcalc.png differ
diff --git a/docs/en/target/newcalc2.png b/docs/en/target/newcalc2.png
new file mode 100644 (file)
index 0000000..ee536ed
Binary files /dev/null and b/docs/en/target/newcalc2.png differ
diff --git a/docs/en/target/number2words.png b/docs/en/target/number2words.png
new file mode 100644 (file)
index 0000000..9ec07c6
Binary files /dev/null and b/docs/en/target/number2words.png differ
diff --git a/docs/en/target/objectslib1.png b/docs/en/target/objectslib1.png
new file mode 100644 (file)
index 0000000..9325d2b
Binary files /dev/null and b/docs/en/target/objectslib1.png differ
diff --git a/docs/en/target/objectslib2.png b/docs/en/target/objectslib2.png
new file mode 100644 (file)
index 0000000..7c697a5
Binary files /dev/null and b/docs/en/target/objectslib2.png differ
diff --git a/docs/en/target/odbc.txt b/docs/en/target/odbc.txt
new file mode 100644 (file)
index 0000000..2e145b1
--- /dev/null
@@ -0,0 +1,564 @@
+.. index:: 
+       single: ODBC Functions; Introduction
+
+==============
+ODBC Functions
+==============
+
+This chapter contains the ODBC functions provided by the Ring programming language.
+
+* odbc_init()
+* odbc_drivers()
+* odbc_datasources()
+* odbc_close()
+* odbc_connect()
+* odbc_disconnect()
+* odbc_execute()
+* odbc_colcount()
+* odbc_fetch()
+* odbc_getdata()
+* odbc_tables()
+* odbc_columns()
+* odbc_autocommit()
+* odbc_commit()
+* odbc_rollback()
+
+Before using the next function load the odbclib.ring library
+
+.. code-block:: ring
+
+       load "odbclib.ring"
+       # Use ODBC functions
+
+.. index:: 
+       pair: ODBC Functions; odbc_init()
+
+odbc_init() Function
+====================
+
+We can create ODBC Handle using the odbc_init() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_init() ---> ODBC Handle
+
+.. index:: 
+       pair: ODBC Functions; odbc_drivers()
+
+odbc_drivers() Function
+=======================
+
+We can get a list of ODBC drivers using the odbc_drivers() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_drivers(ODBC Handle) ---> List of Drivers
+
+.. index:: 
+       pair: ODBC Functions; odbc_datasources()
+
+odbc_datasources() Function
+===========================
+
+We can get a list of ODBC data sources using the odbc_datasources() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_datasources(ODBC Handle) ---> List of Data sources
+
+.. index:: 
+       pair: ODBC Functions; odbc_close()
+
+odbc_close() Function
+=====================
+
+After the end of using ODBC functions we can free resources using ODBC_Close() function
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_close(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; Print List of ODBC Drivers
+
+Print List of ODBC Drivers
+==========================
+
+The next example print a list of ODBC drivers.
+
+.. code-block:: ring
+
+       See "ODBC test 1" + nl
+       oODBC = odbc_init()
+       See "Drivers " + nl
+       see odbc_drivers(oODBC)
+       odbc_close(oODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test 1
+       Drivers
+       Microsoft Access-Treiber (*.mdb) - SQLLevel=0
+       Driver do Microsoft Paradox (*.db ) - SQLLevel=0
+       Driver do Microsoft Excel(*.xls) - SQLLevel=0
+       Microsoft Text Driver (*.txt; *.csv) - SQLLevel=0
+       Driver da Microsoft para arquivos texto (*.txt; *.csv) - SQLLevel=0
+       Microsoft dBase-Treiber (*.dbf) - SQLLevel=0
+       SQL Server - CPTimeout=60
+       Microsoft Excel Driver (*.xls) - SQLLevel=0
+       Driver do Microsoft dBase (*.dbf) - SQLLevel=0
+       Microsoft Paradox-Treiber (*.db ) - SQLLevel=0
+       Microsoft ODBC for Oracle - CPTimeout=120
+       Microsoft Text-Treiber (*.txt; *.csv) - SQLLevel=0
+       Microsoft Excel-Treiber (*.xls) - SQLLevel=0
+       Microsoft Access Driver (*.mdb) - SQLLevel=0
+       Driver do Microsoft Access (*.mdb) - SQLLevel=0
+       Microsoft Paradox Driver (*.db ) - SQLLevel=0
+       Microsoft dBase Driver (*.dbf) - SQLLevel=0
+       Microsoft Access Driver (*.mdb, *.accdb) - UsageCount=3
+       Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) - UsageCount=3
+       Microsoft Access Text Driver (*.txt, *.csv) - UsageCount=3
+       SQL Server Native Client 10.0 - UsageCount=1
+       SQL Server Native Client 11.0 - UsageCount=1
+       Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) - UsageCount=3
+       Microsoft Access Paradox Driver (*.db) - UsageCount=3
+       MySQL ODBC 5.3 ANSI Driver - UsageCount=1
+       MySQL ODBC 5.3 Unicode Driver - UsageCount=1
+       ODBC Driver 11 for SQL Server - UsageCount=1
+       Lianja ODBC Driver - CPTimeout=60
+       Microsoft Visual FoxPro Driver - UsageCount=1
+       Microsoft Visual FoxPro-Treiber - UsageCount=1
+       Driver para o Microsoft Visual FoxPro - UsageCount=1
+       Microsoft FoxPro VFP Driver (*.dbf) - UsageCount=1
+
+.. index:: 
+       pair: ODBC Functions; Print List of ODBC Data Sources
+
+Print List of ODBC Data Sources
+===============================
+
+The next example print a list of ODBC data sources.
+
+.. code-block:: ring
+
+       See "ODBC test 2" + nl
+       pODBC = odbc_init()
+       See "Data Sources " + nl
+       see odbc_datasources(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test 2
+       Data Sources
+       Excel Files - Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
+       MS Access Database - Microsoft Access Driver (*.mdb, *.accdb)
+       Customer - Microsoft Access Driver (*.mdb)
+       IdCardData - Microsoft Access Driver (*.mdb)
+       MyProjectData2 - Microsoft Access Driver (*.mdb)
+       MyData - Microsoft Access Driver (*.mdb)
+       MonprojetData - Microsoft Access Driver (*.mdb)
+       dBASE Files - Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)
+       myvfpdata - Microsoft Visual FoxPro Driver
+       FACTORYDATA - Microsoft Access Driver (*.mdb)
+       TRAININGSYSDATA - Microsoft Access Driver (*.mdb)
+       RVCSYSDATASQLDB - SQL Server Native Client 11.0
+       PWCTRVCDATA - Microsoft Access Driver (*.mdb)
+       MyCompany - Microsoft Access Driver (*.mdb)
+       HCS - Microsoft Access Driver (*.mdb)
+       HCS2 - Microsoft Access Driver (*.mdb, *.accdb)
+       MyProjectData - Microsoft Access Driver (*.mdb)
+       Xtreme Sample Database 2008 - Microsoft Access Driver (*.mdb)
+       Lianja_Southwind - Lianja ODBC Driver
+       Visual FoxPro Database - Microsoft Visual FoxPro Driver
+       Visual FoxPro Tables - Microsoft Visual FoxPro Driver
+
+.. index:: 
+       pair: ODBC Functions; odbc_connect()
+
+odbc_connect() Function
+=======================
+
+We can connect to the database using the odbc_connect() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_connect(ODBC Handle, cConnectionString)
+
+.. index:: 
+       pair: ODBC Functions; odbc_disconnect()
+
+odbc_disconnect() Function
+==========================
+
+We can close the connection to the database using the odbc_disconnect() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_disconnect(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; Open and Close Connection
+
+Open and Close Connection 
+=========================
+
+The next example connect to the database then close the connection
+
+.. code-block:: ring
+
+       See "ODBC test 3" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "disconnect" + nl
+       odbc_disconnect(pODBC)
+       See "Close database..." + nl
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test 3
+       Connect to database
+       1
+       disconnect
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; odbc_execute()
+
+odbc_execute() Function
+=======================
+
+We can execute SQL Statements on the database using the odbc_execute() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_execute(ODBC Handle, cSQLStatement)
+
+.. index:: 
+       pair: ODBC Functions; odbc_colcount()
+
+odbc_colcount() Function
+========================
+
+We can get columns count in the query result using the odbc_colcount() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_colcount(ODBC Handle) ---> Columns Count as Number
+
+.. index:: 
+       pair: ODBC Functions; odbc_fetch()
+
+odbc_fetch() Function
+=====================
+
+We can fetch a row from the query result using the odbc_fetch() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_fetch(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; odbc_getdata()
+
+odbc_getdata() Function
+=======================
+
+We can get column value from the fetched row using the odbc_getdata() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_getdata(ODBC Handle, nColumnNumber) ---> Column Value
+
+.. index:: 
+       pair: ODBC Functions; Execute Query and Print Result
+
+Execute Query and Print Result
+==============================
+
+The next example execute query then print the query result.
+
+.. code-block:: ring
+
+       See "ODBC test 4" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from person") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See "Row data:" + nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) + " - "
+               next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+.. index:: 
+       pair: ODBC Functions; odbc_tables()
+
+odbc_tables() Function
+======================
+
+We can get a list of tables inside the database using the odbc_tables() function.
+
+We can access the result of this function as we get any query result.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_tables(ODBC Handle)
+
+Example:
+
+.. code-block:: ring
+
+       See "ODBC test - Get Database Tables" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       odbc_tables(pODBC) + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) 
+                       if x != nMax see " - " ok
+               next
+               See nl
+       end
+       See "Close database..." 
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test - Get Database Tables
+       Connect to database
+       Select data
+       Columns Count : 5
+       .\test - NULL - Customer - TABLE - NULL
+       .\test - NULL - employee - TABLE - NULL
+       .\test - NULL - person - TABLE - NULL
+       .\test - NULL - tel - TABLE - NULL
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; odbc_columns()
+
+odbc_columns() Function
+=======================
+
+We can get a list of columns inside the table using the odbc_columns() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_columns(ODBC Handle, cTableName)
+
+Example:
+
+.. code-block:: ring
+
+       See "ODBC test - Get Table Columns" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Get Columns inside the Person Table" + nl
+       odbc_columns(pODBC,"person") + nl
+       while odbc_fetch(pODBC)
+               see odbc_getdata(pODBC,4) + nl
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC test - Get Table Columns
+       Connect to database
+       Get Columns inside the Person Table
+       FIRST
+       LAST
+       STREET
+       CITY
+       STATE
+       ZIP
+       HIREDATE
+       MARRIED
+       AGE
+       SALARY
+       NOTES
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; odbc_autocommit()
+
+odbc_autocommit() Function
+==========================
+
+We can enable or disable the auto commit feature using the odbc_autocommit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_autocommit(ODBC Handle, lStatus)   # lStatus can be True or False
+
+
+.. index:: 
+       pair: ODBC Functions; odbc_commit()
+
+odbc_commit() Function
+======================
+
+We can commit updates to the database using the odbc_commit() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_commit(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; odbc_rollback()
+
+odbc_rollback() Function
+========================
+
+We can rollback updates to the database using the odbc_rollback() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       odbc_rollback(ODBC Handle)
+
+.. index:: 
+       pair: ODBC Functions; Transactions and Using Commit and Rollback
+
+Transactions and Using Commit and Rollback
+==========================================
+
+Example:
+
+.. code-block:: ring
+
+       See "ODBC Test - Transactions and using Commit and Rollback" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       see "insert data..." + nl
+       odbc_autocommit(pODBC,0)
+       for x = 1 to 10000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'mahmoud')")
+       next
+       for x = 10001 to 15000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'samir')")
+       next
+       odbc_commit(pODBC)
+
+       for x = 15001 to 20000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
+       next
+
+       ODBC_ROLLBACK(pODBC)
+       odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
+       odbc_commit(pODBC)
+
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+Output:
+
+.. code-block:: ring
+
+       ODBC Test - Transactions and using Commit and Rollback
+       Connect to database
+       1
+       insert data...
+       Close database...
+
+.. index:: 
+       pair: ODBC Functions; Save and Restore Images
+
+Save and Restore images
+=======================
+
+The next example save an image inside the database
+
+.. code-block:: ring
+
+       See "ODBC test - Save image in the database" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       see "Read Image File..." + nl
+       cFile = str2hex(read("tests\mahmoud.jpg"))
+       see "size " + len(CFile)+nl
+       see "Save image in the database..." + nl
+       stmt = "insert into tel values (20000,'mahmoud','" + cFile + "');"
+       odbc_execute(pODBC,stmt)
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+The next example restore the image from the database
+
+.. code-block:: ring
+
+       See "ODBC Test - Restore image from the database" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from tel where id = 20000") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       if odbc_fetch(pODBC)
+               See "Write image file" + nl
+               write("tests\great.jpg",hex2str( odbc_getdata(pODBC,3) ) )
+       ok
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
\ No newline at end of file
diff --git a/docs/en/target/oop.txt b/docs/en/target/oop.txt
new file mode 100644 (file)
index 0000000..aa340c4
--- /dev/null
@@ -0,0 +1,1054 @@
+.. index:: 
+       single: Object Oriented Programming; Introduction
+
+=================================
+Object Oriented Programming (OOP)
+=================================
+
+In this chapter we are going to learn how to use the Object-Oriented programming paradigm
+inside the Ring programming language.
+
+We will learn about
+
+* Classes and Objects
+* Access Objects Using Braces
+* Composition
+* Setter and Getter
+* Private Attributes and Methods
+* Operator Overloading
+* Inheritance
+* Dynamic Attributes
+* Packages
+* Printing Objects
+* Find() and List of Objects
+* Sort() and List of Objects
+* Using Self.Attribute and Self.Method()
+* Using This.Attribute and This.Method()
+
+
+.. index:: 
+       pair: Object Oriented Programming; Classes and Objects
+
+
+Classes and Objects
+===================
+
+We can define new classes using the next syntax
+
+Syntax:
+
+.. code-block:: ring
+
+       Class <Class Name> [From|<|: <Parent Class Name>]
+               [Attributes]
+               [Methods]
+               [Private
+                 [Attributes]
+                 [Methods]
+                ]
+
+And we can create objects using the next syntax
+
+Syntax:
+
+.. code-block:: ring
+
+       New <Object Name> [ (init method parameters) ] |
+                         [ { access object data and methods } ]   ---> Object
+
+Example:
+
+.. code-block:: ring
+
+       New point { x=10  y=20  z=30  print() }
+       Class Point x y z func print see x + nl + y + nl + z + nl 
+
+.. note:: We can use { } to access object data and methods.
+
+.. tip:: we can declare the class attributes directly after the class name.
+
+Output:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+
+We can rewrite the same program in another style
+
+.. code-block:: ring
+
+       New point                       # create new object using the point class
+       {                               # access the new object attributes and methods
+               x = 10                  # set the x attribute to 10
+               y = 20                  # set the y attribute to 20
+               z = 30                  # set the z attribute to 30
+               print()                 # call the print method
+       }                               # end of object access 
+
+
+       Class Point                     # define the Point class
+               x y z                   # the class contains three attributes x, y & z
+               func print              # define the print method
+                       see x + nl +    # print the x attribute
+                           y + nl +    # print the y attribute
+                           z + nl      # print the z attribute
+
+
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       P1 = New Point
+       P1.x = 10
+       P1.y = 20
+       P1.z = 30
+       P1.Print()
+       Class Point x y z func print see x + nl + y + nl + z + nl       
+
+.. note:: we can use the dot operator after the object name to access object members.
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       new point { print() }   
+       Class Point
+               x = 10  y = 20  z = 30
+               func print see x + nl + y + nl + z + nl
+
+.. note:: we can set the default values for the class attributes when we declare them.
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       new point(10,20,30)
+       Class Point
+               x y z 
+               func init p1,p2,p3 x=p1 y=p2 z=p3 print()
+               func print see x + nl + y + nl + z + nl
+
+.. note:: we can call the init method directly using () when we create new objects 
+
+Also we can write the same program in another way
+
+.. code-block:: ring
+
+       new point( [ :x = 10 , :y = 20 , :z = 30 ] )
+       Class Point x y z
+             func init aPara x = aPara[:x] y = aPara[:y] z = aPara[:z] print()
+             func print see x + nl + y + nl + z + nl
+
+.. tip:: using Hash for passing method parameters enable us to create optional 
+         parameters and change the order of parameters when adding them to the Hash.
+
+.. index:: 
+       pair: Object Oriented Programming; Access Objects Using Braces
+
+Access Objects Using Braces
+===========================
+
+We can access the object at any time using braces { } 
+
+Inside the braces we can use the object attributes and methods directly
+
+This can be done when we create the object using the New keyword or at any time using the next syntax
+
+.. code-block:: ring
+
+       ObjectName { access object data and methods }
+
+Example:
+
+.. code-block:: ring
+
+       See "Creating the Object" + nl
+       o1 = new Point
+       See "Using the Object" + nl
+       o1 {
+               x=5     
+               y=15
+               z=25    
+               print()
+       }
+       Class Point x y z func print see x + nl + y + nl + z 
+
+We can use braces to access objects when we call functions or methods
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Point
+
+       print( o1 { x=10 y=20 z=30 } )
+       
+       func print object
+               see object.x + nl + 
+                   object.y + nl + 
+                   object.z 
+
+       Class Point x y z
+
+We can mix between using braces and the dot operator to access the object in the same expression.
+
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new Point
+
+       O1 { x=10 y=20 z=30 }.print()
+       
+       Class Point x y z
+               func print see x + nl + y + nl + z
+
+.. index:: 
+       pair: Object Oriented Programming; Composition
+
+Composition
+===========
+
+The object may contains other objects as attributes.
+
+Using braces to access objects can be nested.
+
+Example:
+
+.. code-block:: ring
+
+       R1 = New Rectangle 
+       {
+
+               Name = "Rectangle 1"
+
+               P1 
+               {
+                       X = 10
+                       Y = 20
+               }
+
+               P2 
+               {
+                       X = 200
+                       Y = 300
+               }       
+
+               Color = "Blue"
+
+       }
+       
+       see "Name : " + R1.Name + nl +
+           "Color: " + R1.Color + nl +
+           "P1   : (" + R1.P1.X + "," + R1.P1.Y + ")" + nl + 
+           "P2   : (" + R1.P2.X + "," + R1.P2.Y + ")"  
+
+       Class Rectangle
+               name  color
+               p1 = new Point
+               p2 = new Point
+
+       Class Point x y 
+
+Output:
+
+.. code-block:: ring
+
+       Name : Rectangle 1
+       Color: Blue
+       P1   : (10,20)
+       P2   : (200,300)
+
+.. index:: 
+       pair: Object Oriented Programming; Setter and Getter
+
+Setter and Getter
+=================
+
+We can define methods to be used when we set and get object attributes.
+
+Syntax:
+
+.. code-block:: ring
+
+       Class ClassName
+
+               AttributeName
+               ...
+
+               Func SetAttributeName
+                       ...
+
+               Func GetAttributeName
+                       ...
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person
+
+       o1.name = "Mahmoud"  see o1.name + nl
+
+       o1 { name = "Ahmed"  see name }
+
+       Class Person
+
+               name family = "Fayed"
+
+               func setname value
+                       see "Message from SetName() Function!" + nl
+                       name = value + " " + family
+
+               func getname
+                       see "Message from GetName() Function!" + nl
+                       return "Mr. " + name
+
+Output:
+
+.. code-block:: ring
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+       Mr. Mahmoud Fayed
+       Message from SetName() Function!
+       Message from GetName() Function!
+       Mr. Ahmed Fayed
+
+.. index:: 
+       pair: Object Oriented Programming; Private Attributes and Methods
+
+Private Attributes and Methods
+==============================         
+
+We can define private attributes and methods after the keyword private inside the class body
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new person {
+               name = "Test"
+               age = 20
+               print()
+               o1.printsalary()
+       }
+
+       try
+               see o1.salary
+       catch
+               see cCatchError + nl
+       done
+
+       try
+               o1.increasesalary(1000)
+       catch
+               see cCatchError + nl
+       done
+
+       Class Person
+
+               name age 
+
+               func print
+                       see "Name   : " + name + nl + 
+                           "Age    : " + age + nl 
+
+               func printsalary
+                       see "Salary : " + salary + nl 
+
+               private
+
+               salary = 15000
+
+               func increasesalary x
+                       salary += x
+
+Output:
+
+.. code-block:: ring
+
+       Name   : Test
+       Age    : 20
+       Salary : 15000
+       Error (R27) : Using private attribute from outside the class : salary
+       Error (R26) : Calling private method from outside the class : increasesalary
+
+.. index:: 
+       pair: Object Oriented Programming; Operator Overloading
+
+Operator Overloading
+====================
+
+We can add the operator method to our class to enable using operators with the class objects.
+
+Syntax:
+
+.. code-block:: ring
+
+       Class ClassName
+
+               ...
+
+               Func operator cOperator,Para
+
+                       ...
+
+The function operator takes two paramters, the first represent the operator
+and the second represent the second parameter after the operator.
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new point { x = 10 y = 10 print("P1    : ") }
+       o2 = new point { x = 20 y = 40 print("P2    : ") }
+
+       o3 = o1 + o2
+       o3.print("P1+P2 : ")
+
+       class point x y
+
+               func operator cOperator,Para
+                       result = new point      
+                       switch cOperator
+                       on "+"
+                               result.x = x + Para.x
+                               result.y = y + Para.y
+                       on "-"
+                               result.x = x - Para.x
+                               result.y = y - Para.y
+                       off
+                       return result
+
+               func print cPoint
+                       see cPoint + "X : " + x + " Y : " + y + nl
+
+Output:
+
+.. code-block:: ring
+
+       P1    : X : 10 Y : 10
+       P2    : X : 20 Y : 40
+       P1+P2 : X : 30 Y : 50
+
+
+The next example from the List class in the stdlib.ring
+
+.. code-block:: ring
+
+       Func operator cOperator,Para
+               result = new list
+               switch cOperator
+                       on "+"
+                               if isobject(para)
+                                       for t in Para.vValue
+                                               vValue + t
+                                       next
+                               but islist(para)
+                                       for t in Para
+                                               vValue + t
+                                       next
+                               ok
+                       on "len"
+                               return len( vValue )
+                       on "[]"
+                               return &vValue[para]
+               off
+               return result
+
+The "len" operator is used with (for in) control structure.
+
+The "[]" operator is used when we try to access the list items, In this case we use the & operator
+to return the item values like strings an numbers by reference, so we can update it when we access the
+items.
+
+Another Example
+
+.. code-block:: ring
+
+       func main 
+
+       See "----1"+nl
+           a1 = new BigNumber( "123" )
+           a2 = new BigNumber( "456" )
+           a3 = new BigNumber( "789" )
+       See nl+"----2"+nl  
+               a1.print()
+               a2.print()
+               a3.print()
+       See nl+"----3"+nl      
+           a2 = a1 + "45"  
+       See nl+"----4"+nl  
+           a2.print()      
+       See nl+"----5"+nl  
+           a3 = a1 + a2    
+       See nl+"----6"+nl  
+           a3.print()      
+       See nl+"----7"+nl
+
+       ###==================================
+       Func FuncAdd( num1, num2)
+          Sum = 0 + num1 + num2    ### Para.aData isNumber
+          Sum = "" +Sum            ### Para.adata isString
+       return Sum                  ### return to Class
+       ###===================================
+
+       class BigNumber 
+
+           ### Variables
+           aData = "468"
+
+           ### Functions INIT default values
+           func init aPara 
+               ? "INIT aPara: " ? aPara
+               if isString(aPara)
+                   aData = aPara 
+               else 
+                   aData = "" + aPara
+               ok
+
+           ### Other Functions
+           func operator cOperator, Para
+                   whatType = Type(Para)
+                   ? nl+"WhatType-PARA: "+ whatType ? Para 
+                   ? nl+"Operator: " ? cOperator  ? nl+"PARA: " ? Para ? "    ______" ? nl
+                                   if whatType = "STRING"
+                                      dataInfo = Para
+                                      ? "dataInfo String: " ? dataInfo
+                                   but whatType = "NUMBER"
+                                      datinfo  = "" + Para
+                                      ? "dataInfo Number: " ? dataInfo
+                                   else whatType = "OBJECT"
+                                      dataInfo = "" + para.aData  
+                                      ? "dataInfo OBJECT: " ? dataInfo
+                                   ok
+                                 ? "dataInfo USING: " ? dataInfo  
+                   ### Para.aData does NOT exist on first pass ( Object with member)
+                   ### Result isObject when assigned "self"
+                   result = self   
+                   switch cOperator
+                       on "+"
+                            answer = FuncAdd( aData, dataInfo )
+                            ? nl+"AnswerString - FunAdd aData, dataInfo: " ? answer  
+                            ### result = self, is Object, populate Object with aData member
+                            result.aData = answer
+                       off
+                   ### Result = Self is Object
+                   return result   
+
+           func print 
+               ? nl+"ClassPrint aData: " ? aData       
+
+.. index:: 
+       pair: Object Oriented Programming; Inheritance
+
+Inheritance
+===========
+
+We can create class from another class in the class definition using the keyword from.
+
+Syntax:
+
+.. code-block:: ring
+
+       Class <Class Name> [From <Parent Class Name>]
+
+We can call a method in the parent class from the child class using the super object.
+
+Syntax:
+
+.. code-block:: ring
+
+       func methodname
+               ...
+               super.methodname()
+               ...
+
+Example:
+
+.. code-block:: ring
+
+       Func main
+               e1 = new Employee {
+                       Name = "test"
+                       age = 20
+                       job = "programmer"
+                       salary = 20000000
+                       print()
+               }
+       
+
+       Class Human 
+               Name Age
+               func print
+                       see "Name : " + name + nl + "Age  : " + age + nl
+
+       Class Employee from Human
+               Job Salary
+               func print
+                       super.print()
+                       see "Job  : " + job + nl + "Salary : " + salary + nl
+
+Output:
+
+.. code-block:: ring
+
+       Name : test
+       Age  : 20
+       Job  : programmer
+       Salary : 20000000
+
+.. index:: 
+       pair: Object Oriented Programming; Dynamic Attributes
+
+Dynamic Attributes
+==================
+
+We can write instructions after the class name to be executed when we create new objects
+
+Example:
+
+.. code-block:: ring
+
+       o1 = new dynamicClass
+       see o1.var5 + nl        # output 5
+
+       Class DynamicClass
+               for x = 1 to 10
+                       cStr = "var" + x + " = " + x
+                       eval(cStr)
+               next
+
+.. tip:: in the previous example var1, var2, ..., var10 will be defined as attributes.
+
+.. tip:: The problem with the previous example is that x and cStr will be defined as attributes too!
+
+.. note:: we can write class definitions inside a string then 
+          using eval() we can execute the string to define the classes
+
+.. index:: 
+       pair: Object Oriented Programming; Packages
+
+Packages
+========
+
+We can create a package (a group of classes under a common name) using the next syntax
+
+.. code-block:: ring
+
+       package PackageName
+               Class Class1
+                       ...
+               Class Class2
+                       ...
+               Class Class3
+                       ...
+               ...
+
+Example
+
+.. code-block:: ring
+
+       o1 = new System.output.console
+       o1.print("Hello World")
+       
+       Package System.Output
+               Class Console
+                       Func Print cText
+                               see cText + nl
+
+.. note:: we can use the dot operator as part of the package name
+
+Instead of typing the long name PackageName.ClassName we can use the import command
+
+When we import a package, we can use any class inside this package directly.
+
+Example
+
+.. code-block:: ring
+
+       import system.output
+       o1 = new console {
+               print("Hello World")
+       }
+       Package System.Output
+               Class Console
+                       Func Print cText
+                               see cText + nl
+
+.. index:: 
+       pair: Object Oriented Programming; Printing Objects
+
+Printing Objects
+================
+
+We can print the object state (attributes and values) using the see command.
+
+Example:
+
+.. code-block:: ring
+
+       see new point { x=10 y=20 z=30 }
+       class point x y z
+
+Output:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+.. index:: 
+       pair: Object Oriented Programming; Find() and List of Objects
+
+Find() and List of Objects
+==========================
+
+We can use the find() function to search inside a list of objects.
+
+Syntax:
+
+.. code-block:: ring
+
+       Find(List,ItemValue,nColumn,cAttribute) ---> Item Index
+
+Example:
+
+.. code-block:: ring
+
+       myList1 = [new Company {position=3 name="Mahmoud" symbol="MHD"},
+                  new Company {position=2 name="Bert" symbol="BRT"},
+                  new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+
+       see find(mylist1,"Bert",1,"name") + nl
+       see find(mylist1,"Ring",1,"name") + nl
+       see find(mylist1,"Mahmoud",1,"name") + nl
+       see find(mylist1,"RNG",1,"symbol") + nl
+       see find(mylist1,"MHD",1,"symbol") + nl
+       see find(mylist1,"BRT",1,"symbol") + nl
+       see find(mylist1,3,1,"position") + nl
+       see find(mylist1,1,1,"position") + nl
+       see "Other" + nl
+       see find(mylist1,"test",1,"name") + nl
+       see find(mylist1,"test",0,"name") + nl
+       see find(mylist1,"test",5,"name") + nl
+
+       class company position name symbol
+
+Output:
+
+.. code-block:: ring
+
+       2
+       3
+       1
+       3
+       1
+       2
+       1
+       3
+       Other
+       0
+       0
+       0
+
+.. index:: 
+       pair: Object Oriented Programming; Sort() and List of Objects
+
+Sort() and List of Objects
+==========================
+
+We can sort a list of objects based on an object attribute using the Sort() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Sort(List,nColumn,cAttribute) ---> Sorted List based on Object Attribute
+
+Example:
+
+.. code-block:: ring
+
+       myList1 = [
+                       new Company {position=3 name="Mahmoud" symbol="MHD"},
+                       new Company {position=2 name="Bert" symbol="BRT"},
+                       new Company {position=8 name="Charlie" symbol="CHR"},
+                       new Company {position=6 name="Easy" symbol="FEAS"},
+                       new Company {position=7 name="Fox" symbol="EFOX"},
+                       new Company {position=5 name="Dog" symbol="GDOG"},
+                       new Company {position=4 name="George" symbol="DGRG"},
+                       new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+
+       see sort(mylist1,1,"name")
+       see copy("*",70) + nl
+       see sort(mylist1,1,"symbol")
+       see copy("*",70) + nl
+       see sort(mylist1,1,"position")
+
+       class company position name symbol
+
+Output:
+
+.. code-block:: ring
+
+
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       **********************************************************************
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       **********************************************************************
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+
+.. index:: 
+       pair: Object Oriented Programming; Using Self.Attribute
+
+Using Self.Attribute and Self.Method()
+======================================
+
+Inside the class region (After the class name and before any method) and the class methods we can
+use self.attribute and self.method()
+
+.. code-block:: ring
+
+       Class Point
+               self.x = 10
+               self.y = 20
+               self.z = 30
+               func print
+                       see self.x + nl + self.y + nl + self.z + nl
+
+.. note:: using self.attribute in the class region to define the class attribute protect the class attributes from conflict with global variables.
+
+.. tip:: if you typed the class attributes with self.attribute and there are a global variable with the same name it will be used and the attribute will not be defined.
+
+Check the "Scope Rules" chapter to know about the conflict between the global variable name and the attribute name
+
+Whay this may happens?
+
+Because 
+
+* Because in the class region we can access global variables.
+* Before defining any variable, Ring try to find the variable and use it if it's found.
+
+.. note:: Try to avoid the global variables, use the main function and start their names with $ 
+
+.. tip:: In large programs protect your classes and define their members using self.attribute
+
+.. index:: 
+       pair: Object Oriented Programming; Using This.Attribute and This.Method()
+
+Using This.Attribute and This.Method()
+======================================
+
+Inside class methods we have access to the object scope directly. we don't need to use Self.attribute
+or Self.method to read/write attribute and call methods.
+
+But we can use braces {} while we are inside methods to access another object, In this case the current
+object scope will be changed while we are inside the brace.
+
+How we can get access to our class attributes and methods while we are inside braces?
+
+This can be done using This.Attribute and This.Method()
+
+Example:
+
+.. code-block:: ring
+
+       new point  
+
+       class point 
+               x=10 y=20 z=30
+               print()
+               func print
+                       new UI {
+                               display(this.x,this.y,this.z)
+                       }
+
+       Class UI
+               func display x,y,z
+                       see x + nl + y + nl + z + nl
+
+.. index:: 
+       pair: Object Oriented Programming; Using This in the class region as Self
+
+Using This in the class region as Self
+======================================
+
+The class region is the region that comes after the class name and before any method.
+
+We can use This in the class region as Self.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+
+               o1 = new program {
+                       test()
+               }
+
+               ? o1
+
+       class program 
+
+               this.name = "My Application"
+               this.version = "1.0"
+               ? name ? version        
+
+               func test
+                       ? "Name    = " + name 
+                       ? "Version = " + version
+
+Output
+
+.. code-block:: none
+
+       My Application
+       1.0
+       Name    = My Application
+       Version = 1.0
+       name: My Application
+       version: 1.0
+
+.. note:: When we use braces to change the current active object, Using This we can still point to the class.
+
+.. tip:: The difference between This and Self is that Self point to the current active object that we can change using braces.
+
+Remember that in most cases we don't need to use This or Self in the class region
+
+We can write
+
+
+.. code-block:: ring
+
+       class program name version
+
+Or 
+
+.. code-block:: ring
+
+       class program name="My Application" version="1.0"
+
+.. note:: We use This or Self in the class region just to avoid conflict with global variables that are defined with the same name.
+
+
+.. index:: 
+       pair: Object Oriented Programming; Default value for object attributes
+
+Default value for object attributes
+===================================
+
+The default value for object attributes is NULL
+
+In Ring, the NULL value is just an empty string or a string that contains "NULL"
+
+We can check for NULL values using the isNULL() function
+
+Example:
+
+.. code-block:: ring
+
+       oProgram = new Program
+       ? oProgram.name
+       ? oProgram.version
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       oProgram { name="My Application" version="1.0" }
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       ? oProgram
+
+       class program
+               name 
+               version
+
+Output:
+
+.. code-block:: none
+
+       NULL
+       NULL
+       1
+       1
+       0
+       0
+       name: My Application
+       version: 1.0
diff --git a/docs/en/target/operators.txt b/docs/en/target/operators.txt
new file mode 100644 (file)
index 0000000..408dcf6
--- /dev/null
@@ -0,0 +1,225 @@
+.. index:: 
+       single: Operators; Introduction
+
+=========
+Operators
+=========
+
+In this chapter we will introduce the operators provided by the Ring programming langauge.
+
+.. index:: 
+       pair: Operators; Arithmetic Operators
+
+
+Arithmetic Operators
+====================
+
+The next table presents all of the arithmetic operators 
+provided by the Ring language. Assume variable X=50 and variable Y=10 then:
+
++------------+---------------+----------+---------+
+| Operator   | Description   | Example  | Result  |
++============+===============+==========+=========+
+| \+        |  Add          |  x+y     |  60     |
++------------+---------------+----------+---------+
+| \-         | Subtract     |  x-y     |  40     |
++------------+---------------+----------+---------+
+| \*        |  Multiplies   |  x*y     |  500    |
++------------+---------------+----------+---------+
+| /          |  Divide      |  x/y     |  5      |
++------------+---------------+----------+---------+
+| %          |  Modulus             |  x%y     |  0      | 
++------------+---------------+----------+---------+
+| ++         |  Increment    | x++     |  51     |
++------------+---------------+----------+---------+
+| \- \-      |  Decrement    | x\- \-  |  49     |
++------------+---------------+----------+---------+
+
+.. index:: 
+       pair: Operators; Relational Operators
+
+Relational Operators
+====================
+
+The next table presents all of the relational operators 
+provided by the Ring language. Assume variable X=50 and variable Y=10 then:
+
++------------+---------------------+-------------+---------+
+| Operator   | Description         | Example     | Result  |
++============+=====================+=============+=========+
+| =         |  Equal              |    x = y    |  False  |
++------------+---------------------+-------------+---------+
+| !=         | Not Equal          |    x != y   |  True   |
++------------+---------------------+-------------+---------+
+| >         |  Greater than       |    x > y    |  True   |
++------------+---------------------+-------------+---------+
+| <          |  Less than         |    x < y    |  False  |
++------------+---------------------+-------------+---------+
+| >=         |  Greater or Equal   |   x >= y   |  True   | 
++------------+---------------------+-------------+---------+
+| <=         |  Less than or Equal |   x <= y   |  False  |
++------------+---------------------+-------------+---------+
+
+
+.. index:: 
+       pair: Operators; Logical Operators
+
+Logical Operators
+=================
+
+The next table presents all of the logical operators 
+provided by the Ring language. Assume variable X=True and variable Y=False then:
+
++------------+---------------------+-------------+---------+
+| Operator   | Description         | Example     | Result  |
++============+=====================+=============+=========+
+| and       |  Logical AND        |    x and y  |  False  |
++------------+---------------------+-------------+---------+
+| or         | Logical OR         |    x or y   |  True   |
++------------+---------------------+-------------+---------+
+| not       |  Logical Not        |    not x    |  False  |
++------------+---------------------+-------------+---------+
+
+Another style
+
++------------+---------------------+-------------+---------+
+| Operator   | Description         | Example     | Result  |
++============+=====================+=============+=========+
+| &&        |  Logical AND        |    x && y   |  False  |
++------------+---------------------+-------------+---------+
+| ||         | Logical OR         |    x || y   |  True   |
++------------+---------------------+-------------+---------+
+| !         |  Logical Not        |    ! x      |  False  |
++------------+---------------------+-------------+---------+
+
+
+.. index:: 
+       pair: Operators; Bitwise Operators
+
+Bitwise Operators
+=================
+
+The next table presents all of the bitwise operators 
+provided by the Ring language. Assume variable X=8 and variable Y=2 then:
+
++------------+-----------------------------+-------------+---------+
+| Operator   | Description                 | Example     | Result  |
++============+=============================+=============+=========+
+| &         |  Binary AND                 |    x & y    |  0      |
++------------+-----------------------------+-------------+---------+
+| \|         | Binary OR                  |    x \| y   |  10     |
++------------+-----------------------------+-------------+---------+
+| ^         |  Binary XOR                 |    x ^ y    |  10     |
++------------+-----------------------------+-------------+---------+
+| ~          |  Binary Ones Complement            |    ~x       |  -9     |
++------------+-----------------------------+-------------+---------+
+| <<         |  Binary Left Shift          |   x << y   |  32     | 
++------------+-----------------------------+-------------+---------+
+| >>         |  Binary Right Shift         |   x >> y   |  2      |
++------------+-----------------------------+-------------+---------+
+
+
+.. index:: 
+       pair: Operators; Assignment Operators
+
+Assignment Operators
+====================
+
+The next table presents all of the assignment operators 
+provided by the Ring language.
+
+Assume variable X=8 then:
+
++------------+-----------------------------+-------------+---------+
+| Operator   | Description                 | Example     | Result  |
++============+=============================+=============+=========+
+| =         |  Assignment                 |    x = 10   |  x=10   |
++------------+-----------------------------+-------------+---------+
+| +=         | Add AND assignment         |    x += 5   |  x=13   |
++------------+-----------------------------+-------------+---------+
+| -=        |  Subtract AND assignment    |    x -= 3   |  x=5    |
++------------+-----------------------------+-------------+---------+
+| \*=        |  Multiply AND assignment    |   x \*= 2  |  x=16   |
++------------+-----------------------------+-------------+---------+
+| /=         |  Divide AND assignment      |   x /= 3   |  x=2.67 |
++------------+-----------------------------+-------------+---------+
+| %=         |  Modulus AND assignment     |   x %= 2   |  x=0    | 
++------------+-----------------------------+-------------+---------+
+| <<=        | Left shift AND assignment  |    x <<= 2  |  x=32   |
++------------+-----------------------------+-------------+---------+
+| >>=       |  Right shift AND assignment |    x >>= 2  |  x=2    |
++------------+-----------------------------+-------------+---------+
+| &=         |  Bitwise AND assignment     |   x &= 4   |  x=0    |
++------------+-----------------------------+-------------+---------+
+| \|=        |  Bitwise OR and assignment  |   x \|= 3  |  x=11   |
++------------+-----------------------------+-------------+---------+
+| ^=         |  Bitwise XOR and assignment |   x ^= 4   |  x=12   |
++------------+-----------------------------+-------------+---------+
+
+.. index:: 
+       pair: Operators; Misc Operators
+
+Misc Operators
+==============
+
+============== ======================================================================
+Operator       Description
+============== ======================================================================
+:literal       using : before identifier mean literal
+Start:End      create list contains items from start to end
+[list items]   define list items
+list[index]    access list item
+obj.name       using the dot operator to access object members (attributes/methods).
+obj {stmts}    execute statements with direct access to object attributes & methods
+func(para,...) call function using parameters separated by comma
+? <expr>       Print expression then new line
+============== ======================================================================
+
+.. index:: 
+       pair: Operators; Operators Precedence
+
+Operators Precedence
+====================
+
+The next table present operators from higher precedence (Evaluated first) to 
+lower precedence.
+
++----------------------------------------------------------------+
+| Operator                                                      |
++================================================================+
+| .  []   ()     {}                                             |
++----------------------------------------------------------------+
+| \-  \~  :Literal  [list items]                                |
++----------------------------------------------------------------+
+| ++   \- \-                                                    |
++----------------------------------------------------------------+
+| Start:End                                                     |
++----------------------------------------------------------------+
+| \* /  %                                                       |
++----------------------------------------------------------------+
+| \+ \-                                                                 |
++----------------------------------------------------------------+
+| <<   >>                                                       |
++----------------------------------------------------------------+
+| &                                                             |
++----------------------------------------------------------------+
+| \|  ^                                                                 |
++----------------------------------------------------------------+
+| <  >  <=  >=                                                          |
++----------------------------------------------------------------+
+| =  !=                                                                 |
++----------------------------------------------------------------+
+| not  !                                                        |
++----------------------------------------------------------------+
+| and   or   &&           ||                                            |
++----------------------------------------------------------------+
+| Assignment = += -= \*= /= %=>>= <<= &= ^= \|=                 |
++----------------------------------------------------------------+
+| ?                                                             |
++----------------------------------------------------------------+
+
+Example:
+
+.. code-block:: ring
+
+       See 3+5*4       # prints 23
\ No newline at end of file
diff --git a/docs/en/target/othellogame.png b/docs/en/target/othellogame.png
new file mode 100644 (file)
index 0000000..765ec00
Binary files /dev/null and b/docs/en/target/othellogame.png differ
diff --git a/docs/en/target/outputwin.png b/docs/en/target/outputwin.png
new file mode 100644 (file)
index 0000000..f75eae9
Binary files /dev/null and b/docs/en/target/outputwin.png differ
diff --git a/docs/en/target/performancetips.txt b/docs/en/target/performancetips.txt
new file mode 100644 (file)
index 0000000..e92ab5b
--- /dev/null
@@ -0,0 +1,273 @@
+.. index:: 
+     single: Performance Tips; Introduction
+
+================
+Performance Tips
+================
+
+In this chapter we will learn more about the Ring performance.
+
+.. index:: 
+     pair: Performance Tips; Introduction
+
+Introduction
+============
+
+Ring is designed to be a simple, small and flexible language in the first place, but also it is fast enough for many applications.
+
+Ring can do each of the next tasks in around 1 second using normal computers in the market during the last 5 years
+
+(1) Compiling 100,000 lines of code
+(2) Executing empty loop that count from 1 to 10,000,000
+(3) Executing 1000 search operation using linear search in a list contains 100,000 items, trying to find the last item (The worst case)
+(4) Creating list contains 1,000,000 items then summing all of the list items
+(5) Adding 20,000 items to the ListWidget in GUI applications
+(6) Adding 5,000 nodes to the TreeWidget in GUI applications
+(7) Printing 10,000 messages to the terminal in Console applications
+
+Also when we need more speed we can use C/C++ extensions! 
+
+Example:
+
+.. code-block:: ring
+
+       ? "Create list contains 100,000 items"
+       aList = 1:100000
+
+       ? "Do 1000 search operation - Find the last item (Worst Case!)"
+       c = clock() 
+
+       for t = 1 to 1000
+               find(alist,100000)
+       next
+
+       ? "Time: " + ( clock() - c ) / clockspersecond() + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Create list contains 100,000 items
+       Do 1000 search operation - Find the last item (Worst Case!)
+       Time: 0.87 seconds
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       func main
+
+       new qApp {
+               win = new qWidget() { 
+                       move(100,100) resize(500,500)
+                       setWindowTitle("Many Tree Items - Testing Performance")
+                       tree = new qTreeWidget(win) { 
+                               blocksignals(True) setUpdatesEnabled(False)
+                               root = new qTreeWidgetItem()
+                               root.setText(0,"The Root Node")
+                               t1 = clock()
+                               for t = 1 to 5000
+                                       oItem = new qTreeWidgetItem()
+                                       oItem.settext(0,"Item " + t)
+                                       root.addchild(oItem)
+                               next
+                               cTime = (clock()-t1)/clockspersecond()
+                               setHeaderLabel("Creating 5000 nodes in " + cTime + " seconds.")
+                               addTopLevelItem(root)
+                               expanditem(root)
+                               blocksignals(False) setUpdatesEnabled(True)
+                       }
+                       oLayout = new qVBoxLayout() {
+                               addWidget(tree)
+                       }
+                       setLayout(oLayout)
+                       show() 
+               }
+               exec()
+       }
+       
+
+Output:
+
+.. image:: manytreeitems.png
+       :alt: Many Tree Items
+
+
+.. index:: 
+     pair: Performance Tips; Creating Lists
+
+Creating Lists
+==============
+
+Example:
+
+.. code-block:: ring
+
+       ? "Create the list using the Range operator"
+       t1 = clock()
+       aList = 1:1000000
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Create the list using the For loop"
+       t1 = clock()
+       aList = []
+       for x = 1 to 1000000
+               aList + x
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Create the list using the list() function and the For loop"
+       t1 = clock()
+       aList = list(1000000)
+       for x = 1 to 1000000
+               aList[x] = x
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Create the list using the Range operator
+       Time : 0.48 seconds
+       Create the list using the For loop
+       Time : 0.79 seconds
+       Create the list using the list() function and the For loop
+       Time : 1.56 seconds
+
+.. note:: Creating lists using the Range operator is faster than using the For loop or the list() function
+
+
+.. index:: 
+     pair: Performance Tips; Arithmetic Operations
+
+Arithmetic Operations
+=====================
+
+Example:
+
+.. code-block:: ring
+
+       ? "Using * operator"
+       t1 = clock()
+       for x = 1 to 1000000
+               out = x * 2
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Using *= operator"
+       t1 = clock()
+       for x = 1 to 1000000
+               out = x
+               out *= 2
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Using * operator
+       Time : 1.34 seconds
+       Using *= operator
+       Time : 0.47 seconds
+
+.. note:: Using the *= operator is faster that using the * operator
+
+
+.. index:: 
+     pair: Performance Tips; Using len() and For Loops
+
+Using len() and For Loops
+=========================
+
+Example:
+
+.. code-block:: ring
+
+       aList = 1:1000000
+
+       ? "Using len() in the For loop"
+       t1 = clock()
+       for x = 1 to len(aList)
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Using len() before the For loop"
+       t1 = clock()
+       nMax = len(aList)
+       for x = 1 to nMax
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+Output:
+
+.. code-block:: none
+
+       Using len() in the For loop
+       Time : 5.50 seconds
+       Using len() before the For loop
+       Time : 0.24 seconds
+
+.. note:: Using len() before the For loop is faster than using len() in the For loop.
+
+
+.. index:: 
+     pair: Performance Tips; Calling Functions and Methods
+
+Calling Functions and Methods
+=============================
+
+Example:
+
+.. code-block:: ring
+
+       ? "calling 100000 functions"
+       t1 = clock()
+       for x = 1 to 100000
+               test()
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       o1 = new test
+
+       ? "calling 100000 methods using the dot operator"
+       t1 = clock()
+       for x = 1 to 100000
+               o1.test()
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "calling 100000 methods using braces "
+       t1 = clock()
+       for x = 1 to 100000
+               o1 { test() }
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+
+       func test
+
+       class test
+               func test
+
+
+Output:
+
+.. code-block:: none
+
+       calling 100000 functions
+       Time : 0.28 seconds
+       calling 100000 methods using the dot operator
+       Time : 0.36 seconds
+       calling 100000 methods using braces
+       Time : 1.19 seconds
+
+.. note:: Calling functions is faster than calling methods but the difference is very small.
+
+.. note:: Using the dot operator to call methods is faster than using braces.
+
+
+
diff --git a/docs/en/target/ponggame.png b/docs/en/target/ponggame.png
new file mode 100644 (file)
index 0000000..450c8a5
Binary files /dev/null and b/docs/en/target/ponggame.png differ
diff --git a/docs/en/target/postgresql.txt b/docs/en/target/postgresql.txt
new file mode 100644 (file)
index 0000000..6b50db4
--- /dev/null
@@ -0,0 +1,422 @@
+.. index:: 
+       single: PostgreSQL; Introduction
+
+====================
+PostgreSQL Functions
+====================
+
+In this chapter we will learn about using the PostgreSQL database in the Ring programming language.
+
+.. index:: 
+       pair: PostgreSQL; Loading the library
+
+Loading the library
+===================
+
+Before using the next function load the postgresqllib.ring library
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+       # Use PostgreSQL functions
+
+.. index:: 
+       pair: PostgreSQL; Examples
+
+Examples
+========
+
+Example (1):
+
+.. code-block:: ring
+
+               load "postgresqllib.ring"
+
+               conninfo = "user=postgres password=sa dbname = postgres"
+
+               exit_nicely = func conn {
+                       PQfinish(conn)
+                       shutdown(1)
+               }
+
+               conn = PQconnectdb(conninfo)
+
+               if (PQstatus(conn) != CONNECTION_OK)
+                       fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                               call exit_nicely(conn)
+               ok
+
+               res = PQexec(conn, "select * from pg_database")
+               if PQresultStatus(res) != PGRES_TUPLES_OK
+                       fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+                       PQclear(res)
+                       exit_nicely(conn)
+               ok
+
+               nFields = PQnfields(res)
+               for i = 1 to nFields
+                               ? PQfname(res, i-1) 
+               next
+
+               ? copy("*",60)
+
+               for i = 1 to PQntuples(res)
+                       for j=1 to nFields
+                               see PQgetvalue(res, i-1, j-1) + " "
+                       next
+                       see nl
+               next
+
+               PQclear(res)
+
+               PQfinish(conn)
+
+Output:
+
+.. code-block:: none 
+
+       datname
+       datdba
+       encoding
+       datcollate
+       datctype
+       datistemplate
+       datallowconn
+       datconnlimit
+       datlastsysoid
+       datfrozenxid
+       datminmxid
+       dattablespace
+       datacl
+       ************************************************************
+       postgres 10 6 English_United States.1252 
+               English_United States.1252 f t -1 12937 549 1 1663
+       template1 10 6 English_United States.1252 English_United States.1252 
+               t t -1 12937 549 1 1663 {=c/postgres,postgres=CTc/postgres}
+       template0 10 6 English_United States.1252 English_United States.1252 
+               t f -1 12937 549 1 1663 {=c/postgres,postgres=CTc/postgres}
+       mahdb 10 6 English_United States.1252 English_United States.1252 
+               f t -1 12937 549 1 1663
+               
+Example(2):
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+
+       conninfo = "user=postgres password=sa dbname = mahdb"
+
+       exit_nicely = func conn {
+               PQfinish(conn)
+               shutdown(1)
+       }
+
+       conn = PQconnectdb(conninfo)
+
+       if (PQstatus(conn) != CONNECTION_OK)
+               fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                       call exit_nicely(conn)
+       ok
+
+       res = PQexec(conn, "
+               DROP DATABASE mahdb;
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+
+       res = PQexec(conn, "CREATE DATABASE mahdb;")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+
+
+       res = PQexec(conn, "
+       CREATE TABLE COMPANY (
+                        ID INT PRIMARY KEY     NOT NULL,
+                        NAME           TEXT    NOT NULL,
+                        AGE            INT     NOT NULL,
+                        ADDRESS        CHAR(50),
+                        SALARY         REAL );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                       INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
+                       VALUES  (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
+                                       (2, 'Ahmed'   , 27, 'Jeddah', 20.00 ),
+                                       (3, 'Mohammed', 33, 'Egypt' , 30.00 ),
+                                       (4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                  select * from COMPANY
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+               PQclear(res)
+               call exit_nicely(conn)
+       ok
+
+
+       nFields = PQnfields(res)
+       for i = 1 to nFields
+                       ? PQfname(res, i-1) 
+       next
+
+       ? copy("*",60)
+
+       for i = 1 to PQntuples(res)
+               for j=1 to nFields
+                       see PQgetvalue(res, i-1, j-1) + " "
+               next
+               see nl
+       next
+
+       PQclear(res)
+
+       PQfinish(conn)
+
+Output:
+
+.. code-block:: none
+
+       id
+       name
+       age
+       address
+       salary
+       ************************************************************
+       1 Mahmoud  31 Jeddah  10
+       2 Ahmed    27 Jeddah  20
+       3 Mohammed 31 Egypt   30
+       4 Ibrahim  24 Egypt   40        
+       
+
+.. index:: 
+       pair: PostgreSQL; RingPostgreSQL Constants
+
+RingPostgreSQL Constants
+========================
+
+The next constants are define by the RingPostgreSQL Library
+
+.. code-block:: none
+
+       CONNECTION_STARTED
+       CONNECTION_MADE
+       CONNECTION_AWAITING_RESPONSE
+       CONNECTION_AUTH_OK
+       CONNECTION_SSL_STARTUP
+       CONNECTION_SETENV
+       CONNECTION_OK
+
+       PQPING_OK
+       PQPING_REJECT
+       PQPING_NO_RESPONSE
+       PQPING_NO_ATTEMPT
+
+       PGRES_EMPTY_QUERY
+       PGRES_COMMAND_OK
+       PGRES_TUPLES_OK
+       PGRES_COPY_OUT
+       PGRES_COPY_IN
+       PGRES_BAD_RESPONSE
+       PGRES_NONFATAL_ERROR
+       PGRES_FATAL_ERROR
+       PGRES_COPY_BOTH
+       PGRES_SINGLE_TUPLE
+
+       PG_DIAG_SEVERITY
+       PG_DIAG_SQLSTATE
+       PG_DIAG_MESSAGE_PRIMARY
+       PG_DIAG_MESSAGE_DETAIL
+       PG_DIAG_MESSAGE_HINT
+       PG_DIAG_STATEMENT_POSITION
+       PG_DIAG_INTERNAL_POSITION
+       PG_DIAG_INTERNAL_QUERY
+       PG_DIAG_CONTEXT
+       PG_DIAG_SCHEMA_NAME
+       PG_DIAG_TABLE_NAME
+       PG_DIAG_COLUMN_NAME
+       PG_DIAG_DATATYPE_NAME
+       PG_DIAG_CONSTRAINT_NAME
+       PG_DIAG_SOURCE_FILE
+       PG_DIAG_SOURCE_LINE
+       PG_DIAG_SOURCE_FUNCTION
+
+
+.. index:: 
+       pair: PostgreSQL; RingPostgreSQL Functions
+
+RingPostgreSQL Functions
+========================
+
+The next functions are define by the RingPostgreSQL Library
+
+Reference : https://www.postgresql.org/docs/9.1/static/libpq.html
+
+.. code-block:: none
+
+       PGconn *PQconnectdbParams(const char **keywords,
+               const char **values,int expand_dbname);
+       PGconn *PQconnectdb(const char *conninfo)
+       PGconn *PQsetdbLogin(const char *pghost,const char *pgport,
+               const char *pgoptions,const char *pgtty,
+               const char *dbName,const char *login,const char *pwd)
+       PGconn *PQsetdb(char *pghost,char *pgport,char *pgoptions,
+               char *pgtty,char *dbName)
+       PGconn *PQconnectStartParams(const char **keywords,
+               const char **values,int expand_dbname)
+       PGconn *PQconnectStart(const char *conninfo)
+       PostgresPollingStatusType PQconnectPoll(PGconn *conn)
+       PQconninfoOption *PQconndefaults(void)
+       PQconninfoOption *PQconninfo(PGconn *conn)
+       PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg)
+       void PQfinish(PGconn *conn)
+       void PQreset(PGconn *conn)
+       int PQresetStart(PGconn *conn)
+       PostgresPollingStatusType PQresetPoll(PGconn *conn)
+       PGPing PQpingParams(const char **keywords,const char **values,
+               int expand_dbname)
+       PGPing PQping(const char *conninfo)
+       char *PQdb(const PGconn *conn)
+       char *PQuser(const PGconn *conn)
+       char *PQpass(const PGconn *conn)
+       char *PQhost(const PGconn *conn)
+       char *PQport(const PGconn *conn)
+       char *PQtty(const PGconn *conn)
+       char *PQoptions(const PGconn *conn)
+       ConnStatusType PQstatus(const PGconn *conn)
+       PGTransactionStatusType PQtransactionStatus(const PGconn *conn)
+       const char *PQparameterStatus(const PGconn *conn, const char *paramName)
+       int PQprotocolVersion(const PGconn *conn)
+       int PQserverVersion(const PGconn *conn)
+       char *PQerrorMessage(const PGconn *conn)
+       int PQsocket(const PGconn *conn)
+       int PQbackendPID(const PGconn *conn)
+       int PQconnectionNeedsPassword(const PGconn *conn)
+       int PQconnectionUsedPassword(const PGconn *conn)
+       int PQsslInUse(const PGconn *conn)
+       const char *PQsslAttribute(const PGconn *conn, const char *attribute_name)
+       const char **PQsslAttributeNames(const PGconn *conn)
+       void *PQsslStruct(const PGconn *conn, const char *struct_name)
+       void *PQgetssl(const PGconn *conn)
+       PGresult *PQexec(PGconn *conn, const char *command);
+       PGresult *PQexecParams(PGconn *conn,const char *command,int nParams,
+               const Oid *paramTypes,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       PGresult *PQprepare(PGconn *conn,const char *stmtName,
+               const char *query,int nParams,const Oid *paramTypes)
+       PGresult *PQexecPrepared(PGconn *conn,const char *stmtName,
+               int nParams,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       PGresult *PQdescribePrepared(PGconn *conn, const char *stmtName)
+       PGresult *PQdescribePortal(PGconn *conn, const char *portalName)
+       ExecStatusType PQresultStatus(const PGresult *res)
+       char *PQresStatus(ExecStatusType status)
+       char *PQresultErrorMessage(const PGresult *res)
+       char *PQresultErrorField(const PGresult *res, int fieldcode)
+       void PQclear(PGresult *res)
+       int PQntuples(const PGresult *res)
+       int PQnfields(const PGresult *res)
+       char *PQfname(const PGresult *res,int column_number)
+       int PQfnumber(const PGresult *res,const char *column_name)
+       Oid PQftable(const PGresult *res,int column_number)
+       int PQftablecol(const PGresult *res,int column_number)
+       int PQfformat(const PGresult *res,int column_number)
+       Oid PQftype(const PGresult *res,int column_number)
+       int PQfmod(const PGresult *res,int column_number)
+       int PQfsize(const PGresult *res,int column_number)
+       int PQbinaryTuples(const PGresult *res)
+       char *PQgetvalue(const PGresult *res,int row_number,int column_number)
+       int PQgetisnull(const PGresult *res,int row_number,int column_number)
+       int PQgetlength(const PGresult *res,int row_number,int column_number)
+       int PQnparams(const PGresult *res)
+       Oid PQparamtype(const PGresult *res, int param_number)
+       void PQprint(FILE *fout,const PGresult *res,const PQprintOpt *po)
+       char *PQcmdStatus(PGresult *res)
+       char *PQcmdTuples(PGresult *res)
+       Oid PQoidValue(const PGresult *res)
+       char *PQoidStatus(const PGresult *res)
+       char *PQescapeLiteral(PGconn *conn, const char *str, size_t length)
+       char *PQescapeIdentifier(PGconn *conn, const char *str, size_t length)
+       size_t PQescapeStringConn(PGconn *conn,char *to, 
+               const char *from, size_t length,int *error)
+       size_t PQescapeString(char *to, const char *from, size_t length)
+       unsigned char *PQescapeByteaConn(PGconn *conn,
+               const unsigned char *from,size_t from_length,size_t *to_length)
+       unsigned char *PQescapeBytea(const unsigned char *from,
+               size_t from_length,size_t *to_length)
+       unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length)
+       int PQsendQuery(PGconn *conn, const char *command)
+       int PQsendQueryParams(PGconn *conn,const char *command,
+               int nParams,const Oid *paramTypes,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       int PQsendPrepare(PGconn *conn,const char *stmtName,
+               const char *query,int nParams,const Oid *paramTypes)
+       int PQsendQueryPrepared(PGconn *conn,const char *stmtName,
+               int nParams,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       int PQsendDescribePrepared(PGconn *conn, const char *stmtName)
+       int PQsendDescribePortal(PGconn *conn, const char *portalName)
+       PGresult *PQgetResult(PGconn *conn)
+       int PQconsumeInput(PGconn *conn)
+       int PQisBusy(PGconn *conn)
+       int PQsetnonblocking(PGconn *conn, int arg)
+       int PQisnonblocking(const PGconn *conn)
+       int PQflush(PGconn *conn)
+       int PQsetSingleRowMode(PGconn *conn)
+       PGcancel *PQgetCancel(PGconn *conn)
+       void PQfreeCancel(PGcancel *cancel)
+       int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize)
+       int PQrequestCancel(PGconn *conn)
+       PGresult *PQfn(PGconn *conn,int fnid,int *result_buf,
+               int *result_len,int result_is_int,const PQArgBlock *args,int nargs)
+       PGnotify *PQnotifies(PGconn *conn)
+       int PQputCopyData(PGconn *conn,const char *buffer,int nbytes)
+       int PQputCopyEnd(PGconn *conn,const char *errormsg)
+       int PQgetCopyData(PGconn *conn,char **buffer,int async)
+       int PQgetline(PGconn *conn,char *buffer,int length)
+       int PQgetlineAsync(PGconn *conn,char *buffer,int bufsize)
+       int PQputline(PGconn *conn,const char *string)
+       int PQputnbytes(PGconn *conn,const char *buffer,int nbytes)
+       int PQendcopy(PGconn *conn)
+       int PQclientEncoding(const PGconn *conn)
+       char *pg_encoding_to_char(int encoding_id)
+       int PQsetClientEncoding(PGconn *conn, const char *encoding)
+       void PQtrace(PGconn *conn, FILE *stream)
+       void PQuntrace(PGconn *conn)
+       void PQfreemem(void *ptr)
+       void PQconninfoFree(PQconninfoOption *connOptions)
+       char *PQencryptPasswordConn(PGconn *conn, const char *passwd,
+                const char *user, const char *algorithm)
+       char *PQencryptPassword(const char *passwd, const char *user)
+       PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status)
+       int PQfireResultCreateEvents(PGconn *conn, PGresult *res)
+       PGresult *PQcopyResult(const PGresult *src, int flags)
+       int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs)
+       int PQsetvalue(PGresult *res, int tup_num, int field_num, 
+                       char *value, int len)
+       void *PQresultAlloc(PGresult *res, size_t nBytes)
+       int PQlibVersion(void)
+       PQnoticeReceiver PQsetNoticeReceiver(PGconn *conn,
+                       PQnoticeReceiver proc,void *arg)
+       PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn,
+                       PQnoticeProcessor proc,void *arg)
+       void PQinitOpenSSL(int do_ssl, int do_crypto)
+       void PQinitSSL(int do_ssl)
+       int PQisthreadsafe(void)
diff --git a/docs/en/target/printpreviewdialog.png b/docs/en/target/printpreviewdialog.png
new file mode 100644 (file)
index 0000000..acf1b49
Binary files /dev/null and b/docs/en/target/printpreviewdialog.png differ
diff --git a/docs/en/target/programstructure.txt b/docs/en/target/programstructure.txt
new file mode 100644 (file)
index 0000000..66940ef
--- /dev/null
@@ -0,0 +1,162 @@
+.. index:: 
+       single: Program Structure;  Introduction
+
+=================
+Program Structure
+=================
+In this chapter we will learn about using many source code files in the same project.
+
+
+.. index:: 
+       pair: Program Structure;  Source Code File Sections
+
+Source Code File Sections
+=========================
+
+Each source code file may contains the next sections (in the same order).
+
++--------------------------------+
+| Source Code File Sections     |
++================================+
+| Load Files                    |
++--------------------------------+
+| Statements and Global Variables|
++--------------------------------+
+| Functions                     |
++--------------------------------+
+| Packages and Classes          |
++--------------------------------+
+
+The application maybe one or more of files.
+
+.. index:: 
+       pair: Program Structure;  Using Many Source Code Files
+
+Using Many Source Code Files
+============================
+
+To include another source file in the project, just use the load command.
+
+
+Syntax:
+
+.. code-block:: ring
+
+       Load  "filename.ring"
+
+.. note:: The Load command is executed directly by the compiler in the parsing stage
+
+.. tip:: if you don't know the file name until the runtime, or you need to use functions to get the file path, just use eval().
+
+Example:
+
+.. code-block:: ring
+
+       # File : Start.ring
+
+       Load "sub.ring"
+
+       sayhello("Mahmoud")
+
+.. code-block:: ring
+
+       # File : sub.ring
+
+       func sayhello cName
+               see "Hello " + cName + nl
+
+
+.. index:: 
+       pair: Program Structure;  Load Package
+
+Load Package
+============
+
+Using the 'load' command we can use many ring source files in the same project
+
+But all of these files will share the same global scope 
+
+We have also the "Load Package" command
+
+Using "Load Package" we can load a library (*.ring file) in new global scope
+
+This is very useful to create libraries that avoid conflicts in global variables
+
+Example:
+
+File: loadpackage.ring
+
+.. code-block:: ring
+
+       x = 100
+       ? "Hello, World!"
+       load package "testloadpackage.ring"
+
+       ? x
+       test()
+
+File: testloadpackage.ring
+
+.. code-block:: ring
+
+       ? "Hello from testloadpackage.ring"
+
+       x = 1000
+
+       test()
+
+       func test
+               ? x
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       Hello from testloadpackage.ring
+       1000
+       100
+       1000
+
+.. index:: 
+       pair: Program Structure;  Load Again
+
+Load Again
+==========
+
+Ring 1.12 comes with the Load Again command
+
+Using this command we can load the Ring source file which contains constants more than one time.
+
+This is useful when using Ring source files for translations through global constants.
+
+Example:
+
+The next function is part from a project which support Arabic and English languages
+
+The files english.ring and arabic.ring contains constants for translation
+
+One of these files is loaded in the start of the program
+
+Loading the same file again using the (Load) command is not possible
+
+Because the (Load) command load the same source file only for the first time and ignore next times.
+
+So we have to use the (Load Again) command.
+
+Where we can use these files again during the runtime as in the next code
+
+.. code-block:: ring
+
+       func setLang nLanguage
+               if C_ENV_DEFAULT_LANG = nLanguage
+                       return
+               ok
+               C_ENV_DEFAULT_LANG = nLanguage
+               # Change the language
+                       switch nLanguage 
+                               on C_TRANSLATION_ENGLISH
+                                       load again "translation/english.ring"
+                               on C_TRANSLATION_ARABIC 
+                                       load again "translation/arabic.ring"
+                       off
\ No newline at end of file
diff --git a/docs/en/target/qt.txt b/docs/en/target/qt.txt
new file mode 100644 (file)
index 0000000..28f7b25
--- /dev/null
@@ -0,0 +1,4669 @@
+.. index:: 
+       Single: Desktop and Mobile Development;  Introduction
+
+===========================================
+Desktop and Mobile development using RingQt
+===========================================
+
+In this chapter we will learn how to use the Qt framework classes  
+in our Ring applications to create Desktop and Mobile Applications.
+
+.. index:: 
+       pair: Desktop and Mobile Development; The First GUI Application
+
+
+The First GUI Application
+=========================
+
+In this example we will create an application to ask the user about his/her name.
+When the user type the name in the textbox then click on "Say Hello" button, the textbox
+value will be updated by adding "Hello " to the name.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       oApp = new qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Hello World")
+                       setGeometry(100,100,370,250)
+
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?")
+                               setGeometry(10,20,350,30)
+                               setalignment(Qt_AlignHCenter)
+                       }
+
+                       btn1 = new qPushButton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("Say Hello")
+                               setclickevent("pHello()")
+                       }
+
+                       btn1 = new qPushButton(win1) {
+                               setGeometry(150,200,100,30)
+                               settext("Close")
+                               setclickevent("pClose()")
+                       }
+
+                       lineedit1 = new qLineEdit(win1) {
+                               setGeometry(10,100,350,30)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               oApp.quit()
+
+Program Output:
+
+At first we type the name in the textbox
+
+.. image:: ringqt_shot1.jpg
+       :alt: Enter the name in the textbox
+
+Then we click on the say hello button
+
+.. image:: ringqt_shot2.jpg
+       :alt: Click on the button
+
+.. index:: 
+       pair: Desktop and Mobile Development; The Events Loop
+
+The Events Loop
+===============
+
+Qt uses Event-Driven and the events loop get the control when we call the exec() method from the qApp class.
+
+Once we call exec(), The events loop starts, and the Widgets starts responding to the different events (Mouse, Keyboard, Timers, etc). 
+
+You get the control back again when an event is fired and your callback function is called.
+
+Once the execution of your callback function is done, the control go back again to the events loop.
+
+Useful things to remember
+
+(1) We can do most of the work using normal events (Events provided directly by each widget).
+
+(2) We can add more events to any widget using the Events Filter.
+
+(3) Using Timers we can easily get the control back and check for more things to do.
+
+Also when our callback function is busy with doing time consuming operations, we can call the ProcessEvents() method from the qApp class
+to avoid stoping the GUI.
+
+.. code-block:: ring
+
+       oApp.processevents()
+
+We can avoid calling the exec() method, and create our main loop
+
+It's not recommended to do that, It's just an option.
+
+.. code-block:: ring
+
+       # Instead of calling the exec() method 
+               while true
+                       oApp.processevents()    # Respond to GUI Events 
+                       # More Thing to do, We have the control!
+                       # .....
+               end 
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using Layout
+
+Using Layout
+============
+
+The next example is just an upgrade to the previous application to use the vertical layout.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Hello World") 
+                       setGeometry(100,100,400,130) 
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?") 
+                               setGeometry(10,20,350,30) 
+                               setalignment(Qt_AlignHCenter)
+                       }
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30) 
+                               settext("Say Hello") 
+                               setclickevent("pHello()")
+                       }
+                       btn2 = new qpushbutton(win1) {
+                               setGeometry(150,200,100,30) 
+                               settext("Close") 
+                               setclickevent("pClose()")
+                       }
+                       lineedit1 = new qlineedit(win1) {
+                               setGeometry(10,100,350,30) 
+                       }
+                       layout1 = new qVBoxLayout() {
+                               addwidget(label1)  
+                               addwidget(lineedit1)  
+                               addwidget(btn1)  
+                               addwidget(btn2)         
+                       }
+                       win1.setlayout(layout1) 
+                       show()
+               }
+
+               exec()
+
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               MyApp.quit()
+
+The application during the runtime!            
+               
+.. image:: ringqt_shot3.jpg
+       :alt: Vertical Layout
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QTextEdit Class
+
+Using the QTextEdit Class
+=========================
+
+In this example we will use the QTextEdit Class 
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("QTextEdit Class")
+                       setGeometry(100,100,500,500)
+
+                       new qtextedit(win1) {
+                               setGeometry(10,10,480,480)
+
+                       }
+
+                       show()
+               }
+
+               exec()
+       }       
+               
+During the runtime we can paste rich text in the qtextedit widget
+
+.. image:: ringqt_shot4.jpg
+       :alt: QTextEdit Class
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QListWidget Class
+
+Using the QListWidget Class
+===========================
+
+In this example we will use the QListWidget Class 
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setGeometry(100,100,400,400)
+
+                       list1 = new qlistwidget(win1) {
+                               setGeometry(150,100,200,200)
+                               alist = ["one","two","three","four","five"]
+                               for x in alist additem(x) next
+                               setcurrentrow(3,2)
+                               win1.setwindowtitle("Items Count : " + count() )
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("selected item")
+                               setclickevent("pWork()")
+                       }
+
+                       btn2 = new qpushbutton(win1) {
+                               setGeometry(10,240,100,30)
+                               settext("Delete item")
+                               setclickevent("pWork2()")
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       func pWork
+               btn1.settext(string(list1.currentrow()))
+
+       func pWork2
+               list1 {
+                      takeitem(currentrow())
+               }
+
+The application during the runtime
+
+.. image:: ringqt_shot5.jpg
+       :alt: QListWidget Class
+
+
+Another Example:
+
+.. code-block:: ring
+
+        Load "guilib.ring"
+
+        New qApp {
+
+                win1 = new qWidget() {
+
+                        setGeometry(100,100,500,400)
+
+                        list1 = new qlistwidget(win1) {
+                                setGeometry(150,100,200,200)
+                                alist = ["one","two","three","four","five"]
+                                for x in alist additem(x) next
+                                
+                                setcurrentrow(3,2)
+                                win1.setwindowtitle("Items Count : " + count() )
+                        }
+
+                        btn1 = new qpushbutton(win1) {
+                                setGeometry(10,200,100,30)
+                                settext("selected item")
+                                setclickevent("pWork()")
+                        }
+
+                        btn2 = new qpushbutton(win1) {
+                                setGeometry(10,240,100,30)
+                                settext("Delete item")
+                                setclickevent("pWork2()")
+                        }
+
+                        show()
+                }
+
+                exec()
+        }
+
+        func pWork
+                        
+                nbrOfItems = list1.count()
+                curItemNbr = list1.currentrow()
+                curValue   = list1.item(list1.currentrow()).text()
+                
+                win1.setwindowtitle( "After Select - NbrOfItems: " + nbrOfItems +
+                       " CurItemNbr: " + curItemNbr + " CurValue: " + curValue )
+                
+                btn1.settext( string(list1.currentrow() ) + " --- " +
+                             list1.item(list1.currentrow()).text() )
+
+                
+
+        func pWork2
+                list1 {
+                        takeitem(currentrow())
+                        
+                        nbrOfItems = count()
+                        curItemNbr = currentrow()
+                        curValue   = item(currentrow()).text()
+                    
+                        win1.setwindowtitle("After Delete - NbrOfItems: " + nbrOfItems +
+                               " CurItemNbr: " + curItemNbr +" CurValue: " + curValue )
+                }
+
+       
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTreeView and QFileSystemModel
+
+Using QTreeView and QFileSystemModel
+====================================
+
+In this example we will learn how to use the QTreeView widget to represent the File System
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = New qWidget() {
+
+                       setwindowtitle("Using QTreeView and QFileSystemModel")
+                       setGeometry(100,100,500,400)
+
+                       New qtreeview(win1) {
+                               setGeometry(00,00,500,400)
+                               oDir = new QDir()                       
+                               ofile = new QFileSystemModel()
+                               ofile.setrootpath(oDir.currentpath())
+                               setmodel(ofile)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot6.jpg
+       :alt: QTreeView and QFileSystemModel
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTreeWidget and QTreeWidgetItem
+
+Using QTreeWidget and QTreeWidgetItem
+=====================================
+
+In this example we will learn about using the QTreeWidget and QTreeWidgetItem classes
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("TreeWidget")
+                       setGeometry(100,100,400,400)
+
+                       layout1 = new qvboxlayout()
+
+                       tree1 = new qtreewidget(win1) {
+                               setGeometry(00,00,400,400)
+                               setcolumncount(1)
+                               myitem = new qtreewidgetitem()
+                               myitem.settext(0,"The First Step")
+                               addtoplevelitem(myitem)
+                               for  x = 1 to 10
+                                       myitem2 = new qtreewidgetitem()
+                                       myitem2.settext(0,"hello"+x)
+                                       myitem.addchild(myitem2)
+                                       for  y = 1 to 10
+                                               myitem3 = new qtreewidgetitem()
+                                               myitem3.settext(0,"hello"+x)
+                                               myitem2.addchild(myitem3)
+                                       next
+                               next
+                               setheaderlabel("Steps Tree")
+                       }
+
+                       layout1.addwidget(tree1)
+                       setlayout(layout1)
+
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot7.jpg
+       :alt: QTreeWidget and QTreeWidgetItem
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QComboBox Class
+
+Using QComboBox Class
+=====================
+
+In this example we will learn about using the QComboBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Using QComboBox")
+                       setGeometry(100,100,400,400)
+
+                       New QComboBox(win1) {
+                               setGeometry(150,100,200,30)
+                               alist = ["one","two","three","four","five"]
+                               for x in aList additem(x,0) next
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+            
+The application during the runtime
+
+.. image:: ringqt_shot8.jpg
+       :alt: QComboBox
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Creating Menubar
+
+Creating Menubar
+================
+
+In this example we will learn about using the QMenuBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Using QMenubar")
+                       setGeometry(100,100,400,400)
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub2 = addmenu("Edit")
+                               sub3 = addmenu("Help")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               settext("New")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Open")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save As")
+                                       }
+                                       addaction(oAction)                      
+                                       addseparator()
+                                       oAction = new qaction(win1) {
+                                               settext("Exit")
+                                               setclickevent("myapp.quit()")
+                                       }
+                                       addaction(oAction)
+                               }
+                               sub2 { 
+                                       oAction = new qAction(win1) {
+                                               settext("Cut")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Copy")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Paste")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               settext("Select All")
+                                       }
+                                       addaction(oAction)
+                               }                               
+                               sub3 { 
+                                       oAction = new qAction(win1) {
+                                               settext("Reference")
+                                       }
+                                       addaction(oAction)                      
+                                       sub4 = addmenu("Sub Menu")
+                                       sub4 { 
+                                               oAction = new qAction(win1) {
+                                                       settext("Website")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("Forum")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("Blog")
+                                               }
+                                               addaction(oAction)
+                                       }
+                                       addseparator()
+                                               oAction = new qAction(win1) {
+                                                       settext("About")
+                                               }
+                                               addaction(oAction)                      
+                               }
+                       }
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot9.jpg
+       :alt: QMenuBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Context Menu
+
+Context Menu
+============
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qwidget() {
+                       setwindowtitle("Context Menu")
+                       resize(400,400)
+                       myfilter = new qAllEvents(win) {
+                               setContextmenuEvent("mymenu()")
+                       }
+                       installeventfilter(myfilter)
+                       show()
+               }
+               exec()
+       }
+
+
+       func mymenu 
+
+               new qMenu(win) {
+                       oAction = new qAction(win) {
+                               settext("new")
+                               SetCLickevent("See :New")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("open")
+                               SetCLickevent("See :Open")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("save")
+                               SetCLickevent("See :Save")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("close")
+                               SetCLickevent("See :Close")
+                       }
+                       addaction(oAction)
+                       oCursor  = new qCursor()
+                       exec(oCursor.pos())
+               }
+       
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating Toolbar
+       
+Creating Toolbar
+================
+
+In this example we will learn about using the QToolBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QToolbar")
+                       setGeometry(100,100,600,400)
+
+                       abtns = [
+                                       new qpushbutton(win1) { settext("Add") } ,
+                                       new qpushbutton(win1) { settext("Edit") } ,
+                                       new qpushbutton(win1) { settext("Find") } ,
+                                       new qpushbutton(win1) { settext("Delete") } ,
+                                       new qpushbutton(win1) { settext("Exit") 
+                                                               setclickevent("win1.close()") } 
+                               ]
+
+                       tool1 = new qtoolbar(win1) {
+                               for x in abtns addwidget(x) addseparator() next
+                               setmovable(true)
+                               setGeometry(0,0,500,30)                 
+                               setFloatable(true)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot10.jpg
+       :alt: QToolBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating StatusBar
+       
+Creating StatusBar
+==================
+
+In this example we will learn about using the QStatusBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QStatusbar")
+                       setGeometry(100,100,400,400)
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+                       show()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot11.jpg
+       :alt: QStatusBar
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDockWidget
+
+Using QDockWidget
+=================
+
+In this example we will learn about using the QDockWidget class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+       
+               win1 = new qMainWindow() {
+               
+                       setwindowtitle("QDockWidget")
+                       setGeometry(100,100,400,400)
+
+                       label1 = new qlabel(win1) {
+                               settext("Hello")
+                               setGeometry(300,300,100,100)
+                       }
+                       
+                       label2 = new qlabel(win1) {
+                               settext("How are you ?")
+                               setGeometry(100,100,100,100)
+                       }
+                       
+                       dock1 = new qdockwidget(win1,0) {
+                               setwidget(label1)
+                               SetAllowedAreas(1)
+                       }
+                       
+                       dock2 = new qdockwidget(win1,0) {
+                               setwidget(label2)
+                               SetAllowedAreas(2)
+                       }
+
+                       adddockwidget(Qt_LeftDockWidgetArea,dock1,Qt_Horizontal)
+                       adddockwidget(Qt_LeftDockWidgetArea,dock2,Qt_Vertical)
+
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot12.jpg
+       :alt: QDockWidget
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTabWidget
+
+Using QTabWidget
+=================
+
+In this example we will learn about using the QTabWidget class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QTabWidget")
+                       setGeometry(100,100,400,400)
+
+                       page1 = new qwidget() {
+                               new qpushbutton(page1) {
+                                       settext("The First Page")
+                               }
+                       }
+
+                       page2 = new qwidget() {
+                               new qpushbutton(page2) {
+                                       settext("The Second Page")
+                               }
+                       }
+
+                       page3 = new qwidget() {
+                               new qpushbutton(page3) {
+                                       settext("The Third Page")
+                               }
+                       }
+
+                       tab1 = new qtabwidget(win1) {
+                               inserttab(0,page1,"Page 1")
+                               inserttab(1,page2,"Page 2")
+                               inserttab(2,page3,"Page 3")
+                               setGeometry(100,100,400,400)
+                       }               
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+                       showMaximized()
+               }
+
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot13.jpg
+       :alt: QTabWidget
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QTableWidget
+
+Using QTableWidget
+==================
+
+In this example we will learn about using the QTableWidget class
+
+.. code-block:: ring
+
+       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             
+
+                       }
+
+                       setcentralwidget(table1)
+                       show()
+
+               }
+
+               exec()
+       }
+
+
+The application during the runtime
+
+.. image:: ringqt_shot14.jpg
+       :alt: QTableWidget
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QProgressBar
+       
+Using QProgressBar
+==================
+
+In this example we will learn about using the QProgressBar class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+
+                       setGeometry(100,100,600,150)
+                       setwindowtitle("Using QProgressBar")
+
+                       for x = 10 to 100 step 10
+                               new qprogressbar(win1) {        
+                                       setGeometry(100,x,350,30)
+                                       setvalue(x)
+                               }
+                       next
+
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot15.jpg
+       :alt: QProgressBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QSpinBox
+
+Using QSpinBox
+==============
+
+In this example we will learn about using the QSpinBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setGeometry(100,100,450,260)
+                       setwindowtitle("Using QSpinBox")
+                               new qspinbox(win1) {    
+                                       setGeometry(50,100,350,30)
+                                       setvalue(50)
+                               }
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot16.jpg
+       :alt: QSpinBox
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QSlider
+
+Using QSlider
+=============
+
+In this example we will learn about using the QSlider class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setGeometry(100,100,500,400)
+                       setwindowtitle("Using QSlider")
+
+                       new qslider(win1) {     
+                               setGeometry(100,100,50,130)
+                               settickinterval(50)                             
+                       }
+
+                       new qslider(win1) {     
+                               setGeometry(100,250,250,30)
+                               settickinterval(50)     
+                               setorientation(Qt_Horizontal)                   
+                       }
+
+                       show()
+
+               }
+
+               exec()
+       }
+       
+The application during the runtime
+
+.. image:: ringqt_shot17.jpg
+       :alt: QSlider
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDateEdit
+
+Using QDateEdit
+==================
+
+In this example we will learn about using the QDateEdit class
+
+.. code-block:: ring
+       
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QDateEdit")
+                       setGeometry(100,100,250,100)
+                       new qdateedit(win1) {   
+                               setGeometry(20,40,220,30)
+                       }
+                       show()
+               }
+               exec()
+       }
+       
+The application during the runtime
+
+.. image:: ringqt_shot18.jpg
+       :alt: QDateEdit
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDial
+       
+
+Using QDial
+==================
+
+In this example we will learn about using the QDial class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setGeometry(100,100,450,500)
+                       setwindowtitle("Using QDial")
+                       new qdial(win1) {       
+                               setGeometry(100,100,250,300)
+                       }
+                       show()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot19.jpg
+       :alt: QDial
+
+Another Example
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+                        win1 = new qMainWindow() 
+                       {
+                               setGeometry(100,100,450,500)
+                               setwindowtitle("Using QDial")
+                               button1 = new QPushButton(win1){
+                                       setGeometry(100,350,100,30)
+                                       settext("Increment")
+                                       setClickEvent("pIncrement()")
+                               }
+
+                               button2 = new QPushButton(win1){
+                                       setGeometry(250,350,100,30)
+                                       settext("Decrement")
+                                       setClickEvent("pDecrement()")                                                                              
+                               } 
+                               pdial = new qdial(win1) {
+                                       setGeometry(100,50,250,300)
+                                       setNotchesVisible(true)
+                                       setValue(50)
+                                       SetValueChangedEvent("pDialMove()")
+                               }
+                               lineedit1 = new qlineedit(win1) {
+                                       setGeometry(200,400,50,30)
+                                       setalignment(Qt_AlignHCenter)
+                                       settext(string(pdial.value()))
+                                       setreturnPressedEvent("pPress()") 
+                               } 
+                               show()
+                         }
+               exec()
+       }
+
+       func pIncrement
+               pdial{val=value()}
+               pdial.setvalue(val+1)  
+               lineedit1{settext(string(val+1))}   
+
+       func pDecrement
+               pdial{val=value()}
+               pdial.setvalue(val-1)   
+               lineedit1{settext(string(val-1))}  
+
+       func pPress
+               lineedit1{val=text()}
+               pdial.setvalue(number(val)) 
+
+       func pDialMove
+               lineedit1.settext(""+pdial.value())
+
+
+.. image:: usingqdial.png
+       :alt: QDial - Second Example
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QWebView
+
+Using QWebView
+==============
+
+In this example we will learn about using the QWebView class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QWebView")
+                       myweb = new qwebview(win1) {    
+                               setGeometry(10,10,600,600)
+                               loadpage(new qurl("http://google.com"))
+                       }
+                       setcentralwidget(myweb)
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot20.jpg
+       :alt: QWebView
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QCheckBox
+       
+Using QCheckBox
+===============
+
+In this example we will learn about using the QCheckBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QCheckBox")
+                       new qcheckbox(win1) {   
+                               setGeometry(100,100,100,30)
+                               settext("New Customer!")
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot21.jpg
+       :alt: QCheckBox
+
+
+Another Example:
+
+.. code-block:: ring
+
+        Load "guilib.ring"
+
+        New qApp {
+                win1 = new qMainWindow() {
+                        setGeometry(100,100,400,300)
+                        setwindowtitle("Using QCheckBox")
+                        
+                        ### 0-Unchecked  1-Checked
+                        
+                        CheckBox = new qcheckbox(win1) {
+                                setGeometry(100,100,160,30)
+                                settext("New Customer!")
+                                setclickedEvent("HandleClickEvent()")
+                        }                   
+                                    
+                        show()                            
+                }
+                exec()
+        }
+
+        Func HandleClickEvent
+            
+            if CheckBox.isChecked() = 1 
+                CheckBox.settext("New Customer. Check 1-ON")
+            else
+                CheckBox.settext("New Customer. Check 0-OFF")
+            ok
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QRadioButton and QButtonGroup
+       
+Using QRadioButton and QButtonGroup
+====================================
+
+In this example we will learn about using the QRadioButton and QButtonGroup classes
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QRadioButton")
+
+                       new qradiobutton(win1) {        
+                               setGeometry(100,100,100,30)
+                               settext("One")
+                       }
+                       new qradiobutton(win1) {        
+                               setGeometry(100,150,100,30)
+                               settext("Two")
+                       }
+                       new qradiobutton(win1) {        
+                               setGeometry(100,200,100,30)
+                               settext("Three")
+                       }
+
+
+                       group2  = new qbuttongroup(win1) {
+                               btn4 = new qradiobutton(win1) { 
+                                       setGeometry(200,150,100,30)
+                                       settext("Four")
+                               }
+                               btn5 = new qradiobutton(win1) { 
+                                       setGeometry(200,200,100,30)
+                                       settext("Five")
+                               }
+                               addbutton(btn4,0)
+                               addbutton(btn5,0)
+
+                       }
+
+                       showMaximized()
+
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot22.jpg
+       :alt:  QRadioButton and QButtonGroup classes
+
+.. index:: 
+       pair: Desktop and Mobile Development; Adding Hyperlink to QLabel
+
+Adding Hyperlink to QLabel
+==========================
+
+In this example we will learn about creating Hyperlink using the QLabel class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QLabel - Hyperlink")
+                       new qlabel(win1) {      
+                               setGeometry(100,100,100,30)
+                               setopenexternallinks(true)
+                               settext('<a href="http://google.com">Google</a>')
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot23.jpg
+       :alt: Hyperlink
+       
+.. index:: 
+       pair: Desktop and Mobile Development; QVideoWidget and QMediaPlayer
+
+QVideoWidget and QMediaPlayer
+=============================
+
+In this example we will learn about using the QVideoWidget and QMediaPlayer classes to play
+a group of movies from different positions at the same time
+
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("QVideoWidget")
+                       
+                       btn1 = new qpushbutton(win1)    {
+                               setGeometry(0,0,100,30)
+                               settext("play")
+                               setclickevent("player.play() player2.play() 
+                                                          player3.play() player4.play()")
+                       }
+
+                       videowidget = new qvideowidget(win1) {
+                               setGeometry(50,50,600,300)
+                               setstylesheet("background-color: black")                        
+                       }
+
+                       videowidget2 = new qvideowidget(win1) {
+                               setGeometry(700,50,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+
+                       videowidget3 = new qvideowidget(win1) {
+                               setGeometry(50,370,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+                       videowidget4 = new qvideowidget(win1) {
+                               setGeometry(700,370,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+                       player = new qmediaplayer() {
+                               setmedia(new qurl("1.mp4"))
+                               setvideooutput(videowidget)
+                               setposition(35*60*1000)
+                               
+                       }               
+
+                       player2 = new qmediaplayer() {
+                               setmedia(new qurl("2.mp4"))
+                               setvideooutput(videowidget2)
+                               setposition(23*60*1000)
+                       }               
+
+                       player3 = new qmediaplayer() {
+                               setmedia(new qurl("3.mp4"))
+                               setvideooutput(videowidget3)
+                               setposition(14.22*60*1000)
+                       }               
+
+                       player4 = new qmediaplayer() {
+                               setmedia(new qurl("4.avi"))
+                               setvideooutput(videowidget4)
+                               setposition(8*60*1000)
+                       }               
+                       
+                       showfullscreen()                
+
+               }
+
+               exec()
+
+       }
+
+       
+The application during the runtime
+
+.. image:: ringqt_shot24.jpg
+       :alt: QVideoWidget
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QFrame
+
+Using QFrame
+============
+
+In this example we will learn about using the QFrame class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QFrame")
+                       for x = 0 to 10
+                               frame1 = new qframe(win1,0) {   
+                                       setGeometry(100,20+50*x,400,30)
+                                       setframestyle(QFrame_Raised | QFrame_WinPanel)                          
+                               }
+                       next
+                       showMaximized()
+               }
+               exec()
+       }
+
+
+The application during the runtime
+
+.. image:: ringqt_shot25.jpg
+       :alt: QFrame
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Display Image using QLabel
+       
+Display Image using QLabel
+==========================
+
+In this example we will learn about displaying an image using the QLabel widget
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QLabel - Display image")
+                       new qlabel(win1) {      
+                               image = new qpixmap("b:/mahmoud/photo/advice.jpg")
+                               setpixmap(image)
+                               setGeometry(0,0,image.width(),image.height())
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot26.jpg
+       :alt: Display Image
+
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Menubar and StyleSheet Example
+
+Menubar and StyleSheet Example
+==============================
+
+In this example we will learn about creating menubar and setting the window stylesheet
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Menubar")
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               settext("New")          
+                                               setenabled(false)
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Open")
+                                               setcheckable(true)
+                                               setchecked(true)
+                                               setstatustip("open new file")                                    
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save As")
+                                       }
+                                       addaction(oAction)
+                               
+                                       addseparator()
+                                       oAction = new qaction(win1)
+                                       oAction.settext("Exit")
+                                       oAction.setclickevent("myapp.quit()")
+                                       addaction(oAction)
+                               }                       
+
+                       }
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+                       setmenubar(menu1)
+                       setmousetracking(true)
+                       setstatusbar(status1)
+                       setStyleSheet("color: black; selection-color: black;
+                       selection-background-color:white ;
+                       background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
+                       stop: 0 #eef, stop: 1 #ccf);")
+                       showmaximized()
+               }
+               exec()
+       }
+
+The application during the runtime
+
+.. image:: ringqt_shot27.jpg
+       :alt: Menubar
+
+.. index:: 
+       pair: Desktop and Mobile Development; QLineEdit Events and QMessageBox
+
+QLineEdit Events and QMessageBox
+================================
+
+In this example we will learn about using QLineEdit Events and displaying a Messagebox
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Welcome")
+                       setGeometry(100,100,400,300)
+
+
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?")
+                               setGeometry(10,20,350,30)
+                               setalignment(Qt_AlignHCenter)
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("Say Hello")
+                               setclickevent("pHello()")
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(150,200,100,30)
+                               settext("Close")
+                               setclickevent("pClose()")
+                       }
+
+                       lineedit1 = new qlineedit(win1) {
+                               setGeometry(10,100,350,30)
+                               settextchangedevent("pChange()")
+                               setreturnpressedevent("penter()")
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               MyApp.quit()
+
+       Func pChange
+               win1 { setwindowtitle( lineedit1.text() ) }
+
+       Func pEnter
+               new qmessagebox(win1) {
+                       setwindowtitle("Thanks")
+                       settext("Hi " + lineedit1.text() )
+                       setstylesheet("background-color : white")
+                       show()
+               }
+
+The application during the runtime
+
+.. image:: ringqt_shot28.jpg
+       :alt: qLineEdit events and qMessagebox
+
+.. image:: ringqt_shot29.jpg
+       :alt: qLineEdit events and qMessagebox
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Other Widgets Events
+
+Other Widgets Events
+====================
+
+Each Qt signal can be used in RingQt, just add Set before the signal name and add event after
+the signal name to get the method that can be used to determine the event code.
+
+For example the QProgressBar class contains a signal named valueChanged()
+To use it just use the function setValueChangedEvent()
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("QProgressBar valueChanged Event")
+
+                       progress1 = new qprogressbar(win1) {    
+                               setGeometry(100,100,350,30)
+                               setvalue(10)
+                               setvaluechangedevent("pChange()")
+                       }
+
+                       new qpushbutton(win1) {
+                               setGeometry(10,10,100,30)                       
+                               settext("increase")
+                               setclickevent("pIncrease()")
+                       }
+
+                       showMaximized()
+
+               }
+
+               exec()
+       }
+
+       func pIncrease
+               progress1 { setvalue(value()+1)  }
+
+       func pchange
+               win1.setwindowtitle("value : " + progress1.value() )
+
+The application during the runtime
+
+.. image:: ringqt_shot30.jpg
+       :alt: qProgressBar valueChanged event
+
+Another example for the stateChanged event of the QCheckBox class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QCheckBox")
+                       new qcheckbox(win1) {   
+                               setGeometry(100,100,100,30)
+                               settext("New Customer!")
+                               setstatechangedevent("pchange()")
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+       Func pChange
+
+               new qMessageBox(Win1) {
+                       setWindowTitle("Checkbox")
+                       settext("State Changed!")
+                       show()
+               }
+
+The application during the runtime
+
+.. image:: ringqt_shot31.jpg
+       :alt: qProgressBar valueChanged event
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QTimer Class
+
+Using the QTimer Class
+======================
+
+In this example we will learn about using the QTimer class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setgeometry(100,100,200,70)
+                       setwindowtitle("Timer")
+                       label1 = new qlabel(win1) {
+                               setgeometry(10,10,200,30)
+                               settext(thetime()) 
+                       }
+                       new qtimer(win1) {
+                               setinterval(1000)
+                               settimeoutevent("pTime()")
+                               start()
+                       }
+                       show()
+               }
+               exec()
+       }
+
+       func ptime
+               label1.settext(thetime())
+
+       Func thetime
+               return "Time : " + Time()
+
+
+The application during the runtime
+
+.. image:: ringqt_shot32.jpg
+       :alt: QTimer Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QProgressBar and Timer
+
+Using QProgressBar and Timer
+============================
+
+In this example we will learn about using the "animated" QProgressBar class and Timer
+
+.. code-block:: ring   
+
+       ###------------------------------------
+       ### ProgressBar and Timer Example
+       
+       Load "guilib.ring"
+       
+       new qApp
+       {
+           win1 = new qwidget()
+           {
+               setgeometry(100,100,400,100)
+               setwindowtitle("Timer and ProgressBar")
+       
+               LabelMan = new qlabel(win1)
+               {
+                   setgeometry(10,10,200,30)
+                   settext(theTime())          ### ==>> func
+               }
+       
+               TimerMan = new qtimer(win1)
+               {
+                   setinterval(1000)
+                   settimeoutevent("pTime()")  ### ==>> func
+                   start()
+               }
+       
+               BarMan = new qprogressbar(win1)
+               {
+                   setGeometry(100,50,300,10)  ###  Position X y, Length, Thickness
+                   setvalue(0)                 ###  Percent filled
+               }
+       
+               show()
+           }
+           exec()
+       }
+       
+       func pTime
+               LabelMan.settext(theTime())     ### ==>> func
+       
+               Increment = 10
+               if BarMan.value() >= 100        ### ProgressBar start over.
+                   BarMan.setvalue(0)
+               ok
+               BarMan{ setvalue(value() + Increment) }
+       
+       Func theTime
+               return "Time : " + Time()
+
+.. image:: ringqt_shot15-B.jpg
+       :alt: QProgressBar
+
+.. index:: 
+       pair: Desktop and Mobile Development; Display Scaled Image using QLabel
+
+Display Scaled Image using QLabel
+=================================
+
+In this example we will learn about displaying and scaling an image so that it looks "animated" using the QLabel widget
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       #----------------------------------------------------
+       # REQUIRES: image = "C:\RING\bin\stock.jpg"
+
+       # imageStock: start dimensions for growing image
+
+       imageW = 200 ;  imageH = 200 ; GrowBy = 4
+
+       ###----------------------------------------------------
+       ### Window and Box Size dimensions
+
+       WinWidth = 1280 ; WinHeight = 960
+       BoxWidth = WinWidth -80 ; BoxHeight = WinHeight -80
+
+       ###----------------------------------------------------
+
+       New qapp {
+
+               win1 = new qwidget() {
+
+                       setgeometry(50,50, WinWidth,WinHeight)
+                       setwindowtitle("Animated Image - Display Image Scaled and Resized")
+
+                       imageStock = new qlabel(win1) {
+
+                               image = new qpixmap("C:\RING\bin\stock.jpg")
+                               AspectRatio = image.width() / image.height()
+
+                               imageW = 200
+                               imageH = imageH / AspectRatio
+
+                               ### Size-H, Size-V, Aspect, Transform
+                               setpixmap(image.scaled(imageW , imageH ,0,0))   
+
+                               PosLeft = (BoxWidth  - imageW ) / 2
+                               PosTop  = (BoxHeight - imageH ) / 2
+                               setGeometry(PosLeft,PosTop,imageW,imageH)
+
+                       }
+
+                       TimerMan = new qtimer(win1) {
+                               setinterval(100)            ### interval 100 millisecs.
+                               settimeoutevent("pTime()")  ### ==>> func
+                               start()
+                       }
+
+                       show()
+               }
+       exec()
+       }
+
+
+       ###------------------------------------------------------
+       ### Fuction TimerMan: calling interval 100 milliseconds
+
+       func pTime
+
+               ### Stop Timer when image is size of Window area
+               if imageW > BoxWidth
+                       TimerMan.stop()
+                       imageStock.clear()      ### Will clear the image
+               ok
+
+               ### Grow image
+               imageW += GrowBy
+               imageH  = imageW / AspectRatio
+
+               ### Scaled Image: Size-H, Size-V, Aspect, Transform
+               imageStock.setpixmap(image.scaled(imageW , imageH ,0,0))
+
+               ### Center the image
+               PosLeft = (WinWidth  - imageW ) / 2
+               PosTop  = (WinHeight - imageH ) / 2
+               imageStock.setGeometry(PosLeft,PosTop,imageW,imageH)
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QFileDialog Class
+
+Using the QFileDialog Class
+===========================
+
+Example
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("open file")
+                       setgeometry(100,100,400,400)
+                       new qpushbutton(win1) {
+                               setgeometry(10,10,200,30)
+                               settext("open file")
+                               setclickevent("pOpen()")
+                       }
+                       show()
+               }
+               exec()
+       }
+
+       Func pOpen
+               new qfiledialog(win1) {
+                       cName = getopenfilename(win1,"open file","c:\","source files(*.ring)")
+                       win1.setwindowtitle(cName)
+               }
+               
+The application during the runtime
+
+.. image:: ringqt_shot33.jpg
+       :alt: QFileDialog Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Drawing using QPainter
+
+Drawing using QPainter
+======================
+
+In this example we will learn about drawing using the QPainter class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("Drawing using QPainter")
+                       setgeometry(100,100,500,500)
+                       label1 = new qlabel(win1) {
+                               setgeometry(10,10,400,400)
+                               settext("")
+                       }
+                       new qpushbutton(win1) {
+                               setgeometry(200,400,100,30)
+                               settext("draw")
+                               setclickevent("draw()")
+                       }
+
+                       show()
+               }
+               exec()
+       }
+
+       Func draw
+                       p1 = new qpicture()
+                       color = new qcolor() {
+                               setrgb(0,0,255,255)
+                       }
+                       pen = new qpen() {
+                               setcolor(color)
+                               setwidth(10)
+                       }
+                       new qpainter() {
+                               begin(p1)
+                               setpen(pen)
+                               drawline(500,150,950,450)
+                               drawline(950,550,500,150)
+                               endpaint()
+                       }
+                       label1 { setpicture(p1) show() }
+
+The application during the runtime
+
+.. image:: ringqt_shot34.jpg
+       :alt: QPainter Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Printing using QPrinter
+
+Printing using QPrinter
+=======================
+
+In this example we will learn how to print to PDF file using QPrinter
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer")
+                       setgeometry(100,100,500,500)
+                       myweb = new qwebview(win1) {    
+                               setgeometry(100,100,1000,500)                                           
+                               loadpage(new qurl("http://google.com"))
+                       } 
+                       new qpushbutton(win1) {
+                               setGeometry(20,20,100,30)                       
+                               settext("Print")
+                               setclickevent("print()")
+                       }
+                       showmaximized()
+               }
+               exec()
+       }
+       
+       func print
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      # 1 = pdf
+                       setoutputfilename("test.pdf")
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)                     
+                               setfont(myfont)
+                               drawtext(100,100,"test")
+                               printer1.newpage()
+                               drawtext(100,100,"test2")                       
+                               endpaint()
+                       }
+               }
+
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      
+                       setoutputfilename("test2.pdf")
+                       myweb.print(printer1)
+                       myweb.show()
+               }
+
+               system ("test.pdf")
+               system ("test2.pdf")
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QPrintPreviewDialog
+
+
+Using QPrintPreviewDialog
+=========================
+
+In this example we will learn how to use the QPrintPreviewDialog class.
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer Preview Dialog")
+                       setgeometry(100,100,800,880)
+                       printer1 = new qPrinter(0)
+                       show()
+                       oPreview = new qPrintPreviewDialog(printer1) {
+                               setParent(win1)
+                               move(10,10) 
+                               setPaintrequestedevent("printPreview()")
+                               exec()
+                       }
+               }
+               exec()
+       }
+
+       func printPreview
+               printer1  {
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)
+                               setfont(myfont)
+                               drawtext(100,100,"Test - Page (1)")
+                               printer1.newpage()
+                               drawtext(100,100,"Test - Page (2)")
+                               printer1.newpage()
+                               myfont2 = new qfont("Times",14,-1,0)
+                               setfont(myfont2)
+                               for x = 1 to 30
+                                       drawtext(100,100+(20*x),"Number : " + x)
+                               next 
+                               endpaint()
+                       }
+               }
+
+Screen Shot:
+
+.. image:: printpreviewdialog.png
+       :alt: Print Preview Dialog
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating more than one window
+
+Creating More than one Window
+=============================
+
+The next example demonstrates how to create more than one window
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app1 = new qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("First")
+                       setgeometry(100,100,500,500)
+
+                       new qpushbutton(win1) {
+                               setgeometry(100,100,100,30)
+                               settext("close")
+                               setclickevent("app1.quit()")
+                       }
+
+                       new qpushbutton(win1) {
+                               setgeometry(250,100,100,30)
+                               settext("Second")
+                               setclickevent("second()")
+                       }
+
+                       showmaximized()
+               }
+               exec()
+       }
+        
+       func second
+               win2 = new qwidget() {
+                       setwindowtitle("Second")
+                       setgeometry(100,100,500,500)
+                       setwindowflags(Qt_dialog)
+                       show()
+               }
+The application during the runtime
+
+.. image:: ringqt_shot35.jpg
+       :alt: More than one window
+
+.. index:: 
+       pair: Desktop and Mobile Development; Playing Sound
+
+Playing Sound
+=============
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       new qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("play sound!") show()    
+               }
+               new qmediaplayer()      {
+                       setmedia(new qurl("footstep.wav"))
+                       setvolume(50) play()    
+               }
+               exec()
+       }
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using the QColorDialog Class
+
+Using the QColorDialog Class
+============================
+
+Example: 
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       oApp = new myapp { start() }
+
+       Class MyApp
+
+               oColor  win1
+
+               Func start
+
+                       myapp = new qapp 
+
+                       win1 = new qMainWindow() {
+                               setwindowtitle("Color Dialog")
+                               setgeometry(100,100,400,400)
+                       }
+
+                       new qpushbutton(win1) {
+                               setgeometry(10,10,100,30)
+                               settext("Get Color")
+                               setclickevent("oApp.pColor()")
+                       }
+
+                       win1.show()
+                       myapp.exec()
+
+
+               Func pColor
+                       myobj = new qcolordialog()
+                       aColor = myobj.GetColor()
+                       r=acolor[1] g=acolor[2] b=acolor[3]      
+                       win1.setstylesheet("background-color: rgb("+r+", " + g+ "," + b + ")")
+
+The application during the runtime
+                       
+.. image:: ringqt_shot37.jpg
+       :alt: QColorDialog Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using qLCDNumber
+
+Using qLCDNumber Class
+======================
+
+In this example we will learn about using the qLCDNumber class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp 
+       {
+               win1 = new qWidget() 
+               {
+                       setwindowtitle("LCD Number")
+                       setgeometry(100,100,250,120)
+
+                       new qLCDNumber(win1) 
+                       {
+                               setgeometry(10,10,100,40)
+                               display(100)    
+                               
+                       }
+
+                       new qLCDNumber(win1) 
+                       {
+                               setgeometry(10,60,100,40)
+                               display(80)     
+                               
+                       }
+
+                       show()
+               }
+       
+               exec()
+       }
+
+The application during the runtime
+                       
+.. image:: ringqt_shot38.jpg
+       :alt: QLCDNumber Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Movable Label Example
+
+Movable Label Example
+=====================
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+
+               win1 = new qWidget() 
+               {
+
+                       label1 = new qLabel(win1) 
+                       {
+                               setText("Welcome")
+                               setgeometry(10,10,200,50)
+                               setstylesheet("color: purple ; font-size: 30pt;")
+                       }
+
+                       new qTimer(win1)
+                       {
+                               setInterVal(10)
+                               setTimeOutEvent("pMove()")
+                               start()
+                       }
+
+                       setWindowTitle("Movable Label")
+                       setgeometry(100,100,600,80)
+                       setStyleSheet("background-color: white;")
+                       show()
+
+               }
+
+               exec()
+       }
+
+       Func pMove
+               label1 
+               {
+                       move(x()+1,y())
+                       if x() > 600
+                               move(10,y())
+                       ok
+               }
+       
+       
+The application during the runtime
+                       
+.. image:: ringqt_shot39.jpg
+       :alt: Movable label
+       
+.. index:: 
+       pair: Desktop and Mobile Development; QMessagebox Example
+
+QMessagebox Example
+===================
+
+In this section we will learn how to check the output of the Message box
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               win1 = new qWidget() 
+               {
+                       label1 = new qpushbutton(win1) 
+                       {
+                               setText("Test")
+                               setgeometry(10,10,200,50)
+                               setstylesheet("color: purple ; font-size: 30pt;")
+                               setclickevent("pWork()")
+                       }
+                       setWindowTitle("Messagebox")
+                       setgeometry(100,100,600,80)
+                       setStyleSheet("background-color: white;")
+                       show()
+               }
+               exec()
+       }
+        
+       func pWork
+               new qmessagebox(win1)
+               {
+                       setwindowtitle("messagebox title")
+                       settext("messagebox text")
+                       setInformativeText("Do you want to save your changes?")
+                       setstandardbuttons(QMessageBox_Yes | QMessageBox_No | QMessageBox_Close)
+                       result = exec()
+                       win1 {
+                               if result = QMessageBox_Yes
+                                       setwindowtitle("Yes")
+                               but result = QMessageBox_No
+                                       setwindowtitle("No")
+                               but result = QMessageBox_Close
+                                       setwindowtitle("Close")
+                               ok
+                       }
+               }
+
+The application during the runtime
+                       
+.. image:: ringqt_shot40.jpg
+       :alt: QMessageBox output
+
+.. index:: 
+       pair: Desktop and Mobile Development; Using QInputDialog Class
+
+Using QInputDialog Class
+========================
+
+In the next example we will learn about using the QInputDialog class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New QApp {
+
+               Win1 = New QWidget () {
+
+                       SetGeometry(100,100,400,400)
+                       SetWindowTitle("Input Dialog")
+
+                       New QPushButton(win1) 
+                       {
+
+                               SetText ("Input Dialog")
+                               SetGeometry(100,100,100,30)
+                               SetClickEvent("pWork()")
+                       }
+
+                       Show()
+               }
+
+               exec()
+       }
+
+       Func pWork
+               oInput = New QInputDialog(win1)
+               {
+                       setwindowtitle("What is your name?")
+                       setgeometry(100,100,400,50)
+                       setlabeltext("User Name")
+                       settextvalue("Mahmoud")
+                       lcheck = exec()
+                       if lCheck win1.setwindowtitle(oInput.textvalue()) ok
+               }
+               
+
+The application during the runtime
+                       
+.. image:: ringqt_shot41.jpg
+       :alt: QInputDialog
+
+.. index:: 
+       pair: Desktop and Mobile Development; Dialog Functions
+
+Dialog Functions
+================
+
+We have the next functions
+
+.. code-block:: none
+
+       SetDialogIcon(cIconFile)
+       MsgInfo(cTitle,cMessage)
+       ConfirmMsg(cTitle,cMessage) --> lResult
+       InputBox(cTitle,cMessage) --> cValue
+       InputBoxInt(cTitle,cMessage) --> nValue
+       InputBoxNum(cTitle,cMessage) --> nValue
+       InputBoxPass(cTitle,cMessage) --> cValue
+
+Example
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp 
+       {
+               SetDialogIcon("notepad.png")
+               msginfo(:Ring,:Welcome)
+               see confirmMsg(:Ring,"Are you sure?") + nl
+               see InputBoxNum(:Ring,"Enter Number(double) :") + nl
+               see InputBox(:Ring,"Enter Value :") + nl
+               see InputBoxInt(:Ring,"Enter Number(int)") + nl
+               see InputBoxPass(:Ring,"Enter Password") +nl
+       }
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; KeyPress and Mouse Move Events
+
+KeyPress and Mouse Move Events
+==============================
+
+In this example we will learn how to use the Events Filter to know about KeyPress and Mouse Move
+Events
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+
+               win1 = new qWidget()
+               {
+                       setWindowTitle("Test using Event Filter!")
+                       setGeometry(100,100,400,400)
+                       setmousetracking(true)
+                       myfilter = new qallevents(win1)
+                       myfilter.setKeyPressEvent("pWork()")
+                       myfilter.setMouseButtonPressevent("pClick()")
+                       myfilter.setmousemoveevent("pMove()")
+
+                       installeventfilter(myfilter)
+
+                       show()
+               }
+
+               exec()
+       }
+
+       func pWork
+               win1.setwindowtitle('KeyPress! : ' + myfilter.getkeycode())
+
+       func pClick
+               new qmessagebox(win1) {
+                       setgeometry(100,100,400,100)
+                       setwindowtitle("click event!")
+                       settext("x : " + myfilter.getx() + 
+                               " y : " + myfilter.gety() + " button : " +
+                                myfilter.getbutton() )
+                       show()
+               }
+
+       func pMove
+               win1.setwindowtitle("Mouse Move , X : " + myfilter.getx() +
+                                   " Y : " + myfilter.gety() )
+
+The application during the runtime
+                       
+.. image:: ringqt_shot42.jpg
+       :alt: KeyPress and Mouse Move Events
+
+.. index:: 
+       pair: Desktop and Mobile Development; Moving Objects using the Mouse
+
+Moving Objects using the Mouse
+==============================
+
+In the next example we will learn how to program movable objects where the user can move a label
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       lPress = false
+       nX = 0
+       nY = 0
+
+       new qApp {
+
+               win1 = new qWidget()
+               {
+
+                       setWindowTitle("Move this label!")
+                       setGeometry(100,100,400,400)
+                       setstylesheet("background-color:white;")
+
+                       Label1 = new qLabel(Win1){
+                               setGeometry(100,100,200,50)
+                               setText("Welcome")
+                               setstylesheet("font-size: 30pt")
+                               myfilter = new qallevents(label1)
+                               myfilter.setEnterevent("pEnter()")
+                               myfilter.setLeaveevent("pLeave()")
+                               myfilter.setMouseButtonPressEvent("pPress()")
+                               myfilter.setMouseButtonReleaseEvent("pRelease()")
+                               myfilter.setMouseMoveEvent("pMove()")
+                               installeventfilter(myfilter)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pEnter
+               Label1.setStyleSheet("background-color: purple; color:white;font-size: 30pt;")
+
+       Func pLeave
+               Label1.setStyleSheet("background-color: white; color:black;font-size: 30pt;")
+
+       Func pPress
+               lPress = True   
+               nX = myfilter.getglobalx()
+               ny = myfilter.getglobaly()
+
+       Func pRelease
+               lPress = False
+               pEnter()
+
+       Func pMove
+               nX2 = myfilter.getglobalx()
+               ny2 = myfilter.getglobaly()
+               ndiffx = nX2 - nX
+               ndiffy = nY2 - nY
+               if lPress
+                       Label1 {
+                               move(x()+ndiffx,y()+ndiffy)
+                               setStyleSheet("background-color: Green;
+                                        color:white;font-size: 30pt;")
+                               nX = nX2
+                               ny = nY2
+                       }
+
+               ok
+
+
+The application during the runtime
+                       
+.. image:: ringqt_shot43.jpg
+       :alt: Moving object using the mouse
+       
+.. image:: ringqt_shot44.jpg
+       :alt: Moving object using the mouse
+       
+.. image:: ringqt_shot45.jpg
+       :alt: Moving object using the mouse
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Inheritance from GUI Classes
+
+Inheritance from GUI Classes
+============================
+
+Example :
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New MyWindow()
+
+       new qApp { exec() }
+
+       class mywindow from qwidget
+               Func init
+                       super.init()
+                       setwindowtitle("First Window")
+                       setgeometry(100,100,400,400)
+                       setstylesheet("background-color: purple;")
+                       settooltip("my first window!")
+                       show()
+
+The application during the runtime
+                       
+.. image:: ringqt_shot46.jpg
+       :alt: Inheritance from GUI Classes
+       
+.. index:: 
+       pair: Desktop and Mobile Development; Using QDesktopWidget Class
+
+Using QDesktopWidget Class
+==========================
+
+In the next example we will learn about using the QDesktopWidget class
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = New qWidget()
+               {
+                       resize(400,400)
+                       btn1 = new qPushbutton(win1)
+                       {
+                               setText("Center")
+                               move(100,100)
+                               resize(100,30)
+                               setClickEvent("pCenter()")
+                       }
+
+                       Show()
+               }
+
+               exec()
+       }
+
+       Func pCenter
+               oDesktop  = new qDesktopWidget()
+               oRect = oDesktop.screenGeometry( oDesktop.primaryScreen()  ) 
+               win1.move((oRect.width()-win1.width()) /2 , (oRect.Height()-win1.Height())/2 )
+               win1.show()
+
+The application during the runtime
+                       
+.. image:: ringqt_shot47.jpg
+       :alt: Using QDesktopWidget Class
+
+.. index:: 
+       pair: Desktop and Mobile Development; Rotate Text
+
+Rotate Text
+===========
+
+The next example rotate text using a Timer.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       nAngle  = 0
+
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("Rotate Text")
+                       resize(800,600)
+                       label1 = new qlabel(win1) {
+                               settext("")
+                               myfilter = new qallevents(win1)
+                               myfilter.setMouseButtonPressevent("pClick()")
+                               installeventfilter(myfilter)
+                       }
+                       new qtimer(win1) {
+                               setinterval(50)
+                               settimeoutevent("pTime()")
+                               start()
+                       }
+                       pDraw()
+                       L1 = new qVBoxLayout() { AddWidget(Label1) } SetLayout(L1)
+                       showMaximized()
+               }
+               exec()
+       }
+
+       Func pDraw
+               p1 = new qpicture()
+               color = new qcolor() {
+                       setrgb(0,0,255,255)
+               }
+               pen = new qpen() {
+                       setcolor(color)
+                       setwidth(50)
+               }
+               painter = new qpainter() {
+                       begin(p1)               
+                               setpen(pen)
+                               myfont = font()
+                               myfont.setpointsize(50)
+                               setfont(myfont)
+                               rotate(nAngle)
+                               drawtext(350,0*nAngle,"welcome")                 
+                               drawtext(0,0*nAngle,"welcome")           
+                       endpaint()
+                         }
+               label1 {
+                       setpicture(p1)  
+                       show() 
+               }
+
+       Func pClick
+               win1 { setwindowtitle("Click Event") } 
+
+       Func pTime
+               nAngle++
+               if nAngle = 90
+                       nAngle = 10
+               ok
+               pDraw()
+
+The application during the runtime
+
+.. image:: shotrotatetext.png
+       :alt: Rotate Text Example
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Change Focus
+
+Change Focus
+============
+
+The next example change the focus using the ENTER key.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qWidget() {
+                       resize(600,600)
+                       SetWindowTitle("Change Focus")
+                       text1 = new qLineEdit(win)
+                       text2 = new qLineEdit(win)
+                       text3 = new qLineEdit(win)
+                       text4 = new qLineEdit(win)
+                       layout1 = new qVBoxLayout() {
+                               AddWidget(text1)
+                               AddWidget(text2)
+                               AddWidget(text3)
+                               AddWidget(text4)
+
+                       }
+                       setLayout(Layout1)
+                       aList = [text1,text2,text3,text4]
+                       oFilter = new qallevents(win)
+                       oFilter.setKeyPressEvent("pWork()")
+                       installeventfilter(oFilter)
+                       show()
+               }
+               exec()
+       }
+
+       func pWork
+               nCode =  oFilter.getkeycode()
+               if nCode = 16777220     # ENTER Key
+                       for x=1 to len(aList) 
+                               if aList[x].HasFocus() 
+                                       t = x+1
+                                       if t > len(aList) t=1 ok
+                                       aList[t].SetFocus(0)
+                                       exit
+                               ok
+                       next
+               ok
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Regular Expressions
+
+Regular Expressions
+===================
+
+The next example uses the Regular Expressions classes.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp
+       {
+               see "Using Regular Expressions" + nl
+
+               exp = new qregularexpression() {
+                       setPattern("\d\d \w+")
+                       see pattern() + nl
+                       match = match("33 one",0,0,0)
+                       see match.hasmatch() + nl
+                       match = match("3 one",0,0,0)
+                       see match.hasmatch() + nl
+                       match = match("welcome 11 one",0,0,0)
+                       see match.hasmatch() + nl
+                       matched = match.captured(0)
+                       see matched + nl
+               }
+               exp = new qregularexpression() {
+                       setPattern("^(\d\d)/(\d\d)/(\d\d\d\d)$")
+                       see pattern() + nl
+                       match = match("08/12/1985",0,0,0)
+                       see match.hasmatch() + nl
+                       day = match.captured(1)
+                       month = match.captured(2)
+                       year = match.captured(3)
+                       see day + nl + month + nl + year + nl
+                       see  "(" + match.capturedStart(1) + "," + match.capturedEnd(1)+ ")" + nl
+                       see  "(" + match.capturedStart(2) + "," + match.capturedEnd(2)+ ")" + nl
+                       see  "(" + match.capturedStart(3) + "," + match.capturedEnd(3)+ ")" + nl
+               }
+
+       }
+
+Output
+
+.. code-block:: ring
+
+       Using Regular Expressions
+       \d\d \w+
+       1
+       0
+       1
+       11 one
+       ^(\d\d)/(\d\d)/(\d\d\d\d)$
+       1
+       08
+       12
+       1985
+       (0,2)
+       (3,5)
+       (6,10)
+
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Simple Client and Server Example
+
+Simple Client and Server Example
+================================
+
+In this section we will learn about creating simple Client and Server Application
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               oClient = new Client { client() }
+               oServer = new Server { server() }
+               exec()
+       }
+
+       Class Client
+
+               win1 lineedit1  cOutput=""
+               oTcpSocket
+
+               func client
+
+                       win1 = new qwidget() 
+
+                       new qpushbutton(win1) {
+                               setgeometry(50,50,100,30)
+                               settext("connect")
+                               setclickevent("oClient.Connect()")
+                       }
+
+                       lineedit1 = new qtextedit(win1) {
+                               setGeometry(150,50,200,300)
+                       }
+
+                       win1 {
+                               setwindowtitle("client")
+                               setgeometry(10,100,400,400)
+                               show()
+                       }
+
+               func connect
+                       cOutput = "Connect to host 127.0.0.1 port 9999" + nl
+                       lineedit1.settext(cOutput)
+                       oTcpSocket = new qTcpSocket(win1) {
+                               setconnectedevent("oClient.pConnected()")
+                               setreadyreadevent("oClient.pRead()")
+                               connecttohost("127.0.0.1",9999,3,0)
+                               waitforconnected(5000)
+                       }                       
+                       
+               func pConnected         
+
+                       cOutput += "Connected!" + nl
+                       lineedit1.settext(cOutput)
+
+               func pRead
+
+                       cOutput += "Ready Read!" + nl
+                       lineedit1.settext(cOutput)
+                       cOutput += oTcpSocket.readall().data() + nl
+                       lineedit1.settext(cOutput)
+
+       Class Server
+
+               win1 lineedit1 
+               oTcpServer oTcpClient
+               cOutput = ""
+
+               func server
+
+                       win1 = new qwidget()
+                       
+                       lineedit1 = new qtextedit(win1) {
+                               setGeometry(150,50,200,300)
+                       }
+
+                       win1 {
+                               setwindowtitle("Server")
+                               setgeometry(450,100,400,400)
+                               show()
+                       }
+
+                       oTcpServer = new qTcpServer(win1) {
+                               setNewConnectionEvent("oServer.pNewConnection()")
+                               oHostAddress = new qHostAddress()
+                               oHostAddress.SetAddress("127.0.0.1")
+                               listen(oHostAddress,9999)
+                       }
+                       cOutput = "Server Started" + nl +
+                                  "listen to port 9999" + nl
+
+                       lineedit1.settext(cOutput)
+
+               Func pNewConnection
+               
+                       oTcpClient = oTcpServer.nextPendingConnection()
+                       cOutput += "Accept Connection" + nl
+                       lineedit1.settext(cOutput)
+                       oTcpClient {
+                               cStr ="Hello from server to client!"+char(13)+char(10)
+                               write(cStr,len(cStr))
+                               flush()
+                               waitforbyteswritten(300000)
+                               close()
+                       }
+
+The application during the runtime
+
+.. image:: ringqt_shot36.jpg
+       :alt: Client and Server Example
+
+.. index:: 
+       pair: Desktop and Mobile Development; Dynamic Objects
+
+Dynamic Objects
+===============
+
+We may create objects in the runtime and add them to windows.
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       oFormDesigner = new FormDesigner { start("oFormDesigner") }
+
+       Class FormDesigner
+
+               winToolBox  winForm
+
+               aObjects = []
+
+               func start cObjectName
+
+                       oApp = new qApp
+
+                       winToolBox = new qWidget() 
+                       winToolBox.setWindowTitle("ToolBox")
+                       winToolBox.move(10,10)
+                       winToolBox.resize(300,600)
+                       
+                       btn = new qPushButton(winToolBox) 
+                       btn.resize(300,30)
+                       btn.setText("Create Button")
+                       btn.setClickEvent(cObjectName+".pCreateButton()")
+                       btn.show()              
+
+                       winToolBox.show()
+
+                       winForm = new qWidget() {
+                               move(400,50)
+                               setWindowTitle("Form Designer")
+                               resize(600,600)
+                               show()  
+                       }
+
+                       oApp.exec()
+
+
+               func pCreateButton              
+
+                       nCount = len(aObjects)
+
+                       aObjects + new MyButton(winForm) 
+                       {
+                               nIndex = nCount + 1
+                               setText("Button"+ nIndex) 
+                               Move(30*nIndex,30*nIndex)
+                               resize(100,30)
+                               show()
+                       }
+
+
+       Class MyButton from qPushButton
+               nIndex = 0
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Weight History Application
+
+Weight History Application
+==========================
+
+The next sample help in recording (Date, Time and Weight).
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = new qApp
+       {  
+         $ApplicationObject = "oApp"   # To be used when calling events
+         oApp = new App     
+         exec()
+         oApp.CloseDatabase()
+       }
+
+       class App
+
+         cDir = currentdir() + "/"
+         oCon 
+         aIDs = []
+
+         win1 = new qWidget()
+         {
+               setWindowTitle("Weight History")
+               resize(600,600)
+               layoutButtons = new qhboxlayout()
+               {
+                 label1 = new qLabel(win1) { setText("Weight") }
+                 text1 = new qlineedit(win1)
+                 btnAdd = new qpushbutton(win1) { 
+                         setText("Add") 
+                         setClickEvent($ApplicationObject+".AddWeight()") 
+                 }
+                 btnDelete = new qpushbutton(win1) { 
+                         setText("Delete") 
+                         setClickEvent($ApplicationObject+".Deleteweight()") 
+                 }
+                 addwidget(label1)
+                 addwidget(text1)
+                 addwidget(btnAdd)
+                 addwidget(btnDelete)
+               }
+               layoutData  = new qhboxlayout()
+               {
+                 Table1 = new qTableWidget(win1) {
+                       setrowcount(0)
+                       setcolumncount(3)
+                       setselectionbehavior(QAbstractItemView_SelectRows)
+                       setHorizontalHeaderItem(0, new QTableWidgetItem("Date"))
+                       setHorizontalHeaderItem(1, new QTableWidgetItem("Time"))
+                       setHorizontalHeaderItem(2, new QTableWidgetItem("Weight"))
+                       setitemChangedEvent($ApplicationObject+".ItemChanged()")
+                                          setAlternatingRowColors(true)    
+                                          horizontalHeader().setStyleSheet("color: blue")
+                                          verticalHeader().setStyleSheet("color: red") 
+                 }
+                 addWidget(Table1)
+               }
+               layoutClose = new qhboxlayout()
+               {
+                 btnclose = new qpushbutton(win1) { 
+                   setText("Close") 
+                   setClickEvent("MyApp.Quit()") 
+                 }
+                 addwidget(btnClose)
+               }
+               layoutMain = new qvboxlayout()
+               {
+                 addlayout(layoutButtons)
+                 addLayout(LayoutData)
+                 addLayout(layoutClose)
+               }
+               setlayout(layoutMain)
+               self.OpenDatabase()
+               self.ShowRecords()        
+               show()  
+         }
+               
+         Func OpenDatabase
+               lCreate = False
+               if not fexists(cDir + "weighthistory.db")
+                 lCreate = True
+               ok
+               new QSqlDatabase() {
+                 this.oCon = addDatabase("QSQLITE") {
+                       setDatabaseName("weighthistory.db")
+                       Open()      
+                 }
+               }  
+               if lCreate
+                 new QSqlQuery( ) {
+                       exec("create table weighthistory (id integer primary key,"+
+                             " f_date varchar(10),"+
+                            " f_time varchar(8), f_weight varchar(8) );")
+                       delete()
+                 }
+               ok
+
+
+         Func CloseDatabase
+               oCon.Close()
+
+         Func AddWeight
+               cWeight = text1.text()
+               AddRecord(cWeight)
+
+         Func DeleteWeight
+               Table1 {
+                  nRow = CurrentRow() 
+                 if nRow >= 0
+                       nID = this.aIDs[nROW+1] 
+                       new QSqlQuery( ) {
+                         exec("delete from weighthistory where id = " + nID )
+                       }
+                       Del(this.aIDs,nRow+1)
+                       removerow(nRow)  
+                       selectrow(nRow)
+                 ok
+               }
+               
+
+         Func AddRecord cWeight
+               new QSqlQuery( ) {
+                 cStr = "insert into weighthistory (f_date,f_time,f_weight) values"+
+                 " ('%f1','%f2','%f3')"
+                 cDate = Date()
+                 cTime = Time()
+                 cStr = substr(cStr,"%f1",cDate)
+                 cStr = substr(cStr,"%f2",cTime)
+                 cStr = substr(cStr,"%f3",cWeight)
+                 exec(cStr)
+                 delete()
+               }
+               ShowRecords()
+               Table1.selectrow(table1.rowcount()-1)
+
+
+         Func ShowRecords
+               table1.setitemChangedEvent("")
+               aIDs = []
+               query = new QSqlQuery() {
+                 exec("select * from weighthistory")
+                 nRows = 0
+                 this.Table1.setrowcount(0)
+                 while movenext() 
+                       this.table1 {
+                         insertRow(nRows)
+                         this.aIDs + query.value(0).tostring()
+                         for x = 1 to 3 
+                               cStr = query.value(x).tostring()
+                               item = new qTableWidgetItem(cStr)
+                               setItem(nRows,x-1,item)
+                         next
+                       }
+                       nRows++
+                 end
+                 delete()
+               }
+               table1.setitemChangedEvent($ApplicationObject+".ItemChanged()")
+          
+         Func ItemChanged
+               nRow =  table1.currentrow()
+               if nRow >= 0 
+                 myitem = Table1.item(table1.currentrow(),0)
+                 cDate = myitem.text()
+                 myitem = Table1.item(table1.currentrow(),1)
+                 cTime = myitem.text()
+                 myitem = Table1.item(table1.currentrow(),2)
+                 cWeight = myitem.text()
+                 new QSqlQuery( ) {
+                       cStr = "update weighthistory set f_date ='%f1' , f_time = '%f2' , "+
+                       "f_weight ='%f3' where id = " +  this.aIDs[nROW+1] 
+                       cStr = substr(cStr,"%f1",cDate)
+                       cStr = substr(cStr,"%f2",cTime)
+                       cStr = substr(cStr,"%f3",cWeight)  
+                       exec(cStr)
+                       delete()
+                 }
+               ok
+
+
+The next screen shot for the application during the runtime
+
+.. image:: weighthistory_app.png
+       :alt: Weight History Application
+
+.. index:: 
+       pair: Desktop and Mobile Development; Notepad Application
+
+
+Notepad Application
+===================
+
+In the next example we will see simple Notepad developed using the RingQt
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       cActiveFileName = ""
+       aTextColor = [0,0,0]  
+       aBackColor = [255,255,255]
+       cFont = "MS Shell Dlg 2,14,-1,5,50,0,0,0,0,0"
+       cWebsite = "http://www.google.com"
+
+       oSearch = NULL
+       oSearchValue = NULL 
+       oSearchCase = NULL
+       oSearchFilter = NULL
+       oReplaceValue = NULL
+
+       lAskToSave = false
+
+       MyApp = New qApp {
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Ring Notepad")
+                       setGeometry(100,100,400,400)
+                       aBtns = [
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/new.png") 
+                                               setclickevent("pNew()")
+                                               settooltip("New File")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/open.png") 
+                                               setclickevent("pOpen()")
+                                               settooltip("Open File")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/save.png")
+                                               setclickevent("pSave()")
+                                               settooltip("Save")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/saveas.png")
+                                               setclickevent("pSaveAs()")
+                                               settooltip("Save As")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/cut.png")
+                                               setclickevent("pCut()")
+                                               settooltip("Cut")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/copy.png") 
+                                               setclickevent("pCopy()")
+                                               settooltip("Copy")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/paste.png") 
+                                               setclickevent("pPaste()")
+                                               settooltip("Paste")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/font.png") 
+                                               setclickevent("pFont()")
+                                               settooltip("Font")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/colors.jpg") 
+                                               setclickevent("pColor()")
+                                               settooltip("Text Color")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/search.png") 
+                                               setclickevent("pFind()")
+                                               settooltip("Find and Replace")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/print.png") 
+                                               setclickevent("pPrint()")
+                                               settooltip("Print")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/debug.png") 
+                                               setclickevent("pDebug()")
+                                               settooltip("Debug (Run then wait!)")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/run.png") 
+                                               setclickevent("pRun()")
+                                               settooltip("Run the program")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/close.png") 
+                                               setclickevent("pQuit()")
+                                               settooltip("Quit")
+                                       } 
+                               ]
+
+                       tool1 = addtoolbar("files")  {
+                               for x in aBtns addwidget(x) addseparator() next
+                       }
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub2 = addmenu("Edit")
+                               sub3 = addmenu("View")
+                               sub4 = addmenu("Help")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+n"))
+                                               setbtnimage(self,"image/new.png")
+                                               settext("New")
+                                               setclickevent("pNew()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+o"))
+                                               setbtnimage(self,"image/open.png") 
+                                               settext("Open")
+                                               setclickevent("pOpen()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+s"))
+                                               setbtnimage(self,"image/save.png")
+                                               settext("Save")
+                                               setclickevent("pSave()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+e"))
+                                               setbtnimage(self,"image/saveas.png")
+                                               settext("Save As")
+                                               setclickevent("pSaveAs()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+p"))
+                                               setbtnimage(self,"image/print.png")
+                                               settext("Print to PDF")
+                                               setclickevent("pPrint()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+d"))
+                                               setbtnimage(self,"image/debug.png")
+                                               settext("Debug (Run then wait!)")
+                                               setclickevent("pDebug()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+r"))
+                                               setbtnimage(self,"image/run.png")
+                                               settext("Run")
+                                               setclickevent("pRun()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+F5"))
+                                               setbtnimage(self,"image/run.png")
+                                               settext("Run GUI Application (No Console)")
+                                               setclickevent("pRunNoConsole()")
+                                       }
+                                       addaction(oAction)      
+                                       addseparator()
+                                       oAction = new qaction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+q"))
+                                               setbtnimage(self,"image/close.png") 
+                                               settext("Exit")
+                                               setstatustip("Exit")
+                                               setclickevent("pQuit()")
+                                       }
+                                       addaction(oAction)
+                               }
+                               sub2 { 
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+x"))
+                                               setbtnimage(self,"image/cut.png")
+                                               settext("Cut")
+                                               setclickevent("pCut()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+c"))
+                                               setbtnimage(self,"image/copy.png")
+                                               settext("Copy")
+                                               setclickevent("pCopy()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+v"))
+                                               setbtnimage(self,"image/paste.png")
+                                               settext("Paste")
+                                               setclickevent("pPaste()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+i"))
+                                               setbtnimage(self,"image/font.png")
+                                               settext("Font")
+                                               setclickevent("pFont()")
+                                       }
+                                       addseparator()
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+t"))
+                                               setbtnimage(self,"image/colors.jpg")
+                                               settext("Text Color")
+                                               setclickevent("pColor()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+b"))
+                                               setbtnimage(self,"image/colors.jpg")
+                                               settext("Back Color")
+                                               setclickevent("pColor2()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+g"))
+                                               settext("Go to line")
+                                               setclickevent("pGoto()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+f"))
+                                               setbtnimage(self,"image/search.png")
+                                               settext("Find and Replace")
+                                               setclickevent("pFind()")
+                                       }
+                                       addaction(oAction)
+                               }                               
+                               sub3 {
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+p"))
+                                               setbtnimage(self,"image/project.png")
+                                               settext("Project Files")
+                                               setclickevent("pProject()")
+                                       }
+                                       addaction(oAction)                      
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+u"))
+                                               setbtnimage(self,"image/source.png")
+                                               setclickevent("pSourceCode()")
+                                               settext("Source Code")
+                                       }
+                                       addaction(oAction)      
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+w"))
+                                               setbtnimage(self,"image/richtext.png")
+                                               setclickevent("pWebBrowser()")
+                                               settext("Web Browser")
+                                       }
+                                       addaction(oAction)      
+                               }
+                               sub4 { 
+                                       sub5 = addmenu("Development Tools")
+                                       sub5 { 
+
+                                               oAction = new qAction(win1) {
+                                                       settext("Programming Language")
+                                                       setclickevent("pLang()")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("GUI Library")
+                                                       setclickevent("pGUI()")
+                                               }
+                                               addaction(oAction)
+                                       }
+                                       addseparator()
+                                               oAction = new qAction(win1) {
+                                                       settext("About")
+                                                       setclickevent("pAbout()")
+                                               }
+                                               addaction(oAction)                      
+                               }
+                       }
+
+                       setmenubar(menu1)
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+
+                       tree1 = new qtreeview(win1) {
+                               setclickedevent("pChangeFile()")
+                               setGeometry(00,00,200,400)
+                               oDir = new QDir()                                       
+                               ofile = new QFileSystemModel() {
+                                       setrootpath(oDir.currentpath())
+                                       myfiles = new qstringlist()
+                                       myfiles.append("*.ring")
+                                       myfiles.append("*.rh")
+                                       setnamefilters(myfiles) 
+                                       setNameFilterDisables(false)
+                               }
+                               setmodel(ofile)
+                               myindex = ofile.index(oDir.currentpath(),0)
+                               for x = 1 to ofile.columncount()
+                                       hidecolumn(x)
+                               next
+                               setcurrentindex(myindex)
+                               setexpanded(myindex,true)
+                               header().hide()                 
+                       }
+
+                       oDock1 = new qdockwidget(win1,0) {
+                               setGeometry(00,00,200,200)
+                               setwindowtitle("Project Files")
+                               setwidget(tree1)
+                       }
+
+                       textedit1 = new qtextedit(win1) {
+                               setCursorPositionChangedevent("pCursorPositionChanged()")
+                               setLineWrapMode(QTextEdit_NoWrap)
+                               setAcceptRichText(false)
+                               setTextChangedEvent("lAskToSave = true")
+                       }
+
+
+                       oDock2 = new qdockwidget(win1,0) {
+                               setwidget(textedit1)
+                               setwindowtitle("Source Code")
+                       }
+
+                       oWebBrowser = new qWidget() {   
+                               setWindowFlags(Qt_SubWindow)
+                               oWBLabel = new qLabel(win1) {
+                                       setText("Website: ")
+                               }       
+                               oWBText = new qLineEdit(win1) {
+                                       setText(cWebSite)
+                                       setReturnPressedEvent("pWebGo()")
+                               }
+                               oWBGo = new qPushButton(win1) {
+                                       setText("Go")
+                                       setClickEvent("pWebGo()")
+                               }
+                               oWBBack = new qPushButton(win1) {
+                                       setText("Back")
+                                       setClickEvent("pWebBack()")
+                               }
+                               oWBLayout1 = new qHBoxLayout() {
+                                       addWidget(oWBLabel)
+                                       addWidget(oWBText)
+                                       addWidget(oWBGo)
+                                       addWidget(oWBBack)
+                               }
+                               oWebView = new qWebView(win1) {
+                                       loadpage(new qurl(cWebSite))
+                               }
+                               oWBlayout2 = new qVBoxLayout() {
+                                       addLayout(oWBLayout1)
+                                       addWidget(oWebView)
+                               }
+                               setLayout(oWBLayout2)
+                       }
+
+                       oDock3 = new qdockwidget(win1,0) {
+                               setwidget(oWebBrowser)          
+                               setwindowtitle("Web Browser")
+                               setFeatures(QDockWidget_DocWidgetClosable)
+                       }       
+
+                       adddockwidget(1,oDock1,1)
+                       adddockwidget(2,oDock2,2)
+                       adddockwidget(2,oDock3,1)
+               
+                       setwinicon(self,"image/notepad.png")
+
+                       showmaximized()
+               }
+               RestoreSettings()
+               exec()
+       }
+
+       func pWebGo
+               cWebsite = oWBText.text() 
+               oWebView.LoadPage( new qurl( cWebSite ) )
+
+       func pWebBack
+               oWebView.Back()
+
+       func pProject
+               oDock1.Show()
+               
+       func pSourceCode
+               oDock2.Show()
+
+       func pWebBrowser
+               oDock3.Show()
+
+       func pChangeFile
+               myitem = tree1.currentindex()
+               if ofile.isdir(myitem)
+                       return
+               ok
+               cActiveFileName = ofile.filepath(myitem)
+               textedit1.settext(read(cActiveFileName))
+               textedit1.setfocus(0)
+               pCursorPositionChanged()
+               pSetActiveFileName()
+
+       func pSetActiveFileName
+               oDock2.setWindowTitle("Source Code : " + cActiveFileName)
+
+       func pCursorPositionChanged
+               status1.showmessage(" Line : "+(textedit1.textcursor().blocknumber()+1)+
+                               " Column : " +(textedit1.textcursor().columnnumber()+1) +
+                               " Total Lines : " + textedit1.document().linecount() ,0)
+
+       func pGoto
+               oInput = New QInputDialog(win1)
+               {
+                       setwindowtitle("Enter the line number?")
+                       setgeometry(100,100,400,50)
+                       setlabeltext("Line")
+                       settextvalue("1")
+                       exec()
+                       nLine = 0 + oInput.textvalue()
+                       oBlock = textedit1.document().findBlockByLineNumber(nLine-1)
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(oBlock.position(),0)
+                       textedit1.settextcursor(oCursor)
+               }
+
+       func pFind
+               if isobject(oSearch)
+                       oSearch.activatewindow()
+                       return
+               ok
+               oSearch = new qWidget()
+               {
+                       new qLabel(oSearch)
+                       {
+                               setText("Find What : ")
+                               setgeometry(10,10,50,30)
+                       }
+                       oSearchValue = new qlineedit(oSearch)
+                       {
+                               setgeometry(80,10,460,30)
+                               setReturnPressedEvent("pFindValue()")
+                       }
+                       new qLabel(oSearch)
+                       {
+                               setText("Replace with ")
+                               setgeometry(10,45,80,30)
+                       }
+                       oReplaceValue = new qlineedit(oSearch)
+                       {
+                               setgeometry(80,45,460,30)
+                       }
+                       oSearchCase = new qCheckbox(oSearch)
+                       {
+                               setText("Case Sensitive")
+                               setgeometry(80,85,100,30)
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Find/Find Next")
+                               setgeometry(80,120,100,30)
+                               setclickevent("pFindValue()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Replace")
+                               setgeometry(200,120,100,30)
+                               setclickevent("pReplace()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Replace All")
+                               setgeometry(320,120,100,30)
+                               setclickevent("pReplaceAll()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Close")
+                               setgeometry(440,120,100,30)
+                               setclickevent("pSearchClose()")
+                       }
+
+                       setwinicon(oSearch,"image/notepad.png")
+                       setWindowTitle("Find/Replace")          
+                       setStyleSheet("background-color:white;")
+                       setFixedsize(550,160)
+                       setwindowflags( Qt_CustomizeWindowHint | 
+                                       Qt_WindowTitleHint | Qt_WindowStaysOnTopHint) 
+
+                       oSearchFilter = new qallevents(oSearch)
+                       oSearchFilter.setKeyPressEvent("pSearchKeyPress()")                                                             
+                       installeventfilter(oSearchFilter)
+
+                       show()
+               }
+
+       Func pReplace
+               oCursor = textedit1.textCursor()
+               if oCursor.HasSelection() = false
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Replace") 
+                               SetText("No Selection")
+                               show()  
+                       }
+                       return false
+               ok
+               cValue = oSearchValue.text()
+               cSelected = oCursor.SelectedText()
+               if oSearchCase.checkState() = Qt_Unchecked
+                       cValue = lower(cValue)  
+                       cSelected = lower(cSelected)
+               ok
+               if cSelected != cValue
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Replace") 
+                               SetText("No Match")
+                               show()  
+                       }
+                       return false
+               ok
+               cValue = oReplaceValue.text()
+               nStart = oCursor.SelectionStart()
+               nEnd = oCursor.SelectionEnd()
+               cStr = textedit1.toPlainText()
+               cStr = left(cStr,nStart)+cValue+substr(cStr,nEnd+1)
+               textedit1.setText(cStr) 
+               return pFindValue()
+
+       Func pReplaceAll
+               cStr = textedit1.toPlainText()
+               cOldValue = oSearchValue.text()
+               cNewValue = oReplaceValue.text()
+               if oSearchCase.checkState() = Qt_Unchecked
+                       # Not Case Sensitive
+                       cStr = SubStr(cStr,cOldValue,cNewValue,true)
+               else
+                       # Case Sensitive
+                       cStr = SubStr(cStr,cOldValue,cNewValue)
+               ok
+               textedit1.setText(cStr) 
+               new qMessagebox(oSearch)
+               {
+                       SetWindowTitle("Replace All") 
+                       SetText("Operation Done")
+                       show()  
+               }
+
+       Func pSearchClose
+               oSearch.close() 
+               oSearch = NULL
+
+       func pSearchKeyPress
+               if oSearchFilter.getKeyCode() = Qt_Key_Escape
+                       pSearchClose()          
+               ok
+
+       func pFindValue
+               oCursor = textedit1.textcursor()
+               nPosStart = oCursor.Position() + 1
+               cValue = oSearchValue.text()
+               cStr = textedit1.toplaintext()
+               cStr = substr(cStr,nPosStart)
+               if oSearchCase.checkState() = Qt_Unchecked
+                       cStr = lower(cStr)  cValue = lower(cValue)
+               ok
+               nPos = substr(cStr,cValue)
+               if nPos > 0
+                       nPos += nPosStart - 2
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(nPos,0)
+                       textedit1.settextcursor(oCursor)
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(nPos+len(cValue),1)
+                       textedit1.settextcursor(oCursor)
+                       return true
+               else
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Search") 
+                               SetText("Cannot find :" + cValue)
+                               show()  
+                       }
+                       return false
+               ok              
+
+       func pNofileopened
+               New qMessageBox(win1) {
+                       setWindowTitle("Sorry")
+                       setText("Save the file first!")
+                       show()
+               }
+
+       func pDebug
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start run " + cActiveFileName + nl 
+               system(cCode)
+
+       func pRun
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start ring " + cActiveFileName + nl 
+               system(cCode)
+
+       func pRunNoConsole
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start /b ring " + cActiveFileName + nl 
+               system(cCode)
+
+       func pSave
+               if cActiveFileName = NULL return pSaveAs() ok
+               writefile(cActiveFileName,textedit1.toplaintext())
+               status1.showmessage("File : " + cActiveFileName + " saved!",0)
+               lAskToSave = false
+
+       func pSaveAs
+               new qfiledialog(win1) {
+                       cName = getsavefilename(win1,"Save As","","source files(*.ring)")
+                       if cName != NULL
+                               cActiveFileName = cName
+                               writefile(cActiveFileName,textedit1.toplaintext())
+                               status1.showmessage("File : " + cActiveFileName + " saved!",0)  
+                               pSetActiveFileName()
+                               lAskToSave = false
+                       ok      
+               }
+
+       func pPrint
+               status1.showmessage("Printing to File : RingDoc.pdf",0)
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      # 1 = pdf
+                       setoutputfilename("RingDoc.pdf")
+                       textedit1.print(printer1)
+               }
+               status1.showmessage("Done!",0)
+               system("RingDoc.pdf")
+
+       func pCut
+               textedit1.cut()
+               status1.showmessage("Cut!",0)           
+
+       func pCopy
+               textedit1.copy()
+               status1.showmessage("Copy!",0)          
+
+       func pPaste
+               textedit1.paste()
+               status1.showmessage("Paste!",0)         
+
+       func pFont
+               oFontDialog = new qfontdialog() {
+                       aFont = getfont()
+               }
+               textedit1.selectall()
+               cFont = aFont[1]
+               pSetFont()
+
+       Func pSetFont
+               myfont = new qfont("",0,0,0)
+               myfont.fromstring(cFont)
+               textedit1.setcurrentfont(myfont)
+
+       Func pColor
+               new qcolordialog() { aTextColor = GetColor() }  
+               pSetColors()
+
+       Func pColor2
+               new qcolordialog() { aBackColor = GetColor() }  
+               pSetColors()
+               
+       Func pSetColors
+               textedit1.setstylesheet("color: rgb(" + aTextColor[1] + "," + aTextColor[2] +
+                                       "," + aTextColor[3] + ");" + "background-color: rgb(" +
+                                       aBackColor[1] + "," + aBackColor[2] + "," +
+                                       aBackColor[3] + ")")
+
+       func pOpen
+               new qfiledialog(win1) {
+                       cName = getopenfilename(win1,"open file","c:\","source files(*.ring)")                  
+                       if cName != NULL
+                               cActiveFileName = cName
+                               textedit1.settext(read(cActiveFileName))
+                       ok
+               }
+               
+       func pNew
+               new qfiledialog(win1) {
+                       cName = getsavefilename(win1,"New file","","source files(*.ring)")
+                       if cName != NULL
+                               write(cName,"")
+                               cActiveFileName = cName
+                               textedit1.settext(read(cActiveFileName))
+                               
+                       ok      
+               }
+               
+       Func WriteFile cFileName,cCode
+               aCode = str2list(cCode)
+               fp = fopen(cFileName,"wb")
+               for cLine in aCode
+                       fwrite(fp,cLine+char(13)+char(10))      
+               next
+               fclose(fp)
+
+       Func MsgBox cTitle,cMessage
+               new qMessagebox(win1) {
+                       setwindowtitle(cTitle)
+                       setText(cMessage)
+                       show()
+               }
+               
+
+       Func pLang
+               MsgBox("Programming Language",
+                       "This application developed using the Ring programming language")
+
+       Func pGUI
+               MsgBox("GUI Library",
+                       "This application uses the Qt GUI Library through RingQt")
+
+       Func pAbout
+               MsgBox("About",
+                       "2016, Mahmoud Fayed <msfclipper@yahoo.com>")           
+
+       Func pSaveSettings
+               cSettings = "aTextColor = ["+aTextColor[1]+","+aTextColor[2]+
+                               ","+aTextColor[3]+"]" + nl + 
+                               "aBackColor = ["+aBackColor[1]+","+aBackColor[2]+
+                               ","+aBackColor[3]+"]" + nl +
+                               "cFont = '" + cFont + "'" + nl + 
+                               "cWebSite = '" + cWebsite + "'" + nl
+               cSettings = substr(cSettings,nl,char(13)+char(10))
+               write("ringnotepad.ini",cSettings)
+               if lAsktoSave
+                       new qmessagebox(win1)
+                       {
+                               setwindowtitle("Save Changes?")
+                               settext("Some changes are not saved!")
+                               setInformativeText("Do you want to save your changes?")
+                               setstandardbuttons(QMessageBox_Yes |
+                                                  QMessageBox_No | QMessageBox_Cancel)
+                               result = exec()
+                               win1 {
+                               if result = QMessageBox_Yes
+                                       pSave()
+                               but result = QMessageBox_Cancel
+                                       return false
+                               ok
+                       }
+               }       
+               ok
+               return true
+
+       Func pSetWebsite
+               oWebView { loadpage(new qurl(cWebSite)) }       
+               oWBText  { setText(cWebSite) }          
+
+       Func RestoreSettings
+               eval(read("ringnotepad.ini"))
+               pSetColors()
+               pSetFont()
+               pSetWebsite()
+
+       Func pQuit
+               if pSaveSettings() 
+                       myapp.quit()
+               ok
+
+
+The application during the runtime
+
+The next screen shot demonstrates the "File" menu 
+
+.. image:: ringqt_shot50.jpg
+       :alt: Ring Notepad - File Menu
+
+The next window for "search and replace"
+
+.. image:: ringqt_shot51.jpg
+       :alt: Ring Notepad - Search and replace
+
+The next screen shot demonstrates the application main window                  
+
+.. image:: ringqt_shot49.jpg
+       :alt: Ring Notepad - The Main Window
+
+.. Note:: the functions pDebug(), pRun() and pRunNoConsole() in the previous sample are not portable!
+         They are written in this sample for MS-Windows and we can update them for other operating systems.
+
+
+.. index:: 
+       pair: Demo Programs; The Cards Game
+         
+.. index:: 
+       pair: Desktop and Mobile Development; The Cards Game
+
+The Cards Game
+==============
+
+In the next example we will see a simple Cards game developed using RingQt
+
+Each player get 5 cards, the cards are unknown to any one. each time one player click on one card
+to see it. if the card is identical to another card the play get point for each card.
+if the card value is "5" the player get points for all visible cards.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       nScale = 1
+
+       app1 = new qApp
+
+       mypic = new QPixmap("cards.jpg")
+
+       mypic2 = mypic.copy(0,(124*4)+1,79,124)
+       Player1EatPic = mypic.copy(80,(124*4)+1,79,124)
+       Player2EatPic= mypic.copy(160,(124*4)+1,79,124)
+
+       aMyCards = []
+       aMyValues = []
+       for x1 = 0 to 3
+               for y1 = 0 to 12
+                 temppic = mypic.copy((79*y1)+1,(124*x1)+1,79,124)
+                         aMyCards + temppic
+                         aMyValues + (y1+1)
+               next
+       next
+
+       nPlayer1Score = 0   nPlayer2Score=0
+
+       do
+               Page1 = new Game
+               Page1.Start()
+       again Page1.lnewgame
+
+       mypic.delete()
+       mypic2.delete()
+       Player1EatPic.delete()
+       Player2EatPic.delete()
+
+       for t in aMyCards
+                 t.delete()
+       next
+
+       func gui_setbtnpixmap pBtn,pPixmap
+               pBtn {
+                       setIcon(new qicon(pPixmap.scaled(width(),height(),0,0)))
+                       setIconSize(new QSize(width(),height()))
+               }
+
+       Class Game
+               
+               nCardsCount = 10
+               win1 layout1 label1 label2 layout2 layout3 aBtns aBtns2
+               aCards nRole=1 aStatus = list(nCardsCount) aStatus2 = aStatus
+               aValues        aStatusValues = aStatus  aStatusValues2 = aStatus
+               Player1EatPic   Player2EatPic
+               lnewgame = false
+               nDelayEat = 0.5
+               nDelayNewGame = 1
+
+               func start
+
+                       win1 = new qWidget() { 
+                               setwindowtitle("Five") 
+                               setstylesheet("background-color: White")
+                               showfullscreen()
+                       }
+               
+                       layout1 = new qvboxlayout()
+               
+                       label1 = new qlabel(win1) {
+                               settext("Player (1) - Score : " + nPlayer1Score)
+                               setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
+                               setstylesheet("color: White; background-color: Purple;
+                                                font-size:20pt")
+                               setfixedheight(200)
+                       }
+
+                       closebtn = new qpushbutton(win1)  {
+                               settext("Close Application")
+                               setstylesheet("font-size: 18px ; color : white ;
+                                                background-color: black ;")
+                               setclickevent("Page1.win1.close()")
+                       }
+               
+                       aCards = aMyCards
+                       aValues = aMyValues
+
+                       layout2 = new qhboxlayout()
+
+                       aBtns = []
+
+                       for x = 1 to nCardsCount
+                               aBtns + new qpushbutton(win1) 
+                               aBtns[x].setfixedwidth(79*nScale)
+                               aBtns[x].setfixedheight(124*nScale)
+                               gui_setbtnpixmap(aBtns[x],mypic2)
+                               layout2.addwidget(aBtns[x])
+                               aBtns[x].setclickevent("Page1.Player1click("+x+")")
+                       next
+
+                       layout1.addwidget(label1)       
+                       layout1.addlayout(layout2)
+
+                       label2 = new qlabel(win1) {
+                               settext("Player (2) - Score : " + nPlayer2Score)
+                               setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
+                               setstylesheet("color: white; background-color: red;
+                                                font-size:20pt")
+                               setfixedheight(200)
+                       }
+
+                       layout3 = new qhboxlayout()
+
+                       aBtns2 = []
+                       for x = 1 to nCardsCount
+                               aBtns2 + new qpushbutton(win1)
+                               aBtns2[x].setfixedwidth(79*nScale)
+                               aBtns2[x].setfixedheight(124*nScale)
+                               gui_setbtnpixmap(aBtns2[x],mypic2)
+                               layout3.addwidget(aBtns2[x])
+                               aBtns2[x].setclickevent("Page1.Player2click("+x+")")
+                       next
+
+                       layout1.addwidget(label2)
+                       layout1.addlayout(layout3)
+                       layout1.addwidget(closebtn)
+
+                       win1.setlayout(layout1)
+
+                       app1.exec()
+
+               Func Player1Click x
+                       if nRole = 1 and aStatus[x] = 0
+                               nPos = ((random(100)+clock())%(len(aCards)-1)) + 1
+                               gui_setbtnpixmap(aBtns[x],aCards[nPos])
+                               del(aCards,nPos)
+                               nRole = 2
+                               aStatus[x] = 1
+                               aStatusValues[x] = aValues[nPos]
+                               del(aValues,nPos)
+                               Player1Eat(x,aStatusValues[x])
+                               checknewgame()
+                       ok
+
+               Func Player2Click x
+                       if nRole = 2 and aStatus2[x] = 0
+                               nPos = ((random(100)+clock())%(len(aCards)-1)) + 1
+                               gui_setbtnpixmap(aBtns2[x],aCards[nPos])
+                               del(aCards,nPos)
+                               nRole = 1
+                               aStatus2[x] = 1
+                               aStatusValues2[x] = aValues[nPos]
+                               del(aValues,nPos)
+                               Player2Eat(x,aStatusValues2[x])
+                               checknewgame()
+                       ok
+
+               Func Player1Eat nPos,nValue
+
+                        app1.processEvents()
+
+                        delay(nDelayEat)
+                        lEat = false
+                        for x = 1 to nCardsCount
+                                if aStatus2[x] = 1 and (aStatusValues2[x] = nValue or nValue=5)
+                                       aStatus2[x] = 2
+                                       gui_setbtnpixmap(aBtns2[x],Player1EatPic)
+                                       lEat = True
+                                       nPlayer1Score++
+                                ok
+                                if (x != nPos) and (aStatus[x] = 1) and 
+                                       (aStatusValues[x] = nValue or nValue=5)
+                                       aStatus[x] = 2
+                                       gui_setbtnpixmap(aBtns[x],Player1EatPic)
+                                       lEat = True
+                                       nPlayer1Score++
+                                ok
+                        next
+                        if lEat
+                                       nPlayer1Score++
+                                       gui_setbtnpixmap(aBtns[nPos],Player1EatPic)
+                                       aStatus[nPos] = 2
+                                       label1.settext("Player (1) - Score : " + nPlayer1Score)
+                        ok
+
+               Func Player2Eat nPos,nValue
+
+                        app1.processEvents()
+
+                        delay(nDelayEat)
+                        lEat = false
+                        for x = 1 to  nCardsCount
+                                if aStatus[x] = 1 and (aStatusValues[x] = nValue or nValue = 5)
+                                       aStatus[x] = 2
+                                       gui_setbtnpixmap(aBtns[x],Player2EatPic)
+                                       lEat = True
+                                       nPlayer2Score++
+                                ok
+
+                                if (x != nPos) and (aStatus2[x] = 1) and
+                                       (aStatusValues2[x] = nValue or nValue=5 )
+                                       aStatus2[x] = 2
+                                       gui_setbtnpixmap(aBtns2[x],Player2EatPic)
+                                       lEat = True
+                                       nPlayer2Score++
+                                ok
+                        next
+                        if lEat
+                                       nPlayer2Score++
+                                       gui_setbtnpixmap(aBtns2[nPos],Player2EatPic)
+                                       aStatus2[nPos] = 2
+                                       label2.settext("Player (2) - Score : " + nPlayer2Score)
+                        ok
+
+               Func checknewgame
+                       if isnewgame()
+                                         lnewgame = true
+
+                                         if nPlayer1Score > nPlayer2Score
+                                                label1.settext("Player (1) Wins!!!")
+                                         ok
+                                         if nPlayer2Score > nPlayer1Score
+                                                label2.settext("Player (2) Wins!!!")
+                                         ok
+
+                                         app1.processEvents()
+                                         delay(nDelayNewGame)
+
+                                         win1.delete()
+                                         app1.quit()
+                       ok
+
+               Func isnewgame
+                       for t in aStatus
+                               if t = 0
+                                       return false
+                               ok
+                       next
+                       for t in aStatus2
+                               if t = 0
+                                       return false
+                               ok
+                       next
+                       return true
+
+               Func delay x
+               nTime = x * 1000
+               oTest = new qTest
+               oTest.qsleep(nTime)
+
+The application during the runtime
+                       
+.. image:: ringqt_shot48.jpg
+       :alt: The Cards Game
+
+.. note:: in the previous screen shot the player get the card number '5' but his score
+       is not increased because he opened this card while no other cards are visible!
+
+The next screen shot while running the game using a Mobile (Android)
+
+.. image:: ringqt_shot52.jpg
+       :alt: The Cards Game
+
+.. note:: using Qt we can run the same application on other Mobile systems 
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; Classes and their Methods to use the default events
+
+
+Classes and their Methods to use the default events
+===================================================
+
+The next table present the class name and the methods that we have to use the default events.
+
+============================== ===========================================================
+Class Name                     Methods to use the default Events
+============================== ===========================================================
+QPushButton                    SetClickEvent()
+QAction                                SetClickEvent()
+QLineEdit                      SetTextChangedEvent()
+..                             SetCursorPositionChangedEvent()
+..                             SetEditingFinishedEvent()
+..                             SetReturnPressedEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTextEditedEvent()
+QTextEdit                      SetCopyAvailableEvent()
+..                             SetCurrentCharFormatChangedEvent()
+..                             SetCursorPositionChangedEvent()
+..                             SetRedoAvailableEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTextChangedEvent()
+..                             SetUndoAvailableEvent()
+QListWidget                    SetCurrentItemChangedEvent()
+..                             SetCurrentRowChangedEvent()
+..                             SetCurrentTextChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QTreeView                      SetCollapseEvent()
+..                             SetExpandedEvent()
+..                             SetActivatedEvent()
+..                             SetClickedEvent()
+..                             SetDoubleClickedEvent()
+..                             SetEnteredEvent()
+..                             SetPressedEvent()
+..                             SetViewportEnteredEvent()
+QTreeWidget                    SetCollapsedEvent()
+..                             SetExpandedEvent()
+..                             SetActivatedEvent()
+..                             SetClickedEvent()
+..                             SetDoubleClickedEvent()
+..                             SetEnteredEvent()
+..                             SetPressedEvent()
+..                             SetViewportEnteredEvent()
+..                             SetCurrentItemChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemCollapsedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemExpandedEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QComboBox                      SetActivatedEvent()
+..                             SetCurrentIndexChangedEvent()
+..                             SetEditTextChangedEvent()
+..                             SetHighlightedEvent()
+QTabWidget                     SetCurrentChangedEvent()
+..                             SetTabCloseRequestedEvent()
+QTableWidget                   SetCellActivatedEvent()
+..                             SetCellChangedEvent()
+..                             SetCellClickedEvent()
+..                             SetCellDoubleClickedEvent()
+..                             SetCellEnteredEvent()
+..                             SetCellPressedEvent()
+..                             SetCurrentCellChangedEvent()
+..                             SetCurrentItemChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QProgressBar                   SetValueChangedEvent()
+QSpinBox                       SetValueChangedEvent()
+QSlider                        SetActionTriggeredEvent()
+..                             SetRangeChangedEvent()
+..                             SetSliderMovedEvent()
+..                             SetSliderPressedEvent()
+..                             SetSliderReleasedEvent()
+..                             SetValueChangedEvent()
+QDial                          SetActionTriggeredEvent()
+..                             SetRangeChangedEvent()
+..                             SetSliderMovedEvent()
+..                             SetSliderPressedEvent()
+..                             SetSliderReleasedEvent()
+..                             SetValueChangedEvent()
+QWebView                       SetLoadFinishedEvent()
+..                             SetLoadProgressEvent()
+..                             SetLoadStartedEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTitleChangedEvent()
+..                             SetUrlChangedEvent()
+QCheckBox                      SetStateChangedEvent()
+..                             SetClickedEvent()
+..                             SetPressedEvent()
+..                             SetReleasedEvent()
+..                             SetToggledEvent()
+QRadioButton                   SetClickedEvent()
+..                             SetPressedEvent()
+..                             SetReleasedEvent()
+..                             SetToggledEvent()
+QButtonGroup                   SetButtonClickedEvent()
+..                             SetButtonPressedEvent()
+..                             SetButtonReleasedEvent()
+QVideoWidget                   SetBrightnessChangedEvent()
+..                             SetContrastChangedEvent()
+..                             SetFullScreenChangedEvent()
+..                             SetHueChangedEvent()
+..                             SetSaturationChangedEvent()
+QTimer                                 SetTimeoutEvent()
+QTcpServer                     SetAcceptErrorEvent()
+..                             SetNewConnectionEvent()
+QIODevice                      SetAboutToCloseEvent()
+..                             SetBytesWrittenEvent()
+..                             SetReadChannelFinishedEvent()
+..                             SetReadyReadEvent()
+QAbstractSocket                SetConnectedEvent()
+..                             SetDisconnectedEvent()
+..                             SetErrorEvent()
+..                             SetHostFoundEvent()
+..                             SetProxyAuthenticationRequiredEvent()
+..                             SetStateChangedEvent()
+QTcpSocket                     SetConnectedEvent()
+..                             SetDisconnectedEvent()
+..                             SetErrorEvent()
+..                             SetHostFoundEvent()
+..                             SetProxyAuthenticationRequiredEvent()
+..                             SetStateChangedEvent()
+..                             SetAboutToCloseEvent()
+..                             SetBytesWrittenEvent()
+..                             SetReadChannelFinishedEvent()
+..                             SetReadyReadEvent()
+QColorDialog                   SetColorSelectedEvent()
+..                             SetCurrentColorChangedEvent()
+QNetworkAccessManager          SetFinishedEvent()
+QThread                                SetStartedEvent()
+..                             SetFinishedEvent()
+============================== ===========================================================
+
+.. index:: 
+       pair: Desktop and Mobile Development; Methods to use Events with Events Filter 
+
+Methods to use Events with Events Filter 
+========================================
+
+RingQt define a new class called QAllEvents that help you in using Events Filter
+
+The next table presents the methods that we have
+
+================================       ======================
+Methods to get parameters              Class Name
+================================       ======================
+getKeyCode()   --> Number              QAllEvents
+getx()         --> Number
+gety()         --> Number
+getglobalx()   --> Number
+getglobaly()   --> Number
+getbutton()    --> Number
+getbuttons()   --> Number
+================================       ======================
+
+The next table presents the methods that we have to use events.
+
+===================================================    ======================
+Method Name                                            Class Name
+===================================================    ======================
+setKeyPressEvent(cEvent)                               QAllEvents
+setMouseButtonPressEvent(cEvent)
+setMouseButtonReleaseEvent(cEvent)
+setMouseButtonDblClickEvent(cEvent)
+setMouseMoveEvent(cEvent)
+setCloseEvent(cEvent)
+setContextMenuEvent(cEvent)
+setDragEnterEvent(cEvent)
+setDragLeaveEvent(cEvent)
+setDragMoveEvent(cEvent)
+setDropEvent(cEvent)
+setEnterEvent(cEvent)
+setFocusInEvent(cEvent)
+setFocusOutEvent(cEvent)
+setKeyReleaseEvent(cEvent)
+setLeaveEvent(cEvent)
+setNonClientAreaMouseButtonDblClickEvent(cEvent)
+setNonClientAreaMouseButtonPressEvent(cEvent)
+setNonClientAreaMouseButtonReleaseEvent(cEvent)
+setNonClientAreaMouseMoveEvent(cEvent)
+setMoveEvent(cEvent)
+setResizeEvent(cEvent)
+setWindowActivateEvent(cEvent)
+setWindowBlockedEvent(cEvent)
+setWindowDeactivateEvent(cEvent)
+setWindowStateChangeEvent(cEvent)
+setWindowUnblockedEvent(cEvent)
+===================================================    ======================
+
+.. index:: 
+       pair: Desktop and Mobile Development; The Difference between Qt and RingQt
+
+The Difference between Qt and RingQt
+====================================
+
+(1) RingQt use simple methods to set the code that will be executed for events.
+
+Syntax:
+
+.. code-block:: none
+
+       Set<Event_Name>Event(cEventCode)
+       
+(2) RingQt change the name of some methods to avoid conflict with Ring Keywords.
+
+The next table present these little changes
+
+===============================                ======================          ===================
+Class Name                             Qt Method Name                  RingQt Method Name
+===============================                ======================          ===================
+QWebView                               load                            loadpage
+QMediaPlaylist                         load                            loadfile
+QMediaPlaylist                         next                            movenext
+QPainter                               end                             endpaint
+QPicture                               load                            loadfile
+QLineEdit                              end                             endtext
+QDialog                                        done                            donedialog
+QTextDocument                          end                             enddoc
+QTextBlock                             next                            nextblock
+QSqlQuery                              next                            movenext
+QImage                                 load                            loadimage
+QNetworkAccessManager                  get                             getvalue
+QNetworkAccessManager                  put                             putvalue
+QThread                                        exit                            exitfromthread
+QRegularExpressionMatchIterator                next                            nextitem
+QCamera                                        load                            loadcamera
+===============================                ======================          ===================
+
+.. index:: 
+       pair: Desktop and Mobile Development; RingQt Classes and their Qt Documentation
+
+RingQt Classes and their Qt Documentation
+=========================================
+
+Qt Documentation : http://doc.qt.io/qt-5/classes.html
+
+See the "RingQt Classes and Methods Reference" chapter for supported classes and methods.
+
+
+.. index:: 
+       pair: Desktop and Mobile Development; New Classes names - Index Start from 1
+
+New Classes names - Index Start from 1
+======================================
+
+We added new classes to RingQt - another version of classes where the class names doesn't start with the "q" letter
+Also updated methods so the index start from 1 when we deal with the GUI controls like
+
+* ComboBox
+* ListWidget
+* TableWidget
+* TreeWidget
+
+These classes are inside guilib.ring under the package name : System.GUI
+
+To use it
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       import System.GUI
+
+This doesn't have any effect on our previous code, It's just another choice for better code that is consistent with Ring rules.
+
+Also the form designer is updated to provide us the choice between using classes where (index start from 0) or (index start from 1)
+
+Example  (Uses the Form Designer)
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartController.ring 
+
+.. index:: 
+       pair: Desktop and Mobile Development; Creating Reports using the WebLib and the GUILib
+
+
+Creating Reports using the WebLib and the GUILib 
+================================================
+
+The WebLib comes with a class called HtmlPage
+
+Using this class we can create reports quickly using WebLib & GUILib together
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+       load "guilib.ring"
+
+       import System.Web
+       import System.GUI
+
+       new qApp {
+               open_window(:CustomersReportController)
+               exec()
+       }
+
+       class CustomersReportController
+
+               oView = new CustomersReportView
+
+               func Start
+                       CreateReport()
+
+               func CreateReport
+                       mypage = new HtmlPage {
+                               h1 { text("Customers Report") }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(4)
+                                       TR
+                                       {
+                                               TD { WIDTH="10%" 
+                                                       text("Customers Count : " )  }
+                                               TD { text (100) }
+                                       }
+                               }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(26)
+                                       TR
+                                       {
+                                               style = stylewidth("100%") +
+                                                       stylegradient(24)
+                                               TD { text("Name " )  }
+                                               TD { text("Age" ) }
+                                               TD { text("Country" ) }
+                                               TD { text("Job" ) }     
+                                               TD { text("Company" ) }
+                                       }
+                                       for x =  1 to 100
+                                               TR
+                                               {
+                                                       TD { text("Test" )  }
+                                                       TD { text("30" ) }
+                                                       TD { text("Egypt" ) }
+                                                       TD { text("Sales" ) }   
+                                                       TD { text("Future" ) }
+                                               }
+                                       next
+                               }
+                       }
+                       write("report.html",mypage.output())
+
+               func PrintEvent
+                       printer1 = new qPrinter(0) {
+                               setoutputformat(1)
+                               setoutputfilename("report.pdf")
+                       }
+                       oView {
+                               web.print(printer1)
+                               web.show()
+                       }
+                       system ("report.pdf")
+
+       class CustomersReportView
+
+                       win = new window() {
+                                       setwindowtitle("Report Window")
+                                       setgeometry(100,100,500,500)
+                                       web = new webview(win) {
+                                               setgeometry(100,100,1000,500)
+                                               loadpage(new qurl("file:///"+
+                                               currentdir()+"/report.html"))
+                                       }
+                                       new pushbutton(win) {
+                                                       setGeometry(100,20,100,30)
+                                                       settext("Print")
+                                                       setclickevent(Method(:PrintEvent))
+                                       }
+                                       showMaximized()
+                               }
+
+Screen Shot:
+
+.. image:: ring15reportshot.png
+       :alt: Customers Report
+
diff --git a/docs/en/target/qt3d.txt b/docs/en/target/qt3d.txt
new file mode 100644 (file)
index 0000000..0130079
--- /dev/null
@@ -0,0 +1,1788 @@
+.. index:: 
+       Single: Using Qt3D; Using Qt3D
+
+==========
+Using Qt3D
+==========
+
+In this chapter we will learn how to use Qt3D through many samples.
+
+
+.. index:: 
+       pair: Using Qt3D; Drawing Cube
+
+Drawing Cube
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oCubeMaterial = new QPhongMaterial(oCube)
+               oCubeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cube") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex1.png
+       :alt: Qt3D Example - Drawing Cube
+
+
+.. index:: 
+       pair: Using Qt3D; Drawing Torus
+
+Drawing Torus
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oTorus = new  QTorusMesh(oRootEntity)
+                       oTorus.setRadius(1.0)
+                       oTorus.setMinorRadius(0.4)
+                       oTorus.setRings(100)
+                       oTorus.setSlices(20)
+
+               oTorusTransform = new  QTransform(oTorus)
+               oTorusTransform.setScale(2)
+               oTorusTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTorusMaterial = new QPhongMaterial(oTorus)
+               oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oTorusEntity = new QEntity(oRootEntity)
+               oTorusEntity.addComponent(oTorus)
+               oTorusEntity.addComponent(oTorusMaterial)
+               oTorusEntity.addComponent(oTorusTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Torus") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex2.png
+       :alt: Qt3D Example - Drawing Torus
+
+.. index:: 
+       pair: Using Qt3D; Drawing Sphere
+
+Drawing Sphere
+==============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oSphere = new  QSphereMesh(oRootEntity)
+                       oSphere.setRadius(1.0)
+                       oSphere.setRings(100)
+                       oSphere.setSlices(20)
+
+               oSphereTransform = new  QTransform(oSphere)
+               oSphereTransform.setScale(2)
+               oSphereTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oSphereMaterial = new QPhongMaterial(oSphere)
+               oSphereMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oSphereEntity = new QEntity(oRootEntity)
+               oSphereEntity.addComponent(oSphere)
+               oSphereEntity.addComponent(oSphereMaterial)
+               oSphereEntity.addComponent(oSphereTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Sphere") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex3.png
+       :alt: Qt3D Example - Drawing Sphere
+
+.. index:: 
+       pair: Using Qt3D; Drawing Cylinder
+
+Drawing Cylinder
+================
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oCylinder = new  QCylinderMesh(oRootEntity)
+                       oCylinder.setRadius(1)
+                       oCylinder.setRings(100)
+                       oCylinder.setSlices(20)
+               oCylinder.setLength(5)
+
+               oCylinderTransform = new  QTransform(oCylinder)
+               oCylinderTransform.setScale(2)
+               oCylinderTransform.setTranslation(new QVector3D(1, 0, 3))
+
+               oCylinderMaterial = new QPhongMaterial(oCylinder)
+               oCylinderMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oCylinderEntity = new QEntity(oRootEntity)
+               oCylinderEntity.addComponent(oCylinder)
+               oCylinderEntity.addComponent(oCylinderMaterial)
+               oCylinderEntity.addComponent(oCylinderTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cylinder") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex4.png
+       :alt: Qt3D Example - Drawing Cylinder
+
+.. index:: 
+       pair: Using Qt3D; Drawing Cone
+
+Drawing Cone
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oCone = new  QConeMesh(oRootEntity)
+                       oCone.setRings(100)
+                       oCone.setSlices(20)
+               oCone.setLength(5)
+
+               oConeTransform = new  QTransform(oCone)
+               oConeTransform.setScale(2)
+               oConeTransform.setTranslation(new QVector3D(1, 0, 3))
+
+               oConeMaterial = new QPhongMaterial(oCone)
+               oConeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oConeEntity = new QEntity(oRootEntity)
+               oConeEntity.addComponent(oCone)
+               oConeEntity.addComponent(oConeMaterial)
+               oConeEntity.addComponent(oConeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cone") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex5.png
+       :alt: Qt3D Example - Drawing Cone
+
+.. index:: 
+       pair: Using Qt3D; Drawing Plane
+
+Drawing Plane
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oPlane = new  QPlaneMesh(oRootEntity)
+               oPlane.setHeight(5)
+               oPlane.setWidth(5)
+               oPlane.setmeshresolution(new qSize(10,10))
+
+               oPlaneTransform = new  QTransform(oPlane)
+               oPlaneTransform.setScale(2)
+               oPlaneTransform.setTranslation(new QVector3D(0, -4, 4))
+
+               oPlaneMaterial = new QPhongMaterial(oPlane)
+               oPlaneMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oPlaneEntity = new QEntity(oRootEntity)
+               oPlaneEntity.addComponent(oPlane)
+               oPlaneEntity.addComponent(oPlaneMaterial)
+               oPlaneEntity.addComponent(oPlaneTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Plane") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex6.png
+       :alt: Qt3D Example - Drawing Plane
+
+       
+.. index:: 
+       pair: Using Qt3D; Texture
+
+Texture
+=======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Adding Texture") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex7.png
+       :alt: Qt3D Example - Texture
+
+.. index:: 
+       pair: Using Qt3D; Key Press
+
+Key Press
+=========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+                       oFilter = new qallevents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Moving Cube using the Keyboard") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               oContainer.setfocus(0)
+
+               exec()
+       }
+
+       func pKeyPress
+               nKey = oFilter.getkeycode()
+               oX = oCubeTransform.translation().x()
+               oY = oCubeTransform.translation().y() 
+               oZ = oCubeTransform.translation().z()
+               switch nKey
+                       on Qt_Key_Right
+                               oX++
+                       on Qt_Key_Left
+                               oX--
+                       on Qt_Key_Up
+                               oY++
+                       on Qt_Key_Down
+                               oY--
+               off
+               oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
+
+.. image:: qt3d_ex8.png
+       :alt: Qt3D Example - Key Press
+
+
+.. index:: 
+       pair: Using Qt3D; Object Picker
+
+Object Picker
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+                       oFilter = new qallevents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oPicker = new qObjectPicker(oCube) {
+                       setclickedevent("pClick()")
+               }
+               oCubeEntity.addComponent(oPicker)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Object Picker - Click on the Cube") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               oContainer.setfocus(0)
+
+               exec()
+       }
+
+       func pKeyPress
+               nKey = oFilter.getkeycode()
+               oX = oCubeTransform.translation().x()
+               oY = oCubeTransform.translation().y() 
+               oZ = oCubeTransform.translation().z()
+               switch nKey
+                       on Qt_Key_Right
+                               oX++
+                       on Qt_Key_Left
+                               oX--
+                       on Qt_Key_Up
+                               oY++
+                       on Qt_Key_Down
+                               oY--
+               off
+               oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
+
+       func pClick
+               msginfo("Event","Click")
+               oContainer.setfocus(0)
+
+
+.. image:: qt3d_ex9.png
+       :alt: Qt3D Example - Object Picker
+
+.. index:: 
+       pair: Using Qt3D; Frame Action
+
+Frame Action
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(1)
+                       setYextent(1)
+                       setZextent(1)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(-5, -5, -5))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               nAngle=0        nSpeed=0.1
+               oFrameAction = new qFrameAction(oRootEntity) {
+                       settriggeredevent("pEvent()")
+               }
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Frame Action") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+       func pEvent
+
+               # Move the Cube
+                       oX = oCubeTransform.translation().x()
+                       oY = oCubeTransform.translation().y() 
+                       oZ = oCubeTransform.translation().z()
+                       if oX >= 4
+                               nSpeed=-0.1
+                       but oX <= -10
+                               nSpeed=0.1
+                       ok
+                       oCubeTransform.setTranslation(
+                               new QVector3D(oX+nSpeed, oY+nSpeed, oZ+nSpeed))
+
+               # Rotate the Cube
+                       nAngle+=5  if nAngle=360  nAngle=0 ok
+                       oQ = new QQuaternion(0,0,0,0)
+                       oCubeTransform.setRotation(
+                               oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), nAngle))
+
+.. image:: qt3d_ex10.png
+       :alt: Qt3D Example - Frame Action
+
+.. index:: 
+       pair: Using Qt3D; Text 2D
+
+Text 2D
+=======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+
+               oText2DEntity = new  QText2DEntity(oRootEntity) {
+                       setText("Ring programming language")
+                       setWidth(400) setHeight(40)
+                       setColor(new QColor() {setRGB(128,128,128,255)})
+               }
+
+               oText2DTransform = new  QTransform(oText2DEntity)
+               oText2DTransform.setScale(0.1)
+               oText2DTransform.setTranslation(new QVector3D(-10.5, -5, 0))
+
+               oText2DEntity.addComponent(oText2DTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Text2D") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+
+.. image:: qt3d_ex11.png
+       :alt: Qt3D Example - Text 2D
+
+       
+.. index:: 
+       pair: Using Qt3D; Extruded Text 
+
+Extruded Text 
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oTextEntity = new QEntity(oRootEntity)
+
+               oTextMesh = new  QExtrudedTextMesh(oTextEntity) {
+                       setText("Ring")
+               }
+
+               oTextTransform = new  QTransform(oTextEntity)
+               oTextTransform.setScale(3)
+               oTextTransform.setTranslation(new QVector3D(-5.5, -4, 3))
+
+               oTextMaterial = new QPhongMaterial(oTextEntity);
+               oTextMaterial.setDiffuse(new QColor() {setRGB(0,0,255,255)})
+               
+               oTextEntity.addComponent(oTextMesh)
+               oTextEntity.addComponent(oTextTransform)
+               oTextEntity.addComponent(oTextMaterial)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Extruded Text") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex12.png
+       :alt: Qt3D Example - Extruded Text 
+
+       
+.. index:: 
+       pair: Using Qt3D; Model
+
+Model
+=====
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/lucky_cat.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.1)
+               oModelTransform.setTranslation(new QVector3D(0, 0, 0))
+               oQ = new QQuaternion(0,0,0,0)
+               oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), 180))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelmaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model (Obj File)") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+
+.. image:: qt3d_ex13.png
+       :alt: Qt3D Example - Model
+
+.. index:: 
+       pair: Using Qt3D; Model Texture 
+
+Model Texture 
+=============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 25, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.5)
+               oModelTransform.setTranslation(new QVector3D(0, 12, 4))
+
+               oLoader = new  QTextureLoader(oModel)
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/Robot.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model Texture") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex14.png
+       :alt: Qt3D Example - Model Texture 
+
+       
+.. index:: 
+       pair: Using Qt3D; Draw Office 
+
+Draw Office
+===========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Reception_Table.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(1)
+               oModelTransform.setTranslation(new QVector3D(0, -2.5, 16))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelmaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model (Obj File) - Office") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex15.png
+       :alt: Qt3D Example - Draw Office 
+
+.. index:: 
+       pair: Using Qt3D; Many Objects
+
+Many Objects
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.2)
+               oModelTransform.setTranslation(new QVector3D(0, 10, 10))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+
+               oLoader = new  QTextureLoader(oModel);
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               for n = 1 to 10
+
+                       oTorus = new  QTorusMesh(oRootEntity)
+                               oTorus.setRadius(1.0*n)
+                               oTorus.setMinorRadius(0.4*n)
+                               oTorus.setRings(100)
+                               oTorus.setSlices(20)
+               
+                       oTorusTransform = new  QTransform(null)
+                       oTorusTransform.setScale(2)
+                       oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
+               
+                       oTorusMaterial = new QPhongMaterial(null);
+                       oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+               
+                       oTorusEntity = new QEntity(oRootEntity)
+                       oTorusEntity.addComponent(oTorus)
+               
+                       oLoader = new  QTextureLoader(oTorus);
+                       oTorusMaterial = new QTextureMaterial(oTorus)
+                       oLoader.setSource(
+                               new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+                       oTorusMaterial.setTexture(oLoader)
+               
+                       oTorusEntity.addComponent(oTorusMaterial)
+                       oTorusEntity.addComponent(oTorusTransform)
+               next
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Many Objects") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex16.png
+       :alt: Qt3D Example - Many Objects 
+
+.. index:: 
+       pair: Using Qt3D; Camera
+
+Camera
+======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.2)
+               oModelTransform.setTranslation(new QVector3D(0, 10, 10))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+
+               oLoader = new  QTextureLoader(oModel);
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               for n = 1 to 10
+
+                       oTorus = new  QTorusMesh(oRootEntity)
+                               oTorus.setRadius(1.0*n)
+                               oTorus.setMinorRadius(0.4*n)
+                               oTorus.setRings(100)
+                               oTorus.setSlices(20)
+               
+                       oTorusTransform = new  QTransform(null)
+                       oTorusTransform.setScale(2)
+                       oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
+               
+                       oTorusMaterial = new QPhongMaterial(null);
+                       oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+               
+                       oTorusEntity = new QEntity(oRootEntity)
+                       oTorusEntity.addComponent(oTorus)
+               
+                       oLoader = new  QTextureLoader(oTorus);
+                       oTorusMaterial = new QTextureMaterial(oTorus)
+                       oLoader.setSource(
+                               new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+                       oTorusMaterial.setTexture(oLoader)
+               
+                       oTorusEntity.addComponent(oTorusMaterial)
+                       oTorusEntity.addComponent(oTorusTransform)
+               next
+
+               oView.setRootEntity(oRootEntity)
+
+
+               btn1 = new qPushButton(oWidget) {
+                       setText("Move the Camera and the Robot") setClickEvent("pMove()") 
+               }
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+               oLayout.AddWidget(btn1)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Camera") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+       func pMove 
+
+               oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(20, 15, 20))
+
+               oModelTransform.setTranslation(new QVector3D(20, 15, 20))
+               oQ = new QQuaternion(0,0,0,0)
+               oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(1, 1, 0), 270))
+
+
+.. image:: qt3d_ex17.png
+       :alt: Qt3D Example - Camera
+
+       
+.. index:: 
+       pair: Using Qt3D; Scene 
+
+Scence 
+======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oWidget = new QWidget()
+
+               oView = new Qt3DWindow() 
+               oView.defaultFrameGraph().setClearColor(new QColor() {setRGB(0,0,0,255)})
+
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000)
+               oCameraEntity.setPosition(new QVector3D(-13.34, -6.43, 16.47))
+                       oCameraEntity.setUpVector(new QVector3D(0.02, 0, 1))
+                       oCameraEntity.setViewCenter(new QVector3D(-13.34, 17.05, 15.42))        
+
+               oCameraController = new  QFirstPersonCameraController(oRootEntity)
+               oCameraController.setCamera(oCameraEntity)
+               oCameraController.setEnabled(False)
+
+               oLongRoomEntity = new QEntity(oRootEntity)
+
+               oLongRoomModel = new QMesh(oLongRoomEntity)
+
+               oLongRoomModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Long_Room.obj") ) 
+
+               oLongRoomTransform = new  QTransform(oLongRoomEntity)
+               oLongRoomTransform.setScale(1)
+               oLongRoomTransform.setTranslation(new QVector3D(5, 0, 15))
+
+               oLongRoomLoader = new  QTextureLoader(oLongRoomModel)
+               oLongRoomMaterial = new QTextureMaterial(oLongRoomModel)
+               oLongRoomLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/croc.jpg") )
+               oLongRoomMaterial.setTexture(oLongRoomLoader)
+
+               oLongRoomEntity.addComponent(oLongRoomModel)
+               oLongRoomEntity.addComponent(oLongRoomMaterial)
+               oLongRoomEntity.addComponent(oLongRoomTransform)
+
+               oTableEntity = new QEntity(oRootEntity)
+
+               oTableModel = new QMesh(oTableEntity)
+               oTableModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Reception_Table.obj") ) 
+
+               oTableTransform = new  QTransform(oTableEntity)
+               oTableTransform.setScale(0.3)
+               oTableTransform.setTranslation(new QVector3D(5, 0, 15))
+               oQ = new QQuaternion(0,0,0,0)
+               oTableTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), -180))
+
+               oTableModelMaterial = new QPhongMaterial(oTableEntity)
+               oTableModelMaterial.setDiffuse(new QColor() {setRGB(255,255,255,255)})
+
+               oTableEntity.addComponent(oTableModel)
+               oTableEntity.addComponent(oTableModelmaterial)
+               oTableEntity.addComponent(oTableTransform)
+
+               oFirstLightEntity = new QEntity(oRootEntity)
+
+                       oFirstLight = new QPointLight(oFirstLightEntity)
+               oFirstLight.setColor(new qColor() { setRGB(128,128,128,128) })
+               oFirstLight.setIntensity(1)
+
+               oFirstLightTransform = new QTransform(oFirstLightEntity)
+               oFirstLightTransform.setTranslation(new QVector3D(5, 0, 20))
+
+               oFirstLightEntity.addComponent(oFirstLight)
+               oFirstLightEntity.addComponent(oFirstLightTransform)
+
+               aCats = list(5)
+               for n = 1 to 5
+               v = n * 0.1
+               aCats[n] = []
+               aCats[n][:oCatModelEntity] = new QEntity(oRootEntity)
+               aCats[n][:oCatModel] = new QMesh(aCats[n][:oCatModelEntity])
+               aCats[n][:oCatModel].setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Lucky_Cat.obj") ) 
+               aCats[n][:oCatModelMaterial] = new QPhongMaterial(aCats[n][:oCatModel])
+               aCats[n][:oCatModelMaterial].setDiffuse(
+                       new QColor() {setRGB(255,255,255,255)})
+               aCats[n][:oCatModelTransform] = new  QTransform(aCats[n][:oCatModelEntity])
+               aCats[n][:oCatModelTransform].setScale(0.01)
+               aCats[n][:oCatModelTransform].setTranslation(
+                       new QVector3D(-5*(v+v), 1, 15.2))
+               oQ = new QQuaternion(0,0,0,0)
+               aCats[n][:oCatModelTransform].setRotation(
+                       oQ.fromAxisAndAngle(
+                               new QVector3D(0, 1, 1), 180))
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModel])
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelmaterial])
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelTransform])
+               next
+
+               oSecondLightEntity = new QEntity(oRootEntity)
+
+               oSecondLight = new QPointLight(oSecondLightEntity)
+               oSecondLight.setColor(new qColor() { setRGB(255,255,255,255) })
+               oSecondLight.setIntensity(1)
+
+               oSecondLightTransform = new QTransform(oSecondLightEntity)
+               oSecondLightTransform.setTranslation(new QVector3D(-5, 1, 15.5))
+
+               oSecondLightEntity.addComponent(oSecondLight)
+               oSecondLightEntity.addComponent(oSecondLightTransform)
+
+               oRobotEntity = new QEntity(oRootEntity)
+
+               oRobotModel = new QMesh(oRobotEntity)
+               oRobotModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Fat_Robot.obj") ) 
+               oRobotTransform = new  QTransform(oRobotEntity)
+               oRobotTransform.setScale(0.006)
+               
+               robotX = -15
+               robotY = -2
+               robotZ = 15
+
+               oRobotTransform.setTranslation(new QVector3D(-15, -2, 15))
+               oQ = new QQuaternion(0,0,0,0)
+               oRobotTransform.setRotation(
+                       oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
+
+               oRobotMaterial = new QPhongMaterial(oRobotEntity)
+               oRobotMaterial.setDiffuse(new QColor() {setRGB(128,128,128,255)})
+
+               oRobotEntity.addComponent(oRobotModel)
+               oRobotEntity.addComponent(oRobotTransform)
+               oRobotEntity.addComponent(oRobotMaterial)
+
+               oView.setRootEntity(oRootEntity)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Scene") 
+                       showfullscreen() 
+               }
+
+               oContainer.resize(oWidget.width(),oWidget.height())
+
+                       oFilter = new QAllEvents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+               oContainer.setfocus(0)
+
+               exec()
+
+       }
+
+       func pKeyPress
+
+               nKey    = oFilter.getKeyCode()
+               nSpeed  = 0.1
+               cX      = oCameraEntity.position().x()
+               CY      = oCameraEntity.position().y()
+               cZ      = oCameraEntity.position().z()
+               cVCx    = oCameraEntity.viewCenter().x()
+               cVCy    = oCameraEntity.viewCenter().y()
+               cVCz    = oCameraEntity.viewCenter().z()
+
+               switch nKey
+                       on Qt_Key_Right
+                               if cX < 4.8
+                                       robotX+= nSpeed
+                                       oCameraEntity.setPosition(
+                                               new QVector3D(cX+0.1, cY, cZ))
+                                       oCameraEntity.setViewCenter(
+                                               new QVector3D(cVCx+nSpeed, cVCy, cVCz)) 
+                                       oRobotTransform.setRotation(
+                                               oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
+                               ok
+                       on Qt_Key_Left
+                               if cX > - 13.8
+                                       robotX-= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX-0.1, cY, cZ))
+                                       oCameraEntity.setViewCenter(
+                                         new QVector3D(cVCx-nSpeed, cVCy, cVCz))       
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 160))
+                               ok
+                       on Qt_Key_Down 
+                               if robotY > -3.5
+                                       robotY-= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX, cY, cZ))
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 190))
+                               ok
+                       on Qt_Key_Up
+                               if robotY < 2
+                                       robotY+= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX, cY, cZ))
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 180))
+                               ok
+                       on Qt_Key_Escape
+                               oWidget.close()
+               off
+
+               oRobotTransform.setTranslation(new QVector3D(robotX, robotY, robotZ))
+
+
+.. image:: qt3d_ex18.png
+       :alt: Qt3D Example - Scene
diff --git a/docs/en/target/qt3d_ex1.png b/docs/en/target/qt3d_ex1.png
new file mode 100644 (file)
index 0000000..224c9fd
Binary files /dev/null and b/docs/en/target/qt3d_ex1.png differ
diff --git a/docs/en/target/qt3d_ex10.png b/docs/en/target/qt3d_ex10.png
new file mode 100644 (file)
index 0000000..48bced9
Binary files /dev/null and b/docs/en/target/qt3d_ex10.png differ
diff --git a/docs/en/target/qt3d_ex11.png b/docs/en/target/qt3d_ex11.png
new file mode 100644 (file)
index 0000000..1aea68a
Binary files /dev/null and b/docs/en/target/qt3d_ex11.png differ
diff --git a/docs/en/target/qt3d_ex12.png b/docs/en/target/qt3d_ex12.png
new file mode 100644 (file)
index 0000000..62c447e
Binary files /dev/null and b/docs/en/target/qt3d_ex12.png differ
diff --git a/docs/en/target/qt3d_ex13.png b/docs/en/target/qt3d_ex13.png
new file mode 100644 (file)
index 0000000..79473f6
Binary files /dev/null and b/docs/en/target/qt3d_ex13.png differ
diff --git a/docs/en/target/qt3d_ex14.png b/docs/en/target/qt3d_ex14.png
new file mode 100644 (file)
index 0000000..3363405
Binary files /dev/null and b/docs/en/target/qt3d_ex14.png differ
diff --git a/docs/en/target/qt3d_ex15.png b/docs/en/target/qt3d_ex15.png
new file mode 100644 (file)
index 0000000..05a72a6
Binary files /dev/null and b/docs/en/target/qt3d_ex15.png differ
diff --git a/docs/en/target/qt3d_ex16.png b/docs/en/target/qt3d_ex16.png
new file mode 100644 (file)
index 0000000..dd249ef
Binary files /dev/null and b/docs/en/target/qt3d_ex16.png differ
diff --git a/docs/en/target/qt3d_ex17.png b/docs/en/target/qt3d_ex17.png
new file mode 100644 (file)
index 0000000..4480a8e
Binary files /dev/null and b/docs/en/target/qt3d_ex17.png differ
diff --git a/docs/en/target/qt3d_ex18.png b/docs/en/target/qt3d_ex18.png
new file mode 100644 (file)
index 0000000..2055743
Binary files /dev/null and b/docs/en/target/qt3d_ex18.png differ
diff --git a/docs/en/target/qt3d_ex2.png b/docs/en/target/qt3d_ex2.png
new file mode 100644 (file)
index 0000000..7f64f56
Binary files /dev/null and b/docs/en/target/qt3d_ex2.png differ
diff --git a/docs/en/target/qt3d_ex3.png b/docs/en/target/qt3d_ex3.png
new file mode 100644 (file)
index 0000000..899dd78
Binary files /dev/null and b/docs/en/target/qt3d_ex3.png differ
diff --git a/docs/en/target/qt3d_ex4.png b/docs/en/target/qt3d_ex4.png
new file mode 100644 (file)
index 0000000..fd28e78
Binary files /dev/null and b/docs/en/target/qt3d_ex4.png differ
diff --git a/docs/en/target/qt3d_ex5.png b/docs/en/target/qt3d_ex5.png
new file mode 100644 (file)
index 0000000..0e31f10
Binary files /dev/null and b/docs/en/target/qt3d_ex5.png differ
diff --git a/docs/en/target/qt3d_ex6.png b/docs/en/target/qt3d_ex6.png
new file mode 100644 (file)
index 0000000..ad789a3
Binary files /dev/null and b/docs/en/target/qt3d_ex6.png differ
diff --git a/docs/en/target/qt3d_ex7.png b/docs/en/target/qt3d_ex7.png
new file mode 100644 (file)
index 0000000..c8ab221
Binary files /dev/null and b/docs/en/target/qt3d_ex7.png differ
diff --git a/docs/en/target/qt3d_ex8.png b/docs/en/target/qt3d_ex8.png
new file mode 100644 (file)
index 0000000..9080d63
Binary files /dev/null and b/docs/en/target/qt3d_ex8.png differ
diff --git a/docs/en/target/qt3d_ex9.png b/docs/en/target/qt3d_ex9.png
new file mode 100644 (file)
index 0000000..84d8848
Binary files /dev/null and b/docs/en/target/qt3d_ex9.png differ
diff --git a/docs/en/target/qt3dex18.png b/docs/en/target/qt3dex18.png
new file mode 100644 (file)
index 0000000..2055743
Binary files /dev/null and b/docs/en/target/qt3dex18.png differ
diff --git a/docs/en/target/qtclassconvertor.png b/docs/en/target/qtclassconvertor.png
new file mode 100644 (file)
index 0000000..c71d150
Binary files /dev/null and b/docs/en/target/qtclassconvertor.png differ
diff --git a/docs/en/target/qtclassesdoc.txt b/docs/en/target/qtclassesdoc.txt
new file mode 100644 (file)
index 0000000..a8102cf
--- /dev/null
@@ -0,0 +1,11381 @@
+.. index:: 
+     single: RingQt Classes Reference; Introduction
+
+========================
+RingQt Classes Reference
+========================
+
+
+.. index::
+       pair: RingQt Classes Reference; CodeEditor Class
+
+CodeEditor Class
+================
+
+
+Parameters : QWidget *
+
+
+Parent Class : QPlainTextEdit
+
+* void setCompleter(QCompleter *c)
+* QCompleter *completer(void)
+* void setLineNumbersAreaColor(QColor oColor)
+* void setLineNumbersAreaBackColor(QColor oColor)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractAspect Class
+
+QAbstractAspect Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qabstractaspect.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* void scheduleSingleShotJob(Qt3DCore::QAspectJobPtr job)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractButton Class
+
+QAbstractButton Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractbutton.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool autoExclusive(void)
+* bool autoRepeat(void)
+* int autoRepeatDelay(void)
+* int autoRepeatInterval(void)
+* QButtonGroup *group(void)
+* QIcon icon(void)
+* QSize iconSize(void)
+* bool isCheckable(void)
+* bool isChecked(void)
+* bool isDown(void)
+* void setAutoExclusive(bool)
+* void setAutoRepeat(bool)
+* void setAutoRepeatDelay(int)
+* void setAutoRepeatInterval(int)
+* void setCheckable(bool)
+* void setDown(bool)
+* void setIcon(QIcon)
+* void setShortcut(QKeySequence)
+* void setText(QString)
+* QKeySequence shortcut(void)
+* QString text(void)
+* void animateClick(int msec)
+* void click(void)
+* void setChecked(bool)
+* void setIconSize(QSize)
+* void toggle(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractCameraController Class
+
+QAbstractCameraController Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qabstractcameracontroller.html
+
+
+Parent Class : QEntity
+
+* float acceleration(void)
+* Qt3DRender::QCamera * camera(void)
+* float deceleration(void)
+* float linearSpeed(void)
+* float lookSpeed(void)
+* void setAcceleration(float acceleration)
+* void setCamera(Qt3DRender::QCamera *camera)
+* void setDeceleration(float deceleration)
+* void setLinearSpeed(float linearSpeed)
+* void setLookSpeed(float lookSpeed)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractItemView Class
+
+QAbstractItemView Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractitemview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractScrollArea
+
+* bool alternatingRowColors(void)
+* int autoScrollMargin(void)
+* void closePersistentEditor(QModelIndex)
+* QModelIndex currentIndex(void)
+* int defaultDropAction(void)
+* int dragDropMode(void)
+* bool dragDropOverwriteMode(void)
+* bool dragEnabled(void)
+* int editTriggers(void)
+* bool hasAutoScroll(void)
+* int horizontalScrollMode(void)
+* QSize iconSize(void)
+* QModelIndex indexAt(QPoint)
+* QWidget *indexWidget(QModelIndex)
+* QAbstractItemDelegate *itemDelegate(QModelIndex)
+* QAbstractItemDelegate *itemDelegateForColumn(int column)
+* QAbstractItemDelegate *itemDelegateForRow(int row)
+* void keyboardSearch(QString)
+* QAbstractItemModel *model(void)
+* void openPersistentEditor(QModelIndex)
+* QModelIndex rootIndex(void)
+* void scrollTo(QModelIndex,QAbstractItemView::ScrollHint)
+* int selectionBehavior(void)
+* int selectionMode(void)
+* QItemSelectionModel *selectionModel(void)
+* void setAlternatingRowColors(bool enable)
+* void setAutoScroll(bool enable)
+* void setAutoScrollMargin(int margin)
+* void setDefaultDropAction(Qt::DropAction dropAction)
+* void setDragDropMode(QAbstractItemView::DragDropMode behavior)
+* void setDragDropOverwriteMode(bool overwrite)
+* void setDragEnabled(bool enable)
+* void setDropIndicatorShown(bool enable)
+* void setEditTriggers(QAbstractItemView::EditTrigger triggers)
+* void setHorizontalScrollMode(QAbstractItemView::ScrollMode mode)
+* void setIconSize(QSize)
+* void setIndexWidget(QModelIndex, QWidget *widget)
+* void setItemDelegate(QAbstractItemDelegate *delegate)
+* void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate)
+* void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)
+* void setModel(QAbstractItemModel *model)
+* void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
+* void setSelectionMode(QAbstractItemView::SelectionMode mode)
+* void setSelectionModel(QItemSelectionModel *selectionModel)
+* void setTabKeyNavigation(bool enable)
+* void setTextElideMode(Qt::TextElideMode mode)
+* void setVerticalScrollMode(QAbstractItemView::ScrollMode mode)
+* bool showDropIndicator(void)
+* int sizeHintForColumn(int column)
+* QSize sizeHintForIndex(QModelIndex)
+* int sizeHintForRow(int row)
+* bool tabKeyNavigation(void)
+* int textElideMode(void)
+* int verticalScrollMode(void)
+* QRect visualRect(QModelIndex)
+* void clearSelection(void)
+* void edit(QModelIndex)
+* void scrollToBottom(void)
+* void scrollToTop(void)
+* void setCurrentIndex(QModelIndex)
+* void update(QModelIndex)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractPrintDialog Class
+
+QAbstractPrintDialog Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractprintdialog.html
+
+
+Parameters : QPrinter *,QWidget *
+
+
+Parent Class : QDialog
+
+* int fromPage(void)
+* int maxPage(void)
+* int minPage(void)
+* QAbstractPrintDialog::PrintRange printRange(void)
+* QPrinter * printer(void)
+* void setFromTo(int from, int to)
+* void setMinMax(int min, int max)
+* void setOptionTabs(QList<QWidget *> tabs)
+* void setPrintRange(QAbstractPrintDialog::PrintRange range)
+* int toPage(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractScrollArea Class
+
+QAbstractScrollArea Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractscrollarea.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QFrame
+
+* void addScrollBarWidget(QWidget *widget, Qt::AlignmentFlag alignment)
+* QWidget *cornerWidget(void)
+* QScrollBar *horizontalScrollBar(void)
+* int horizontalScrollBarPolicy(void)
+* QSize maximumViewportSize(void)
+* QWidgetList scrollBarWidgets(Qt::AlignmentFlag)
+* void setCornerWidget(QWidget *widget)
+* void setHorizontalScrollBar(QScrollBar *scrollBar)
+* void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy)
+* void setVerticalScrollBar(QScrollBar *scrollBar)
+* void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy)
+* void setViewport(QWidget *widget)
+* QScrollBar *verticalScrollBar(void)
+* int verticalScrollBarPolicy(void)
+* QWidget *viewport(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractSlider Class
+
+QAbstractSlider Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractslider.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool hasTracking(void)
+* bool invertedAppearance(void)
+* bool invertedControls(void)
+* bool isSliderDown(void)
+* int maximum(void)
+* int minimum(void)
+* int orientation(void)
+* int pageStep(void)
+* void setInvertedAppearance(bool)
+* void setInvertedControls(bool)
+* void setMaximum(int)
+* void setMinimum(int)
+* void setPageStep(int)
+* void setSingleStep(int)
+* void setSliderDown(bool)
+* void setSliderPosition(int)
+* void setTracking(bool enable)
+* int singleStep(void)
+* int sliderPosition(void)
+* void triggerAction(QAbstractSlider::SliderAction action)
+* int value(void)
+* void setOrientation(Qt::Orientation)
+* void setRange(int min, int max)
+* void setValue(int)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractSocket Class
+
+QAbstractSocket Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractsocket.html
+
+
+Parameters : void
+
+
+Parent Class : QIODevice
+
+* void abort(void)
+* bool bind(QHostAddress address, int port, QAbstractSocket::BindFlag mode)
+* void connectToHost(QString  hostName, int port, QIODevice::OpenModeFlag openMode, QAbstractSocket::NetworkLayerProtocol protocol)
+* void disconnectFromHost(void)
+* int error(void)
+* bool flush(void)
+* bool isValid(void)
+* QHostAddress localAddress(void)
+* int localPort(void)
+* int pauseMode(void)
+* QHostAddress peerAddress(void)
+* QString peerName(void)
+* int peerPort(void)
+* QNetworkProxy proxy(void)
+* int readBufferSize(void)
+* void resume(void)
+* void setPauseMode(QAbstractSocket::PauseMode pauseMode)
+* void setProxy(QNetworkProxy  networkProxy)
+* void setReadBufferSize(int size)
+* bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState, QIODevice::OpenModeFlag openMode)
+* void setSocketOption(QAbstractSocket::SocketOption option,  QVariant  value)
+* int *socketDescriptor(void)
+* QVariant socketOption(QAbstractSocket::SocketOption option)
+* int socketType(void)
+* int state(void)
+* bool waitForConnected(int msecs)
+* bool waitForDisconnected(int msecs)
+* bool atEnd(void)
+* int bytesAvailable(void)
+* int bytesToWrite(void)
+* bool canReadLine(void)
+* void close(void)
+* bool isSequential(void)
+* bool waitForBytesWritten(int msecs)
+* bool waitForReadyRead(int msecs)
+* void setconnectedEvent(const char *)
+* void setdisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void sethostFoundEvent(const char *)
+* void setproxyAuthenticationRequiredEvent(const char *)
+* void setstateChangedEvent(const char *)
+* const char *getconnectedEvent(void)
+* const char *getdisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *gethostFoundEvent(void)
+* const char *getproxyAuthenticationRequiredEvent(void)
+* const char *getstateChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAbstractSpinBox Class
+
+QAbstractSpinBox Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qabstractspinbox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int alignment(void)
+* int buttonSymbols(void)
+* int correctionMode(void)
+* bool hasAcceptableInput(void)
+* bool hasFrame(void)
+* void interpretText(void)
+* bool isAccelerated(void)
+* bool keyboardTracking(void)
+* void setAccelerated(bool on)
+* void setAlignment(Qt::AlignmentFlag flag)
+* void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs)
+* void setCorrectionMode(QAbstractSpinBox::CorrectionMode cm)
+* void setFrame(bool)
+* void setReadOnly(bool r)
+* void setSpecialValueText(QString)
+* void setWrapping(bool w)
+* QString specialValueText(void)
+* void stepBy(int steps)
+* QString text(void)
+* bool wrapping(void)
+* void clear(void)
+* void selectAll(void)
+* void stepDown(void)
+* void stepUp(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAction Class
+
+QAction Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaction.html
+
+
+Parameters : QWidget *parent
+
+* QActionGroup *actionGroup(void)
+* void activate(QAction::ActionEvent event)
+* bool autoRepeat(void)
+* QVariant data(void)
+* QFont font(void)
+* QIcon icon(void)
+* QString iconText(void)
+* bool isCheckable(void)
+* bool isChecked(void)
+* bool isEnabled(void)
+* bool isIconVisibleInMenu(void)
+* bool isSeparator(void)
+* bool isVisible(void)
+* QMenu *menu(void)
+* int menuRole(void)
+* QWidget *parentWidget(void)
+* int priority(void)
+* void setActionGroup(QActionGroup *group)
+* void setAutoRepeat(bool)
+* void setCheckable(bool)
+* void setData(QVariant)
+* void setFont(QFont)
+* void setIcon(QIcon)
+* void setIconText(QString)
+* void setIconVisibleInMenu(bool visible)
+* void setMenu(QMenu *menu)
+* void setMenuRole(QAction::MenuRole menuRole)
+* void setPriority(QAction::Priority priority)
+* void setSeparator(bool b)
+* void setShortcut(QKeySequence)
+* void setShortcutContext(Qt::ShortcutContext context)
+* void setShortcuts(QKeySequence::StandardKey key)
+* void setStatusTip(QString)
+* void setText(QString)
+* void setToolTip(QString)
+* void setWhatsThis(QString)
+* QKeySequence shortcut(void)
+* int shortcutContext(void)
+* bool showStatusText(QWidget *widget)
+* QString statusTip(void)
+* QString text(void)
+* QString toolTip(void)
+* QString whatsThis(void)
+* void hover(void)
+* void setChecked(bool)
+* void setDisabled(bool)
+* void setEnabled(bool)
+* void setVisible(bool)
+* void toggle(void)
+* void trigger(void)
+* void setClickEvent(const char *)
+* const char *getClickEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAllEvents Class
+
+QAllEvents Class
+================
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void accept(void)
+* void ignore(void)
+* int getKeyCode(void)
+* QString getKeyText(void)
+* int getModifiers(void)
+* int getx(void)
+* int gety(void)
+* int getglobalx(void)
+* int getglobaly(void)
+* int getbutton(void)
+* int getbuttons(void)
+* void setKeyPressEvent(const char *cStr)
+* void setMouseButtonPressEvent(const char *cStr)
+* void setMouseButtonReleaseEvent(const char *cStr)
+* void setMouseButtonDblClickEvent(const char *cStr)
+* void setMouseMoveEvent(const char *cStr)
+* void setCloseEvent(const char *cStr)
+* void setContextMenuEvent(const char *cStr)
+* void setDragEnterEvent(const char *cStr)
+* void setDragLeaveEvent(const char *cStr)
+* void setDragMoveEvent(const char *cStr)
+* void setDropEvent(const char *cStr)
+* void setEnterEvent(const char *cStr)
+* void setFocusInEvent(const char *cStr)
+* void setFocusOutEvent(const char *cStr)
+* void setKeyReleaseEvent(const char *cStr)
+* void setLeaveEvent(const char *cStr)
+* void setNonClientAreaMouseButtonDblClickEvent(const char *cStr)
+* void setNonClientAreaMouseButtonPressEvent(const char *cStr)
+* void setNonClientAreaMouseButtonReleaseEvent(const char *cStr)
+* void setNonClientAreaMouseMoveEvent(const char *cStr)
+* void setMoveEvent(const char *cStr)
+* void setResizeEvent(const char *cStr)
+* void setWindowActivateEvent(const char *cStr)
+* void setWindowBlockedEvent(const char *cStr)
+* void setWindowDeactivateEvent(const char *cStr)
+* void setWindowStateChangeEvent(const char *cStr)
+* void setWindowUnblockedEvent(const char *cStr)
+* void setPaintEvent(const char *cStr)
+* void setChildAddedEvent(const char *cStr)
+* void setChildPolishedEvent(const char *cStr)
+* void setChildRemovedEvent(const char *cStr)
+* const char *getKeyPressEvent(void)
+* const char *getMouseButtonPressEvent(void)
+* const char *getMouseButtonReleaseEvent(void)
+* const char *getMouseButtonDblClickEvent(void)
+* const char *getMouseMoveEvent(void)
+* const char *getCloseEvent(void)
+* const char *getContextMenuEvent(void)
+* const char *getDragEnterEvent(void)
+* const char *getDragLeaveEvent(void)
+* const char *getDragMoveEvent(void)
+* const char *getDropEvent(void)
+* const char *getEnterEvent(void)
+* const char *getFocusInEvent(void)
+* const char *getFocusOutEvent(void)
+* const char *getKeyReleaseEvent(void)
+* const char *getLeaveEvent(void)
+* const char *getNonClientAreaMouseButtonDblClickEvent(void)
+* const char *getNonClientAreaMouseButtonPressEvent(void)
+* const char *getNonClientAreaMouseButtonReleaseEvent(void)
+* const char *getNonClientAreaMouseMoveEvent(void)
+* const char *getMoveEvent(void)
+* const char *getResizeEvent(void)
+* const char *getWindowActivateEvent(void)
+* const char *getWindowBlockedEvent(void)
+* const char *getWindowDeactivateEvent(void)
+* const char *getWindowStateChangeEvent(void)
+* const char *getWindowUnblockedEvent(void)
+* const char *getPaintEvent(void)
+* const char *getChildAddedEvent(void)
+* const char *getChildPolishedEvent(void)
+* const char *getChildRemovedEvent(void)
+* void setEventOutput(bool x)
+* QObject *getParentObject(void)
+* QWidget *getParentWidget(void)
+* void setKeyPressFunc(const char *cStr)
+* void setMouseButtonPressFunc(const char *cStr)
+* void setMouseButtonReleaseFunc(const char *cStr)
+* void setMouseButtonDblClickFunc(const char *cStr)
+* void setMouseMoveFunc(const char *cStr)
+* void setCloseFunc(const char *cStr)
+* void setContextMenuFunc(const char *cStr)
+* void setDragEnterFunc(const char *cStr)
+* void setDragLeaveFunc(const char *cStr)
+* void setDragMoveFunc(const char *cStr)
+* void setDropFunc(const char *cStr)
+* void setEnterFunc(const char *cStr)
+* void setFocusInFunc(const char *cStr)
+* void setFocusOutFunc(const char *cStr)
+* void setKeyReleaseFunc(const char *cStr)
+* void setLeaveFunc(const char *cStr)
+* void setNonClientAreaMouseButtonDblClickFunc(const char *cStr)
+* void setNonClientAreaMouseButtonPressFunc(const char *cStr)
+* void setNonClientAreaMouseButtonReleaseFunc(const char *cStr)
+* void setNonClientAreaMouseMoveFunc(const char *cStr)
+* void setMoveFunc(const char *cStr)
+* void setResizeFunc(const char *cStr)
+* void setWindowActivateFunc(const char *cStr)
+* void setWindowBlockedFunc(const char *cStr)
+* void setWindowDeactivateFunc(const char *cStr)
+* void setWindowStateChangeFunc(const char *cStr)
+* void setWindowUnblockedFunc(const char *cStr)
+* void setPaintFunc(const char *cStr)
+* void setChildAddedFunc(const char *cStr)
+* void setChildPolishedFunc(const char *cStr)
+* void setChildRemovedFunc(const char *cStr)
+* const char *getKeyPressFunc(void)
+* const char *getMouseButtonPressFunc(void)
+* const char *getMouseButtonReleaseFunc(void)
+* const char *getMouseButtonDblClickFunc(void)
+* const char *getMouseMoveFunc(void)
+* const char *getCloseFunc(void)
+* const char *getContextMenuFunc(void)
+* const char *getDragEnterFunc(void)
+* const char *getDragLeaveFunc(void)
+* const char *getDragMoveFunc(void)
+* const char *getDropFunc(void)
+* const char *getEnterFunc(void)
+* const char *getFocusInFunc(void)
+* const char *getFocusOutFunc(void)
+* const char *getKeyReleaseFunc(void)
+* const char *getLeaveFunc(void)
+* const char *getNonClientAreaMouseButtonDblClickFunc(void)
+* const char *getNonClientAreaMouseButtonPressFunc(void)
+* const char *getNonClientAreaMouseButtonReleaseFunc(void)
+* const char *getNonClientAreaMouseMoveFunc(void)
+* const char *getMoveFunc(void)
+* const char *getResizeFunc(void)
+* const char *getWindowActivateFunc(void)
+* const char *getWindowBlockedFunc(void)
+* const char *getWindowDeactivateFunc(void)
+* const char *getWindowStateChangeFunc(void)
+* const char *getWindowUnblockedFunc(void)
+* const char *getPaintFunc(void)
+* const char *getChildAddedFunc(void)
+* const char *getChildPolishedFunc(void)
+* const char *getChildRemovedFunc(void)
+* QDropEvent *getDropEventObject(void)
+* QDragMoveEvent *getDragMoveEventObject(void)
+* QDragEnterEvent *getDragEnterEventObject(void)
+* QDragLeaveEvent *getDragLeaveEventObject(void)
+* QChildEvent *getChildEventObject(void)
+
+.. index::
+       pair: RingQt Classes Reference; QApp Class
+
+QApp Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qapplication.html
+
+
+Parent Class : QGuiApplication
+
+* void exec(void)
+* void quit(void)
+* void processEvents(void)
+* void styleWindows(void)
+* void styleWindowsVista(void)
+* void styleFusion(void)
+* void styleFusionBlack(void)
+* void styleFusionCustom(QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor)
+* void closeAllWindows(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAspectEngine Class
+
+QAspectEngine Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qaspectengine.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QVector<Qt3DCore::QAbstractAspect *> aspects(void)
+* QVariant executeCommand(QString command)
+* void registerAspect(Qt3DCore::QAbstractAspect *aspect)
+* void registerAspect_2(QString name)
+* Qt3DCore::QEntityPtr rootEntity(void)
+* void setRootEntity(Qt3DCore::QEntityPtr root)
+* void unregisterAspect(Qt3DCore::QAbstractAspect *aspect)
+* void unregisterAspect_2(QString name)
+
+.. index::
+       pair: RingQt Classes Reference; QAxBase Class
+
+QAxBase Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaxbase.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QObject
+
+* QVariant asVariant(void)
+* QString control(void)
+* void disableClassInfo(void)
+* void disableEventSink(void)
+* void disableMetaObject(void)
+* QVariant dynamicCall(char *function)
+* QVariant dynamicCall_2(char *function,QVariant)
+* QVariant dynamicCall_3(char *function,QVariant,QVariant)
+* QVariant dynamicCall_4(char *function,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_5(char *function,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_6(char *function,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_7(char *function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_8(char *function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_9(char *function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_10(const char *function, QList<QVariant> )
+* QString generateDocumentation(void)
+* bool isNull(void)
+* QAxObject *querySubObject(const char *name)
+* QAxObject *querySubObject_2(const char *name,QVariant)
+* QAxObject *querySubObject_3(const char *name,QVariant,QVariant)
+* QAxObject *querySubObject_4(const char *name,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_5(const char *name,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_6(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_7(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_8(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject *querySubObject_9(const char *name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* bool setControl( QString  )
+* QStringList verbs(void)
+
+.. index::
+       pair: RingQt Classes Reference; QAxObject Class
+
+QAxObject Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaxobject.html
+
+
+Parameters : QString
+
+
+Parent Class : QAxBase
+
+* bool doVerb(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QAxWidget Class
+
+QAxWidget Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qaxwidget.html
+
+
+Parameters : QWidget *parent, Qt::WindowFlags f
+
+
+Parent Class : QAxBase
+
+* bool doVerb(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QAxWidget2 Class
+
+QAxWidget2 Class
+================
+
+
+Parameters : QString c, QWidget *parent, Qt::WindowFlags f
+
+
+Parent Class : QAxWidget
+
+
+.. index::
+       pair: RingQt Classes Reference; QBitmap Class
+
+QBitmap Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbitmap.html
+
+
+Parameters : void
+
+
+Parent Class : QPixmap
+
+* void clear(void)
+* void swap(QBitmap)
+* QBitmap transformed(QTransform)
+* QBitmap fromData(QSize, const uchar * bits, QImage::Format monoFormat)
+* QBitmap fromImage(QImage, Qt::ImageConversionFlags flags)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothAddress Class
+
+QBluetoothAddress Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothaddress.html
+
+
+Parameters : void
+
+* void clear(void)
+* bool isNull(void)
+* QString toString(void)
+* quint64 toUInt64(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothDeviceDiscoveryAgent Class
+
+QBluetoothDeviceDiscoveryAgent Class
+====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothdevicediscoveryagent.html
+
+
+Parameters : QObject *
+
+* QList<QBluetoothDeviceInfo> discoveredDevices(void)
+* QBluetoothDeviceDiscoveryAgent::Error error(void)
+* QString errorString(void)
+* QBluetoothDeviceDiscoveryAgent::InquiryType inquiryType(void)
+* bool isActive(void)
+* void setInquiryType(QBluetoothDeviceDiscoveryAgent::InquiryType type)
+* void start(void)
+* void stop(void)
+* void setcanceledEvent(const char *)
+* void setdeviceDiscoveredEvent(const char *)
+* void seterrorEvent(const char *)
+* void setfinishedEvent(const char *)
+* const char *getcanceledEvent(void)
+* const char *getdeviceDiscoveredEvent(void)
+* const char *geterrorEvent(void)
+* const char *getfinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothDeviceInfo Class
+
+QBluetoothDeviceInfo Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothdeviceinfo.html
+
+
+Parameters : void
+
+* QBluetoothAddress address(void)
+* bool isValid(void)
+* QBluetoothDeviceInfo::MajorDeviceClass majorDeviceClass(void)
+* quint8 minorDeviceClass(void)
+* QString name(void)
+* qint16 rssi(void)
+* QBluetoothDeviceInfo::ServiceClasses serviceClasses(void)
+* QList<QBluetoothUuid> serviceUuids(QBluetoothDeviceInfo::DataCompleteness *completeness)
+* QBluetoothDeviceInfo::DataCompleteness serviceUuidsCompleteness(void)
+* void setCached(bool cached)
+* void setServiceUuids(QList<QBluetoothUuid> uuids, QBluetoothDeviceInfo::DataCompleteness completeness)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothHostInfo Class
+
+QBluetoothHostInfo Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothhostinfo.html
+
+
+Parameters : void
+
+* QBluetoothAddress address(void)
+* QString name(void)
+* void setAddress(QBluetoothAddress address)
+* void setName(QString name)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothLocalDevice Class
+
+QBluetoothLocalDevice Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothlocaldevice.html
+
+
+Parameters : QObject *
+
+* QBluetoothAddress address(void)
+* QBluetoothLocalDevice::HostMode hostMode(void)
+* bool isValid(void)
+* QString name(void)
+* QBluetoothLocalDevice::Pairing pairingStatus(QBluetoothAddress address)
+* void powerOn(void)
+* void requestPairing(QBluetoothAddress address, QBluetoothLocalDevice::Pairing pairing)
+* void setHostMode(QBluetoothLocalDevice::HostMode mode)
+* void pairingConfirmation(bool accept)
+* QList<QBluetoothHostInfo> allDevices(void)
+* void setdeviceConnectedEvent(const char *)
+* void setdeviceDisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void sethostModeStateChangedEvent(const char *)
+* void setpairingDisplayConfirmationEvent(const char *)
+* void setpairingDisplayPinCodeEvent(const char *)
+* void setpairingFinishedEvent(const char *)
+* const char *getdeviceConnectedEvent(void)
+* const char *getdeviceDisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *gethostModeStateChangedEvent(void)
+* const char *getpairingDisplayConfirmationEvent(void)
+* const char *getpairingDisplayPinCodeEvent(void)
+* const char *getpairingFinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothServer Class
+
+QBluetoothServer Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothserver.html
+
+
+Parameters : QBluetoothServiceInfo::Protocol,QObject *
+
+
+Parent Class : QObject
+
+* void close(void)
+* QBluetoothServer::Error error(void)
+* bool hasPendingConnections(void)
+* bool isListening(void)
+* bool listen(QBluetoothAddress address, quint16 port)
+* QBluetoothServiceInfo listen_2(QBluetoothUuid uuid, QString serviceName))
+* int maxPendingConnections(void)
+* QBluetoothSocket * nextPendingConnection(void)
+* QBluetooth::SecurityFlags securityFlags(void)
+* QBluetoothAddress serverAddress(void)
+* quint16 serverPort(void)
+* QBluetoothServiceInfo::Protocol serverType(void)
+* void setMaxPendingConnections(int numConnections)
+* void setSecurityFlags(QBluetooth::SecurityFlags security)
+* void seterrorEvent(const char *)
+* void setnewConnectionEvent(const char *)
+* const char *geterrorEvent(void)
+* const char *getnewConnectionEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothServiceDiscoveryAgent Class
+
+QBluetoothServiceDiscoveryAgent Class
+=====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothservicediscoveryagent.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QList<QBluetoothServiceInfo> discoveredServices(void)
+* QBluetoothServiceDiscoveryAgent::Error error(void)
+* QString errorString(void)
+* bool isActive(void)
+* QBluetoothAddress remoteAddress(void)
+* bool setRemoteAddress(QBluetoothAddress address)
+* void setUuidFilter(QList<QBluetoothUuid> uuids)
+* void setUuidFilter_2(QBluetoothUuid uuid)
+* QList<QBluetoothUuid> uuidFilter(void)
+* void clear(void)
+* void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode)
+* void stop(void)
+* void setcanceledEvent(const char *)
+* void seterrorEvent(const char *)
+* void setfinishedEvent(const char *)
+* void setserviceDiscoveredEvent(const char *)
+* const char *getcanceledEvent(void)
+* const char *geterrorEvent(void)
+* const char *getfinishedEvent(void)
+* const char *getserviceDiscoveredEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothServiceInfo Class
+
+QBluetoothServiceInfo Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothserviceinfo.html
+
+
+Parameters : void
+
+* QVariant attribute(quint16 attributeId)
+* QList<quint16> attributes(void)
+* bool contains(quint16 attributeId)
+* QBluetoothDeviceInfo device(void)
+* bool isComplete(void)
+* bool isRegistered(void)
+* bool isValid(void)
+* QBluetoothServiceInfo::Sequence protocolDescriptor(QBluetoothUuid::ProtocolUuid protocol)
+* int protocolServiceMultiplexer(void)
+* bool registerService(QBluetoothAddress localAdapter))
+* void removeAttribute(quint16 attributeId)
+* int serverChannel(void)
+* quint8 serviceAvailability(void)
+* QList<QBluetoothUuid> serviceClassUuids(void)
+* QString serviceDescription(void)
+* QString serviceName(void)
+* QString serviceProvider(void)
+* QBluetoothUuid serviceUuid(void)
+* void setAttribute(quint16 attributeId, QVariant value)
+* void setAttribute_2(quint16 attributeId, QBluetoothUuid value)
+* void setAttribute_3(quint16 attributeId, QBluetoothServiceInfo::Sequence value)
+* void setDevice(QBluetoothDeviceInfo device)
+* void setServiceAvailability(quint8 availability)
+* void setServiceDescription(QString description)
+* void setServiceName(QString name)
+* void setServiceProvider(QString provider)
+* void setServiceUuid(QBluetoothUuid uuid)
+* bool unregisterService(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothSocket Class
+
+QBluetoothSocket Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothsocket.html
+
+
+Parameters : QBluetoothServiceInfo::Protocol,QObject *
+
+
+Parent Class : QIODevice
+
+* void abort(void)
+* void connectToService(QBluetoothServiceInfo service, QIODevice::OpenMode openMode)
+* void connectToService_2(QBluetoothAddress address, QBluetoothUuid uuid, QIODevice::OpenMode openMode)
+* void connectToService_3(QBluetoothAddress address, quint16 port, QIODevice::OpenMode openMode)
+* void disconnectFromService(void)
+* QBluetoothSocket::SocketError error(void)
+* QString errorString(void)
+* QBluetoothAddress localAddress(void)
+* QString localName(void)
+* quint16 localPort(void)
+* QBluetoothAddress peerAddress(void)
+* QString peerName(void)
+* quint16 peerPort(void)
+* bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState, QIODevice::OpenMode openMode)
+* int socketDescriptor(void)
+* QBluetoothServiceInfo::Protocol socketType(void)
+* QBluetoothSocket::SocketState state(void)
+* void setconnectedEvent(const char *)
+* void setdisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void setstateChangedEvent(const char *)
+* const char *getconnectedEvent(void)
+* const char *getdisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *getstateChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothTransferManager Class
+
+QBluetoothTransferManager Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothtransfermanager.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QBluetoothTransferReply * put(QBluetoothTransferRequest request, QIODevice *data)
+* void setfinishedEvent(const char *)
+* const char *getfinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothTransferReply Class
+
+QBluetoothTransferReply Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothtransferreply.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QBluetoothTransferManager * manager(void)
+* QBluetoothTransferRequest request(void)
+* void abort(void)
+* void seterrorEvent(const char *)
+* void setfinishedEvent(const char *)
+* void settransferProgressEvent(const char *)
+* const char *geterrorEvent(void)
+* const char *getfinishedEvent(void)
+* const char *gettransferProgressEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothTransferRequest Class
+
+QBluetoothTransferRequest Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothtransferrequest.html
+
+
+Parameters : QBluetoothAddress
+
+* QBluetoothAddress address(void)
+* QVariant attribute(QBluetoothTransferRequest::Attribute code, QVariant defaultValue))
+* void setAttribute(QBluetoothTransferRequest::Attribute code, QVariant value)
+
+.. index::
+       pair: RingQt Classes Reference; QBluetoothUuid Class
+
+QBluetoothUuid Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbluetoothuuid.html
+
+
+Parameters : void
+
+
+Parent Class : QUuid
+
+* int minimumSize(void)
+* quint16 toUInt16(bool *ok)
+* quint32 toUInt32(bool *ok)
+* quint128 toUInt128(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBoxLayout Class
+
+QBoxLayout Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qboxlayout.html
+
+
+Parameters : QBoxLayout::Direction dir, QWidget *parent
+
+
+Parent Class : QLayout
+
+* void  addLayout(QLayout * layout, int stretch )
+* void  addSpacerItem(QSpacerItem * spacerItem)
+* void  addSpacing(int size)
+* void  addStretch(int stretch )
+* void  addStrut(int size)
+* void  addWidget(QWidget * widget, int stretch , Qt::Alignment alignment )
+* QBoxLayout::Direction  direction(void)
+* void  insertLayout(int index, QLayout * layout, int stretch )
+* void  insertSpacerItem(int index, QSpacerItem * spacerItem)
+* void  insertSpacing(int index, int size)
+* void  insertStretch(int index, int stretch )
+* void  insertWidget(int index, QWidget * widget, int stretch , Qt::Alignment alignment )
+* void  setDirection(QBoxLayout::Direction direction)
+* void  setSpacing(int spacing)
+* void  setStretch(int index, int stretch)
+* bool  setStretchFactor(QWidget * widget, int stretch)
+* bool  setStretchFactor_2(QLayout * layout, int stretch)
+* int  spacing(void)
+* int  stretch(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QBrush Class
+
+QBrush Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbrush.html
+
+
+Parameters : void
+
+* QColor color(void)
+* QGradient *gradient(void)
+* bool isOpaque(void)
+* QMatrix matrix(void)
+* void setColor(QColor)
+* void setMatrix(QMatrix)
+* void setStyle(Qt::BrushStyle style)
+* void setTexture(QPixmap)
+* void setTextureImage(QImage)
+* void setTransform(QTransform)
+* int style(void)
+* void swap(QBrush)
+* QPixmap texture(void)
+* QImage textureImage(void)
+* QTransform transform(void)
+
+.. index::
+       pair: RingQt Classes Reference; QBuffer Class
+
+QBuffer Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbuffer.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QIODevice
+
+* QByteArray buffer(void)
+* QByteArray data(void)
+* void setBuffer(QByteArray *byteArray)
+* void setData(QByteArray data)
+* void setData_2(char *data, int size)
+
+.. index::
+       pair: RingQt Classes Reference; QButtonGroup Class
+
+QButtonGroup Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbuttongroup.html
+
+
+Parameters : QObject *parent
+
+* void addButton(QAbstractButton *button, int id)
+* QAbstractButton *button(int id)
+* QAbstractButton *checkedButton(void)
+* int checkedId(void)
+* bool exclusive(void)
+* int id(QAbstractButton *button)
+* void removeButton(QAbstractButton *button)
+* void setExclusive(bool)
+* void setId(QAbstractButton *button, int id)
+* void setbuttonClickedEvent(const char *)
+* void setbuttonPressedEvent(const char *)
+* void setbuttonReleasedEvent(const char *)
+* const char *getbuttonClickedEvent(void)
+* const char *getbuttonPressedEvent(void)
+* const char *getbuttonReleasedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QByteArray Class
+
+QByteArray Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qbytearray.html
+
+
+Parameters : void
+
+* QByteArray append(const char *str)
+* char at(int i)
+* int capacity(void)
+* void chop(int n)
+* void clear(void)
+* const char *constData(void)
+* bool contains(const char *str)
+* int count(const char *str)
+* const char *data(void)
+* bool endsWith(const char *str)
+* QByteArray fill(char ch, int size)
+* int indexOf(const char *str, int from)
+* QByteArray insert(int i, const char *str, int len)
+* bool isEmpty(void)
+* bool isNull(void)
+* int lastIndexOf(const char *str, int from)
+* QByteArray left(int len)
+* QByteArray leftJustified(int width, char fill, bool truncate)
+* int length(void)
+* QByteArray mid(int pos, int len)
+* QByteArray prepend(const char *str, int len)
+* void push_back(const char *str)
+* void push_front(const char *str)
+* QByteArray remove(int pos, int len)
+* QByteArray repeated(int times)
+* QByteArray  replace(int pos, int len, const char *after, int alen)
+* void reserve(int size)
+* void resize(int size)
+* QByteArray right(int len)
+* QByteArray rightJustified(int width, char fill, bool truncate)
+* QByteArray setNum(int n, int base)
+* QByteArray setRawData(const char *data, uint size)
+* QByteArray simplified(void)
+* int size(void)
+* void squeeze(void)
+* bool startsWith(const char *str)
+* void swap(QByteArray other)
+* QByteArray toBase64(void)
+* double toDouble(bool * ok)
+* float toFloat(bool * ok)
+* QByteArray toHex(void)
+* int toInt(bool *ok, int base)
+* long toLong(bool *ok, int base)
+* qlonglong toLongLong(bool *ok, int base)
+* QByteArray toLower(void)
+* QByteArray toPercentEncoding(QByteArray,QByteArray, char percent)
+* short toShort(bool *ok, int base)
+* int toUInt(bool *ok, int base)
+* int toULong(bool *ok, int base)
+* int toULongLong(bool * ok, int base)
+* int toUShort(bool * ok, int base)
+* QByteArray toUpper(void)
+* QByteArray trimmed(void)
+* void truncate(int pos)
+* QByteArray fromBase64(QByteArray)
+* QByteArray fromHex(QByteArray)
+* QByteArray fromPercentEncoding(QByteArray, char percent)
+* QByteArray fromRawData(const char *data, int size)
+* QByteArray number(int n, int base)
+
+.. index::
+       pair: RingQt Classes Reference; QCalendarWidget Class
+
+QCalendarWidget Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcalendarwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* int dateEditAcceptDelay(void)
+* QMap<QDate, QTextCharFormat> dateTextFormat(void)
+* QTextCharFormat dateTextFormat_2(QDate date)
+* Qt::DayOfWeek firstDayOfWeek(void)
+* QTextCharFormat headerTextFormat(void)
+* QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat(void)
+* bool isDateEditEnabled(void)
+* bool isGridVisible(void)
+* bool isNavigationBarVisible(void)
+* QDate maximumDate(void)
+* QDate minimumDate(void)
+* int monthShown(void)
+* QDate selectedDate(void)
+* QCalendarWidget::SelectionMode selectionMode(void)
+* void setDateEditAcceptDelay(int delay)
+* void setDateEditEnabled(bool enable)
+* void setDateTextFormat(QDate date, QTextCharFormat format)
+* void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
+* void setHeaderTextFormat(QTextCharFormat format)
+* void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
+* void setMaximumDate(QDate date)
+* void setMinimumDate(QDate date)
+* void setSelectionMode(QCalendarWidget::SelectionMode mode)
+* void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)
+* void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, QTextCharFormat format)
+* QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat(void)
+* QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek)
+* int yearShown(void)
+* void setCurrentPage(int year, int month)
+* void setDateRange(QDate min, QDate max)
+* void setGridVisible(bool show)
+* void setNavigationBarVisible(bool visible)
+* void setSelectedDate(QDate date)
+* void showNextMonth(void)
+* void showNextYear(void)
+* void showPreviousMonth(void)
+* void showPreviousYear(void)
+* void showSelectedDate(void)
+* void showToday(void)
+* void setactivatedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setcurrentPageChangedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* const char *getactivatedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getcurrentPageChangedEvent(void)
+* const char *getselectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QCamera Class
+
+QCamera Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcamera.html
+
+
+Parameters : void
+
+
+Parent Class : QMediaObject
+
+* QCamera::CaptureModes captureMode(void)
+* QCamera::Error error(void)
+* QString errorString(void)
+* QCameraExposure * exposure(void)
+* QCameraFocus * focus(void)
+* QCameraImageProcessing * imageProcessing(void)
+* bool isCaptureModeSupported(QCamera::CaptureModes mode)
+* QCamera::LockStatus lockStatus(void)
+* QCamera::LockStatus lockStatus_2(QCamera::LockType lockType)
+* QCamera::LockTypes requestedLocks(void)
+* void setViewfinder(QVideoWidget * viewfinder)
+* void setViewfinder_2(QGraphicsVideoItem * viewfinder)
+* void setViewfinder_3(QAbstractVideoSurface * surface)
+* QCamera::State state(void)
+* QCamera::Status status(void)
+* QCamera::LockTypes supportedLocks(void)
+* void load(void)
+* void searchAndLock(void)
+* void searchAndLock_2(QCamera::LockTypes locks)
+* void setCaptureMode(QCamera::CaptureModes mode)
+* void start(void)
+* void stop(void)
+* void unload(void)
+* void unlock(void)
+* void unlock_2(QCamera::LockTypes locks)
+
+.. index::
+       pair: RingQt Classes Reference; QCameraImageCapture Class
+
+QCameraImageCapture Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcameraimagecapture.html
+
+
+Parameters : QMediaObject * mediaObject
+
+* QMultimedia::AvailabilityStatus availability(void)
+* QVideoFrame::PixelFormat bufferFormat(void)
+* QCameraImageCapture::CaptureDestinations captureDestination(void)
+* QImageEncoderSettings encodingSettings(void)
+* QCameraImageCapture::Error error(void)
+* QString errorString(void)
+* QString imageCodecDescription( QString   codec)
+* bool isAvailable(void)
+* bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination)
+* bool isReadyForCapture(void)
+* void setBufferFormat( QVideoFrame::PixelFormat format)
+* void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination)
+* void setEncodingSettings( QImageEncoderSettings   settings)
+* QList<QVideoFrame::PixelFormat> supportedBufferFormats(void)
+* QStringList supportedImageCodecs(void)
+* QList<QSize> supportedResolutions( QImageEncoderSettings   settings , bool * continuous )
+* void cancelCapture(void)
+* int capture( QString   file )
+
+.. index::
+       pair: RingQt Classes Reference; QCameraLens Class
+
+QCameraLens Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcameralens.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float aspectRatio(void)
+* float bottom(void)
+* float exposure(void)
+* float farPlane(void)
+* float fieldOfView(void)
+* float left(void)
+* float nearPlane(void)
+* QMatrix4x4 projectionMatrix(void)
+* Qt3DRender::QCameraLens::ProjectionType projectionType(void)
+* float right(void)
+* void setFrustumProjection(float left, float right, float bottom, float top, float nearPlane, float farPlane)
+* void setOrthographicProjection(float left, float right, float bottom, float top, float nearPlane, float farPlane)
+* void setPerspectiveProjection(float fieldOfView, float aspectRatio, float nearPlane, float farPlane)
+* float top(void)
+* void setBottom(float bottom)
+* void setExposure(float exposure)
+* void setFarPlane(float farPlane)
+* void setFieldOfView(float fieldOfView)
+* void setLeft(float left)
+* void setNearPlane(float nearPlane)
+* void setProjectionMatrix(QMatrix4x4 projectionMatrix)
+* void setProjectionType(Qt3DRender::QCameraLens::ProjectionType projectionType)
+* void setRight(float right)
+* void setTop(float top)
+
+.. index::
+       pair: RingQt Classes Reference; QCameraSelector Class
+
+QCameraSelector Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcameraselector .html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DCore::QEntity * camera(void)
+* void setCamera(Qt3DCore::QEntity *camera)
+
+.. index::
+       pair: RingQt Classes Reference; QCameraViewfinder Class
+
+QCameraViewfinder Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcameraviewfinder.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QVideoWidget
+
+
+.. index::
+       pair: RingQt Classes Reference; QChar Class
+
+QChar Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qchar.html
+
+
+Parameters : int
+
+* QChar::Category category(void)
+* uchar cell(void)
+* unsigned char combiningClass(void)
+* QString decomposition(void)
+* QChar::Decomposition decompositionTag(void)
+* int digitValue(void)
+* QChar::Direction direction(void)
+* bool hasMirrored(void)
+* bool isDigit(void)
+* bool isHighSurrogate(void)
+* bool isLetter(void)
+* bool isLetterOrNumber(void)
+* bool isLowSurrogate(void)
+* bool isLower(void)
+* bool isMark(void)
+* bool isNonCharacter(void)
+* bool isNull(void)
+* bool isNumber(void)
+* bool isPrint(void)
+* bool isPunct(void)
+* bool isSpace(void)
+* bool isSurrogate(void)
+* bool isSymbol(void)
+* bool isTitleCase(void)
+* bool isUpper(void)
+* QChar mirroredChar(void)
+* uchar row(void)
+* QChar::Script script(void)
+* QChar toCaseFolded(void)
+* char toLatin1(void)
+* QChar toLower(void)
+* QChar toTitleCase(void)
+* QChar toUpper(void)
+* ushort unicode(void)
+* ushort unicode_2(void)
+* QChar::UnicodeVersion unicodeVersion(void)
+* QChar::Category category_2(uint ucs4)
+* unsigned char combiningClass_2(uint ucs4)
+* QChar::UnicodeVersion currentUnicodeVersion(void)
+* QString decomposition_2(uint ucs4)
+* QChar::Decomposition decompositionTag_2(uint ucs4)
+* int digitValue_2(uint ucs4)
+* QChar::Direction direction_2(uint ucs4)
+* QChar fromLatin1(char c)
+* bool hasMirrored_2(uint ucs4)
+* ushort highSurrogate(uint ucs4)
+* bool isDigit_2(uint ucs4)
+* bool isHighSurrogate_2(uint ucs4)
+* bool isLetter_2(uint ucs4)
+* bool isLetterOrNumber_2(uint ucs4)
+* bool isLowSurrogate_2(uint ucs4)
+* bool isLower_2(uint ucs4)
+* bool isMark_2(uint ucs4)
+* bool isNonCharacter_2(uint ucs4)
+* bool isNumber_2(uint ucs4)
+* bool isPrint_2(uint ucs4)
+* bool isPunct_2(uint ucs4)
+* bool isSpace_2(uint ucs4)
+* bool isSurrogate_2(uint ucs4)
+* bool isSymbol_2(uint ucs4)
+* bool isTitleCase_2(uint ucs4)
+* bool isUpper_2(uint ucs4)
+* ushort lowSurrogate(uint ucs4)
+* uint mirroredChar_2(uint ucs4)
+* bool requiresSurrogates(uint ucs4)
+* QChar::Script script_2(uint ucs4)
+* uint surrogateToUcs4(ushort high, ushort low)
+* uint surrogateToUcs4_2(QChar high, QChar low)
+* uint toCaseFolded_2(uint ucs4)
+* uint toLower_2(uint ucs4)
+* uint toTitleCase_2(uint ucs4)
+* uint toUpper_2(uint ucs4)
+* QChar::UnicodeVersion unicodeVersion_2(uint ucs4)
+
+.. index::
+       pair: RingQt Classes Reference; QCheckBox Class
+
+QCheckBox Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcheckbox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractButton
+
+* int checkState(void)
+* bool isTristate(void)
+* void setCheckState(Qt::CheckState state)
+* void setTristate(bool y)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setstateChangedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setpressedEvent(const char *)
+* void setreleasedEvent(const char *)
+* void settoggledEvent(const char *)
+* const char *getstateChangedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getpressedEvent(void)
+* const char *getreleasedEvent(void)
+* const char *gettoggledEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QChildEvent Class
+
+QChildEvent Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qchildevent.html
+
+
+Parameters : QEvent::Type,QObject *
+
+
+Parent Class : QEvent
+
+* bool added(void)
+* QObject *child(void)
+* bool polished(void)
+* bool removed(void)
+
+.. index::
+       pair: RingQt Classes Reference; QClipboard Class
+
+QClipboard Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qclipboard.html
+
+* void clear(QClipboard::Mode mode)
+* QImage image(QClipboard::Mode mode)
+* QMimeData * mimeData(QClipboard::Mode mode)
+* bool ownsClipboard(void)
+* bool ownsFindBuffer(void)
+* bool ownsSelection(void)
+* QPixmap pixmap(QClipboard::Mode mode)
+* void setImage(QImage image, QClipboard::Mode mode)
+* void setMimeData(QMimeData * src, QClipboard::Mode mode)
+* void setPixmap(QPixmap pixmap, QClipboard::Mode mode)
+* void setText(QString text, QClipboard::Mode mode)
+* bool supportsFindBuffer(void)
+* bool supportsSelection(void)
+* QString text(QClipboard::Mode mode)
+
+.. index::
+       pair: RingQt Classes Reference; QColor Class
+
+QColor Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcolor.html
+
+
+Parameters : void
+
+* int alpha(void)
+* double alphaF(void)
+* int black(void)
+* double blackF(void)
+* int blue(void)
+* double blueF(void)
+* QColor convertTo(QColor::Spec colorSpec)
+* int cyan(void)
+* double cyanF(void)
+* QColor darker(int factor)
+* void getCmyk(int *c, int *m, int *y, int *k, int *a)
+* void getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *a)
+* void getHsl(int *h, int *s, int *l, int *a)
+* void getHslF(qreal *h, qreal *s, qreal *l, qreal *a)
+* void getHsv(int *h, int *s, int *v, int *a)
+* void getHsvF(qreal *h, qreal *s, qreal *v, qreal *a)
+* void getRgb(int *r, int *g, int *b, int *a)
+* void getRgbF(qreal *r, qreal *g, qreal *b, qreal *a)
+* int green(void)
+* double greenF(void)
+* int hslHue(void)
+* double hslHueF(void)
+* int hslSaturation(void)
+* double hslSaturationF(void)
+* int hsvHue(void)
+* double hsvHueF(void)
+* int hsvSaturation(void)
+* double hsvSaturationF(void)
+* int hue(void)
+* double hueF(void)
+* bool isValid(void)
+* QColor lighter(int factor)
+* int lightness(void)
+* double lightnessF(void)
+* int magenta(void)
+* double magentaF(void)
+* QString name(void)
+* int red(void)
+* double redF(void)
+* QRgb rgb(void)
+* QRgb rgba(void)
+* int saturation(void)
+* double saturationF(void)
+* void setAlpha(int alpha)
+* void setAlphaF(double alpha)
+* void setBlue(int blue)
+* void setBlueF(double blue)
+* void setCmyk(int c, int m, int y, int k, int a)
+* void setCmykF(double c, double m, double y, double k, double a)
+* void setGreen(int green)
+* void setGreenF(double green)
+* void setHsl(int h, int s, int l, int a)
+* void setHslF(double h, double s, double l, double a)
+* void setHsv(int h, int s, int v, int a)
+* void setHsvF(double h, double s, double v, double a)
+* void setNamedColor(QString)
+* void setRed(int red)
+* void setRedF(double red)
+* void setRgb(int r, int g, int b, int a)
+* void setRgbF(double r, double g, double b, double a)
+* void setRgba(QRgb rgba)
+* int spec(void)
+* QColor toCmyk(void)
+* QColor toHsl(void)
+* QColor toHsv(void)
+* QColor toRgb(void)
+* int value(void)
+* double valueF(void)
+* int yellow(void)
+* double yellowF(void)
+* QStringList colorNames(void)
+* QColor fromCmyk(int c, int m, int y, int k, int a)
+* QColor fromCmykF(double c, double m, double y, double k, double a)
+* QColor fromHsl(int h, int s, int l, int a)
+* QColor fromHslF(double h, double s, double l, double a)
+* QColor fromHsv(int h, int s, int v, int a)
+* QColor fromHsvF(double h, double s, double v, double a)
+* QColor fromRgb(int r, int g, int b, int a)
+* QColor fromRgbF(double r, double g, double b, double a)
+* QColor fromRgba(QRgb rgba)
+* bool isValidColor(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QColorDialog Class
+
+QColorDialog Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcolordialog.html
+
+
+Parameters : void
+
+
+Parent Class : QDialog
+
+* QColor currentColor(void)
+* void open(void)
+* int options(void)
+* QColor selectedColor(void)
+* void setCurrentColor(QColor)
+* void setOption(QColorDialog::ColorDialogOption option, bool on )
+* void setOptions(QColorDialog::ColorDialogOption options)
+* bool testOption(QColorDialog::ColorDialogOption option)
+* QColor customColor(int index)
+* int customCount(void)
+* void setCustomColor(int index, int color)
+* void setStandardColor(int index, int color)
+* int getcolor(void)
+
+.. index::
+       pair: RingQt Classes Reference; QComboBox Class
+
+QComboBox Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcombobox.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void addItem(QString,int)
+* QCompleter *completer(void)
+* int count(void)
+* int currentIndex(void)
+* QString currentText(void)
+* bool duplicatesEnabled(void)
+* int findData(QVariant, int role, Qt::MatchFlag flags)
+* int findText(QString, Qt::MatchFlag flags)
+* bool hasFrame(void)
+* void hidePopup(void)
+* QSize iconSize(void)
+* void insertItem(int index, QString, QVariant)
+* bool isEditable(void)
+* QVariant itemData(int index, int role)
+* QAbstractItemDelegate *itemDelegate(void)
+* QIcon itemIcon(int index)
+* QString itemText(int index)
+* QLineEdit *lineEdit(void)
+* int maxCount(void)
+* int maxVisibleItems(void)
+* int minimumContentsLength(void)
+* QAbstractItemModel *model(void)
+* int modelColumn(void)
+* void removeItem(int index)
+* QModelIndex rootModelIndex(void)
+* void setCompleter(QCompleter *completer)
+* void setDuplicatesEnabled(bool enable)
+* void setEditable(bool editable)
+* void setFrame(bool)
+* void setIconSize(QSize)
+* void setItemDelegate(QAbstractItemDelegate *delegate)
+* void setItemIcon(int index, QIcon)
+* void setItemText(int index, QString)
+* void setLineEdit(QLineEdit *edit)
+* void setMaxCount(int max)
+* void setMaxVisibleItems(int maxItems)
+* void setMinimumContentsLength(int characters)
+* void setModel(QAbstractItemModel *model)
+* void setModelColumn(int visibleColumn)
+* void setRootModelIndex(QModelIndex)
+* void setView(QAbstractItemView *itemView)
+* void showPopup(void)
+* QAbstractItemView *view(void)
+* void clear(void)
+* void clearEditText(void)
+* void setCurrentIndex(int index)
+* void setEditText(QString)
+* void setactivatedEvent(const char *)
+* void setcurrentIndexChangedEvent(const char *)
+* void seteditTextChangedEvent(const char *)
+* void sethighlightedEvent(const char *)
+* const char *getactivatedEvent(void)
+* const char *getcurrentIndexChangedEvent(void)
+* const char *geteditTextChangedEvent(void)
+* const char *gethighlightedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QCompleter Class
+
+QCompleter Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcompleter.html
+
+
+Parameters : QObject *parent
+
+
+Parent Class : QObject
+
+* Qt::CaseSensitivity caseSensitivity(void)
+* int completionColumn(void)
+* int completionCount(void)
+* QCompleter::CompletionMode completionMode(void)
+* QAbstractItemModel *completionModel(void)
+* QString completionPrefix(void)
+* int completionRole(void)
+* QString currentCompletion(void)
+* QModelIndex currentIndex(void)
+* int currentRow(void)
+* Qt::MatchFlags filterMode(void)
+* int maxVisibleItems(void)
+* QAbstractItemModel * model(void)
+* QCompleter::ModelSorting modelSorting(void)
+* QAbstractItemView * popup(void)
+* void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
+* void setCompletionColumn(int column)
+* void setCompletionMode(QCompleter::CompletionMode mode)
+* void setCompletionRole(int role)
+* bool setCurrentRow(int row)
+* void setFilterMode(Qt::MatchFlags filterMode)
+* void setMaxVisibleItems(int maxItems)
+* void setModel(QAbstractItemModel *model)
+* void setModelSorting(QCompleter::ModelSorting sorting)
+* void setPopup(QAbstractItemView *popup)
+* void setWidget(QWidget *widget)
+* QWidget * widget(void)
+* bool wrapAround(void)
+* void complete(QRect  rect)
+* void setCompletionPrefix(QString prefix)
+* void setWrapAround(bool wrap)
+
+.. index::
+       pair: RingQt Classes Reference; QCompleter2 Class
+
+QCompleter2 Class
+=================
+
+
+Parameters : QAbstractItemModel *model, QObject *parent
+
+
+Parent Class : QCompleter
+
+
+.. index::
+       pair: RingQt Classes Reference; QCompleter3 Class
+
+QCompleter3 Class
+=================
+
+
+Parameters : QStringList list, QObject *parent
+
+
+Parent Class : QCompleter
+
+
+.. index::
+       pair: RingQt Classes Reference; QConeGeometry Class
+
+QConeGeometry Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qconegeometry.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float bottomRadius(void)
+* bool hasBottomEndcap(void)
+* bool hasTopEndcap(void)
+* Qt3DRender::QAttribute * indexAttribute(void)
+* float length(void)
+* Qt3DRender::QAttribute * normalAttribute(void)
+* Qt3DRender::QAttribute * positionAttribute(void)
+* int rings(void)
+* int slices(void)
+* Qt3DRender::QAttribute * texCoordAttribute(void)
+* float topRadius(void)
+* void updateIndices(void)
+* void updateVertices(void)
+* void setBottomRadius(float bottomRadius)
+* void setHasBottomEndcap(bool hasBottomEndcap)
+* void setHasTopEndcap(bool hasTopEndcap)
+* void setLength(float length)
+* void setRings(int rings)
+* void setSlices(int slices)
+* void setTopRadius(float topRadius)
+
+.. index::
+       pair: RingQt Classes Reference; QConeMesh Class
+
+QConeMesh Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qconemesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float bottomRadius(void)
+* bool hasBottomEndcap(void)
+* bool hasTopEndcap(void)
+* float length(void)
+* int rings(void)
+* int slices(void)
+* float topRadius(void)
+* void setBottomRadius(float bottomRadius)
+* void setHasBottomEndcap(bool hasBottomEndcap)
+* void setHasTopEndcap(bool hasTopEndcap)
+* void setLength(float length)
+* void setRings(int rings)
+* void setSlices(int slices)
+* void setTopRadius(float topRadius)
+
+.. index::
+       pair: RingQt Classes Reference; QCoreApplication Class
+
+QCoreApplication Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcoreapplication.html
+
+
+Parent Class : QObject
+
+* void installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
+* void removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
+* void quit(void)
+* void addLibraryPath(QString path)
+* QString applicationDirPath(void)
+* QString applicationFilePath(void)
+* QString applicationName(void)
+* qint64 applicationPid(void)
+* QString applicationVersion(void)
+* QStringList arguments(void)
+* bool closingDown(void)
+* QAbstractEventDispatcher * eventDispatcher(void)
+* int exec(void)
+* void exit(int returnCode)
+* bool installTranslator(QTranslator *translationFile)
+* QCoreApplication * instance(void)
+* bool isQuitLockEnabled(void)
+* QStringList libraryPaths(void)
+* QString organizationDomain(void)
+* QString organizationName(void)
+* void postEvent(QObject *receiver, QEvent *event, int priority)
+* void processEvents(QEventLoop::ProcessEventsFlags flags)
+* void processEvents_2(QEventLoop::ProcessEventsFlags flags, int maxtime)
+* void removeLibraryPath(QString path)
+* void removePostedEvents(QObject *receiver, int eventType)
+* bool removeTranslator(QTranslator *translationFile)
+* bool sendEvent(QObject *receiver, QEvent *event)
+* void sendPostedEvents(QObject *receiver, int event_type)
+* void setApplicationName(QString application)
+* void setApplicationVersion(QString version)
+* void setAttribute(Qt::ApplicationAttribute attribute, bool on)
+* void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
+* void setLibraryPaths(QStringList paths)
+* void setOrganizationDomain(QString orgDomain)
+* void setOrganizationName(QString orgName)
+* void setQuitLockEnabled(bool enabled)
+* bool startingUp(void)
+* bool testAttribute(Qt::ApplicationAttribute attribute)
+* QString translate(char *context, char *sourceText, char *disambiguation, int n)
+
+.. index::
+       pair: RingQt Classes Reference; QCuboidMesh Class
+
+QCuboidMesh Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qcuboidmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float xExtent(void)
+* QSize xyMeshResolution(void)
+* QSize xzMeshResolution(void)
+* float yExtent(void)
+* QSize yzMeshResolution(void)
+* float zExtent(void)
+* void setXExtent(float xExtent)
+* void setXYMeshResolution(QSize resolution)
+* void setXZMeshResolution(QSize resolution)
+* void setYExtent(float yExtent)
+* void setYZMeshResolution(QSize resolution)
+* void setZExtent(float zExtent)
+
+.. index::
+       pair: RingQt Classes Reference; QCullFace Class
+
+QCullFace Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qcullface.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DRender::QCullFace::CullingMode mode(void)
+* void setMode(Qt3DRender::QCullFace::CullingMode mode)
+
+.. index::
+       pair: RingQt Classes Reference; QCursor Class
+
+QCursor Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qcursor.html
+
+
+Parameters : void
+
+* QBitmap *bitmap(void)
+* QPoint hotSpot(void)
+* QBitmap *mask(void)
+* QPixmap pixmap(void)
+* void setShape(Qt::CursorShape shape)
+* Qt::CursorShape shape(void)
+* QPoint pos(void)
+* QPoint pos_2(QScreen *)
+* void setPos(int x, int y)
+* void setPos_2(QScreen *screen, int x, int y)
+* void setPos_3(QPoint)
+* void setPos_4(QScreen *screen, QPoint)
+
+.. index::
+       pair: RingQt Classes Reference; QCylinderMesh Class
+
+QCylinderMesh Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qcylindermesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float length(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setLength(float length)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt Classes Reference; QDate Class
+
+QDate Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdate.html
+
+
+Parameters : void
+
+* QDate addDays(int ndays)
+* QDate addMonths(int nmonths)
+* QDate addYears(int nyears)
+* int day(void)
+* int dayOfWeek(void)
+* int dayOfYear(void)
+* int daysInMonth(void)
+* int daysInYear(void)
+* int daysTo(QDate)
+* void getDate(int * year, int * month, int * day)
+* bool isNull(void)
+* bool isValid(void)
+* int month(void)
+* bool setDate(int year, int month, int day)
+* int toJulianDay(void)
+* QString toString(QString)
+* int weekNumber(int * yearNumber)
+* int year(void)
+* QDate currentDate(void)
+* QDate fromJulianDay(int jd)
+* QDate fromString(QString, QString)
+* bool isLeapYear(int year)
+* QString longDayName(int weekday)
+* QString longMonthName(int month)
+* QString shortDayName(int weekday)
+* QString shortMonthName(int month)
+
+.. index::
+       pair: RingQt Classes Reference; QDateEdit Class
+
+QDateEdit Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdateedit.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QDateTimeEdit
+
+
+.. index::
+       pair: RingQt Classes Reference; QDateTime Class
+
+QDateTime Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdatetime.html
+
+
+Parameters : void
+
+* QDateTime addDays(int ndays)
+* QDateTime addMSecs(qint64 msecs)
+* QDateTime addMonths(int nmonths)
+* QDateTime addSecs(int s)
+* QDateTime addYears(int nyears)
+* QDate date(void)
+* int daysTo(QDateTime other)
+* bool isNull(void)
+* bool isValid(void)
+* qint64 msecsTo(QDateTime other)
+* int secsTo(QDateTime other)
+* void setDate(QDate date)
+* void setMSecsSinceEpoch(qint64 msecs)
+* void setTime(QTime time)
+* void setTimeSpec(Qt::TimeSpec spec)
+* void setTime_t(uint seconds)
+* QTime time(void)
+* Qt::TimeSpec timeSpec(void)
+* QDateTime toLocalTime(void)
+* qint64 toMSecsSinceEpoch(void)
+* QString toString(QString format)
+* QString toString_2(Qt::DateFormat format)
+* QDateTime toTimeSpec(Qt::TimeSpec specification)
+* uint toTime_t(void)
+* QDateTime toUTC(void)
+* QDateTime currentDateTime(void)
+* QDateTime currentDateTimeUtc(void)
+* qint64 currentMSecsSinceEpoch(void)
+* QDateTime fromMSecsSinceEpoch(qint64 msecs)
+* QDateTime fromString(QString string, Qt::DateFormat format)
+* QDateTime fromString_2(QString string, QString format)
+* QDateTime fromTime_t(uint seconds)
+
+.. index::
+       pair: RingQt Classes Reference; QDateTimeEdit Class
+
+QDateTimeEdit Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdatetimeedit.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSpinBox
+
+* bool calendarPopup(void)
+* QCalendarWidget *calendarWidget(void)
+* void clearMaximumDate(void)
+* void clearMaximumDateTime(void)
+* void clearMaximumTime(void)
+* void clearMinimumDate(void)
+* void clearMinimumDateTime(void)
+* void clearMinimumTime(void)
+* int currentSection(void)
+* int currentSectionIndex(void)
+* QDate date(void)
+* QDateTime dateTime(void)
+* QString displayFormat(void)
+* int displayedSections(void)
+* QDate maximumDate(void)
+* QDateTime maximumDateTime(void)
+* QTime maximumTime(void)
+* QDate minimumDate(void)
+* QDateTime minimumDateTime(void)
+* QTime minimumTime(void)
+* int sectionAt(int index)
+* int sectionCount(void)
+* QString sectionText(QDateTimeEdit::Section section)
+* void setCalendarPopup(bool enable)
+* void setCalendarWidget(QCalendarWidget *calendarWidget)
+* void setCurrentSection(QDateTimeEdit::Section section)
+* void setCurrentSectionIndex(int index)
+* void setDateRange(QDate,QDate)
+* void setDateTimeRange(QDateTime,QDateTime)
+* void setDisplayFormat(QString)
+* void setMaximumDate(QDate)
+* void setMaximumDateTime(QDateTime)
+* void setMaximumTime(QTime)
+* void setMinimumDate(QDate)
+* void setMinimumDateTime(QDateTime)
+* void setMinimumTime(QTime)
+* void setSelectedSection(QDateTimeEdit::Section section)
+* void setTimeRange(QTime,QTime)
+* void setTimeSpec(Qt::TimeSpec spec)
+* QTime time(void)
+* Qt::TimeSpec timeSpec(void)
+* void setDate(QDate)
+* void setDateTime(QDateTime)
+* void setTime(QTime)
+
+.. index::
+       pair: RingQt Classes Reference; QDepthTest Class
+
+QDepthTest Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qdepthtest.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DRender::QDepthTest::DepthFunction depthFunction(void)
+* void setDepthFunction(Qt3DRender::QDepthTest::DepthFunction depthFunction)
+
+.. index::
+       pair: RingQt Classes Reference; QDesktopServices Class
+
+QDesktopServices Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdesktopservices.html
+
+* bool openUrl(QUrl)
+* void setUrlHandler(QString, QObject *receiver, const char *method)
+* void unsetUrlHandler(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QDesktopWidget Class
+
+QDesktopWidget Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdesktopwidget.html
+
+
+Parameters : void
+
+
+Parent Class : QWidget
+
+* QRect availableGeometry(int screen)
+* bool isVirtualDesktop(void)
+* int primaryScreen(void)
+* QWidget *screen(int screen)
+* int screenCount(void)
+* QRect screenGeometry(int screen)
+* int screenNumber(QWidget *widget)
+
+.. index::
+       pair: RingQt Classes Reference; QDial Class
+
+QDial Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdial.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSlider
+
+* int notchSize(void)
+* qreal notchTarget(void)
+* bool notchesVisible(void)
+* void setNotchTarget(double target)
+* bool wrapping(void)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setNotchesVisible(bool visible)
+* void setWrapping(bool on)
+* void setactionTriggeredEvent(const char *)
+* void setrangeChangedEvent(const char *)
+* void setsliderMovedEvent(const char *)
+* void setsliderPressedEvent(const char *)
+* void setsliderReleasedEvent(const char *)
+* void setvalueChangedEvent(const char *)
+* const char *getactionTriggeredEvent(void)
+* const char *getrangeChangedEvent(void)
+* const char *getsliderMovedEvent(void)
+* const char *getsliderPressedEvent(void)
+* const char *getsliderReleasedEvent(void)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDialog Class
+
+QDialog Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdialog.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool isSizeGripEnabled(void)
+* int result(void)
+* void setModal(bool modal)
+* void setResult(int i)
+* void setSizeGripEnabled(bool)
+* void accept(void)
+* void done(int r) # In RingQt use : void donedialog(int r)
+* int exec(void)
+* void open(void)
+* void reject(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDiffuseSpecularMaterial Class
+
+QDiffuseSpecularMaterial Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qdiffusespecularmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QColor ambient(void)
+* QVariant diffuse(void)
+* bool isAlphaBlendingEnabled(void)
+* QVariant normal(void)
+* float shininess(void)
+* QVariant specular(void)
+* float textureScale(void)
+* void setAlphaBlendingEnabled(bool enabled)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QVariant diffuse)
+* void setNormal(QVariant normal)
+* void setShininess(float shininess)
+* void setSpecular(QVariant specular)
+* void setTextureScale(float textureScale)
+
+.. index::
+       pair: RingQt Classes Reference; QDir Class
+
+QDir Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdir.html
+
+
+Parameters : void
+
+* QString absoluteFilePath(QString fileName)
+* QString absolutePath(void)
+* QString canonicalPath(void)
+* bool cd(QString dirName)
+* bool cdUp(void)
+* uint count(void)
+* QString dirName(void)
+* QFileInfoList entryInfoList(QStringList nameFilters, QDir::Filters filters, QDir::SortFlags sort)
+* QFileInfoList entryInfoList_2(QDir::Filters filters, QDir::SortFlags sort)
+* QStringList entryList(QStringList nameQDir::Filters, QDir::Filters filters, QDir::SortFlags sort)
+* QStringList entryList_2(QDir::Filters filters, QDir::SortFlags sort)
+* bool exists(QString name)
+* bool exists_2(void)
+* QString filePath(QString fileName)
+* QDir::Filters filter(void)
+* bool isAbsolute(void)
+* bool isReadable(void)
+* bool isRelative(void)
+* bool isRoot(void)
+* bool makeAbsolute(void)
+* bool mkdir(QString dirName)
+* bool mkpath(QString dirPath)
+* QStringList nameFilters(void)
+* QString path(void)
+* void refresh(void)
+* QString relativeFilePath(QString fileName)
+* bool remove(QString fileName)
+* bool removeRecursively(void)
+* bool rename(QString oldName, QString newName)
+* bool rmdir(QString dirName)
+* bool rmpath(QString dirPath)
+* void setFilter(QDir::Filters filters)
+* void setNameFilters(QStringList nameQDir::Filters)
+* void setPath(QString path)
+* void setSorting(QDir::SortFlags sort)
+* QDir::SortFlags sorting(void)
+* void swap(QDir other)
+* void addSearchPath(QString prefix, QString path)
+* QString cleanPath(QString path)
+* QDir current(void)
+* QString currentPath(void)
+* QFileInfoList drives(void)
+* QString fromNativeSeparators(QString pathName)
+* QDir home(void)
+* QString homePath(void)
+* bool isAbsolutePath(QString path)
+* bool isRelativePath(QString path)
+* bool match(QString filter, QString fileName)
+* bool match_2(QStringList filters, QString fileName)
+* QDir root(void)
+* QString rootPath(void)
+* QStringList searchPaths(QString prefix)
+* QChar separator(void)
+* bool setCurrent(QString path)
+* void setSearchPaths(QString prefix, QStringList searchPaths)
+* QDir temp(void)
+* QString tempPath(void)
+* QString toNativeSeparators(QString pathName)
+
+.. index::
+       pair: RingQt Classes Reference; QDirModel Class
+
+QDirModel Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdirmodel.html
+
+
+Parameters : void
+
+* QIcon fileIcon(QModelIndex)
+* QFileInfo fileInfo(QModelIndex)
+* QString fileName(QModelIndex)
+* QString filePath(QModelIndex)
+* int filter(void)
+* QFileIconProvider *iconProvider(void)
+* QModelIndex index(QString path, int column)
+* bool isDir(QModelIndex)
+* bool isReadOnly(void)
+* bool lazyChildCount(void)
+* QModelIndex mkdir(QModelIndex parent, QString name)
+* QStringList nameFilters(void)
+* bool remove(QModelIndex index)
+* bool resolveSymlinks(void)
+* bool rmdir(QModelIndex index)
+* void setFilter(QDir::Filter filters)
+* void setIconProvider(QFileIconProvider *provider)
+* void setLazyChildCount(bool enable)
+* void setNameFilters(QStringList filters)
+* void setReadOnly(bool enable)
+* void setResolveSymlinks(bool enable)
+* void setSorting(QDir::SortFlag sort)
+* int sorting(void)
+* void refresh(QModelIndex parent)
+
+.. index::
+       pair: RingQt Classes Reference; QDockWidget Class
+
+QDockWidget Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdockwidget.html
+
+
+Parameters : QWidget *parent,Qt::WindowType flag
+
+
+Parent Class : QWidget
+
+* int allowedAreas(void)
+* int features(void)
+* bool isAreaAllowed(Qt::DockWidgetArea area)
+* bool isFloating(void)
+* void setAllowedAreas(Qt::DockWidgetArea areas)
+* void setFeatures(QDockWidget::DockWidgetFeature features)
+* void setFloating(bool floating)
+* void setTitleBarWidget(QWidget *widget)
+* void setWidget(QWidget *widget)
+* QWidget *titleBarWidget(void)
+* QAction *toggleViewAction(void)
+* QWidget *widget(void)
+* void allowedAreasChanged(Qt::DockWidgetArea allowedAreas)
+* void dockLocationChanged(Qt::DockWidgetArea area)
+* void featuresChanged(QDockWidget::DockWidgetFeature features)
+* void topLevelChanged(bool topLevel)
+* void visibilityChanged(bool visible)
+* void setallowedAreasChangedEvent(const char *)
+* void setdockLocationChangedEvent(const char *)
+* void setfeaturesChangedEvent(const char *)
+* void settopLevelChangedEvent(const char *)
+* void setvisibilityChangedEvent(const char *)
+* const char *getallowedAreasChangedEvent(void)
+* const char *getdockLocationChangedEvent(void)
+* const char *getfeaturesChangedEvent(void)
+* const char *gettopLevelChangedEvent(void)
+* const char *getvisibilityChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDrag Class
+
+QDrag Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdrag.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* Qt::DropAction defaultAction(void)
+* QPixmap dragCursor(Qt::DropAction action)
+* Qt::DropAction exec(Qt::DropActions supportedActions)
+* Qt::DropAction exec_2(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction)
+* QPoint hotSpot(void)
+* QMimeData *mimeData(void)
+* QPixmap pixmap(void)
+* void setDragCursor(QPixmap cursor, Qt::DropAction action)
+* void setHotSpot(QPoint hotspot)
+* void setMimeData(QMimeData * data)
+* void setPixmap(QPixmap pixmap)
+* QObject * source(void)
+* Qt::DropActions supportedActions(void)
+* QObject * target(void)
+* void setactionChangedEvent(const char *)
+* void settargetChangedEvent(const char *)
+* const char *getactionChangedEvent(void)
+* const char *gettargetChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDragEnterEvent Class
+
+QDragEnterEvent Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdragenterevent.html
+
+
+Parameters : QPoint,Qt::DropActions,const QMimeData *,Qt::MouseButtons,Qt::KeyboardModifiers
+
+
+Parent Class : QDragMoveEvent
+
+
+.. index::
+       pair: RingQt Classes Reference; QDragLeaveEvent Class
+
+QDragLeaveEvent Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdragleaveevent.html
+
+
+Parameters : void
+
+
+Parent Class : QEvent
+
+
+.. index::
+       pair: RingQt Classes Reference; QDragMoveEvent Class
+
+QDragMoveEvent Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdragmoveevent.html
+
+
+Parameters : QPoint,Qt::DropActions,const QMimeData *,Qt::MouseButtons,Qt::KeyboardModifiers,QEvent::Type
+
+
+Parent Class : QDropEvent
+
+* void accept(QRect rectangle)
+* void accept_2(void)
+* QRect answerRect(void)
+* void ignore(QRect rectangle)
+* void ignore_2(void)
+
+.. index::
+       pair: RingQt Classes Reference; QDropEvent Class
+
+QDropEvent Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qdropevent.html
+
+
+Parameters : QPointF,Qt::DropActions,const QMimeData *,Qt::MouseButtons,Qt::KeyboardModifiers,QEvent::Type
+
+
+Parent Class : QEvent
+
+* void acceptProposedAction(void)
+* Qt::DropAction dropAction(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+* QMimeData * mimeData(void)
+* Qt::MouseButtons mouseButtons(void)
+* QPoint pos(void)
+* QPointF posF(void)
+* Qt::DropActions possibleActions(void)
+* Qt::DropAction proposedAction(void)
+* void setDropAction(Qt::DropAction action)
+* QObject * source(void)
+
+.. index::
+       pair: RingQt Classes Reference; QEffect Class
+
+QEffect Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qeffect.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void addParameter(Qt3DRender::QParameter *parameter)
+* void addTechnique(Qt3DRender::QTechnique *t)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void removeTechnique(Qt3DRender::QTechnique *t)
+* QVector<Qt3DRender::QTechnique *> techniques(void)
+
+.. index::
+       pair: RingQt Classes Reference; QEntity Class
+
+QEntity Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qentity.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QNode
+
+* void addComponent(Qt3DCore::QComponent *comp)
+* Qt3DCore::QComponentVector components(void)
+* Qt3DCore::QEntity * parentEntity(void)
+* void removeComponent(Qt3DCore::QComponent *comp)
+
+.. index::
+       pair: RingQt Classes Reference; QEvent Class
+
+QEvent Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qevent.html
+
+
+Parameters : QEvent::Type Type
+
+* void accept(void)
+* void ignore(void)
+* bool isAccepted(void)
+* void setAccepted(bool accepted)
+* bool spontaneous(void)
+* int type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QExtrudedTextMesh Class
+
+QExtrudedTextMesh Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qextrudedtextmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float depth(void)
+* QFont font(void)
+* QString text(void)
+* void setDepth(float depth)
+* void setFont(QFont font)
+* void setText(QString text)
+
+.. index::
+       pair: RingQt Classes Reference; QFile Class
+
+QFile Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfile.html
+
+
+Parameters : void
+
+
+Parent Class : QFileDevice
+
+* bool copy(QString newName)
+* bool exists(void)
+* bool link(QString linkName)
+* bool open(FILE *fh, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags)
+* bool open_2(int fd, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags)
+* bool open_3(QIODevice::OpenMode mode)
+* bool remove(void)
+* bool rename(QString newName)
+* void setFileName(QString name)
+* QString symLinkTarget(void)
+* bool copy_2(QString fileName, QString newName)
+* QString decodeName(QByteArray localFileName)
+* QString decodeName_2(char *localFileName)
+* QByteArray encodeName(QString fileName)
+* bool exists_2(QString fileName)
+* bool link_2(QString fileName, QString linkName)
+* QFile::Permissions permissions(QString fileName)
+* bool remove_2(QString fileName)
+* bool rename_2(QString oldName, QString newName)
+* bool resize(QString fileName, qint64 sz)
+* bool setPermissions(QString fileName, QFile::Permissions permissions)
+* QString symLinkTarget_2(QString fileName)
+
+.. index::
+       pair: RingQt Classes Reference; QFile2 Class
+
+QFile2 Class
+============
+
+
+Parameters : QString
+
+
+Parent Class : QFile
+
+
+.. index::
+       pair: RingQt Classes Reference; QFileDevice Class
+
+QFileDevice Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfiledevice.html
+
+
+Parent Class : QIODevice
+
+* QFileDevice::FileError error(void)
+* bool flush(void)
+* int handle(void)
+* uchar * map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags)
+* QFileDevice::Permissions permissions(void)
+* bool resize(qint64 sz)
+* QString fileName(void)
+* bool unmap(uchar *address)
+* void unsetError(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFileDialog Class
+
+QFileDialog Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfiledialog.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int acceptMode(void)
+* QString defaultSuffix(void)
+* QDir directory(void)
+* QUrl directoryUrl(void)
+* int fileMode(void)
+* int filter(void)
+* QStringList history(void)
+* QFileIconProvider *iconProvider(void)
+* QAbstractItemDelegate *itemDelegate(void)
+* QString labelText(QFileDialog::DialogLabel label)
+* QStringList mimeTypeFilters(void)
+* QStringList nameFilters(void)
+* void open(QObject *receiver, const char *member)
+* int options(void)
+* QAbstractProxyModel *proxyModel(void)
+* bool restoreState(QByteArray)
+* QByteArray saveState(void)
+* void selectFile(QString)
+* void selectMimeTypeFilter(QString)
+* void selectNameFilter(QString)
+* void selectUrl(QUrl)
+* QStringList selectedFiles(void)
+* QString selectedNameFilter(void)
+* void setDefaultSuffix(QString)
+* void setDirectory(QString)
+* void setDirectoryUrl(QUrl)
+* void setFileMode(QFileDialog::FileMode mode)
+* void setFilter(QDir::Filter filters)
+* void setHistory(QStringList)
+* void setIconProvider(QFileIconProvider *provider)
+* void setItemDelegate(QAbstractItemDelegate *delegate)
+* void setLabelText(QFileDialog::DialogLabel label, QString)
+* void setMimeTypeFilters(QStringList)
+* void setNameFilter(QString)
+* void setNameFilters(QStringList)
+* void setOption(QFileDialog::Option option, bool)
+* void setOptions(QFileDialog::Option options)
+* void setProxyModel(QAbstractProxyModel *proxyModel)
+* int viewMode(void)
+* QString getExistingDirectory(QWidget *,QString,QString, QFileDialog::Option)
+* QUrl getExistingDirectoryUrl(QWidget *,QString,QUrl, QFileDialog::Option,QStringList)
+* QString getOpenFileName(QWidget *,QString,QString,QString)
+* QUrl getSaveFileUrl(QWidget *,QString, QUrl,QString, QString *, QFileDialog::Option options,QStringList)
+
+.. index::
+       pair: RingQt Classes Reference; QFileInfo Class
+
+QFileInfo Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfileinfo.html
+
+
+Parameters : void
+
+* QDir absoluteDir(void)
+* QString absoluteFilePath(void)
+* QString absolutePath(void)
+* QString baseName(void)
+* QString bundleName(void)
+* bool caching(void)
+* QString canonicalFilePath(void)
+* QString canonicalPath(void)
+* QString completeBaseName(void)
+* QString completeSuffix(void)
+* QDateTime created(void)
+* QDir dir(void)
+* bool exists(void)
+* QString fileName(void)
+* QString filePath(void)
+* QString group(void)
+* int groupId(void)
+* bool isAbsolute(void)
+* bool isBundle(void)
+* bool isDir(void)
+* bool isExecutable(void)
+* bool isFile(void)
+* bool isHidden(void)
+* bool isNativePath(void)
+* bool isReadable(void)
+* bool isRelative(void)
+* bool isRoot(void)
+* bool isSymLink(void)
+* bool isWritable(void)
+* QDateTime lastModified(void)
+* QDateTime lastRead(void)
+* bool makeAbsolute(void)
+* QString owner(void)
+* uint ownerId(void)
+* QString path(void)
+* bool permission(QFileDevice::Permission permissions)
+* int permissions(void)
+* void refresh(void)
+* void setCaching(bool enable)
+* void setFile(QString)
+* int size(void)
+* QString suffix(void)
+* void swap(QFileInfo)
+* QString symLinkTarget(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFileSystemModel Class
+
+QFileSystemModel Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfilesystemmodel.html
+
+
+Parameters : void
+
+* QIcon fileIcon(QModelIndex)
+* QFileInfo fileInfo(QModelIndex)
+* QString fileName(QModelIndex)
+* QString filePath(QModelIndex)
+* int filter(void)
+* QFileIconProvider *iconProvider(void)
+* QModelIndex index(QString, int column)
+* bool isDir(QModelIndex)
+* bool isReadOnly(void)
+* QDateTime lastModified(QModelIndex)
+* QModelIndex mkdir(QModelIndex,QString)
+* QVariant myComputer(int role)
+* bool nameFilterDisables(void)
+* QStringList nameFilters(void)
+* int permissions(QModelIndex)
+* bool remove(QModelIndex)
+* bool resolveSymlinks(void)
+* bool rmdir(QModelIndex)
+* QDir rootDirectory(void)
+* QString rootPath(void)
+* void setFilter(QDir::Filter filters)
+* void setIconProvider(QFileIconProvider *provider)
+* void setNameFilterDisables(bool enable)
+* void setNameFilters(QStringList)
+* void setReadOnly(bool enable)
+* void setResolveSymlinks(bool enable)
+* QModelIndex setRootPath(QString)
+* int size(QModelIndex)
+* QString type(QModelIndex)
+* bool canFetchMore(QModelIndex)
+* int columnCount(void)
+* QVariant data( QModelIndex index, int role)
+* bool dropMimeData( QMimeData *data, Qt::DropAction action, int row, int column, QModelIndex parent)
+* void fetchMore( QModelIndex parent)
+* int flags( QModelIndex index)
+* bool hasChildren( QModelIndex parent )
+* QVariant headerData(int section, Qt::Orientation orientation, int role )
+* QMimeData * mimeData( QModelIndexList indexes)
+* QStringList mimeTypes(void)
+* QModelIndex parent( QModelIndex index)
+* int rowCount( QModelIndex parent)
+* bool setData( QModelIndex idx,  QVariant value, int role)
+* void sort(int column, Qt::SortOrder order )
+* int supportedDropActions(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFirstPersonCameraController Class
+
+QFirstPersonCameraController Class
+==================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qfirstpersoncameracontroller.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QAbstractCameraController
+
+
+.. index::
+       pair: RingQt Classes Reference; QFont Class
+
+QFont Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfont.html
+
+
+Parameters : QString, int, int, bool
+
+* bool bold(void)
+* int capitalization(void)
+* QString defaultFamily(void)
+* bool exactMatch(void)
+* QString family(void)
+* bool fixedPitch(void)
+* bool fromString(QString)
+* int hintingPreference(void)
+* bool isCopyOf(QFont)
+* bool italic(void)
+* bool kerning(void)
+* QString key(void)
+* QString lastResortFamily(void)
+* QString lastResortFont(void)
+* double letterSpacing(void)
+* int letterSpacingType(void)
+* bool overline(void)
+* int pixelSize(void)
+* int pointSize(void)
+* double pointSizeF(void)
+* bool rawMode(void)
+* QString rawName(void)
+* QFont resolve(QFont)
+* void setBold(bool enable)
+* void setCapitalization(QFont::Capitalization caps)
+* void setFamily(QString)
+* void setFixedPitch(bool enable)
+* void setHintingPreference(QFont::HintingPreference hintingPreference)
+* void setItalic(bool enable)
+* void setKerning(bool enable)
+* void setLetterSpacing(QFont::SpacingType type, double spacing)
+* void setOverline(bool enable)
+* void setPixelSize(int pixelSize)
+* void setPointSize(int pointSize)
+* void setPointSizeF(double pointSize)
+* void setRawMode(bool enable)
+* void setRawName(QString)
+* void setStretch(int factor)
+* void setStrikeOut(bool enable)
+* void setStyle(QFont::Style style)
+* void setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy)
+* void setStyleName(QString)
+* void setStyleStrategy(QFont::StyleStrategy s)
+* void setUnderline(bool enable)
+* void setWeight(int weight)
+* void setWordSpacing(double spacing)
+* int stretch(void)
+* bool strikeOut(void)
+* int style(void)
+* int styleHint(void)
+* QString styleName(void)
+* int styleStrategy(void)
+* QString toString(void)
+* bool underline(void)
+* int weight(void)
+* double wordSpacing(void)
+* void insertSubstitution(QString,QString)
+* void insertSubstitutions(QString,QStringList)
+* QString substitute(QString)
+* QStringList substitutes(QString)
+* QStringList substitutions(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFontDialog Class
+
+QFontDialog Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfontdialog.html
+
+
+Parameters : void
+
+
+Parent Class : QDialog
+
+* QFont currentFont(void)
+* void open(QObject *receiver, const char *member)
+* int options(void)
+* QFont selectedFont(void)
+* void setCurrentFont(QFont)
+* void setOption(QFontDialog::FontDialogOption option, bool on)
+* void setOptions(QFontDialog::FontDialogOption options)
+* bool testOption(QFontDialog::FontDialogOption option)
+* int getfont(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFontMetrics Class
+
+QFontMetrics Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qfontmetrics.html
+
+
+Parameters : QFont
+
+* int ascent(void)
+* int averageCharWidth(void)
+* QRect boundingRect(QChar ch)
+* QRect boundingRect_2( QString   text)
+* QRect boundingRect_3(int x, int y, int width, int height, int flags,  QString   text, int tabStops , int * tabArray )
+* QRect boundingRect_4( QRect   rect, int flags,  QString   text, int tabStops , int * tabArray )
+* int descent(void)
+* QString elidedText( QString   text, Qt::TextElideMode mode, int width, int flags )
+* int height(void)
+* bool inFont(QChar ch)
+* bool inFontUcs4(uint character)
+* int leading(void)
+* int leftBearing(QChar ch)
+* int lineSpacing(void)
+* int lineWidth(void)
+* int maxWidth(void)
+* int minLeftBearing(void)
+* int minRightBearing(void)
+* int overlinePos(void)
+* int rightBearing(QChar ch)
+* QSize size(int flags,  QString   text, int tabStops , int * tabArray )
+* int strikeOutPos(void)
+* QRect tightBoundingRect( QString   text)
+* int underlinePos(void)
+* int width( QString   text, int len )
+* int width_2(QChar ch)
+* int xHeight(void)
+
+.. index::
+       pair: RingQt Classes Reference; QForwardRenderer Class
+
+QForwardRenderer Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qforwardrenderer.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* Qt3DCore::QEntity * camera(void)
+* QColor clearColor(void)
+* QSize externalRenderTargetSize(void)
+* float gamma(void)
+* bool isFrustumCullingEnabled(void)
+* QObject * surface(void)
+* QRectF viewportRect(void)
+* void setCamera(Qt3DCore::QEntity *camera)
+* void setClearColor(QColor clearColor)
+* void setExternalRenderTargetSize(QSize size)
+* void setFrustumCullingEnabled(bool enabled)
+* void setGamma(float gamma)
+* void setSurface(QObject *surface)
+* void setViewportRect(QRectF viewportRect)
+
+.. index::
+       pair: RingQt Classes Reference; QFrame Class
+
+QFrame Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qframe.html
+
+
+Parameters : QWidget *parent, Qt::WindowType flag
+
+
+Parent Class : QWidget
+
+* QRect frameRect(void)
+* int frameShadow(void)
+* int frameShape(void)
+* int frameStyle(void)
+* int frameWidth(void)
+* int lineWidth(void)
+* int midLineWidth(void)
+* void setFrameRect(QRect)
+* void setFrameShadow(QFrame::Shadow)
+* void setFrameShape(QFrame::Shape)
+* void setFrameStyle(int style)
+* void setLineWidth(int)
+* void setMidLineWidth(int)
+* QSize sizeHint(void)
+
+.. index::
+       pair: RingQt Classes Reference; QFrame2 Class
+
+QFrame2 Class
+=============
+
+
+Parameters : void
+
+
+Parent Class : QFrame
+
+
+.. index::
+       pair: RingQt Classes Reference; QFrame3 Class
+
+QFrame3 Class
+=============
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QFrame
+
+
+.. index::
+       pair: RingQt Classes Reference; QFrameAction Class
+
+QFrameAction Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dlogic-qframeaction.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void settriggeredEvent(const char *)
+* const char *gettriggeredEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoAddress Class
+
+QGeoAddress Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoaddress.html
+
+
+Parameters : void
+
+* QString city(void)
+* void clear(void)
+* QString country(void)
+* QString countryCode(void)
+* QString county(void)
+* QString district(void)
+* bool isEmpty(void)
+* bool isTextGenerated(void)
+* QString postalCode(void)
+* void setCity(QString city)
+* void setCountry(QString country)
+* void setCountryCode(QString countryCode)
+* void setCounty(QString county)
+* void setDistrict(QString district)
+* void setPostalCode(QString postalCode)
+* void setState(QString state)
+* void setStreet(QString street)
+* void setText(QString text)
+* QString state(void)
+* QString street(void)
+* QString text(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoAreaMonitorInfo Class
+
+QGeoAreaMonitorInfo Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoareamonitorinfo.html
+
+
+Parameters : QString
+
+* QGeoShape area(void)
+* QDateTime expiration(void)
+* QString identifier(void)
+* bool isPersistent(void)
+* bool isValid(void)
+* QString name(void)
+* QVariantMap notificationParameters(void)
+* void setArea(QGeoShape newShape)
+* void setExpiration(QDateTime expiry)
+* void setName(QString name)
+* void setNotificationParameters(QVariantMap parameters)
+* void setPersistent(bool isPersistent)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoAreaMonitorSource Class
+
+QGeoAreaMonitorSource Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoareamonitorsource.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QString sourceName(void)
+* QStringList availableSources(void)
+* QGeoAreaMonitorSource * createDefaultSource(QObject * parent)
+* QGeoAreaMonitorSource * createSource(QString sourceName, QObject * parent)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoCircle Class
+
+QGeoCircle Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeocircle.html
+
+
+Parameters : void
+
+* QGeoCoordinate center(void)
+* qreal radius(void)
+* void setCenter(QGeoCoordinate center)
+* void setRadius(qreal radius)
+* void translate(double degreesLatitude, double degreesLongitude)
+* QGeoCircle translated(double degreesLatitude, double degreesLongitude)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoCoordinate Class
+
+QGeoCoordinate Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeocoordinate.html
+
+
+Parameters : void
+
+* double altitude(void)
+* QGeoCoordinate atDistanceAndAzimuth(qreal distance, qreal azimuth, qreal distanceUp)
+* qreal azimuthTo(QGeoCoordinate other)
+* qreal distanceTo(QGeoCoordinate other)
+* bool isValid(void)
+* double latitude(void)
+* double longitude(void)
+* void setAltitude(double altitude)
+* void setLatitude(double latitude)
+* void setLongitude(double longitude)
+* QString toString(QGeoCoordinate::CoordinateFormat format)
+* QGeoCoordinate::CoordinateType type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoPositionInfo Class
+
+QGeoPositionInfo Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeopositioninfo.html
+
+
+Parameters : void
+
+* qreal attribute(QGeoPositionInfo::Attribute attribute)
+* QGeoCoordinate coordinate(void)
+* bool hasAttribute(QGeoPositionInfo::Attribute attribute)
+* bool isValid(void)
+* void removeAttribute(QGeoPositionInfo::Attribute attribute)
+* void setAttribute(QGeoPositionInfo::Attribute attribute, qreal value)
+* void setCoordinate(QGeoCoordinate coordinate)
+* void setTimestamp(QDateTime timestamp)
+* QDateTime timestamp(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoPositionInfoSource Class
+
+QGeoPositionInfoSource Class
+============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeopositioninfosource.html
+
+
+Parent Class : QObject
+
+* QGeoPositionInfoSource::PositioningMethods preferredPositioningMethods(void)
+* QString sourceName(void)
+* int updateInterval(void)
+* void seterrorEvent(const char *)
+* void setpositionUpdatedEvent(const char *)
+* void setupdateTimeoutEvent(const char *)
+* const char *geterrorEvent(void)
+* const char *getpositionUpdatedEvent(void)
+* const char *getupdateTimeoutEvent(void)
+* QStringList availableSources(void)
+* QGeoPositionInfoSource *createDefaultSource(QObject *parent)
+* QGeoPositionInfoSource *createSource(QString sourceName, QObject *parent)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoRectangle Class
+
+QGeoRectangle Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeorectangle.html
+
+
+Parameters : void
+
+
+Parent Class : QGeoShape
+
+* QGeoCoordinate bottomLeft(void)
+* QGeoCoordinate bottomRight(void)
+* QGeoCoordinate center(void)
+* bool contains(QGeoRectangle rectangle)
+* double height(void)
+* bool intersects(QGeoRectangle rectangle)
+* void setBottomLeft(QGeoCoordinate bottomLeft)
+* void setBottomRight(QGeoCoordinate bottomRight)
+* void setCenter(QGeoCoordinate center)
+* void setHeight(double degreesHeight)
+* void setTopLeft(QGeoCoordinate topLeft)
+* void setTopRight(QGeoCoordinate topRight)
+* void setWidth(double degreesWidth)
+* QGeoCoordinate topLeft(void)
+* QGeoCoordinate topRight(void)
+* void translate(double degreesLatitude, double degreesLongitude)
+* QGeoRectangle translated(double degreesLatitude, double degreesLongitude)
+* QGeoRectangle united(QGeoRectangle rectangle)
+* double width(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoSatelliteInfo Class
+
+QGeoSatelliteInfo Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeosatelliteinfo.html
+
+
+Parameters : void
+
+* qreal attribute(QGeoSatelliteInfo::Attribute attribute)
+* bool hasAttribute(QGeoSatelliteInfo::Attribute attribute)
+* void removeAttribute(QGeoSatelliteInfo::Attribute attribute)
+* int satelliteIdentifier(void)
+* QGeoSatelliteInfo::SatelliteSystem satelliteSystem(void)
+* void setAttribute(QGeoSatelliteInfo::Attribute attribute, qreal value)
+* void setSatelliteIdentifier(int satId)
+* void setSatelliteSystem(QGeoSatelliteInfo::SatelliteSystem system)
+* void setSignalStrength(int signalStrength)
+* int signalStrength(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoSatelliteInfoSource Class
+
+QGeoSatelliteInfoSource Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeosatelliteinfosource.html
+
+* QString sourceName(void)
+* int updateInterval(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGeoShape Class
+
+QGeoShape Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgeoshape.html
+
+
+Parameters : void
+
+* bool contains(QGeoCoordinate coordinate)
+* bool isEmpty(void)
+* bool isValid(void)
+* QGeoShape::ShapeType type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGoochMaterial Class
+
+QGoochMaterial Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qgoochmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float alpha(void)
+* float beta(void)
+* QColor cool(void)
+* QColor diffuse(void)
+* float shininess(void)
+* QColor specular(void)
+* QColor warm(void)
+* void setAlpha(float alpha)
+* void setBeta(float beta)
+* void setCool(QColor cool)
+* void setDiffuse(QColor diffuse)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+* void setWarm(QColor warm)
+
+.. index::
+       pair: RingQt Classes Reference; QGradient Class
+
+QGradient Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgradient.html
+
+
+Parameters : void
+
+* QGradient::CoordinateMode coordinateMode(void)
+* void setColorAt(qreal position,  QColor   color)
+* void setCoordinateMode(QGradient::CoordinateMode mode)
+* void setSpread(QGradient::Spread method)
+* void setStops(QGradientStops stopPoints)
+* QGradient::Spread spread(void)
+* QGradientStops stops(void)
+* QGradient::Type type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGraphicsVideoItem Class
+
+QGraphicsVideoItem Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgraphicsvideoitem.html
+
+
+Parameters : void
+
+* Qt::AspectRatioMode aspectRatioMode(void)
+* QSizeF nativeSize(void)
+* QPointF offset(void)
+* void setAspectRatioMode(Qt::AspectRatioMode mode)
+* void setOffset(QPointF offset)
+* void setSize(QSizeF size)
+* QSizeF size(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGraphicsView Class
+
+QGraphicsView Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgraphicsview.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* Qt::Alignment alignment(void)
+* QBrush backgroundBrush(void)
+* QGraphicsView::CacheMode cacheMode(void)
+* void centerOn(QPointF pos)
+* void centerOn_2(qreal x, qreal y)
+* void centerOn_3(QGraphicsItem *item)
+* QGraphicsView::DragMode dragMode(void)
+* void ensureVisible(QRectF rect, int xmargin, int ymargin)
+* void ensureVisible_2(qreal x, qreal y, qreal w, qreal h, int xmargin, int ymargin)
+* void ensureVisible_3(QGraphicsItem *item, int xmargin, int ymargin)
+* void fitInView(QRectF rect, Qt::AspectRatioMode aspectRatioMode)
+* void fitInView_2(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode aspectRatioMode)
+* void fitInView_3(QGraphicsItem *item, Qt::AspectRatioMode aspectRatioMode)
+* QBrush foregroundBrush(void)
+* bool isInteractive(void)
+* bool isTransformed(void)
+* QGraphicsItem * itemAt(QPoint pos)
+* QGraphicsItem * itemAt_2(int x, int y)
+* QList<QGraphicsItem *> items(void)
+* QList<QGraphicsItem *> items_2(QPoint pos)
+* QList<QGraphicsItem *> items_3(int x, int y)
+* QList<QGraphicsItem *> items_4(QRect rect, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem *> items_5(int x, int y, int w, int h, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem *> items_6(QPolygon polygon, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem *> items_7(QPainterPath path, Qt::ItemSelectionMode mode)
+* QPoint mapFromScene(QPointF point)
+* QPolygon mapFromScene_2(QRectF rect)
+* QPolygon mapFromScene_3(QPolygonF polygon)
+* QPainterPath mapFromScene_4(QPainterPath path)
+* QPoint mapFromScene_5(qreal x, qreal y)
+* QPolygon mapFromScene_6(qreal x, qreal y, qreal w, qreal h)
+* QPointF mapToScene(QPoint point)
+* QPolygonF mapToScene_2(QRect rect)
+* QPolygonF mapToScene_3(QPolygon polygon)
+* QPainterPath mapToScene_4(QPainterPath path)
+* QPointF mapToScene_5(int x, int y)
+* QPolygonF mapToScene_6(int x, int y, int w, int h)
+* QMatrix matrix(void)
+* QGraphicsView::OptimizationFlags optimizationFlags(void)
+* void render(QPainter *painter, QRectF target, QRect source, Qt::AspectRatioMode aspectRatioMode)
+* QPainter::RenderHints renderHints(void)
+* void resetCachedContent(void)
+* void resetMatrix(void)
+* void resetTransform(void)
+* QGraphicsView::ViewportAnchor resizeAnchor(void)
+* void rotate(qreal angle)
+* QRect rubberBandRect(void)
+* Qt::ItemSelectionMode rubberBandSelectionMode(void)
+* void scale(qreal sx, qreal sy)
+* QGraphicsScene * scene(void)
+* QRectF sceneRect(void)
+* void setAlignment(Qt::Alignment alignment)
+* void setBackgroundBrush(QBrush brush)
+* void setCacheMode(QGraphicsView::CacheMode mode)
+* void setDragMode(QGraphicsView::DragMode mode)
+* void setForegroundBrush(QBrush brush)
+* void setInteractive(bool allowed)
+* void setMatrix(QMatrix matrix, bool combine)
+* void setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled)
+* void setOptimizationFlags(QGraphicsView::OptimizationFlags flags)
+* void setRenderHint(QPainter::RenderHint hint, bool enabled)
+* void setRenderHints(QPainter::RenderHints hints)
+* void setResizeAnchor(QGraphicsView::ViewportAnchor anchor)
+* void setRubberBandSelectionMode(Qt::ItemSelectionMode mode)
+* void setScene(QGraphicsScene *scene)
+* void setSceneRect(QRectF rect)
+* void setSceneRect_2(qreal x, qreal y, qreal w, qreal h)
+* void setTransform(QTransform matrix, bool combine)
+* void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor)
+* void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode)
+* void shear(qreal sh, qreal sv)
+* QTransform transform(void)
+* QGraphicsView::ViewportAnchor transformationAnchor(void)
+* void translate(qreal dx, qreal dy)
+* QTransform viewportTransform(void)
+* QGraphicsView::ViewportUpdateMode viewportUpdateMode(void)
+* void invalidateScene(QRectF rect, QGraphicsScene::SceneLayers layers)
+* void updateScene(QList<QRectF> rects)
+* void updateSceneRect(QRectF rect)
+
+.. index::
+       pair: RingQt Classes Reference; QGridLayout Class
+
+QGridLayout Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qgridlayout.html
+
+
+Parameters : void
+
+* void addItem(QLayoutItem * item, int row, int column, int rowSpan , int columnSpan , Qt::Alignment alignment )
+* void addLayout(QLayout * layout, int row, int column, Qt::Alignment alignment )
+* void addLayout_2(QLayout * layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment )
+* void addWidget(QWidget * widget, int row, int column, Qt::Alignment alignment )
+* void addWidget_2(QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment )
+* QRect cellRect(int row, int column)
+* int columnCount(void)
+* int columnMinimumWidth(int column)
+* int columnStretch(int column)
+* void getItemPosition(int index, int * row, int * column, int * rowSpan, int * columnSpan)
+* int horizontalSpacing(void)
+* QLayoutItem * itemAtPosition(int row, int column)
+* Qt::Corner originCorner(void)
+* int rowCount(void)
+* int rowMinimumHeight(int row)
+* int rowStretch(int row)
+* void setColumnMinimumWidth(int column, int minSize)
+* void setColumnStretch(int column, int stretch)
+* void setHorizontalSpacing(int spacing)
+* void setOriginCorner(Qt::Corner corner)
+* void setRowMinimumHeight(int row, int minSize)
+* void setRowStretch(int row, int stretch)
+* void setSpacing(int spacing)
+* void setVerticalSpacing(int spacing)
+* int spacing(void)
+* int verticalSpacing(void)
+
+.. index::
+       pair: RingQt Classes Reference; QGuiApplication Class
+
+QGuiApplication Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qguiapplication.html
+
+
+Parent Class : QCoreApplication
+
+
+Parameters : int,char **
+
+* qreal devicePixelRatio(void)
+* bool isSavingSession(void)
+* bool isSessionRestored(void)
+* QString sessionId(void)
+* QString sessionKey(void)
+* QWindowList allWindows(void)
+* QString applicationDisplayName(void)
+* Qt::ApplicationState applicationState(void)
+* void changeOverrideCursor(QCursor cursor)
+* QClipboard * clipboard(void)
+* bool desktopSettingsAware(void)
+* int exec(void)
+* QObject * focusObject(void)
+* QWindow * focusWindow(void)
+* QFont font(void)
+* QInputMethod * inputMethod(void)
+* bool isLeftToRight(void)
+* bool isRightToLeft(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+* Qt::LayoutDirection layoutDirection(void)
+* QWindow * modalWindow(void)
+* Qt::MouseButtons mouseButtons(void)
+* QCursor * overrideCursor(void)
+* QPalette palette(void)
+* QString platformName(void)
+* QPlatformNativeInterface * platformNativeInterface(void)
+* QScreen * primaryScreen(void)
+* Qt::KeyboardModifiers queryKeyboardModifiers(void)
+* bool quitOnLastWindowClosed(void)
+* void restoreOverrideCursor(void)
+* QList<QScreen *> screens(void)
+* void setApplicationDisplayName(QString name)
+* void setDesktopSettingsAware(bool on)
+* void setFont(QFont font)
+* void setLayoutDirection(Qt::LayoutDirection direction)
+* void setOverrideCursor(QCursor cursor)
+* void setPalette(QPalette pal)
+* void setQuitOnLastWindowClosed(bool quit)
+* QStyleHints * styleHints(void)
+* void sync(void)
+* QWindow * topLevelAt(QPoint pos)
+* QWindowList topLevelWindows(void)
+* void setapplicationDisplayNameChangedEvent(const char *)
+* void setapplicationStateChangedEvent(const char *)
+* void setcommitDataRequestEvent(const char *)
+* void setfocusObjectChangedEvent(const char *)
+* void setfocusWindowChangedEvent(const char *)
+* void setfontDatabaseChangedEvent(const char *)
+* void setlastWindowClosedEvent(const char *)
+* void setlayoutDirectionChangedEvent(const char *)
+* void setpaletteChangedEvent(const char *)
+* void setprimaryScreenChangedEvent(const char *)
+* void setsaveStateRequestEvent(const char *)
+* void setscreenAddedEvent(const char *)
+* void setscreenRemovedEvent(const char *)
+* const char *getapplicationDisplayNameChangedEvent(void)
+* const char *getapplicationStateChangedEvent(void)
+* const char *getcommitDataRequestEvent(void)
+* const char *getfocusObjectChangedEvent(void)
+* const char *getfocusWindowChangedEvent(void)
+* const char *getfontDatabaseChangedEvent(void)
+* const char *getlastWindowClosedEvent(void)
+* const char *getlayoutDirectionChangedEvent(void)
+* const char *getpaletteChangedEvent(void)
+* const char *getprimaryScreenChangedEvent(void)
+* const char *getsaveStateRequestEvent(void)
+* const char *getscreenAddedEvent(void)
+* const char *getscreenRemovedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QHBoxLayout Class
+
+QHBoxLayout Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qhboxlayout.html
+
+
+Parameters : void
+
+
+Parent Class : QBoxLayout
+
+* void addWidget(QWidget *)
+* void addLayout(QLayout *)
+
+.. index::
+       pair: RingQt Classes Reference; QHeaderView Class
+
+QHeaderView Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qheaderview.html
+
+
+Parameters : Qt::Orientation, QWidget *
+
+
+Parent Class : QAbstractItemView
+
+* bool cascadingSectionResizes(void)
+* int count(void)
+* Qt::Alignment defaultAlignment(void)
+* int defaultSectionSize(void)
+* int hiddenSectionCount(void)
+* void hideSection(int logicalIndex)
+* bool highlightSections(void)
+* bool isSectionHidden(int logicalIndex)
+* bool isSortIndicatorShown(void)
+* int length(void)
+* int logicalIndex(int visualIndex)
+* int logicalIndexAt(int position)
+* int logicalIndexAt_2(int x, int y)
+* int logicalIndexAt_3( QPoint   pos)
+* int maximumSectionSize(void)
+* int minimumSectionSize_2(void)
+* void moveSection(int from, int to)
+* int offset(void)
+* Qt::Orientation orientation(void)
+* int resizeContentsPrecision(void)
+* void resizeSection(int logicalIndex, int size)
+* void resizeSections(QHeaderView::ResizeMode mode)
+* bool restoreState( QByteArray   state)
+* QByteArray saveState(void)
+* int sectionPosition(int logicalIndex)
+* QHeaderView::ResizeMode sectionResizeMode(int logicalIndex)
+* int sectionSize(int logicalIndex)
+* int sectionSizeHint(int logicalIndex)
+* int sectionViewportPosition(int logicalIndex)
+* bool sectionsClickable(void)
+* bool sectionsHidden(void)
+* bool sectionsMovable(void)
+* bool sectionsMoved(void)
+* void setCascadingSectionResizes(bool enable)
+* void setDefaultAlignment(Qt::Alignment alignment)
+* void setDefaultSectionSize(int size)
+* void setHighlightSections(bool highlight)
+* void setMaximumSectionSize(int size)
+* void setMinimumSectionSize(int size)
+* void setResizeContentsPrecision(int precision)
+* void setSectionHidden(int logicalIndex, bool hide)
+* void setSectionResizeMode(QHeaderView::ResizeMode mode)
+* void setSectionResizeMode_2(int logicalIndex, QHeaderView::ResizeMode mode)
+* void setSectionsClickable(bool clickable)
+* void setSectionsMovable(bool movable)
+* void setSortIndicator(int logicalIndex, Qt::SortOrder order)
+* void setSortIndicatorShown(bool show)
+* void setStretchLastSection(bool stretch)
+* void showSection(int logicalIndex)
+* Qt::SortOrder sortIndicatorOrder(void)
+* int sortIndicatorSection(void)
+* bool stretchLastSection(void)
+* int stretchSectionCount(void)
+* void swapSections(int first, int second)
+* int visualIndex(int logicalIndex)
+* int visualIndexAt(int position)
+* void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast)
+* void setOffset(int offset)
+* void setOffsetToLastSection(void)
+* void setOffsetToSectionPosition(int visualSectionNumber)
+* void setgeometriesChangedEvent(const char *)
+* void setsectionClickedEvent(const char *)
+* void setsectionCountChangedEvent(const char *)
+* void setsectionDoubleClickedEvent(const char *)
+* void setsectionEnteredEvent(const char *)
+* void setsectionHandleDoubleClickedEvent(const char *)
+* void setsectionMovedEvent(const char *)
+* void setsectionPressedEvent(const char *)
+* void setsectionResizedEvent(const char *)
+* void setsortIndicatorChangedEvent(const char *)
+* const char *getgeometriesChangedEvent(void)
+* const char *getsectionClickedEvent(void)
+* const char *getsectionCountChangedEvent(void)
+* const char *getsectionDoubleClickedEvent(void)
+* const char *getsectionEnteredEvent(void)
+* const char *getsectionHandleDoubleClickedEvent(void)
+* const char *getsectionMovedEvent(void)
+* const char *getsectionPressedEvent(void)
+* const char *getsectionResizedEvent(void)
+* const char *getsortIndicatorChangedEvent(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt Classes Reference; QHostAddress Class
+
+QHostAddress Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qhostaddress.html
+
+
+Parameters : void
+
+* void clear(void)
+* bool isInSubnet(QHostAddress, int netmask)
+* bool isNull(void)
+* int protocol(void)
+* QString scopeId(void)
+* bool setAddress(QString)
+* int toIPv4Address(void)
+* Q_IPV6ADDR toIPv6Address(void)
+* QString toString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QHostInfo Class
+
+QHostInfo Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qhostinfo.html
+
+
+Parameters : void
+
+* int error(void)
+* QString errorString(void)
+* QString hostName(void)
+* int lookupId(void)
+* void setError(QHostInfo::HostInfoError error)
+* void setErrorString(QString)
+* void setHostName(QString)
+* void setLookupId(int id)
+* void abortHostLookup(int id)
+* QHostInfo fromName(QString)
+* QString localDomainName(void)
+* QString localHostName(void)
+
+.. index::
+       pair: RingQt Classes Reference; QIODevice Class
+
+QIODevice Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qiodevice.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* QString errorString(void)
+* bool getChar(char *c)
+* bool isOpen(void)
+* bool isReadable(void)
+* bool isTextModeEnabled(void)
+* bool isWritable(void)
+* int openMode(void)
+* int peek(char *data, int maxSize)
+* int read(char *data, int maxSize)
+* int readLine(char *data, int maxSize)
+* void ungetChar(char c)
+* int write(const char *data, int maxSize)
+* bool atEnd(void)
+* bool canReadLine(void)
+* void close(void)
+* bool open(QIODevice::OpenMode flags)
+* qint64 pos(void)
+* bool seek(qint64 pos)
+* qint64 size(void)
+* void setaboutToCloseEvent(const char *)
+* void setbytesWrittenEvent(const char *)
+* void setreadChannelFinishedEvent(const char *)
+* void setreadyReadEvent(const char *)
+* const char *getaboutToCloseEvent(void)
+* const char *getbytesWrittenEvent(void)
+* const char *getreadChannelFinishedEvent(void)
+* const char *getreadyReadEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QIcon Class
+
+QIcon Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qicon.html
+
+
+Parameters : QPixmap
+
+
+.. index::
+       pair: RingQt Classes Reference; QImage Class
+
+QImage Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qimage.html
+
+
+Parameters : void
+
+* bool allGray(void)
+* int bitPlaneCount(void)
+* uchar *bits(void)
+* int byteCount(void)
+* int bytesPerLine(void)
+* qint64 cacheKey(void)
+* QRgb color(int i)
+* int colorCount(void)
+* const uchar *constBits(void)
+* const uchar *constScanLine(int i)
+* QImage convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags)
+* QImage copy(int x, int y, int width, int height)
+* QImage createAlphaMask(Qt::ImageConversionFlags flags)
+* QImage createHeuristicMask(bool clipTight)
+* QImage createMaskFromColor(QRgb color, Qt::MaskMode mode)
+* int depth(void)
+* int dotsPerMeterX(void)
+* int dotsPerMeterY(void)
+* void fill(QColor)
+* QImage::Format format(void)
+* bool hasAlphaChannel(void)
+* int height(void)
+* void invertPixels(QImage::InvertMode mode)
+* bool isGrayscale(void)
+* bool isNull(void)
+* bool load(QString, const char *format) # In RingQt use : bool loadimage(QString, const char *format)
+* bool loadFromData(QByteArray, const char * format)
+* QImage mirrored(bool horizontal, bool vertical)
+* QPoint offset(void)
+* QRgb pixel(int x, int y)
+* int pixelIndex(int x, int y)
+* QRect rect(void)
+* QImage rgbSwapped(void)
+* bool save(QString, const char * format, int quality)
+* QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* QImage scaledToHeight(int height, Qt::TransformationMode mode )
+* QImage scaledToWidth(int width, Qt::TransformationMode mode)
+* uchar *scanLine(int i)
+* void setColor(int index, QRgb colorValue)
+* void setColorCount(int colorCount)
+* void setDotsPerMeterX(int x)
+* void setDotsPerMeterY(int y)
+* void setOffset(QPoint)
+* void setPixel(int x, int y, uint index_or_rgb)
+* void setText(QString,QString)
+* QSize size(void)
+* void swap(QImage)
+* QString text(QString)
+* QStringList textKeys(void)
+* QImage transformed(QMatrix, Qt::TransformationMode mode)
+* bool valid(int x, int y)
+* int width(void)
+
+.. index::
+       pair: RingQt Classes Reference; QInputAspect Class
+
+QInputAspect Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dinput-qinputaspect.html
+
+
+Parameters : QObject *
+
+* QStringList availablePhysicalDevices(void)
+* Qt3DInput::QAbstractPhysicalDevice * createPhysicalDevice(QString name)
+
+.. index::
+       pair: RingQt Classes Reference; QInputDialog Class
+
+QInputDialog Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qinputdialog.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QDialog
+
+* QString cancelButtonText(void)
+* QStringList comboBoxItems(void)
+* int doubleDecimals(void)
+* double doubleMaximum(void)
+* double doubleMinimum(void)
+* double doubleValue(void)
+* int inputMode(void)
+* int intMaximum(void)
+* int intMinimum(void)
+* int intStep(void)
+* int intValue(void)
+* bool isComboBoxEditable(void)
+* QString labelText(void)
+* QString okButtonText(void)
+* void open(QObject *receiver, const char *member)
+* int options(void)
+* void setCancelButtonText(QString)
+* void setComboBoxEditable(bool editable)
+* void setComboBoxItems(QStringList)
+* void setDoubleDecimals(int decimals)
+* void setDoubleMaximum(double max)
+* void setDoubleMinimum(double min)
+* void setDoubleRange(double min, double max)
+* void setDoubleValue(double value)
+* void setInputMode(QInputDialog::InputMode mode)
+* void setIntMaximum(int max)
+* void setIntMinimum(int min)
+* void setIntRange(int min, int max)
+* void setIntStep(int step)
+* void setIntValue(int value)
+* void setLabelText(QString)
+* void setOkButtonText(QString)
+* void setOption(QInputDialog::InputDialogOption option, bool on)
+* void setOptions(QInputDialog::InputDialogOption options)
+* void setTextEchoMode(QLineEdit::EchoMode mode)
+* void setTextValue(QString)
+* bool testOption(QInputDialog::InputDialogOption option)
+* int textEchoMode(void)
+* QString textValue(void)
+* double getDouble(QWidget *parent,QString,QString, double value, double min, double max , int decimals, bool *ok, Qt::WindowType flags)
+* int getInt(QWidget *parent,QString,QString, int value, int min, int max, int step, bool *ok, Qt::WindowType flags)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonArray Class
+
+QJsonArray Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonarray.html
+
+
+Parameters : void
+
+* void append(QJsonValue  value)
+* QJsonValue at(int i)
+* bool contains(QJsonValue  value)
+* int count(void)
+* bool empty(void)
+* QJsonValue first(void)
+* void insert(int i, QJsonValue  value)
+* bool isEmpty(void)
+* QJsonValue last(void)
+* void pop_back(void)
+* void pop_front(void)
+* void prepend(QJsonValue  value)
+* void push_back(QJsonValue  value)
+* void push_front(QJsonValue  value)
+* void removeAt(int i)
+* void removeFirst(void)
+* void removeLast(void)
+* void replace(int i, QJsonValue  value)
+* int size(void)
+* QJsonValue takeAt(int i)
+* QVariantList toVariantList(void)
+* QJsonArray fromStringList(QStringList  list)
+* QJsonArray fromVariantList(QVariantList  list)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonDocument Class
+
+QJsonDocument Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsondocument.html
+
+
+Parameters : void
+
+* QJsonArray array(void)
+* bool isArray(void)
+* bool isEmpty(void)
+* bool isNull(void)
+* bool isObject(void)
+* QJsonObject object(void)
+* const char * rawData(int * size)
+* void setArray(QJsonArray  array)
+* void setObject(QJsonObject  object)
+* QByteArray toBinaryData(void)
+* QByteArray toJson(QJsonDocument::JsonFormat format)
+* QVariant toVariant(void)
+* QJsonDocument fromBinaryData( QByteArray  data, QJsonDocument::DataValidation validation)
+* QJsonDocument fromJson( QByteArray  json, QJsonParseError * error)
+* QJsonDocument fromRawData( char * data, int size, QJsonDocument::DataValidation validation)
+* QJsonDocument fromVariant( QVariant  variant)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonObject Class
+
+QJsonObject Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonobject.html
+
+
+Parameters : void
+
+* bool contains(QString  key)
+* int count(void)
+* bool empty(void)
+* bool isEmpty(void)
+* QStringList keys(void)
+* int length(void)
+* void remove(QString  key)
+* int size(void)
+* QJsonValue take(QString  key)
+* QVariantMap toVariantMap(void)
+* QJsonValue value(QString  key)
+* QJsonObject fromVariantMap(QVariantMap  map)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonParseError Class
+
+QJsonParseError Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonparseerror.html
+
+
+Parameters : void
+
+* QString errorString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QJsonValue Class
+
+QJsonValue Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qjsonvalue.html
+
+
+Parameters : void
+
+* bool isArray(void)
+* bool isBool(void)
+* bool isDouble(void)
+* bool isNull(void)
+* bool isObject(void)
+* bool isString(void)
+* bool isUndefined(void)
+* QJsonArray toArray(QJsonArray  defaultValue)
+* QJsonArray toArray_2(void)
+* bool toBool(bool defaultValue  )
+* double toDouble(double defaultValue )
+* int toInt(int defaultValue )
+* QJsonObject toObject(QJsonObject  defaultValue)
+* QJsonObject toObject_2(void)
+* QString toString(QString  defaultValue  )
+* QVariant toVariant(void)
+* QJsonValue::Type type(void)
+* QJsonValue fromVariant(QVariant  variant)
+
+.. index::
+       pair: RingQt Classes Reference; QKeySequence Class
+
+QKeySequence Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qkeysequence.html
+
+
+Parameters : QString
+
+
+.. index::
+       pair: RingQt Classes Reference; QLCDNumber Class
+
+QLCDNumber Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlcdnumber.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QFrame
+
+* bool checkOverflow(double num)
+* int digitCount(void)
+* int intValue(void)
+* int mode(void)
+* int segmentStyle(void)
+* void setDigitCount(int numDigits)
+* void setMode(QLCDNumber::Mode)
+* void setSegmentStyle(QLCDNumber::SegmentStyle)
+* bool smallDecimalPoint(void)
+* double value(void)
+* void display(double)
+* void setBinMode(void)
+* void setDecMode(void)
+* void setHexMode(void)
+* void setOctMode(void)
+* void setSmallDecimalPoint(bool)
+
+.. index::
+       pair: RingQt Classes Reference; QLabel Class
+
+QLabel Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlabel.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* 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)
+* QString selectedText(void)
+* int selectionStart(void)
+* void setAlignment(Qt::AlignmentFlag)
+* void setBuddy(QWidget *buddy)
+* void setIndent(int)
+* void setMargin(int)
+* void setOpenExternalLinks(bool open)
+* void setScaledContents(bool)
+* void setSelection(int start, int length)
+* void setTextFormat(Qt::TextFormat)
+* void setTextInteractionFlags(Qt::TextInteractionFlag flags)
+* void setWordWrap(bool on)
+* QString text(void)
+* int textFormat(void)
+* int textInteractionFlags(void)
+* bool wordWrap(void)
+* void clear(void)
+* void setMovie(QMovie *movie)
+* void setNum(double num)
+* void setPicture(QPicture)
+* void setPixmap(QPixmap)
+* void setText(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QLayout Class
+
+QLayout Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlayout.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QObject
+
+* bool activate(void)
+* void addWidget(QWidget *w)
+* QMargins contentsMargins(void)
+* QRect contentsRect(void)
+* void getContentsMargins(int *left, int *top, int *right, int *bottom)
+* bool isEnabled(void)
+* QWidget *menuBar(void)
+* QWidget *parentWidget(void)
+* void removeItem(QLayoutItem *item)
+* void removeWidget(QWidget *widget)
+* bool setAlignment(QWidget *w, Qt::Alignment alignment)
+* void setAlignment_2(Qt::Alignment alignment)
+* bool setAlignment_3(QLayout *l, Qt::Alignment alignment)
+* void setContentsMargins(int left, int top, int right, int bottom)
+* void setContentsMargins_2(QMargins margins)
+* void setEnabled(bool enable)
+* void setMenuBar(QWidget *widget)
+* void setSizeConstraint(QLayout::SizeConstraint)
+* void setSpacing(int)
+* QLayout::SizeConstraint sizeConstraint(void)
+* int spacing(void)
+* void update(void)
+* QSize  closestAcceptableSize( QWidget * widget,  QSize   size)
+
+.. index::
+       pair: RingQt Classes Reference; QLineEdit Class
+
+QLineEdit Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlineedit.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* int alignment(void)
+* void backspace(void)
+* QCompleter *completer(void)
+* QMenu *createStandardContextMenu(void)
+* void cursorBackward(bool mark, int steps)
+* void cursorForward(bool mark, int steps)
+* int cursorMoveStyle(void)
+* int cursorPosition(void)
+* int cursorPositionAt(QPoint)
+* void cursorWordBackward(bool mark)
+* void cursorWordForward(bool mark)
+* void del(void)
+* void deselect(void)
+* QString displayText(void)
+* bool dragEnabled(void)
+* int echoMode(void)
+* void end(bool mark) # In RingQt use : void endtext(bool mark)
+* void getTextMargins(int *left, int *top, int *right, int *bottom)
+* bool hasAcceptableInput(void)
+* bool hasFrame(void)
+* bool hasSelectedText(void)
+* void home(bool mark)
+* QString inputMask(void)
+* void insert(QString)
+* bool isModified(void)
+* bool isReadOnly(void)
+* bool isRedoAvailable(void)
+* bool isUndoAvailable(void)
+* int maxLength(void)
+* QString placeholderText(void)
+* QString selectedText(void)
+* int selectionStart(void)
+* void setAlignment(Qt::AlignmentFlag flag)
+* void setCompleter(QCompleter *c)
+* void setCursorMoveStyle(Qt::CursorMoveStyle style)
+* void setCursorPosition(int)
+* void setDragEnabled(bool b)
+* void setEchoMode(QLineEdit::EchoMode)
+* void setFrame(bool)
+* void setInputMask(QString)
+* void setMaxLength(int)
+* void setModified(bool)
+* void setPlaceholderText(QString)
+* void setReadOnly(bool)
+* void setSelection(int start, int length)
+* void setTextMargins(int left, int top, int right, int bottom)
+* void setValidator(QValidator *v)
+* QString text(void)
+* QMargins textMargins(void)
+* QValidator *validator(void)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void paste(void)
+* void redo(void)
+* void selectAll(void)
+* void setText(QString)
+* void undo(void)
+* void setTextChangedEvent(const char *)
+* void setcursorPositionChangedEvent(const char *)
+* void seteditingFinishedEvent(const char *)
+* void setreturnPressedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void settextEditedEvent(const char *)
+* const char *getTextChangedEvent(void)
+* const char *getcursorPositionChangedEvent(void)
+* const char *geteditingFinishedEvent(void)
+* const char *getreturnPressedEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettextEditedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QLinearGradient Class
+
+QLinearGradient Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlineargradient.html
+
+
+Parameters : void
+
+
+Parent Class : QGradient
+
+* QPointF finalStop(void)
+* void setFinalStop(QPointF stop)
+* void setFinalStop_2(qreal x,qreal y)
+* void setStart(QPointF start)
+* void setStart_2(qreal x,qreal y)
+* QPointF start(void)
+
+.. index::
+       pair: RingQt Classes Reference; QListView Class
+
+QListView Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlistview.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractItemView
+
+* int  batchSize(void)
+* void  clearPropertyFlags(void)
+* QListView::Flow  flow(void)
+* QSize  gridSize(void)
+* bool  isRowHidden(int row)
+* bool  isSelectionRectVisible(void)
+* bool  isWrapping(void)
+* QListView::LayoutMode  layoutMode(void)
+* int  modelColumn(void)
+* QListView::Movement  movement(void)
+* QListView::ResizeMode  resizeMode(void)
+* void  setBatchSize(int batchSize)
+* void  setFlow(QListView::Flow flow)
+* void  setGridSize( QSize   size)
+* void  setLayoutMode(QListView::LayoutMode mode)
+* void  setModelColumn(int column)
+* void  setMovement(QListView::Movement movement)
+* void  setResizeMode(QListView::ResizeMode mode)
+* void  setRowHidden(int row, bool hide)
+* void  setSelectionRectVisible(bool show)
+* void  setSpacing(int space)
+* void  setUniformItemSizes(bool enable)
+* void  setViewMode(QListView::ViewMode mode)
+* void  setWordWrap(bool on)
+* void  setWrapping(bool enable)
+* int  spacing(void)
+* bool  uniformItemSizes(void)
+* QListView::ViewMode  viewMode(void)
+* bool  wordWrap(void)
+
+.. index::
+       pair: RingQt Classes Reference; QListWidget Class
+
+QListWidget Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlistwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QListView
+
+* void addItem(QString)
+* int count(void)
+* void editItem(QListWidgetItem *item)
+* bool isSortingEnabled(void)
+* QListWidgetItem *item(int row)
+* QListWidgetItem *itemAt(int x, int y)
+* QWidget *itemWidget(QListWidgetItem *item)
+* void openPersistentEditor(QListWidgetItem *item)
+* void removeItemWidget(QListWidgetItem *item)
+* int row(QListWidgetItem *item)
+* void setCurrentRow(int row, QItemSelectionModel::SelectionFlag command)
+* void setItemWidget(QListWidgetItem *item, QWidget *widget)
+* void setSortingEnabled(bool enable)
+* void sortItems(Qt::SortOrder order)
+* QListWidgetItem *takeItem(int row)
+* QRect visualItemRect(QListWidgetItem *item)
+* void clear(void)
+* void scrollToItem(QListWidgetItem *item,QAbstractItemView::ScrollHint hint)
+* void setcurrentItemChangedEvent(const char *)
+* void setcurrentRowChangedEvent(const char *)
+* void setcurrentTextChangedEvent(const char *)
+* void setitemActivatedEvent(const char *)
+* void setitemChangedEvent(const char *)
+* void setitemClickedEvent(const char *)
+* void setitemDoubleClickedEvent(const char *)
+* void setitemEnteredEvent(const char *)
+* void setitemPressedEvent(const char *)
+* void setitemSelectionChangedEvent(const char *)
+* const char *getcurrentItemChangedEvent(void)
+* const char *getcurrentRowChangedEvent(void)
+* const char *getcurrentTextChangedEvent(void)
+* const char *getitemActivatedEvent(void)
+* const char *getitemChangedEvent(void)
+* const char *getitemClickedEvent(void)
+* const char *getitemDoubleClickedEvent(void)
+* const char *getitemEnteredEvent(void)
+* const char *getitemPressedEvent(void)
+* const char *getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QListWidgetItem Class
+
+QListWidgetItem Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qlistwidgetitem.html
+
+
+Parameters : void
+
+* QBrush background(void)
+* Qt::CheckState checkState(void)
+* Qt::ItemFlags flags(void)
+* QFont font(void)
+* QBrush foreground(void)
+* QIcon icon(void)
+* bool isHidden(void)
+* bool isSelected(void)
+* QListWidget *listWidget(void)
+* void setBackground(QBrush brush)
+* void setCheckState(Qt::CheckState state)
+* void setFlags(Qt::ItemFlags flags)
+* void setFont(QFont font)
+* void setForeground(QBrush brush)
+* void setHidden(bool hide)
+* void setIcon(QIcon icon)
+* void setSelected(bool select)
+* void setSizeHint(QSize size)
+* void setStatusTip(QString statusTip)
+* void setText(QString text)
+* void setTextAlignment(int alignment)
+* void setToolTip(QString toolTip)
+* void setWhatsThis(QString whatsThis)
+* QSize sizeHint(void)
+* QString statusTip(void)
+* QString text(void)
+* int textAlignment(void)
+* QString toolTip(void)
+* int type(void)
+* QString whatsThis(void)
+
+.. index::
+       pair: RingQt Classes Reference; QLogicAspect Class
+
+QLogicAspect Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dlogic-qlogicaspect.html
+
+
+Parameters : QObject *
+
+
+Parent Class : Qt3DCore::QAbstractAspect
+
+.. index::
+       pair: RingQt Classes Reference; QMainWindow Class
+
+QMainWindow Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmainwindow.html
+
+
+Parameters : void
+
+
+Parent Class : QWidget
+
+* void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
+* QToolBar *addToolBar(QString)
+* void addToolBar_2(Qt::ToolBarArea area, QToolBar *toolbar)
+* void addToolBarBreak(Qt::ToolBarArea)
+* QWidget *centralWidget(void)
+* int corner(Qt::Corner corner)
+* QMenu *createPopupMenu(void)
+* int dockOptions(void)
+* int dockWidgetArea(QDockWidget *dockwidget)
+* bool documentMode(void)
+* QSize iconSize(void)
+* void insertToolBar(QToolBar *before, QToolBar *toolbar)
+* void insertToolBarBreak(QToolBar *before)
+* bool isAnimated(void)
+* bool isDockNestingEnabled(void)
+* QMenuBar *menuBar(void)
+* QWidget *menuWidget(void)
+* void removeDockWidget(QDockWidget *dockwidget)
+* void removeToolBar(QToolBar *toolbar)
+* void removeToolBarBreak(QToolBar *before)
+* bool restoreDockWidget(QDockWidget *dockwidget)
+* bool restoreState(QByteArray state, int version)
+* QByteArray saveState(int version)
+* void setCentralWidget(QWidget *widget)
+* void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)
+* void setDockOptions(QMainWindow::DockOption options)
+* void setDocumentMode(bool enabled)
+* void setIconSize(QSize)
+* void setMenuBar(QMenuBar *menuBar)
+* void setMenuWidget(QWidget *menuBar)
+* void setStatusBar(QStatusBar *statusbar)
+* void setTabPosition(Qt::DockWidgetArea areas, QTabWidget::TabPosition tabPosition)
+* void setTabShape(QTabWidget::TabShape tabShape)
+* void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
+* void setUnifiedTitleAndToolBarOnMac(bool set)
+* void splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
+* QStatusBar *statusBar(void)
+* int tabPosition(Qt::DockWidgetArea area)
+* int tabShape(void)
+* void tabifyDockWidget(QDockWidget *first, QDockWidget *second)
+* int toolBarArea(QToolBar *toolbar)
+* bool toolBarBreak(QToolBar *toolbar)
+* int toolButtonStyle(void)
+* bool unifiedTitleAndToolBarOnMac(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMaterial Class
+
+QMaterial Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : Qt3DCore::QComponent
+
+* void addParameter(Qt3DRender::QParameter *parameter)
+* Qt3DRender::QEffect * effect(void)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void setEffect(Qt3DRender::QEffect *effect)
+
+.. index::
+       pair: RingQt Classes Reference; QMatrix4x4 Class
+
+QMatrix4x4 Class
+================
+
+
+Parameters : qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal
+
+* QVector4D column(int index)
+* qreal * constData(void)
+* qreal * data_2(void)
+* qreal determinant(void)
+* void fill(qreal value)
+* void flipCoordinates(void)
+* void frustum(qreal left, qreal right, qreal bottom, qreal top, qreal nearPlane, qreal farPlane)
+* QMatrix4x4 inverted(bool * invertible)
+* bool isIdentity(void)
+* void lookAt(QVector3D eye, QVector3D center, QVector3D up)
+* QPoint map(QPoint point)
+* QPointF map_2(QPointF point)
+* QVector3D map_3(QVector3D point)
+* QVector4D map_4(QVector4D point)
+* QRect mapRect(QRect rect)
+* QRectF mapRect_2(QRectF rect)
+* QVector3D mapVector(QVector3D vector)
+* QMatrix3x3 normalMatrix(void)
+* void optimize(void)
+* void ortho(qreal left, qreal right, qreal bottom, qreal top, qreal nearPlane, qreal farPlane)
+* void ortho_2(QRect rect)
+* void ortho_3(QRectF rect)
+* void perspective(qreal angle, qreal aspect, qreal nearPlane, qreal farPlane)
+* void rotate(qreal angle, QVector3D vector)
+* void rotate_2(QQuaternion quaternion)
+* void rotate_3(qreal angle, qreal x, qreal y, qreal z)
+* QVector4D row(int index)
+* void scale(QVector3D vector)
+* void scale_2(qreal x, qreal y)
+* void scale_3(qreal x, qreal y, qreal z)
+* void scale_4(qreal factor)
+* void setColumn(int index, QVector4D value)
+* void setRow(int index, QVector4D value)
+* void setToIdentity(void)
+* QMatrix toAffine(void)
+* QTransform toTransform_2(qreal distanceToPlane)
+* void translate(QVector3D vector)
+* void translate_2(qreal x, qreal y)
+* void translate_3(qreal x, qreal y, qreal z)
+* QMatrix4x4 transposed(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMdiArea Class
+
+QMdiArea Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmdiarea.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* QMdiArea::WindowOrder activationOrder(void)
+* QMdiSubWindow * activeSubWindow(void)
+* QMdiSubWindow * addSubWindow(QWidget * widget, Qt::WindowFlags windowFlags )
+* QBrush background(void)
+* QMdiSubWindow * currentSubWindow(void)
+* bool documentMode(void)
+* void removeSubWindow(QWidget * widget)
+* void setActivationOrder(QMdiArea::WindowOrder order)
+* void setBackground( QBrush   background)
+* void setDocumentMode(bool enabled)
+* void setOption(QMdiArea::AreaOption option, bool on )
+* void setTabPosition(QTabWidget::TabPosition position)
+* void setTabShape(QTabWidget::TabShape shape)
+* void setTabsClosable(bool closable)
+* void setTabsMovable(bool movable)
+* void setViewMode(QMdiArea::ViewMode mode)
+* QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder order )
+* QTabWidget::TabPosition tabPosition(void)
+* QTabWidget::TabShape tabShape(void)
+* bool tabsClosable(void)
+* bool tabsMovable(void)
+* bool testOption(QMdiArea::AreaOption option)
+* QMdiArea::ViewMode viewMode(void)
+* void activateNextSubWindow(void)
+* void activatePreviousSubWindow(void)
+* void cascadeSubWindows(void)
+* void closeActiveSubWindow(void)
+* void closeAllSubWindows(void)
+* void setActiveSubWindow(QMdiSubWindow * window)
+* void tileSubWindows(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMdiSubWindow Class
+
+QMdiSubWindow Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmdisubwindow.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* bool isShaded(void)
+* int keyboardPageStep(void)
+* int keyboardSingleStep(void)
+* QMdiArea * mdiArea(void)
+* void setKeyboardPageStep(int step)
+* void setKeyboardSingleStep(int step)
+* void setOption(QMdiSubWindow::SubWindowOption option, bool on )
+* void setSystemMenu(QMenu * systemMenu)
+* void setWidget(QWidget * widget)
+* QMenu * systemMenu(void)
+* bool testOption(QMdiSubWindow::SubWindowOption option)
+* QWidget * widget(void)
+* void showShaded(void)
+* void showSystemMenu(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMediaObject Class
+
+QMediaObject Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmediaobject.html
+
+
+Parameters : void
+
+
+Parent Class : QWidget
+
+* QStringList availableMetaData(void)
+* bool isMetaDataAvailable(void)
+* QVariant metaData( QString   key)
+* int notifyInterval(void)
+* void setNotifyInterval(int milliSeconds)
+
+.. index::
+       pair: RingQt Classes Reference; QMediaPlayer Class
+
+QMediaPlayer Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmediaplayer.html
+
+
+Parameters : void
+
+* int bufferStatus(void)
+* QMediaContent currentMedia(void)
+* QNetworkConfiguration currentNetworkConfiguration(void)
+* int duration(void)
+* int error(void)
+* QString errorString(void)
+* bool isAudioAvailable(void)
+* bool isMuted(void)
+* bool isSeekable(void)
+* bool isVideoAvailable(void)
+* QMediaContent media(void)
+* int mediaStatus(void)
+* QIODevice *mediaStream(void)
+* qreal playbackRate(void)
+* QMediaPlaylist *playlist(void)
+* int position(void)
+* void setVideoOutput(QVideoWidget *output)
+* int volume(void)
+* void pause(void)
+* void play(void)
+* void setMuted(bool muted)
+* void setPlaylist(QMediaPlaylist *playlist)
+* void setPosition(int position)
+* void setVolume(int volume)
+* void stop(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMediaPlaylist Class
+
+QMediaPlaylist Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmediaplaylist.html
+
+
+Parameters : void
+
+* int currentIndex(void)
+* QMediaContent currentMedia(void)
+* int error(void)
+* QString errorString(void)
+* bool insertMedia(int pos, QMediaContent)
+* bool isReadOnly(void)
+* QMediaContent media(int index)
+* int mediaCount(void)
+* int nextIndex(int steps)
+* int playbackMode(void)
+* int previousIndex(int steps)
+* bool save(QUrl, const char * format)
+* void next(void) # In RingQt use : void movenext(void)
+* void previous(void)
+* void setCurrentIndex(int playlistPosition)
+* void shuffle(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMenu Class
+
+QMenu Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmenu.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QAction *actionAt(QPoint)
+* QRect actionGeometry(QAction *act)
+* QAction *activeAction(void)
+* void addAction(QAction *)
+* QMenu *addMenu(QString)
+* QAction *addSeparator(void)
+* void clear(void)
+* QAction *defaultAction(void)
+* QAction *exec(const QPoint &)
+* QAction *exec_2(void)
+* QAction *exec_3(const QPoint &,QAction *)
+* void hideTearOffMenu(void)
+* QIcon icon(void)
+* QAction *insertMenu(QAction *before, QMenu *menu)
+* QAction *insertSeparator(QAction *before)
+* bool isEmpty(void)
+* bool isTearOffEnabled(void)
+* bool isTearOffMenuVisible(void)
+* QAction *menuAction(void)
+* void popup(QPoint, QAction *atAction)
+* bool separatorsCollapsible(void)
+* void setActiveAction(QAction *act)
+* void setDefaultAction(QAction *act)
+* void setIcon(QIcon)
+* void setSeparatorsCollapsible(bool collapse)
+* void setTearOffEnabled(bool)
+* void setTitle(QString)
+* QString title(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMenuBar Class
+
+QMenuBar Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmenubar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QAction *actionAt(QPoint)
+* QRect actionGeometry(QAction *act)
+* QAction *activeAction(void)
+* QAction *addAction(QString)
+* QAction *addSeparator(void)
+* void clear(void)
+* QWidget *cornerWidget(Qt::Corner)
+* QAction *insertSeparator(QAction *before)
+* bool isDefaultUp(void)
+* bool isNativeMenuBar(void)
+* void setActiveAction(QAction *act)
+* void setCornerWidget(QWidget *widget, Qt::Corner)
+* void setNativeMenuBar(bool nativeMenuBar)
+
+.. index::
+       pair: RingQt Classes Reference; QMesh Class
+
+QMesh Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QString meshName(void)
+* QUrl source(void)
+* Qt3DRender::QMesh::Status status(void)
+* void setMeshName(QString meshName)
+* void setSource(QUrl source)
+
+.. index::
+       pair: RingQt Classes Reference; QMessageBox Class
+
+QMessageBox Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmessagebox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QDialog
+
+* void addButton(QAbstractButton *button, QMessageBox::ButtonRole role)
+* QAbstractButton *button(QMessageBox::StandardButton which)
+* int buttonRole(QAbstractButton *button)
+* QAbstractButton *clickedButton(void)
+* QPushButton *defaultButton(void)
+* QString detailedText(void)
+* QAbstractButton *escapeButton(void)
+* QPixmap iconPixmap(void)
+* QString informativeText(void)
+* void open(QObject *receiver, const char *member)
+* void removeButton(QAbstractButton *button)
+* void setDefaultButton(QPushButton *button)
+* void setDetailedText(QString)
+* void setEscapeButton(QAbstractButton *button)
+* void setIconPixmap(QPixmap)
+* void setInformativeText(QString)
+* void setStandardButtons(QMessageBox::StandardButton buttons)
+* void setText(QString)
+* void setTextFormat(Qt::TextFormat format)
+* void setWindowModality(Qt::WindowModality windowModality)
+* void setWindowTitle(QString)
+* int standardButton(QAbstractButton *button)
+* int standardButtons(void)
+* QString text(void)
+* int textFormat(void)
+* int exec(void)
+* void about(QWidget *parent, QString,QString)
+* void aboutQt(QWidget *parent, QString)
+* int critical(QWidget * parent, QString , QString, int buttons, int defaultButton)
+* int information(QWidget * parent, QString ,QString, int buttons,int defaultButton)
+* int question(QWidget * parent,QString,QString, int buttons ,int  defaultButton)
+* int warning(QWidget *parent, QString,QString, int buttons,int defaultButton)
+
+.. index::
+       pair: RingQt Classes Reference; QMetalRoughMaterial Class
+
+QMetalRoughMaterial Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qmetalroughmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QVariant ambientOcclusion(void)
+* QVariant baseColor(void)
+* QVariant metalness(void)
+* QVariant normal(void)
+* QVariant roughness(void)
+* float textureScale(void)
+* void setAmbientOcclusion(QVariant ambientOcclusion)
+* void setBaseColor(QVariant baseColor)
+* void setMetalness(QVariant metalness)
+* void setNormal(QVariant normal)
+* void setRoughness(QVariant roughness)
+* void setTextureScale(float textureScale)
+
+.. index::
+       pair: RingQt Classes Reference; QMimeData Class
+
+QMimeData Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmimedata.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* void clear(void)
+* QVariant colorData(void)
+* QByteArray data(QString mimeType)
+* QStringList formats(void)
+* bool hasColor(void)
+* bool hasFormat(QString mimeType)
+* bool hasHtml(void)
+* bool hasImage(void)
+* bool hasText(void)
+* bool hasUrls(void)
+* QString html(void)
+* QVariant imageData(void)
+* void removeFormat(QString mimeType)
+* void setColorData(QVariant color)
+* void setData(QString mimeType, QByteArray data)
+* void setHtml(QString html)
+* void setImageData(QVariant image)
+* void setText(QString text)
+* void setUrls(QList<QUrl> urls)
+* QString text(void)
+* QList<QUrl> urls(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMorphPhongMaterial Class
+
+QMorphPhongMaterial Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmorphphongmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QColor ambient(void)
+* QColor diffuse(void)
+* float interpolator(void)
+* float shininess(void)
+* QColor specular(void)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QColor diffuse)
+* void setInterpolator(float interpolator)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+
+.. index::
+       pair: RingQt Classes Reference; QMutex Class
+
+QMutex Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmutex.html
+
+
+Parameters : QMutex::RecursionMode
+
+* bool isRecursive(void)
+* void lock(void)
+* void unlock(void)
+
+.. index::
+       pair: RingQt Classes Reference; QMutexLocker Class
+
+QMutexLocker Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qmutexlocker.html
+
+
+Parameters : QMutex *
+
+* QMutex * mutex(void)
+* void relock(void)
+* void unlock(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkAccessManager Class
+
+QNetworkAccessManager Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkaccessmanager.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* void setfinishedEvent(const char *)
+* const char *getfinishedEvent(void)
+* QNetworkConfiguration activeConfiguration(void)
+* QAbstractNetworkCache *cache(void)
+* void clearAccessCache(void)
+* QNetworkConfiguration configuration(void)
+* void connectToHost(QString, quint16)
+* QNetworkReply *deleteResource(QNetworkRequest)
+* QNetworkReply *get(QNetworkRequest) # In RingQt use : QNetworkReply *getvalue(QNetworkRequest)
+* QNetworkReply *head(QNetworkRequest)
+* QNetworkAccessManager::NetworkAccessibility networkAccessible(void)
+* QNetworkReply *post(QNetworkRequest, QByteArray)
+* QNetworkProxy proxy(void)
+* QNetworkProxyFactory *proxyFactory(void)
+* QNetworkReply *put(QNetworkRequest, QByteArray) # In RingQt use : QNetworkReply *putvalue(QNetworkRequest, QByteArray)
+* QNetworkReply *sendCustomRequest(QNetworkRequest, QByteArray, QIODevice *)
+* void setCache(QAbstractNetworkCache *cache)
+* void setConfiguration(QNetworkConfiguration)
+* void setCookieJar(QNetworkCookieJar *cookieJar)
+* void setNetworkAccessible(QNetworkAccessManager::NetworkAccessibility accessible)
+* void setProxy(QNetworkProxy)
+* void setProxyFactory(QNetworkProxyFactory *factory)
+* QStringList supportedSchemes(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkProxy Class
+
+QNetworkProxy Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkproxy.html
+
+
+Parameters : void
+
+* int capabilities(void)
+* bool hasRawHeader(QByteArray headerName)
+* QVariant header(QNetworkRequest::KnownHeaders header)
+* QString hostName(void)
+* bool isCachingProxy(void)
+* bool isTransparentProxy(void)
+* QString password(void)
+* int port(void)
+* QByteArray rawHeader(QByteArray headerName)
+* void setCapabilities(QNetworkProxy::Capability capabilities)
+* void setHeader(QNetworkRequest::KnownHeaders header,  QVariant value)
+* void setHostName(QString hostName)
+* void setPassword(QString password)
+* void setPort(int port)
+* void setRawHeader(QByteArray headerName, QByteArray headerValue)
+* void setType(QNetworkProxy::ProxyType type)
+* void setUser(QString user)
+* void swap(QNetworkProxy  other)
+* int type(void)
+* QString user(void)
+* QNetworkProxy applicationProxy(void)
+* void setApplicationProxy(QNetworkProxy  networkProxy)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkReply Class
+
+QNetworkReply Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkreply.html
+
+
+Parameters : void
+
+
+Parent Class : QIODevice
+
+* QVariant attribute(QNetworkRequest::Attribute code)
+* QNetworkReply::NetworkError error(void)
+* bool hasRawHeader(QByteArray)
+* QVariant header(QNetworkRequest::KnownHeaders header)
+* bool isFinished(void)
+* bool isRunning(void)
+* QNetworkAccessManager *manager(void)
+* QNetworkAccessManager::Operation operation(void)
+* QByteArray rawHeader(QByteArray)
+* qint64 readBufferSize(void)
+* QNetworkRequest request(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNetworkRequest Class
+
+QNetworkRequest Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnetworkrequest.html
+
+
+Parameters : QUrl
+
+* QVariant attribute(QNetworkRequest::Attribute, QVariant)
+* bool hasRawHeader(QByteArray)
+* QVariant header(QNetworkRequest::KnownHeaders)
+* QObject *originatingObject(void)
+* QNetworkRequest::Priority priority(void)
+* QByteArray rawHeader(QByteArray)
+* void setAttribute(QNetworkRequest::Attribute, QVariant)
+* void setHeader(QNetworkRequest::KnownHeaders, QVariant)
+* void setOriginatingObject(QObject *object)
+* void setPriority(QNetworkRequest::Priority priority)
+* void setRawHeader(QByteArray, QByteArray)
+* void swap(QNetworkRequest)
+* QUrl url(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNmeaPositionInfoSource Class
+
+QNmeaPositionInfoSource Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qnmeapositioninfosource.html
+
+
+Parameters : QNmeaPositionInfoSource::UpdateMode,QObject *
+
+
+Parent Class : QGeoPositionInfoSource
+
+* QIODevice * device(void)
+* void setDevice(QIODevice * device)
+* QNmeaPositionInfoSource::UpdateMode updateMode(void)
+
+.. index::
+       pair: RingQt Classes Reference; QNode Class
+
+QNode Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qnode.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QObject
+
+* bool blockNotifications(bool block)
+* Qt3DCore::QNodeVector childNodes(void)
+* void clearPropertyTracking(QString propertyName)
+* void clearPropertyTrackings(void)
+* Qt3DCore::QNode::PropertyTrackingMode defaultPropertyTrackingMode(void)
+* Qt3DCore::QNodeId id(void)
+* bool isEnabled(void)
+* bool notificationsBlocked(void)
+* Qt3DCore::QNode * parentNode(void)
+* Qt3DCore::QNode::PropertyTrackingMode propertyTracking(QString propertyName)
+* void setPropertyTracking(QString propertyName, Qt3DCore::QNode::PropertyTrackingMode trackMode)
+* void setDefaultPropertyTrackingMode(Qt3DCore::QNode::PropertyTrackingMode mode)
+* void setEnabled(bool isEnabled)
+* void setParent(Qt3DCore::QNode *parent)
+
+.. index::
+       pair: RingQt Classes Reference; QObject Class
+
+QObject Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qobject.html
+
+
+Parameters : void
+
+* 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)
+* 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 setProperty_2(const char *name, int)
+* bool setProperty_3(const char *name, float)
+* bool setProperty_4(const char *name, double)
+* bool setProperty_5(const char *name, QString)
+* bool setProperty_int(const char *name, int)
+* bool setProperty_float(const char *name, float)
+* bool setProperty_double(const char *name, double)
+* bool setProperty_string(const char *name, QString)
+* bool signalsBlocked(void)
+* int startTimer(int interval)
+* QThread *thread(void)
+* void deleteLater(void)
+
+.. index::
+       pair: RingQt Classes Reference; QObjectPicker Class
+
+QObjectPicker Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qobjectpicker.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool containsMouse(void)
+* bool isDragEnabled(void)
+* bool isHoverEnabled(void)
+* bool isPressed(void)
+* void setDragEnabled(bool dragEnabled)
+* void setHoverEnabled(bool hoverEnabled)
+* void setclickedEvent(const char *)
+* void setcontainsMouseChangedEvent(const char *)
+* void setdragEnabledChangedEvent(const char *)
+* void setenteredEvent(const char *)
+* void setexitedEvent(const char *)
+* void sethoverEnabledChangedEvent(const char *)
+* void setmovedEvent(const char *)
+* void setpressedEvent(const char *)
+* void setpressedChangedEvent(const char *)
+* void setreleasedEvent(const char *)
+* const char *getclickedEvent(void)
+* const char *getcontainsMouseChangedEvent(void)
+* const char *getdragEnabledChangedEvent(void)
+* const char *getenteredEvent(void)
+* const char *getexitedEvent(void)
+* const char *gethoverEnabledChangedEvent(void)
+* const char *getmovedEvent(void)
+* const char *getpressedEvent(void)
+* const char *getpressedChangedEvent(void)
+* const char *getreleasedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLBuffer Class
+
+QOpenGLBuffer Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglbuffer.html
+
+
+Parameters : void
+
+* void allocate(void *data, int count)
+* void allocate_2(int count)
+* bool bind(void)
+* GLuint bufferId(void)
+* bool create(void)
+* void destroy(void)
+* bool isCreated(void)
+* void * map(QOpenGLBuffer::Access access)
+* void release(void)
+* void setUsagePattern(QOpenGLBuffer::UsagePattern value)
+* int size(void)
+* QOpenGLBuffer::Type type(void)
+* bool unmap(void)
+* QOpenGLBuffer::UsagePattern usagePattern(void)
+* void write(int offset, void *data, int count)
+* void release_2(QOpenGLBuffer::Type type)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLContext Class
+
+QOpenGLContext Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglcontext.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* bool create(void)
+* GLuint defaultFramebufferObject(void)
+* void doneCurrent(void)
+* QSet<QByteArray> extensions(void)
+* QOpenGLFunctions * functions(void)
+* QFunctionPointer getProcAddress(QByteArray procName)
+* QFunctionPointer getProcAddress_2(char *procName)
+* bool hasExtension(QByteArray extension)
+* bool isOpenGLES(void)
+* bool isValid(void)
+* bool makeCurrent(QSurface *surface)
+* QVariant nativeHandle(void)
+* QScreen * screen(void)
+* void setFormat(QSurfaceFormat format)
+* void setNativeHandle(QVariant handle)
+* void setScreen(QScreen *screen)
+* void setShareContext(QOpenGLContext *shareContext)
+* QOpenGLContext * shareContext(void)
+* QOpenGLContextGroup * shareGroup(void)
+* QSurface * surface(void)
+* void swapBuffers(QSurface *surface)
+* QAbstractOpenGLFunctions * versionFunctions(QOpenGLVersionProfile versionProfile))
+* TYPE * versionFunctions_2(void)
+* bool areSharing(QOpenGLContext *first, QOpenGLContext *second)
+* QOpenGLContext * currentContext(void)
+* QOpenGLContext * globalShareContext(void)
+* void * openGLModuleHandle(void)
+* QOpenGLContext::OpenGLModuleType openGLModuleType(void)
+* bool supportsThreadedOpenGL(void)
+* QOpenGLFunctions_3_2_Core *opengl32(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLDebugLogger Class
+
+QOpenGLDebugLogger Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopengldebuglogger.html
+
+
+Parameters : QObject *
+
+* void disableMessages(QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types, QOpenGLDebugMessage::Severities severities)
+* void disableMessages_2(QVector<GLuint> ids, QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types)
+* void enableMessages(QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types, QOpenGLDebugMessage::Severities severities)
+* void enableMessages_2(QVector<GLuint> ids, QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types)
+* bool initialize(void)
+* bool isLogging(void)
+* QList<QOpenGLDebugMessage> loggedMessages(void)
+* QOpenGLDebugLogger::LoggingMode loggingMode(void)
+* qint64 maximumMessageLength(void)
+* void popGroup(void)
+* void pushGroup(QString name, GLuint id, QOpenGLDebugMessage::Source source)
+* void logMessage(QOpenGLDebugMessage debugMessage)
+* void startLogging(QOpenGLDebugLogger::LoggingMode loggingMode)
+* void stopLogging(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLFramebufferObject Class
+
+QOpenGLFramebufferObject Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglframebufferobject.html
+
+
+Parameters : int,int,GLenum
+
+* bool bind(void)
+* QOpenGLFramebufferObjectFormat format(void)
+* GLuint handle(void)
+* int height(void)
+* bool isBound(void)
+* bool isValid(void)
+* bool release(void)
+* void setAttachment(QOpenGLFramebufferObject::Attachment attachment)
+* QSize size(void)
+* QImage toImage(bool flipped)
+* QImage toImage_3(bool flipped, int colorQOpenGLFramebufferObject::AttachmentIndex)
+* QImage toImage_2(void)
+* int width(void)
+* bool bindDefault(void)
+* bool hasOpenGLFramebufferObjects(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLFunctions Class
+
+QOpenGLFunctions Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglfunctions.html
+
+
+Parameters : void
+
+* void glActiveTexture(GLenum texture)
+* void glAttachShader(GLuint program, GLuint shader)
+* void glBindAttribLocation(GLuint program, GLuint index, char *name)
+* void glBindBuffer(GLenum target, GLuint buffer)
+* void glBindFramebuffer(GLenum target, GLuint framebuffer)
+* void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+* void glBufferData(GLenum target, qopengl_GLsizeiptr size, void *data, GLenum usage)
+* void glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, void *data)
+* GLenum glCheckFramebufferStatus(GLenum target)
+* void glClear(GLbitfield mask)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepthf(GLclampf depth)
+* void glClearStencil(GLint s)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, void *data)
+* void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, void *data)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum type)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n, GLuint *buffers)
+* void glDeleteFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glDeleteProgram(GLuint program)
+* void glDeleteRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n, GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRangef(GLclampf zNear, GLclampf zFar)
+* void glDetachShader(GLuint program, GLuint shader)
+* void glDisable(GLenum cap)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid *indices)
+* void glEnable(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glFinish(void)
+* void glFlush(void)
+* void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+* void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFrontFace(GLenum mode)
+* void glGenBuffers(GLsizei n, GLuint *buffers)
+* void glGenFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGenerateMipmap(GLenum target)
+* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name)
+* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name)
+* void glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei *count, GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program, char *name)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei *length, char *infolog)
+* void glGetProgramiv(GLuint program, GLenum pname, GLint *params)
+* void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei *length, char *infolog)
+* void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision)
+* void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei *length, char *source)
+* void glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* GLint glGetUniformLocation(GLuint program, char *name)
+* void glGetUniformfv(GLuint program, GLint location, GLfloat *params)
+* void glGetUniformiv(GLuint program, GLint location, GLint *params)
+* void glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsFramebuffer(GLuint framebuffer)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsRenderbuffer(GLuint renderbuffer)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glReleaseShaderCompiler(void)
+* void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+* void glSampleCoverage(GLclampf value, GLboolean invert)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glShaderBinary(GLint n, GLuint *shaders, GLenum binaryformat, void *binary, GLint length)
+* void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face, GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glUniform1f(GLint location, GLfloat x)
+* void glUniform1fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform1i(GLint location, GLint x)
+* void glUniform1iv(GLint location, GLsizei count, GLint *v)
+* void glUniform2f(GLint location, GLfloat x, GLfloat y)
+* void glUniform2fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform2i(GLint location, GLint x, GLint y)
+* void glUniform2iv(GLint location, GLsizei count, GLint *v)
+* void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+* void glUniform3fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform3i(GLint location, GLint x, GLint y, GLint z)
+* void glUniform3iv(GLint location, GLsizei count, GLint *v)
+* void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glUniform4fv(GLint location, GLsizei count, GLfloat *v)
+* void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+* void glUniform4iv(GLint location, GLsizei count, GLint *v)
+* void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertexAttrib1f(GLuint indx, GLfloat x)
+* void glVertexAttrib1fv(GLuint indx, GLfloat *values)
+* void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
+* void glVertexAttrib2fv(GLuint indx, GLfloat *values)
+* void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
+* void glVertexAttrib3fv(GLuint indx, GLfloat *values)
+* void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertexAttrib4fv(GLuint indx, GLfloat *values)
+* void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void *ptr)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+* bool hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature)
+* void initializeOpenGLFunctions(void)
+* QOpenGLFunctions::OpenGLFeatures openGLFeatures(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLFunctions_3_2_Core Class
+
+QOpenGLFunctions_3_2_Core Class
+===============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglfunctions_3_2_core.html
+
+
+Parameters : void
+
+* void glActiveTexture(GLenum texture)
+* void glAttachShader(GLuint program, GLuint shader)
+* void glBeginConditionalRender(GLuint id, GLenum mode)
+* void glBeginQuery(GLenum target, GLuint id)
+* void glBeginTransformFeedback(GLenum primitiveMode)
+* void glBindAttribLocation(GLuint program, GLuint index, GLchar *name)
+* void glBindBuffer(GLenum target, GLuint buffer)
+* void glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
+* void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+* void glBindFragDataLocation(GLuint program, GLuint color, GLchar *name)
+* void glBindFramebuffer(GLenum target, GLuint framebuffer)
+* void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBindVertexArray(GLuint array)
+* void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+* void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+* void glBufferData(GLenum target, GLsizeiptr size, GLvoid *data, GLenum usage)
+* void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data)
+* GLenum glCheckFramebufferStatus(GLenum target)
+* void glClampColor(GLenum target, GLenum clamp)
+* void glClear(GLbitfield mask)
+* void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+* void glClearBufferfv(GLenum buffer, GLint drawbuffer, GLfloat *value)
+* void glClearBufferiv(GLenum buffer, GLint drawbuffer, GLint *value)
+* void glClearBufferuiv(GLenum buffer, GLint drawbuffer, GLuint *value)
+* void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearDepth(GLdouble depth)
+* void glClearStencil(GLint s)
+* GLenum glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLvoid *data)
+* void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLvoid *data)
+* void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum type)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n, GLuint *buffers)
+* void glDeleteFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n, GLuint *ids)
+* void glDeleteRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glDeleteShader(GLuint shader)
+* void glDeleteSync(GLsync sync)
+* void glDeleteTextures(GLsizei n, GLuint *textures)
+* void glDeleteVertexArrays(GLsizei n, GLuint *arrays)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLdouble nearVal, GLdouble farVal)
+* void glDetachShader(GLuint program, GLuint shader)
+* void glDisable(GLenum cap)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDisablei(GLenum target, GLuint index)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n, GLenum *bufs)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid *indices)
+* void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, GLvoid *indices, GLint basevertex)
+* void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLvoid *indices, GLsizei instancecount)
+* void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, GLvoid *indices, GLsizei instancecount, GLint basevertex)
+* void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid *indices)
+* void glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid *indices, GLint basevertex)
+* void glEnable(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glEnablei(GLenum target, GLuint index)
+* void glEndConditionalRender(void)
+* void glEndQuery(GLenum target)
+* void glEndTransformFeedback(void)
+* GLsync glFenceSync(GLenum condition, GLbitfield flags)
+* void glFinish(void)
+* void glFlush(void)
+* void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+* void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+* void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level)
+* void glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+* void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+* void glFrontFace(GLenum mode)
+* void glGenBuffers(GLsizei n, GLuint *buffers)
+* void glGenFramebuffers(GLsizei n, GLuint *framebuffers)
+* void glGenQueries(GLsizei n, GLuint *ids)
+* void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGenVertexArrays(GLsizei n, GLuint *arrays)
+* void glGenerateMipmap(GLenum target)
+* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
+* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
+* void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
+* void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
+* void glGetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName)
+* void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, GLuint *uniformIndices, GLenum pname, GLint *params)
+* void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj)
+* GLint glGetAttribLocation(GLuint program, GLchar *name)
+* void glGetBooleani_v(GLenum target, GLuint index, GLboolean *data)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
+* void glGetBufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetCompressedTexImage(GLenum target, GLint level, GLvoid *img)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* GLint glGetFragDataLocation(GLuint program, GLchar *name)
+* void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params)
+* void glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
+* void glGetInteger64v(GLenum pname, GLint64 *params)
+* void glGetIntegeri_v(GLenum target, GLuint index, GLint *data)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val)
+* void glGetProgramiv(GLuint program, GLenum pname, GLint *params)
+* void glGetQueryObjectiv(GLuint id, GLenum pname, GLint *params)
+* void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+* void glGetQueryiv(GLenum target, GLenum pname, GLint *params)
+* void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
+* void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source)
+* void glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
+* GLubyte * glGetString(GLenum name)
+* GLubyte * glGetStringi(GLenum name, GLuint index)
+* void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterIiv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
+* GLuint glGetUniformBlockIndex(GLuint program, GLchar *uniformBlockName)
+* void glGetUniformfv(GLuint program, GLint location, GLfloat *params)
+* void glGetUniformiv(GLuint program, GLint location, GLint *params)
+* void glGetUniformuiv(GLuint program, GLint location, GLuint *params)
+* void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
+* void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
+* void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params)
+* void glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexub(GLubyte c)
+* void glIndexubv(GLubyte *c)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsEnabledi(GLenum target, GLuint index)
+* GLboolean glIsFramebuffer(GLuint framebuffer)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsRenderbuffer(GLuint renderbuffer)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsSync(GLsync sync)
+* GLboolean glIsTexture(GLuint texture)
+* GLboolean glIsVertexArray(GLuint array)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glLogicOp(GLenum opcode)
+* GLvoid * glMapBuffer(GLenum target, GLenum access)
+* GLvoid * glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+* void glMultiDrawArrays(GLenum mode, GLint *first, GLsizei *count, GLsizei drawcount)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPointParameterf(GLenum pname, GLfloat param)
+* void glPointParameterfv(GLenum pname, GLfloat *params)
+* void glPointParameteri(GLenum pname, GLint param)
+* void glPointParameteriv(GLenum pname, GLint *params)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPrimitiveRestartIndex(GLuint index)
+* void glProvokingVertex(GLenum mode)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+* void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+* void glSampleCoverage(GLfloat value, GLboolean invert)
+* void glSampleMaski(GLuint index, GLbitfield mask)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face, GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
+* void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexImage2DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
+* void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexImage3DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
+* void glTexParameterIiv(GLenum target, GLenum pname, GLint *params)
+* void glTexParameterIuiv(GLenum target, GLenum pname, GLuint *params)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+* void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *pixels)
+* void glUniform1fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform1i(GLint location, GLint v0)
+* void glUniform1iv(GLint location, GLsizei count, GLint *value)
+* void glUniform1ui(GLint location, GLuint v0)
+* void glUniform1uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniform2f(GLint location, GLfloat v0, GLfloat v1)
+* void glUniform2fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform2i(GLint location, GLint v0, GLint v1)
+* void glUniform2iv(GLint location, GLsizei count, GLint *value)
+* void glUniform2ui(GLint location, GLuint v0, GLuint v1)
+* void glUniform2uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+* void glUniform3fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2)
+* void glUniform3iv(GLint location, GLsizei count, GLint *value)
+* void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+* void glUniform3uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+* void glUniform4fv(GLint location, GLsizei count, GLfloat *value)
+* void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+* void glUniform4iv(GLint location, GLsizei count, GLint *value)
+* void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+* void glUniform4uiv(GLint location, GLsizei count, GLuint *value)
+* void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+* void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *value)
+* GLboolean glUnmapBuffer(GLenum target)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLPaintDevice Class
+
+QOpenGLPaintDevice Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglpaintdevice.html
+
+
+Parameters : void
+
+
+Parent Class : QPaintDevice
+
+* QOpenGLContext * context(void)
+* qreal dotsPerMeterX(void)
+* qreal dotsPerMeterY(void)
+* void ensureActiveTarget(void)
+* bool paintFlipped(void)
+* void setDevicePixelRatio(qreal devicePixelRatio)
+* void setDotsPerMeterX(qreal dpmx)
+* void setDotsPerMeterY(qreal dpmy)
+* void setPaintFlipped(bool flipped)
+* void setSize(QSize size)
+* QSize size(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLShader Class
+
+QOpenGLShader Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglshader.html
+
+
+Parameters : QOpenGLShader::ShaderType,QObject *
+
+* bool compileSourceCode(char *source)
+* bool compileSourceCode_2(QByteArray source)
+* bool compileSourceCode_3(QString source)
+* bool compileSourceFile(QString fileName)
+* bool isCompiled(void)
+* QString log(void)
+* GLuint shaderId(void)
+* QOpenGLShader::ShaderType shaderType(void)
+* QByteArray sourceCode(void)
+* bool hasOpenGLShaders(QOpenGLShader::ShaderType type, QOpenGLContext *context)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLShaderProgram Class
+
+QOpenGLShaderProgram Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglshaderprogram.html
+
+
+Parameters : QObject *
+
+* bool addShaderFromSourceCode(QOpenGLShader::ShaderType type, char *source)
+* bool addShaderFromSourceCode_2(QOpenGLShader::ShaderType type, QByteArray source)
+* bool addShaderFromSourceCode_3(QOpenGLShader::ShaderType type, QString source)
+* bool addShaderFromSourceFile(QOpenGLShader::ShaderType type, QString fileName)
+* int attributeLocation(char *name)
+* int attributeLocation_2(QByteArray name)
+* int attributeLocation_3(QString name)
+* bool bind(void)
+* void bindAttributeLocation(char *name, int location)
+* void bindAttributeLocation_2(QByteArray name, int location)
+* void bindAttributeLocation_3(QString name, int location)
+* QVector<float> defaultOuterTessellationLevels(void)
+* void disableAttributeArray(int location)
+* void disableAttributeArray_2(char *name)
+* void enableAttributeArray(int location)
+* void enableAttributeArray_2(char *name)
+* bool isLinked(void)
+* bool link(void)
+* QString log(void)
+* int maxGeometryOutputVertices(void)
+* int patchVertexCount(void)
+* GLuint programId(void)
+* void release(void)
+* void removeAllShaders(void)
+* void removeShader(QOpenGLShader *shader)
+* void setAttributeArray(int location, GLfloat *values, int tupleSize, int stride)
+* void setAttributeArray_2(int location, QVector2D *values, int stride)
+* void setAttributeArray_3(int location, QVector3D *values, int stride)
+* void setAttributeArray_4(int location, QVector4D *values, int stride)
+* void setAttributeArray_5(int location, GLenum type, void *values, int tupleSize, int stride)
+* void setAttributeArray_6(char *name, GLfloat *values, int tupleSize, int stride)
+* void setAttributeArray_7(char *name, QVector2D *values, int stride)
+* void setAttributeArray_8(char *name, QVector3D *values, int stride)
+* void setAttributeArray_9(char *name, QVector4D *values, int stride)
+* void setAttributeArray_10(char *name, GLenum type, void *values, int tupleSize, int stride)
+* void setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride)
+* void setAttributeBuffer_2(char *name, GLenum type, int offset, int tupleSize, int stride)
+* void setAttributeValue(int location, GLfloat value)
+* void setAttributeValue_2(int location, GLfloat x, GLfloat y)
+* void setAttributeValue_3(int location, GLfloat x, GLfloat y, GLfloat z)
+* void setAttributeValue_4(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setAttributeValue_5(int location, QVector2D value)
+* void setAttributeValue_6(int location, QVector3D value)
+* void setAttributeValue_7(int location, QVector4D value)
+* void setAttributeValue_8(int location, QColor value)
+* void setAttributeValue_9(int location, GLfloat *values, int columns, int rows)
+* void setAttributeValue_10(char *name, GLfloat value)
+* void setAttributeValue_11(char *name, GLfloat x, GLfloat y)
+* void setAttributeValue_12(char *name, GLfloat x, GLfloat y, GLfloat z)
+* void setAttributeValue_13(char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setAttributeValue_14(char *name, QVector2D value)
+* void setAttributeValue_15(char *name, QVector3D value)
+* void setAttributeValue_16(char *name, QVector4D value)
+* void setDefaultInnerTessellationLevels(QVector<float> levels)
+* void setDefaultOuterTessellationLevels(QVector<float> levels)
+* void setPatchVertexCount(int count)
+* void setUniformValue(int location, GLfloat value)
+* void setUniformValue_2(int location, GLint value)
+* void setUniformValue_3(char *name, QColor color)
+* void setUniformValue_4(char *name, QPoint point)
+* void setUniformValue_5(char *name, QPointF point)
+* void setUniformValue_6(char *name, QSize size)
+* void setUniformValue_7(char *name, QSizeF size)
+* void setUniformValue_8(char *name, QMatrix2x2 value)
+* void setUniformValue_9(char *name, QMatrix2x3 value)
+* void setUniformValue_10(char *name, QMatrix2x4 value)
+* void setUniformValue_11(char *name, QMatrix3x2 value)
+* void setUniformValue_12(char *name, QMatrix3x3 value)
+* void setUniformValue_13(char *name, QMatrix3x4 value)
+* void setUniformValue_14(char *name, QMatrix4x2 value)
+* void setUniformValue_15(char *name, QMatrix4x3 value)
+* void setUniformValue_16(char *name, QMatrix4x4 value)
+* void setUniformValue_21(int location, GLuint value)
+* void setUniformValue_22(int location, GLfloat x, GLfloat y)
+* void setUniformValue_23(int location, GLfloat x, GLfloat y, GLfloat z)
+* void setUniformValue_24(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setUniformValue_25(int location, QVector2D value)
+* void setUniformValue_26(int location, QVector3D value)
+* void setUniformValue_27(int location, QVector4D value)
+* void setUniformValue_28(int location, QColor color)
+* void setUniformValue_29(int location, QPoint point)
+* void setUniformValue_30(int location, QPointF point)
+* void setUniformValue_31(int location, QSize size)
+* void setUniformValue_32(int location, QSizeF size)
+* void setUniformValue_33(int location, QMatrix2x2 value)
+* void setUniformValue_34(int location, QMatrix2x3 value)
+* void setUniformValue_35(int location, QMatrix2x4 value)
+* void setUniformValue_36(int location, QMatrix3x2 value)
+* void setUniformValue_37(int location, QMatrix3x3 value)
+* void setUniformValue_38(int location, QMatrix3x4 value)
+* void setUniformValue_39(int location, QMatrix4x2 value)
+* void setUniformValue_40(int location, QMatrix4x3 value)
+* void setUniformValue_41(int location, QMatrix4x4 value)
+* void setUniformValue_46(char *name, GLfloat value)
+* void setUniformValue_47(char *name, GLint value)
+* void setUniformValue_48(char *name, GLuint value)
+* void setUniformValue_49(char *name, GLfloat x, GLfloat y)
+* void setUniformValue_50(char *name, GLfloat x, GLfloat y, GLfloat z)
+* void setUniformValue_51(char *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setUniformValue_52(char *name, QVector2D value)
+* void setUniformValue_53(char *name, QVector3D value)
+* void setUniformValue_54(char *name, QVector4D value)
+* void setUniformValueArray(int location, GLfloat *values, int count, int tupleSize)
+* void setUniformValueArray_2(int location, GLint *values, int count)
+* void setUniformValueArray_3(int location, GLuint *values, int count)
+* void setUniformValueArray_4(int location, QVector2D *values, int count)
+* void setUniformValueArray_5(int location, QVector3D *values, int count)
+* void setUniformValueArray_6(int location, QVector4D *values, int count)
+* void setUniformValueArray_7(int location, QMatrix2x2 *values, int count)
+* void setUniformValueArray_8(int location, QMatrix2x3 *values, int count)
+* void setUniformValueArray_9(int location, QMatrix2x4 *values, int count)
+* void setUniformValueArray_10(int location, QMatrix3x2 *values, int count)
+* void setUniformValueArray_11(int location, QMatrix3x3 *values, int count)
+* void setUniformValueArray_12(int location, QMatrix3x4 *values, int count)
+* void setUniformValueArray_13(int location, QMatrix4x2 *values, int count)
+* void setUniformValueArray_14(int location, QMatrix4x3 *values, int count)
+* void setUniformValueArray_15(int location, QMatrix4x4 *values, int count)
+* void setUniformValueArray_16(char *name, GLfloat *values, int count, int tupleSize)
+* void setUniformValueArray_17(char *name, GLint *values, int count)
+* void setUniformValueArray_18(char *name, GLuint *values, int count)
+* void setUniformValueArray_19(char *name, QVector2D *values, int count)
+* void setUniformValueArray_20(char *name, QVector3D *values, int count)
+* void setUniformValueArray_21(char *name, QVector4D *values, int count)
+* void setUniformValueArray_22(char *name, QMatrix2x2 *values, int count)
+* void setUniformValueArray_23(char *name, QMatrix2x3 *values, int count)
+* void setUniformValueArray_24(char *name, QMatrix2x4 *values, int count)
+* void setUniformValueArray_25(char *name, QMatrix3x2 *values, int count)
+* void setUniformValueArray_26(char *name, QMatrix3x3 *values, int count)
+* void setUniformValueArray_27(char *name, QMatrix3x4 *values, int count)
+* void setUniformValueArray_28(char *name, QMatrix4x2 *values, int count)
+* void setUniformValueArray_29(char *name, QMatrix4x3 *values, int count)
+* void setUniformValueArray_30(char *name, QMatrix4x4 *values, int count)
+* QList<QOpenGLShader *> shaders(void)
+* int uniformLocation(char *name)
+* int uniformLocation_2(QByteArray name)
+* int uniformLocation_3(QString name)
+* bool hasOpenGLShaderPrograms(QOpenGLContext *context)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLTexture Class
+
+QOpenGLTexture Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopengltexture.html
+
+
+Parameters : QOpenGLTexture::Target
+
+* void allocateStorage(void)
+* void bind_2(uint unit, QOpenGLTexture::TextureUnitReset reset)
+* QColor borderColor(void)
+* void borderColor_2(float *border)
+* void borderColor_3(int *border)
+* void borderColor_4(unsigned int *border)
+* QOpenGLTexture * createTextureView(QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat viewFormat, int minimumMipmapLevel, int maximumMipmapLevel, int minimumLayer, int maximumLayer)
+* int depth(void)
+* QOpenGLTexture::DepthStencilMode depthStencilMode(void)
+* void destroy(void)
+* int faces(void)
+* QOpenGLTexture::TextureFormat format(void)
+* void generateMipMaps(void)
+* void generateMipMaps_2(int baseLevel, bool resetBaseLevel)
+* int height(void)
+* bool isAutoMipMapGenerationEnabled(void)
+* bool isBound(void)
+* bool isBound_2(uint unit)
+* bool isCreated(void)
+* bool isTextureView(void)
+* int layers(void)
+* QPair<float, float> levelOfDetailRange(void)
+* float levelofDetailBias(void)
+* QOpenGLTexture::Filter magnificationFilter(void)
+* float maximumAnisotropy(void)
+* float maximumLevelOfDetail(void)
+* int maximumMipLevels(void)
+* float minimumLevelOfDetail(void)
+* int mipBaseLevel(void)
+* int mipMaxLevel(void)
+* void release(void)
+* void release_2(uint unit, QOpenGLTexture::TextureUnitReset reset)
+* void setBorderColor(QColor color)
+* void setBorderColor_4(uint r, uint g, uint b, uint a)
+* void setCompressedData_4(int mipLevel, int dataSize, void *data, QOpenGLPixelTransferOptions * options)
+* void setCompressedData_5(int dataSize, void *data, QOpenGLPixelTransferOptions * options)
+* void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, QOpenGLPixelTransferOptions * options)
+* void setData_4(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, QOpenGLPixelTransferOptions * options)
+* void setData_5(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void *data, QOpenGLPixelTransferOptions * options)
+* void setData_6(QImage image, QOpenGLTexture::MipMapGeneration genMipMaps)
+* void setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode)
+* void setLayers(int layers)
+* void setLevelOfDetailRange(float min, float max)
+* void setLevelofDetailBias(float bias)
+* void setMagnificationFilter(QOpenGLTexture::Filter filter)
+* void setMaximumAnisotropy(float anisotropy)
+* void setMaximumLevelOfDetail(float value)
+* void setMinMagFilters(QOpenGLTexture::Filter minificationQOpenGLTexture::Filter, QOpenGLTexture::Filter magnificationQOpenGLTexture::Filter)
+* void setMinificationFilter(QOpenGLTexture::Filter filter)
+* void setMinimumLevelOfDetail(float value)
+* void setMipBaseLevel(int baseLevel)
+* void setMipLevelRange(int baseLevel, int maxLevel)
+* void setMipLevels(int levels)
+* void setMipMaxLevel(int maxLevel)
+* void setSwizzleMask(QOpenGLTexture::SwizzleComponent component, QOpenGLTexture::SwizzleValue value)
+* void setSwizzleMask_2(QOpenGLTexture::SwizzleValue r, QOpenGLTexture::SwizzleValue g, QOpenGLTexture::SwizzleValue b, QOpenGLTexture::SwizzleValue a)
+* void setWrapMode(QOpenGLTexture::WrapMode mode)
+* void setWrapMode_2(QOpenGLTexture::CoordinateDirection direction, QOpenGLTexture::WrapMode mode)
+* QOpenGLTexture::SwizzleValue swizzleMask(QOpenGLTexture::SwizzleComponent component)
+* int width(void)
+* QOpenGLTexture::WrapMode wrapMode(QOpenGLTexture::CoordinateDirection direction)
+* GLuint boundTextureId(QOpenGLTexture::BindingTarget target)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLTimerQuery Class
+
+QOpenGLTimerQuery Class
+=======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopengltimerquery.html
+
+
+Parameters : QObject *
+
+* void begin(void)
+* bool create(void)
+* void destroy(void)
+* void end(void)
+* bool isCreated(void)
+* bool isResultAvailable(void)
+* GLuint objectId(void)
+* void recordTimestamp(void)
+* GLuint64 waitForResult(void)
+* GLuint64 waitForTimestamp(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLVersionProfile Class
+
+QOpenGLVersionProfile Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglversionprofile.html
+
+
+Parameters : void
+
+* bool hasProfiles(void)
+* bool isLegacyVersion(void)
+* bool isValid(void)
+* QSurfaceFormat::OpenGLContextProfile profile(void)
+* void setProfile(QSurfaceFormat::OpenGLContextProfile profile)
+* void setVersion(int majorVersion, int minorVersion)
+* QPair<int, int> version(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLVertexArrayObject Class
+
+QOpenGLVertexArrayObject Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglvertexarrayobject.html
+
+
+Parameters : QObject *
+
+* void bind(void)
+* bool create(void)
+* void destroy(void)
+* bool isCreated(void)
+* GLuint objectId(void)
+* void release(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOpenGLWidget Class
+
+QOpenGLWidget Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qopenglwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void geteventparameters(void)
+* void setInitEvent(const char *cStr)
+* const char *getInitEvent(void)
+* void setPaintEvent(const char *cStr)
+* const char *getPaintEvent(void)
+* void setResizeEvent(const char *cStr)
+* const char *getResizeEvent(void)
+* QOpenGLContext * context(void)
+* GLuint defaultFramebufferObject(void)
+* void doneCurrent(void)
+* QSurfaceFormat format(void)
+* QImage grabFramebuffer(void)
+* bool isValid(void)
+* void makeCurrent(void)
+* void setFormat(QSurfaceFormat format)
+* QOpenGLWidget::UpdateBehavior updateBehavior(void)
+
+.. index::
+       pair: RingQt Classes Reference; QOrbitCameraController Class
+
+QOrbitCameraController Class
+============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qorbitcameracontroller.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QAbstractCameraController
+
+* void setZoomInLimit(float zoomInLimit)
+* float zoomInLimit(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPageSetupDialog Class
+
+QPageSetupDialog Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpagesetupdialog.html
+
+
+Parameters : QPrinter *,QWidget *
+
+
+Parent Class : QDialog
+
+* void open(QObject * receiver, char * member)
+* QPrinter * printer(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPaintDevice Class
+
+QPaintDevice Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpaintdevice.html
+
+* int colorCount(void)
+* int depth(void)
+* int devicePixelRatio(void)
+* int heightMM(void)
+* int logicalDpiX(void)
+* int logicalDpiY(void)
+* QPaintEngine * paintEngine(void)
+* bool paintingActive(void)
+* int physicalDpiX(void)
+* int physicalDpiY(void)
+* int width(void)
+* int widthMM(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPainter Class
+
+QPainter Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpainter.html
+
+
+Parameters : void
+
+* QBrush background(void)
+* int backgroundMode(void)
+* bool begin(QPaintDevice *device)
+* void beginNativePainting(void)
+* QRect boundingRect(int x, int y, int w, int h, int flags, QString text)
+* QBrush brush(void)
+* QPoint brushOrigin(void)
+* QRectF clipBoundingRect(void)
+* QPainterPath clipPath(void)
+* QRegion clipRegion(void)
+* QTransform combinedTransform(void)
+* int compositionMode(void)
+* QPaintDevice *device(void)
+* QTransform deviceTransform(void)
+* void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawEllipse(int x, int y, int width, int height)
+* void drawGlyphRun(QPointF  position,  QGlyphRun  glyphs)
+* void drawImage(int x, int y,  QImage image)
+* void drawLine(int x1, int y1, int x2, int y2)
+* void drawLines(QLine *lines, int lineCount)
+* void drawPath(QPainterPath path)
+* void drawPicture(int x, int y,  QPicture  picture)
+* void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawPixmap(int x, int y,  QPixmap)
+* void drawPoint(int x, int y)
+* void drawRect(int x, int y, int width, int height)
+* void drawRects(QRectF *rectangles, int rectCount)
+* void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
+* void drawStaticText(int left, int top,  QStaticText  staticText)
+* void drawText(int x, int y, QString  text)
+* void drawTiledPixmap(int x, int y, int width, int height,  QPixmap  pixmap, int sx, int sy)
+* bool end(void) # In RingQt use : bool endpaint(void)
+* void endNativePainting(void)
+* void eraseRect(int x, int y, int width, int height)
+* void fillPath(QPainterPath  path,  QBrush  brush)
+* void fillRect(int x, int y, int width, int height, QBrush)
+* QFont font(void)
+* QFontInfo fontInfo(void)
+* bool hasClipping(void)
+* void initFrom(QWidget *widget)
+* bool isActive(void)
+* int layoutDirection(void)
+* double opacity(void)
+* QPaintEngine *paintEngine(void)
+* QPen pen(void)
+* int renderHints(void)
+* void resetTransform(void)
+* void restore(void)
+* void rotate(qreal angle)
+* void save(void)
+* void scale(double sx, double sy)
+* void setBackground(QBrush  brush)
+* void setBackgroundMode(Qt::BGMode mode)
+* void setBrush(QBrush brush)
+* void setBrushOrigin(int x, int y)
+* void setClipPath(QPainterPath  path, Qt::ClipOperation operation)
+* void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation)
+* void setClipRegion(QRegion  region, Qt::ClipOperation operation)
+* void setClipping(bool enable)
+* void setCompositionMode(QPainter::CompositionMode mode)
+* void setFont(QFont font)
+* void setLayoutDirection(Qt::LayoutDirection direction)
+* void setOpacity(qreal opacity)
+* void setPen(QPen pen)
+* void setRenderHint(QPainter::RenderHint hint, bool on)
+* void setTransform(QTransform  transform, bool combine)
+* void setViewTransformEnabled(bool enable)
+* void setViewport(int x, int y, int width, int height)
+* void setWindow(int x, int y, int width, int height)
+* void setWorldMatrixEnabled(bool enable)
+* void setWorldTransform( QTransform  matrix, bool combine)
+* void shear(double sh, double sv)
+* void strokePath(QPainterPath  path,  QPen  pen)
+* bool testRenderHint(QPainter::RenderHint hint)
+* QTransform transform(void)
+* void translate(double dx, double dy)
+* bool viewTransformEnabled(void)
+* QRect viewport(void)
+* QRect window(void)
+* bool worldMatrixEnabled(void)
+* QTransform  worldTransform(void)
+* void drawPolygon(List *pPoints, Qt::FillRule fillRule)
+* void drawConvexPolygon(List *pPoints)
+* void drawPoints(List *pPoints)
+* void drawPolyline(List *pPoints)
+
+.. index::
+       pair: RingQt Classes Reference; QPainter2 Class
+
+QPainter2 Class
+===============
+
+
+Parameters : QPaintDevice *
+
+
+Parent Class : QPainter
+
+
+.. index::
+       pair: RingQt Classes Reference; QPainterPath Class
+
+QPainterPath Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpainterpath.html
+
+
+Parameters : void
+
+* void addEllipse(qreal x, qreal y, qreal width, qreal height)
+* void addPath(QPainterPath)
+* void addPolygon(QPolygonF)
+* void addRect(qreal x, qreal y, qreal width, qreal height)
+* void addRegion(QRegion)
+* void addRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
+* void addText(qreal x, qreal y, QFont, QString)
+* qreal angleAtPercent(qreal t)
+* void arcMoveTo(qreal x, qreal y, qreal width, qreal height, qreal angle)
+* void arcTo(qreal x, qreal y, qreal width, qreal height, qreal startAngle, qreal sweepLength)
+* QRectF boundingRect(void)
+* void closeSubpath(void)
+* void connectPath(QPainterPath)
+* bool contains(QPointF)
+* QRectF controlPointRect(void)
+* void cubicTo(qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY)
+* QPointF currentPosition(void)
+* QPainterPath::Element elementAt(int index)
+* int elementCount(void)
+* Qt::FillRule fillRule(void)
+* QPainterPath intersected(QPainterPath)
+* bool intersects(QRectF)
+* bool isEmpty(void)
+* qreal length(void)
+* void lineTo(qreal x, qreal y)
+* void moveTo(qreal x, qreal y)
+* qreal percentAtLength(qreal len)
+* QPointF pointAtPercent(qreal t)
+* void quadTo(qreal cx, qreal cy, qreal endPointX, qreal endPointY)
+* void setElementPositionAt(int index, qreal x, qreal y)
+* void setFillRule(Qt::FillRule fillRule)
+* QPainterPath simplified(void)
+* qreal slopeAtPercent(qreal t)
+* QPainterPath subtracted(QPainterPath)
+* void swap(QPainterPath)
+* QPolygonF toFillPolygon(QTransform)
+* QPainterPath toReversed(void)
+* void translate(qreal dx, qreal dy)
+* QPainterPath translated(qreal dx, qreal dy)
+* QPainterPath united(QPainterPath)
+
+.. index::
+       pair: RingQt Classes Reference; QPen Class
+
+QPen Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpen.html
+
+
+Parameters : void
+
+* QBrush brush(void)
+* int capStyle(void)
+* QColor color(void)
+* double dashOffset(void)
+* bool isCosmetic(void)
+* bool isSolid(void)
+* int joinStyle(void)
+* double miterLimit(void)
+* void setBrush(QBrush)
+* void setCapStyle(Qt::PenCapStyle style)
+* void setColor(QColor)
+* void setCosmetic(bool cosmetic)
+* void setDashOffset(double offset)
+* void setJoinStyle(Qt::PenJoinStyle style)
+* void setMiterLimit(double limit)
+* void setStyle(Qt::PenStyle style)
+* void setWidth(int width)
+* void setWidthF(double width)
+* int style(void)
+* void swap(QPen)
+* int width(void)
+* double widthF(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPerVertexColorMaterial Class
+
+QPerVertexColorMaterial Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qpervertexcolormaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+.. index::
+       pair: RingQt Classes Reference; QPhongMaterial Class
+
+QPhongMaterial Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qphongmaterial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QColor ambient(void)
+* QColor diffuse(void)
+* float shininess(void)
+* QColor specular(void)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QColor diffuse)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+
+.. index::
+       pair: RingQt Classes Reference; QPicture Class
+
+QPicture Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpicture.html
+
+
+Parameters : void
+
+* QRect boundingRect(void)
+* const char *data(void)
+* bool isNull(void)
+* bool load(QString, const char *format) # In RingQt use : bool loadfile(QString, const char *format)
+* bool play(QPainter *painter)
+* bool save(QString , const char *format)
+* void setBoundingRect(QRect)
+* int size(void)
+* void swap(QPicture)
+
+.. index::
+       pair: RingQt Classes Reference; QPixmap Class
+
+QPixmap Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpixmap.html
+
+
+Parameters : const char *
+
+* QPixmap copy(int x, int y, int width, int height)
+* QPixmap scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* int width(void)
+* int height(void)
+* QBitmap createMaskFromColor(QColor , Qt::MaskMode)
+* QBitmap mask(void)
+* void setMask(QBitmap)
+* void fill(QColor)
+* QPixmap fromImage(QImage,Qt::ImageConversionFlags)
+* bool load(QString, const char *, Qt::ImageConversionFlags )
+* qint64 cacheKey(void)
+* bool convertFromImage(QImage image, Qt::ImageConversionFlags flags)
+* QPixmap copy_2(QRect rectangle)
+* QBitmap createHeuristicMask(bool clipTight)
+* int depth(void)
+* void detach(void)
+* qreal devicePixelRatio(void)
+* bool hasAlpha(void)
+* bool hasAlphaChannel(void)
+* bool isNull(void)
+* bool isQBitmap(void)
+* bool loadFromData(uchar *data, uint len, char *format, Qt::ImageConversionFlags flags)
+* bool loadFromData_2(QByteArray data, char *format, Qt::ImageConversionFlags flags)
+* QRect rect(void)
+* bool save(QString fileName, char *format, int quality)
+* bool save_2(QIODevice *device, char *format, int quality)
+* QPixmap scaled_2(QSize size, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* QPixmap scaledToHeight(int height, Qt::TransformationMode mode)
+* QPixmap scaledToWidth(int width, Qt::TransformationMode mode)
+* void scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed)
+* void scroll_2(int dx, int dy, QRect rect, QRegion *exposed)
+* void setDevicePixelRatio(qreal scaleFactor)
+* QSize size(void)
+* void swap(QPixmap other)
+* QImage toImage(void)
+* QPixmap transformed(QTransform transform, Qt::TransformationMode mode)
+* QPixmap transformed_2(QMatrix matrix, Qt::TransformationMode mode)
+* int defaultDepth(void)
+* QPixmap fromImage_2(QImage image, Qt::ImageConversionFlags flags)
+* QPixmap fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags)
+* QTransform trueMatrix(QTransform matrix, int width, int height)
+* QMatrix trueMatrix_2(QMatrix m, int w, int h)
+
+.. index::
+       pair: RingQt Classes Reference; QPixmap2 Class
+
+QPixmap2 Class
+==============
+
+
+Parameters : int width, int height
+
+
+Parent Class : QPixmap
+
+
+.. index::
+       pair: RingQt Classes Reference; QPlainTextEdit Class
+
+QPlainTextEdit Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qplaintextedit.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* QString anchorAt(QPoint pos)
+* bool backgroundVisible(void)
+* int blockCount(void)
+* bool canPaste(void)
+* bool centerOnScroll(void)
+* QMenu * createStandardContextMenu(void)
+* QTextCharFormat currentCharFormat(void)
+* QTextCursor cursorForPosition(QPoint pos)
+* QRect cursorRect(QTextCursor cursor)
+* QRect cursorRect_2(void)
+* int cursorWidth(void)
+* QTextDocument * document(void)
+* QString documentTitle(void)
+* void ensureCursorVisible(void)
+* QList<QTextEdit::ExtraSelection> extraSelections(void)
+* bool find(QString exp, QTextDocument::FindFlags options)
+* bool isReadOnly(void)
+* bool isUndoRedoEnabled(void)
+* QPlainTextEdit::LineWrapMode lineWrapMode(void)
+* int maximumBlockCount(void)
+* void mergeCurrentCharFormat(QTextCharFormat modifier)
+* void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode)
+* bool overwriteMode(void)
+* void print(QPagedPaintDevice *printer)
+* void setBackgroundVisible(bool visible)
+* void setCenterOnScroll(bool enabled)
+* void setCurrentCharFormat(QTextCharFormat format)
+* void setCursorWidth(int width)
+* void setDocument(QTextDocument *document)
+* void setDocumentTitle(QString title)
+* void setExtraSelections(QList<QTextEdit::ExtraSelection> selections)
+* void setLineWrapMode(QPlainTextEdit::LineWrapMode mode)
+* void setMaximumBlockCount(int maximum)
+* void setOverwriteMode(bool overwrite)
+* void setReadOnly(bool ro)
+* void setTabChangesFocus(bool b)
+* void setTabStopWidth(int width)
+* void setTextCursor(QTextCursor cursor)
+* void setTextInteractionFlags(Qt::TextInteractionFlags flags)
+* void setUndoRedoEnabled(bool enable)
+* void setWordWrapMode(QTextOption::WrapMode policy)
+* bool tabChangesFocus(void)
+* int tabStopWidth(void)
+* QTextCursor textCursor(void)
+* Qt::TextInteractionFlags textInteractionFlags(void)
+* QString toPlainText(void)
+* QTextOption::WrapMode wordWrapMode(void)
+* void appendHtml(QString html)
+* void appendPlainText(QString text)
+* void centerCursor(void)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void insertPlainText(QString text)
+* void paste(void)
+* void redo(void)
+* void selectAll(void)
+* void setPlainText(QString text)
+* void undo(void)
+* void zoomIn(int range)
+* void zoomOut(int range)
+* void setblockCountChangedEvent(const char *cStr)
+* void setcopyAvailableEvent(const char *cStr)
+* void setcursorPositionChangedEvent(const char *cStr)
+* void setmodificationChangedEvent(const char *cStr)
+* void setredoAvailableEvent(const char *cStr)
+* void setselectionChangedEvent(const char *cStr)
+* void settextChangedEvent(const char *cStr)
+* void setundoAvailableEvent(const char *cStr)
+* void setupdateRequestEvent(const char *cStr)
+* const char *getblockCountChangedEvent(void)
+* const char *getcopyAvailableEvent(void)
+* const char *getcursorPositionChangedEvent(void)
+* const char *getmodificationChangedEvent(void)
+* const char *getredoAvailableEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettextChangedEvent(void)
+* const char *getundoAvailableEvent(void)
+* const char *getupdateRequestEvent(void)
+* void cyanline(void)
+* void setactivelinecolor(QColor)
+
+.. index::
+       pair: RingQt Classes Reference; QPlaneMesh Class
+
+QPlaneMesh Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qplanemesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float height(void)
+* QSize meshResolution(void)
+* bool mirrored(void)
+* float width(void)
+* void setHeight(float height)
+* void setMeshResolution(QSize resolution)
+* void setMirrored(bool mirrored)
+* void setWidth(float width)
+
+.. index::
+       pair: RingQt Classes Reference; QPoint Class
+
+QPoint Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpoint.html
+
+
+Parameters : void
+
+* bool isNull(void)
+* int manhattanLength(void)
+* int rx(void)
+* int ry(void)
+* void setX(int x)
+* void setY(int y)
+* int x(void)
+* int y(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPointF Class
+
+QPointF Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpointf.html
+
+
+Parameters : void
+
+* bool isNull(void)
+* qreal manhattanLength(void)
+* qreal rx(void)
+* qreal ry(void)
+* void setX(qreal x)
+* void setY(qreal y)
+* QPoint toPoint(void)
+* qreal x(void)
+* qreal y(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPointLight Class
+
+QPointLight Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qpointlight.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float constantAttenuation(void)
+* float linearAttenuation(void)
+* float quadraticAttenuation(void)
+* void setConstantAttenuation(float value)
+* void setLinearAttenuation(float value)
+* void setQuadraticAttenuation(float value)
+* void setColor(QColor)
+* void setIntensity(float intensity)
+
+.. index::
+       pair: RingQt Classes Reference; QPrintDialog Class
+
+QPrintDialog Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprintdialog.html
+
+
+Parameters : QPrinter *,QWidget *
+
+
+Parent Class : QAbstractPrintDialog
+
+* void open(QObject * receiver, char * member)
+* QAbstractPrintDialog::PrintDialogOptions options(void)
+* QPrinter * printer(void)
+* void setOption(QAbstractPrintDialog::PrintDialogOption option, bool on)
+* void setOptions(QAbstractPrintDialog::PrintDialogOptions options)
+* bool testOption(QAbstractPrintDialog::PrintDialogOption option)
+* void setacceptedEvent(const char *)
+* const char *getacceptedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPrintPreviewDialog Class
+
+QPrintPreviewDialog Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprintpreviewdialog.html
+
+
+Parameters : QPrinter *
+
+
+Parent Class : QDialog
+
+* void open(QObject * receiver, char * member)
+* QPrinter * printer(void)
+* void setpaintRequestedEvent(const char *)
+* const char *getpaintRequestedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPrintPreviewWidget Class
+
+QPrintPreviewWidget Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprintpreviewwidget.html
+
+
+Parameters : QPrinter *
+
+
+Parent Class : QWidget
+
+* int currentPage(void)
+* QPrinter::Orientation orientation(void)
+* int pageCount(void)
+* QPrintPreviewWidget::ViewMode viewMode(void)
+* qreal zoomFactor(void)
+* QPrintPreviewWidget::ZoomMode zoomMode(void)
+* void fitInView(void)
+* void fitToWidth(void)
+* void print(void)
+* void setAllPagesViewMode(void)
+* void setCurrentPage(int page)
+* void setFacingPagesViewMode(void)
+* void setLandscapeOrientation(void)
+* void setOrientation(QPrinter::Orientation orientation)
+* void setPortraitOrientation(void)
+* void setSinglePageViewMode(void)
+* void setViewMode(QPrintPreviewWidget::ViewMode mode)
+* void setZoomFactor(qreal factor)
+* void setZoomMode(QPrintPreviewWidget::ZoomMode zoomMode)
+* void updatePreview(void)
+* void zoomIn(qreal factor)
+* void zoomOut(qreal factor)
+* void setpaintRequestedEvent(const char *)
+* void setpreviewChangedEvent(const char *)
+* const char *getpaintRequestedEvent(void)
+* const char *getpreviewChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPrinter Class
+
+QPrinter Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprinter.html
+
+
+Parameters : QPrinter::PrinterMode
+
+* bool abort(void)
+* bool collateCopies(void)
+* int colorMode(void)
+* int copyCount(void)
+* QString creator(void)
+* QString docName(void)
+* int duplex(void)
+* bool fontEmbeddingEnabled(void)
+* int fromPage(void)
+* bool fullPage(void)
+* bool isValid(void)
+* QString outputFileName(void)
+* int outputFormat(void)
+* QRectF pageRect(QPrinter::Unit unit)
+* QRectF paperRect(QPrinter::Unit unit)
+* int paperSource(void)
+* QPrintEngine *printEngine(void)
+* QString printProgram(void)
+* int printRange(void)
+* QString printerName(void)
+* QString printerSelectionOption(void)
+* int printerState(void)
+* int resolution(void)
+* void setCollateCopies(bool collate)
+* void setColorMode(QPrinter::ColorMode newColorMode)
+* void setCopyCount(int count)
+* void setCreator(QString)
+* void setDocName(QString)
+* void setDuplex(QPrinter::DuplexMode duplex)
+* void setFontEmbeddingEnabled(bool enable)
+* void setFromTo(int from, int to)
+* void setFullPage(bool fp)
+* void setOutputFileName(QString)
+* void setOutputFormat(QPrinter::OutputFormat format)
+* void setPrintProgram(QString)
+* void setPrintRange(QPrinter::PrintRange)
+* void setPrinterName(QString)
+* void setPrinterSelectionOption(QString)
+* void setResolution(int dpi)
+* bool supportsMultipleCopies(void)
+* int toPage(void)
+* bool newPage(void)
+* QPaintEngine *paintEngine(void)
+* void setPageSizeMM(QSizeF)
+
+.. index::
+       pair: RingQt Classes Reference; QPrinterInfo Class
+
+QPrinterInfo Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprinterinfo.html
+
+
+Parameters : void
+
+* QString description(void)
+* bool isDefault(void)
+* bool isNull(void)
+* QString location(void)
+* QString makeAndModel(void)
+* QString printerName(void)
+* QPrinterInfo printerInfo(QString printerName
+
+.. index::
+       pair: RingQt Classes Reference; QProcess Class
+
+QProcess Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprocess.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QIODevice
+
+* QStringList arguments(void)
+* void closeReadChannel(QProcess::ProcessChannel channel)
+* void closeWriteChannel(void)
+* QProcess::ProcessError error(void)
+* int exitCode(void)
+* QProcess::ExitStatus exitStatus(void)
+* QProcess::InputChannelMode inputChannelMode(void)
+* QProcess::ProcessChannelMode processChannelMode(void)
+* QProcessEnvironment processEnvironment(void)
+* QString program(void)
+* QByteArray readAllStandardError(void)
+* QByteArray readAllStandardOutput(void)
+* QProcess::ProcessChannel readChannel(void)
+* void setArguments( QStringList  arguments)
+* void setInputChannelMode(QProcess::InputChannelMode mode)
+* void setProcessChannelMode(QProcess::ProcessChannelMode mode)
+* void setProcessEnvironment( QProcessEnvironment  environment)
+* void setProgram( QString  program)
+* void setReadChannel(QProcess::ProcessChannel channel)
+* void setStandardErrorFile( QString  fileName, QIODevice::OpenMode mode )
+* void setStandardInputFile( QString  fileName)
+* void setStandardOutputFile( QString  fileName, QIODevice::OpenMode mode )
+* void setStandardOutputProcess(QProcess *destination)
+* void setWorkingDirectory( QString  dir)
+* void start( QString  program,  QStringList  arguments, QIODevice::OpenMode mode )
+* void start_2( QString  command, QIODevice::OpenMode mode )
+* void start_3(QIODevice::OpenMode mode )
+* QProcess::ProcessState state(void)
+* bool waitForFinished(int msecs )
+* bool waitForStarted(int msecs )
+* QString workingDirectory(void)
+* void kill(void)
+* void terminate(void)
+* void setreadyReadStandardErrorEvent(const char *)
+* void setreadyReadStandardOutputEvent(const char *)
+* const char *getreadyReadStandardErrorEvent(void)
+* const char *getreadyReadStandardOutputEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QProgressBar Class
+
+QProgressBar Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qprogressbar.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int alignment(void)
+* QString format(void)
+* bool invertedAppearance(void)
+* bool isTextVisible(void)
+* int maximum(void)
+* int minimum(void)
+* int orientation(void)
+* void resetFormat(void)
+* void setAlignment(Qt::AlignmentFlag alignment)
+* void setFormat(QString)
+* void setInvertedAppearance(bool invert)
+* void setTextDirection(QProgressBar::Direction textDirection)
+* void setTextVisible(bool visible)
+* QString text(void)
+* int textDirection(void)
+* int value(void)
+* void reset(void)
+* void setMaximum(int maximum)
+* void setMinimum(int minimum)
+* void setOrientation(Qt::Orientation)
+* void setRange(int minimum, int maximum)
+* void setValue(int value)
+* void setvalueChangedEvent(const char *)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QPushButton Class
+
+QPushButton Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qpushbutton.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractButton
+
+* void setText(const char *)
+* void setClickEvent(const char *)
+* void setIcon(QIcon)
+* void setIconSize(QSize)
+* const char *getClickEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QQmlEngine Class
+
+QQmlEngine Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qqmlengine.html
+
+
+Parameters : QObject *
+
+* void addImageProvider(QString providerId, QQmlImageProviderBase *provider)
+* void addImportPath(QString path)
+* void addPluginPath(QString path)
+* QUrl baseUrl(void)
+* void clearComponentCache(void)
+* QQmlImageProviderBase *imageProvider(QString providerId)
+* QStringList importPathList(void)
+* bool importPlugin(QString filePath, QString uri, QList<QQmlError> *errors)
+* QQmlIncubationController *incubationController(void)
+* QNetworkAccessManager *networkAccessManager(void)
+* QQmlNetworkAccessManagerFactory *networkAccessManagerFactory(void)
+* QString offlineStorageDatabaseFilePath(QString databaseName)
+* QString offlineStoragePath(void)
+* bool outputWarningsToStandardError(void)
+* QStringList pluginPathList(void)
+* void removeImageProvider(QString providerId)
+* QQmlContext *rootContext(void)
+* void setBaseUrl(QUrl url)
+* void setImportPathList(QStringList paths)
+* void setIncubationController(QQmlIncubationController *controller)
+* void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *factory)
+* void setOfflineStoragePath(QString dir)
+* void setOutputWarningsToStandardError(bool enabled)
+* void setPluginPathList(QStringList paths)
+* void trimComponentCache(void)
+* void retranslate(void)
+* QQmlContext * contextForObject(QObject *object)
+* QQmlEngine::ObjectOwnership objectOwnership(QObject *object)
+* void setContextForObject(QObject *object, QQmlContext *context)
+* void setObjectOwnership(QObject *object, QQmlEngine::ObjectOwnership ownership)
+
+.. index::
+       pair: RingQt Classes Reference; QQmlError Class
+
+QQmlError Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qqmlerror.html
+
+
+Parameters : void
+
+* int column(void)
+* QString description(void)
+* bool isValid(void)
+* int line(void)
+* QObject * object(void)
+* void setColumn(int column)
+* void setDescription(QString description)
+* void setLine(int line)
+* void setObject(QObject *object)
+* void setUrl(QUrl url)
+* QString toString(void)
+* QUrl url(void)
+
+.. index::
+       pair: RingQt Classes Reference; QQuaternion Class
+
+QQuaternion Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qquaternion.html
+
+
+Parameters : float,float,float,float
+
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QQuaternion normalized(void)
+* QVector3D rotatedVector(QVector3D vector)
+* float scalar(void)
+* void setScalar(float scalar)
+* void setVector(QVector3D vector)
+* void setVector_2(float x, float y, float z)
+* void setX(float x)
+* void setY(float y)
+* void setZ(float z)
+* QVector3D vector(void)
+* float x(void)
+* float y(void)
+* float z(void)
+* QQuaternion fromAxisAndAngle_2(float x, float y, float z, float angle)
+* QQuaternion nlerp(QQuaternion q1, QQuaternion q2, float t)
+* QQuaternion slerp(QQuaternion q1, QQuaternion q2, float t)
+
+.. index::
+       pair: RingQt Classes Reference; QQuickView Class
+
+QQuickView Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qquickview.html
+
+
+Parameters : void
+
+
+Parent Class : QWindow
+
+* QQmlEngine *engine(void)
+* QList<QQmlError> errors(void)
+* QSize initialSize(void)
+* QQuickWidget::ResizeMode resizeMode(void)
+* QQmlContext *rootContext(void)
+* QQuickItem *rootObject(void)
+* void setFormat(QSurfaceFormat format)
+* void setResizeMode(QQuickView::ResizeMode)
+* QUrl source(void)
+* QQuickWidget::Status status(void)
+* void setSource(QUrl url)
+
+.. index::
+       pair: RingQt Classes Reference; QQuickWidget Class
+
+QQuickWidget Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qquickwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QQmlEngine *engine(void)
+* QList<QQmlError> errors(void)
+* QSurfaceFormat format(void)
+* QImage grabFramebuffer(void)
+* QSize initialSize(void)
+* QQuickWindow *quickWindow(void)
+* QQuickWidget::ResizeMode resizeMode(void)
+* QQmlContext *rootContext(void)
+* QQuickItem *rootObject(void)
+* void setClearColor(QColor color)
+* void setFormat(QSurfaceFormat format)
+* void setResizeMode(QQuickWidget::ResizeMode)
+* QUrl source(void)
+* QQuickWidget::Status status(void)
+* void setSource(QUrl url)
+* void setsceneGraphErrorEvent(const char *)
+* void setstatusChangedEvent(const char *)
+* const char *getsceneGraphErrorEvent(void)
+* const char *getstatusChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QRadioButton Class
+
+QRadioButton Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qradiobutton.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractButton
+
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setclickedEvent(const char *)
+* void setpressedEvent(const char *)
+* void setreleasedEvent(const char *)
+* void settoggledEvent(const char *)
+* const char *getclickedEvent(void)
+* const char *getpressedEvent(void)
+* const char *getreleasedEvent(void)
+* const char *gettoggledEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QRect Class
+
+QRect Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qrect.html
+
+
+Parameters : void
+
+* void adjust(int dx1, int dy1, int dx2, int dy2)
+* QRect adjusted(int dx1, int dy1, int dx2, int dy2)
+* int bottom(void)
+* QPoint bottomLeft(void)
+* QPoint bottomRight(void)
+* QPoint center(void)
+* bool contains(int x, int y, bool proper)
+* void getCoords(int *x1, int *y1, int *x2, int *y2)
+* void getRect(int *x, int *y, int *width, int *height)
+* int  height(void)
+* QRect intersected(QRect)
+* bool intersects(QRect)
+* bool isEmpty(void)
+* bool isNull(void)
+* bool isValid(void)
+* int left(void)
+* void moveBottom(int y)
+* void moveBottomLeft(QPoint)
+* void moveBottomRight(QPoint)
+* void moveCenter(QPoint)
+* void moveLeft(int x)
+* void moveRight(int x)
+* void moveTo(int x, int y)
+* void moveTop(int y)
+* void moveTopLeft(QPoint)
+* void moveTopRight(QPoint)
+* QRect normalized(void)
+* int right(void)
+* void setBottom(int y)
+* void setBottomLeft(QPoint)
+* void setBottomRight(QPoint)
+* void setCoords(int x1, int y1, int x2, int y2)
+* void setHeight(int height)
+* void setLeft(int x)
+* void setRect(int x, int y, int width, int height)
+* void setRight(int x)
+* void setSize(QSize)
+* void setTop(int y)
+* void setTopLeft(QPoint)
+* void setTopRight(QPoint)
+* void setWidth(int width)
+* void setX(int x)
+* void setY(int y)
+* QSize size(void)
+* int top(void)
+* QPoint topLeft(void)
+* QPoint topRight(void)
+* void translate(int dx, int dy)
+* QRect translated(int dx, int dy)
+* QRect united(QRect)
+* int width(void)
+* int x(void)
+* int y(void)
+
+.. index::
+       pair: RingQt Classes Reference; QRegion Class
+
+QRegion Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregion.html
+
+
+Parameters : void
+
+* QRect boundingRect(void)
+* bool contains(QPoint p)
+* bool contains_2(QRect r)
+* QRegion intersected(QRegion r)
+* QRegion intersected_2(QRect rect)
+* bool intersects(QRegion region)
+* bool intersects_2(QRect rect)
+* bool isEmpty(void)
+* bool isNull(void)
+* int rectCount(void)
+* QVector<QRect> rects(void)
+* void setRects(QRect *rects, int number)
+* QRegion subtracted(QRegion r)
+* void swap(QRegion other)
+* void translate(int dx, int dy)
+* void translate_2(QPoint point)
+* QRegion translated(int dx, int dy)
+* QRegion translated_2(QPoint p)
+* QRegion united(QRegion r)
+* QRegion united_2(QRect rect)
+* QRegion xored(QRegion r)
+
+.. index::
+       pair: RingQt Classes Reference; QRegularExpression Class
+
+QRegularExpression Class
+========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregularexpression.html
+
+
+Parameters : void
+
+* int captureCount(void)
+* QString errorString(void)
+* QRegularExpressionMatchIterator globalMatch(QString  subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions)
+* bool isValid(void)
+* QRegularExpressionMatch match(QString  subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions)
+* QStringList namedCaptureGroups(void)
+* QString pattern(void)
+* int patternErrorOffset(void)
+* QRegularExpression::PatternOptions patternOptions(void)
+* void setPattern(QString  pattern)
+* void setPatternOptions(QRegularExpression::PatternOptions options)
+* void swap(QRegularExpression  other)
+
+.. index::
+       pair: RingQt Classes Reference; QRegularExpressionMatch Class
+
+QRegularExpressionMatch Class
+=============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregularexpressionmatch.html
+
+
+Parameters : void
+
+* QString captured(int nth)
+* QString captured_2(const QString  name)
+* int capturedEnd(int nth)
+* int capturedEnd_2(const QString  name)
+* int capturedLength(int nth)
+* int capturedLength_2(const QString  name)
+* QStringRef capturedRef(int nth)
+* QStringRef capturedRef_2(const QString  name)
+* int capturedStart(int nth)
+* int capturedStart_2(const QString  name)
+* QStringList capturedTexts(void)
+* bool hasMatch(void)
+* bool hasPartialMatch(void)
+* bool isValid(void)
+* int lastCapturedIndex(void)
+* QRegularExpression::MatchOptions matchOptions(void)
+* QRegularExpression::MatchType matchType(void)
+* QRegularExpression regularExpression(void)
+* void swap(QRegularExpressionMatch  other)
+
+.. index::
+       pair: RingQt Classes Reference; QRegularExpressionMatchIterator Class
+
+QRegularExpressionMatchIterator Class
+=====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qregularexpressionmatchiterator.html
+
+
+Parameters : void
+
+* bool hasNext(void)
+* bool isValid(void)
+* QRegularExpression::MatchOptions matchOptions(void)
+* QRegularExpression::MatchType matchType(void)
+* QRegularExpressionMatch next(void) # In RingQt use : QRegularExpressionMatch nextitem(void)
+* QRegularExpressionMatch peekNext(void)
+* QRegularExpression regularExpression(void)
+* void swap(QRegularExpressionMatchIterator other)
+
+.. index::
+       pair: RingQt Classes Reference; QRenderAspect Class
+
+QRenderAspect Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qrenderaspect.html
+
+
+Parameters : QObject *
+
+
+.. index::
+       pair: RingQt Classes Reference; QRenderPass Class
+
+QRenderPass Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qrenderpass.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void addFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void addParameter(Qt3DRender::QParameter *parameter)
+* void addRenderState(Qt3DRender::QRenderState *state)
+* QVector<Qt3DRender::QFilterKey *> filterKeys(void)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void removeRenderState(Qt3DRender::QRenderState *state)
+* QVector<Qt3DRender::QRenderState *> renderStates(void)
+* Qt3DRender::QShaderProgram * shaderProgram(void)
+* void setShaderProgram(Qt3DRender::QShaderProgram *shaderProgram)
+
+.. index::
+       pair: RingQt Classes Reference; QSceneLoader Class
+
+QSceneLoader Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qsceneloader.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QComponent
+
+* Qt3DCore::QComponent * component(QString entityName, Qt3DRender::QSceneLoader::ComponentType componentType)
+* Qt3DCore::QEntity * entity(QString entityName)
+* QStringList entityNames(void)
+* QUrl source(void)
+* Qt3DRender::QSceneLoader::Status status(void)
+* void setSource(QUrl arg)
+
+.. index::
+       pair: RingQt Classes Reference; QScreen Class
+
+QScreen Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qscreen.html
+
+* int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
+* QRect availableGeometry(void)
+* QSize availableSize(void)
+* QRect availableVirtualGeometry(void)
+* QSize availableVirtualSize(void)
+* int depth(void)
+* qreal devicePixelRatio(void)
+* QRect geometry(void)
+* QPixmap grabWindow(int window, int x, int y, int width, int height)
+* QPixmap grabWindow_2(int window)
+* QPlatformScreen * handle(void)
+* bool isLandscape(Qt::ScreenOrientation o)
+* bool isPortrait(Qt::ScreenOrientation o)
+* qreal logicalDotsPerInch(void)
+* qreal logicalDotsPerInchX(void)
+* qreal logicalDotsPerInchY(void)
+* QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, QRect rect)
+* QString name(void)
+* Qt::ScreenOrientation nativeOrientation(void)
+* Qt::ScreenOrientation orientation(void)
+* Qt::ScreenOrientations orientationUpdateMask(void)
+* qreal physicalDotsPerInch(void)
+* qreal physicalDotsPerInchX(void)
+* qreal physicalDotsPerInchY(void)
+* QSizeF physicalSize(void)
+* Qt::ScreenOrientation primaryOrientation(void)
+* qreal refreshRate(void)
+* void setOrientationUpdateMask(Qt::ScreenOrientations mask)
+* QSize size(void)
+* QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, QRect target)
+
+.. index::
+       pair: RingQt Classes Reference; QScrollArea Class
+
+QScrollArea Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qscrollarea.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractScrollArea
+
+* Qt::Alignment alignment(void)
+* void ensureVisible(int x, int y, int xmargin , int ymargin )
+* void ensureWidgetVisible(QWidget *childWidget, int xmargin , int ymargin )
+* void setAlignment(Qt::Alignment)
+* void setWidget(QWidget *widget)
+* void setWidgetResizable(bool resizable)
+* QWidget *takeWidget(void)
+* QWidget *widget(void)
+* bool widgetResizable(void)
+
+.. index::
+       pair: RingQt Classes Reference; QScrollBar Class
+
+QScrollBar Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qscrollbar.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSlider
+
+
+.. index::
+       pair: RingQt Classes Reference; QSerialPort Class
+
+QSerialPort Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qserialport.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QIODevice
+
+* qint32 baudRate(QSerialPort::Directions directions)
+* bool clear(QSerialPort::Directions directions)
+* void clearError(void)
+* QSerialPort::DataBits dataBits(void)
+* QSerialPort::SerialPortError error(void)
+* QSerialPort::FlowControl flowControl(void)
+* bool flush(void)
+* void *handle(void)
+* bool isDataTerminalReady(void)
+* bool isRequestToSend(void)
+* QSerialPort::Parity parity(void)
+* QSerialPort::PinoutSignals pinoutSignals(void)
+* QString portName(void)
+* qint64 readBufferSize(void)
+* bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions)
+* bool setBreakEnabled(bool set)
+* bool setDataBits(QSerialPort::DataBits dataBits)
+* bool setDataTerminalReady(bool set)
+* bool setFlowControl(QSerialPort::FlowControl flowControl)
+* bool setParity(QSerialPort::Parity parity)
+* void setPort(QSerialPortInfo serialPortInfo)
+* void setPortName(QString name)
+* void setReadBufferSize(qint64 size)
+* bool setRequestToSend(bool set)
+* bool setStopBits(QSerialPort::StopBits stopBits)
+* QSerialPort::StopBits stopBits(void)
+* void setbaudRateChangedEvent(const char *)
+* void setbreakEnabledChangedEvent(const char *)
+* void setdataBitsChangedEvent(const char *)
+* void setdataTerminalReadyChangedEvent(const char *)
+* void seterrorEvent(const char *)
+* void setflowControlChangedEvent(const char *)
+* void setparityChangedEvent(const char *)
+* void setrequestToSendChangedEvent(const char *)
+* void setstopBitsChangedEvent(const char *)
+* const char *getbaudRateChangedEvent(void)
+* const char *getbreakEnabledChangedEvent(void)
+* const char *getdataBitsChangedEvent(void)
+* const char *getdataTerminalReadyChangedEvent(void)
+* const char *geterrorEvent(void)
+* const char *getflowControlChangedEvent(void)
+* const char *getparityChangedEvent(void)
+* const char *getrequestToSendChangedEvent(void)
+* const char *getstopBitsChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSerialPortInfo Class
+
+QSerialPortInfo Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qserialportinfo.html
+
+
+Parameters : void
+
+* QString description(void)
+* bool hasProductIdentifier(void)
+* bool hasVendorIdentifier(void)
+* bool isBusy(void)
+* bool isNull(void)
+* QString manufacturer(void)
+* QString portName(void)
+* quint16 productIdentifier(void)
+* void swap(QSerialPortInfo other)
+* QString systemLocation(void)
+* quint16 vendorIdentifier(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSize Class
+
+QSize Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsize.html
+
+
+Parameters : int width, int height
+
+
+.. index::
+       pair: RingQt Classes Reference; QSkyboxEntity Class
+
+QSkyboxEntity Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qskyboxentity.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QEntity
+
+* QString baseName(void)
+* QString extension(void)
+* bool isGammaCorrectEnabled(void)
+* void setBaseName(QString baseName)
+* void setExtension(QString extension)
+* void setGammaCorrectEnabled(bool enabled)
+
+.. index::
+       pair: RingQt Classes Reference; QSlider Class
+
+QSlider Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qslider.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractSlider
+
+* void setTickInterval(int ti)
+* void setTickPosition(QSlider::TickPosition position)
+* int tickInterval(void)
+* int tickPosition(void)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setactionTriggeredEvent(const char *)
+* void setrangeChangedEvent(const char *)
+* void setsliderMovedEvent(const char *)
+* void setsliderPressedEvent(const char *)
+* void setsliderReleasedEvent(const char *)
+* void setvalueChangedEvent(const char *)
+* const char *getactionTriggeredEvent(void)
+* const char *getrangeChangedEvent(void)
+* const char *getsliderMovedEvent(void)
+* const char *getsliderPressedEvent(void)
+* const char *getsliderReleasedEvent(void)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSphereMesh Class
+
+QSphereMesh Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qspheremesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool generateTangents(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setGenerateTangents(bool gen)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt Classes Reference; QSpinBox Class
+
+QSpinBox Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qspinbox.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* QString cleanText(void)
+* int displayIntegerBase(void)
+* int maximum(void)
+* int minimum(void)
+* QString prefix(void)
+* void setDisplayIntegerBase(int base)
+* void setMaximum(int max)
+* void setMinimum(int min)
+* void setPrefix(QString)
+* void setRange(int minimum, int maximum)
+* void setSingleStep(int val)
+* void setSuffix(QString)
+* int singleStep(void)
+* QString suffix(void)
+* int value(void)
+* void setValue(int val)
+* void setvalueChangedEvent(const char *)
+* const char *getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSplashScreen Class
+
+QSplashScreen Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsplashscreen.html
+
+
+Parameters : QPixmap
+
+
+Parent Class : QWidget
+
+* void  finish(QWidget *mainWin)
+* QPixmap pixmap(void)
+* void repaint(void)
+* void setPixmap(QPixmap pixmap)
+* void clearMessage(void)
+* void showMessage(QString message, int alignment ,QColor color)
+
+.. index::
+       pair: RingQt Classes Reference; QSplitter Class
+
+QSplitter Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsplitter.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QFrame
+
+* void addWidget(QWidget *widget)
+* bool childrenCollapsible(void)
+* int count(void)
+* void getRange(int index, int *min, int *max)
+* QSplitterHandle * handle(int index)
+* int handleWidth(void)
+* int indexOf(QWidget *widget)
+* void insertWidget(int index, QWidget *widget)
+* bool isCollapsible(int index)
+* bool opaqueResize(void)
+* Qt::Orientation orientation(void)
+* void refresh(void)
+* bool restoreState( QByteArray  state)
+* QByteArray saveState(void)
+* void setChildrenCollapsible(bool)
+* void setCollapsible(int index, bool collapse)
+* void setHandleWidth(int)
+* void setOpaqueResize(bool opaque )
+* void setOrientation(Qt::Orientation)
+* void setSizes( QList<int>  list)
+* void setStretchFactor(int index, int stretch)
+* QList<int> sizes(void)
+* QWidget * widget(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlDatabase Class
+
+QSqlDatabase Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqldatabase.html
+
+
+Parameters : void
+
+* void close(void)
+* bool commit(void)
+* QString connectOptions(void)
+* QString connectionName(void)
+* QString databaseName(void)
+* QSqlDriver *driver(void)
+* QString driverName(void)
+* QSqlQuery exec(QString)
+* QString hostName(void)
+* bool isOpen(void)
+* bool isOpenError(void)
+* bool isValid(void)
+* QSqlError lastError(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* bool open(void)
+* QString password(void)
+* int port(void)
+* QSqlIndex primaryIndex(QString)
+* QSqlRecord record(QString)
+* bool rollback(void)
+* void setConnectOptions(QString)
+* void setDatabaseName(QString)
+* void setHostName(QString)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
+* void setPassword(QString)
+* void setPort(int port)
+* void setUserName(QString)
+* QStringList tables(QSql::TableType type)
+* bool transaction(void)
+* QString userName(void)
+* QSqlDatabase addDatabase(QString)
+* QSqlDatabase cloneDatabase(QSqlDatabase, QString)
+* QStringList connectionNames(void)
+* bool contains(QString)
+* QSqlDatabase database(QString , bool)
+* QStringList drivers(void)
+* bool isDriverAvailable(QString)
+* void registerSqlDriver(QString, QSqlDriverCreatorBase *)
+* void removeDatabase(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlDriver Class
+
+QSqlDriver Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqldriver.html
+
+
+Parameters : void
+
+* QSqlError lastError(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlDriverCreatorBase Class
+
+QSqlDriverCreatorBase Class
+===========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqldrivercreatorbase.html
+
+
+Parameters : void
+
+
+.. index::
+       pair: RingQt Classes Reference; QSqlError Class
+
+QSqlError Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlerror.html
+
+
+Parameters : QString, QString, QSqlError::ErrorType
+
+* QString databaseText(void)
+* QString driverText(void)
+* bool isValid(void)
+* int number(void)
+* void setDatabaseText(QString)
+* void setDriverText(QString)
+* void setNumber(int number)
+* void setType(QSqlError::ErrorType type)
+* QString text(void)
+* QSqlError::ErrorType type(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlField Class
+
+QSqlField Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlfield.html
+
+
+Parameters : QString,QVariant::Type
+
+* void clear(void)
+* QVariant defaultValue(void)
+* bool isAutoValue(void)
+* bool isGenerated(void)
+* bool isNull(void)
+* bool isReadOnly(void)
+* bool isValid(void)
+* int length(void)
+* QString name(void)
+* int precision(void)
+* RequiredStatus requiredStatus(void)
+* void setAutoValue(bool autoVal)
+* void setDefaultValue(QVariant)
+* void setGenerated(bool gen)
+* void setLength(int fieldLength)
+* void setName(QString)
+* void setPrecision(int precision)
+* void setReadOnly(bool readOnly)
+* void setRequired(bool required)
+* void setRequiredStatus(QSqlField::RequiredStatus required)
+* void setType(QVariant::Type type)
+* void setValue(QVariant)
+* QVariant::Type type(void)
+* QVariant value(void)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlIndex Class
+
+QSqlIndex Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlindex.html
+
+
+Parameters : QString, QString
+
+
+Parent Class : QSqlRecord
+
+* void append(QSqlField, bool)
+* QString cursorName(void)
+* bool isDescending(int i)
+* QString name(void)
+* void setCursorName(QString)
+* void setDescending(int i, bool desc)
+* void setName(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlQuery Class
+
+QSqlQuery Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlquery.html
+
+
+Parameters : void
+
+* void addBindValue(QVariant, QSql::ParamType paramType)
+* int at(void)
+* void bindValue(QString, QVariant, QSql::ParamType paramType)
+* QVariant boundValue(QString)
+* void clear(void)
+* QSqlDriver * driver(void)
+* bool exec(QString)
+* bool exec_2(void)
+* bool execBatch(QSqlQuery::BatchExecutionMode mode)
+* QString executedQuery(void)
+* void finish(void)
+* bool first(void)
+* bool isActive(void)
+* bool isForwardOnly(void)
+* bool isNull(int field)
+* bool isSelect(void)
+* bool isValid(void)
+* bool last(void)
+* QSqlError lastError(void)
+* QVariant lastInsertId(void)
+* QString lastQuery(void)
+* bool next(void) # In RingQt use : bool movenext(void)
+* bool nextResult(void)
+* int numRowsAffected(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* bool prepare(QString)
+* bool previous(void)
+* QSqlRecord record(void)
+* QSqlResult *result(void)
+* bool seek(int index, bool relative)
+* void setForwardOnly(bool forward)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
+* int size(void)
+* QVariant value(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QSqlRecord Class
+
+QSqlRecord Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsqlrecord.html
+
+
+Parameters : void
+
+* void append(QSqlField)
+* void clear(void)
+* void clearValues(void)
+* bool contains(QString)
+* int count(void)
+* QSqlField field(int index)
+* QString fieldName(int index)
+* int indexOf(QString)
+* void insert(int pos, QSqlField)
+* bool isEmpty(void)
+* bool isGenerated(QString)
+* bool isNull(QString)
+* void remove(int pos)
+* void replace(int pos, QSqlField)
+* void setGenerated(QString, bool generated)
+* void setNull(int index)
+* void setValue(int index, QVariant)
+* QVariant value(int index)
+
+.. index::
+       pair: RingQt Classes Reference; QStackedWidget Class
+
+QStackedWidget Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstackedwidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QFrame
+
+* int addWidget(QWidget *widget)
+* int count(void)
+* int currentIndex(void)
+* QWidget * currentWidget(void)
+* int indexOf(QWidget *widget)
+* int insertWidget(int index, QWidget *widget)
+* void removeWidget(QWidget *widget)
+* QWidget * widget(int index)
+* void setCurrentIndex(int index)
+* void setCurrentWidget(QWidget *widget)
+* void setcurrentChangedEvent(const char *)
+* void setwidgetRemovedEvent(const char *)
+* const char *getcurrentChangedEvent(void)
+* const char *getwidgetRemovedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QStandardPaths Class
+
+QStandardPaths Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstandardpaths.html
+
+
+Parameters : void
+
+* QString displayName(QStandardPaths::StandardLocation type)
+* QString findExecutable(QString executableName, QStringList paths))
+* QString locate(QStandardPaths::StandardLocation type, QString fileName, QStandardPaths::LocateOptions options)
+* QStringList locateAll(QStandardPaths::StandardLocation type, QString fileName, QStandardPaths::LocateOptions options)
+* void setTestModeEnabled(bool testMode)
+* QStringList standardLocations(QStandardPaths::StandardLocation type)
+* QString writableLocation(QStandardPaths::StandardLocation type)
+
+.. index::
+       pair: RingQt Classes Reference; QStatusBar Class
+
+QStatusBar Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstatusbar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* void addPermanentWidget(QWidget * widget, int stretch)
+* void addWidget(QWidget * widget, int stretch)
+* QString currentMessage(void)
+* int insertPermanentWidget(int index, QWidget * widget, int stretch)
+* int insertWidget(int index, QWidget * widget, int stretch)
+* bool isSizeGripEnabled(void)
+* void removeWidget(QWidget *widget)
+* void setSizeGripEnabled(bool)
+* void clearMessage(void)
+* void showMessage(QString , int timeout)
+
+.. index::
+       pair: RingQt Classes Reference; QString2 Class
+
+QString2 Class
+==============
+
+
+Parameters : void
+
+* QString append( QString  str)
+* QByteArray toUtf8(void)
+* QByteArray toLatin1(void)
+* QByteArray toLocal8Bit(void)
+* QStringList split( QString  sep, QString::SplitBehavior behavior , Qt::CaseSensitivity cs )
+* QStringList split_2(QChar sep, QString::SplitBehavior behavior , Qt::CaseSensitivity cs )
+* QStringList split_3( QRegExp  rx, QString::SplitBehavior behavior )
+* QStringList split_4( QRegularExpression  re, QString::SplitBehavior behavior )
+* QChar * unicode(void)
+* QString number(ulong n, int base)
+* int count(void)
+* QString left(int n)
+* QString mid(int position, int n)
+* QString right(int n)
+* int compare(QString  other, Qt::CaseSensitivity cs )
+* bool contains(QString  str, Qt::CaseSensitivity cs )
+* int indexOf(QString str,int from,Qt::CaseSensitivity cs )
+* QString insert(int position,  QString  str)
+* bool isRightToLeft(void)
+* QString repeated(int times)
+* QString replace(int position, int n,  QString  after)
+* bool startsWith( QString  s, Qt::CaseSensitivity cs )
+* bool endsWith( QString  s, Qt::CaseSensitivity cs )
+* QString toHtmlEscaped(void)
+* void clear(void)
+* bool isNull(void)
+* void resize(int size)
+* QString fill(QChar ch, int size)
+
+.. index::
+       pair: RingQt Classes Reference; QStringList Class
+
+QStringList Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstringlist.html
+
+
+Parameters : void
+
+* QString join(QString)
+* void sort(void)
+* int removeDuplicates(void)
+* QStringList filter(QString, Qt::CaseSensitivity)
+* QStringList replaceInStrings(QString,QString, Qt::CaseSensitivity)
+* void append(QString)
+* QString at(int)
+* QString back(void)
+* void clear(void)
+* bool contains(QString)
+* int count(void)
+* bool empty(void)
+* bool endsWith(QString)
+* QString first(void)
+* QString front(void)
+* int indexOf(QString, int)
+* void insert(int, QString)
+* bool isEmpty(void)
+* QString last(void)
+* int lastIndexOf(QString,int)
+* int length(void)
+* void move(int,int)
+* void pop_back(void)
+* void pop_front(void)
+* void prepend(QString)
+* void push_back(QString)
+* void push_front(QString)
+* int removeAll(QString)
+* void removeAt(int)
+* void removeFirst(void)
+* void removeLast(void)
+* bool removeOne(QString)
+* void replace(int,QString)
+* void reserve(int)
+* int size(void)
+* bool startsWith(QString)
+* void swap(int,int)
+* QString takeAt(int)
+* QString takeFirst(void)
+* QString takeLast(void)
+* QString value(int)
+
+.. index::
+       pair: RingQt Classes Reference; QStringRef Class
+
+QStringRef Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qstringref.html
+
+
+Parameters : void
+
+* QStringRef appendTo(QString * string)
+* QChar at(int position)
+* void clear(void)
+* int compare_3(QLatin1String other, Qt::CaseSensitivity cs)
+* QChar * constData(void)
+* bool contains(QString str, Qt::CaseSensitivity cs)
+* bool contains_2(QChar ch, Qt::CaseSensitivity cs)
+* bool contains_3(QStringRef str, Qt::CaseSensitivity cs)
+* bool contains_4(QLatin1String str, Qt::CaseSensitivity cs)
+* int count(void)
+* int count_2(QString str, Qt::CaseSensitivity cs)
+* int count_3(QChar ch, Qt::CaseSensitivity cs)
+* int count_4(QStringRef str, Qt::CaseSensitivity cs)
+* QChar * data(void)
+* bool endsWith(QString str, Qt::CaseSensitivity cs)
+* bool endsWith_2(QChar ch, Qt::CaseSensitivity cs)
+* bool endsWith_3(QLatin1String str, Qt::CaseSensitivity cs)
+* bool endsWith_4(QStringRef str, Qt::CaseSensitivity cs)
+* int indexOf(QString str, int from, Qt::CaseSensitivity cs)
+* int indexOf_2(QLatin1String str, int from, Qt::CaseSensitivity cs)
+* int indexOf_3(QChar ch, int from, Qt::CaseSensitivity cs)
+* int indexOf_4(QStringRef str, int from, Qt::CaseSensitivity cs)
+* bool isEmpty(void)
+* bool isNull(void)
+* int lastIndexOf(QString str, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_2(QChar ch, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_3(QLatin1String str, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_4(QStringRef str, int from, Qt::CaseSensitivity cs)
+* int length(void)
+* int localeAwareCompare(QString other)
+* int localeAwareCompare_2(QStringRef other)
+* int position(void)
+* int size(void)
+* bool startsWith(QString str, Qt::CaseSensitivity cs)
+* bool startsWith_2(QLatin1String str, Qt::CaseSensitivity cs)
+* bool startsWith_3(QStringRef str, Qt::CaseSensitivity cs)
+* bool startsWith_4(QChar ch, Qt::CaseSensitivity cs)
+* QString * string(void)
+* QByteArray toLatin1(void)
+* QByteArray toLocal8Bit(void)
+* QString toString(void)
+* QVector<uint> toUcs4(void)
+* QByteArray toUtf8(void)
+* QChar * unicode(void)
+* int compare_4(QStringRef s1, QString s2, Qt::CaseSensitivity cs)
+* int compare_5(QStringRef s1, QStringRef s2, Qt::CaseSensitivity cs)
+* int compare_6(QStringRef s1, QLatin1String s2, Qt::CaseSensitivity cs)
+* int localeAwareCompare_3(QStringRef s1, QString s2)
+* int localeAwareCompare_4(QStringRef s1, QStringRef s2)
+
+.. index::
+       pair: RingQt Classes Reference; QSurfaceFormat Class
+
+QSurfaceFormat Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsurfaceformat.html
+
+
+Parameters : void
+
+* int alphaBufferSize(void)
+* int blueBufferSize(void)
+* int greenBufferSize(void)
+* bool hasAlpha(void)
+* int majorVersion(void)
+* int minorVersion(void)
+* QSurfaceFormat::FormatOptions options(void)
+* QSurfaceFormat::OpenGLContextProfile profile(void)
+* int redBufferSize(void)
+* QSurfaceFormat::RenderableType renderableType(void)
+* int samples(void)
+* void setAlphaBufferSize(int size)
+* void setBlueBufferSize(int size)
+* void setGreenBufferSize(int size)
+* void setMajorVersion(int major)
+* void setMinorVersion(int minor)
+* void setOption(QSurfaceFormat::FormatOption option, bool on)
+* void setOptions(QSurfaceFormat::FormatOptions options)
+* void setProfile(QSurfaceFormat::OpenGLContextProfile profile)
+* void setRedBufferSize(int size)
+* void setRenderableType(QSurfaceFormat::RenderableType type)
+* void setSamples(int numSamples)
+* void setStencilBufferSize(int size)
+* void setStereo(bool enable)
+* void setSwapBehavior(QSurfaceFormat::SwapBehavior behavior)
+* void setSwapInterval(int interval)
+* void setVersion(int major, int minor)
+* int stencilBufferSize(void)
+* bool stereo(void)
+* QSurfaceFormat::SwapBehavior swapBehavior(void)
+* int swapInterval(void)
+* bool testOption(QSurfaceFormat::FormatOption option)
+* QSurfaceFormat defaultFormat(void)
+* void setDefaultFormat(QSurfaceFormat format)
+
+.. index::
+       pair: RingQt Classes Reference; QSystemTrayIcon Class
+
+QSystemTrayIcon Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qsystemtrayicon.html
+
+
+Parameters : void
+
+* QMenu *contextMenu(void)
+* QRect geometry(void)
+* QIcon icon(void)
+* bool isVisible(void)
+* void setContextMenu(QMenu *menu)
+* void setIcon(QIcon)
+* void setToolTip(QString)
+* QString toolTip(void)
+* void hide(void)
+* void setVisible(bool visible)
+* void show(void)
+* void showMessage(QString, QString, QSystemTrayIcon::MessageIcon, int millisecondsTimeoutHint)
+* bool isSystemTrayAvailable(void)
+* bool supportsMessages(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTabBar Class
+
+QTabBar Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtabbar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* int addTab(QString text)
+* int addTab_2(QIcon icon, QString text)
+* int count(void)
+* int currentIndex(void)
+* bool documentMode(void)
+* bool drawBase(void)
+* Qt::TextElideMode elideMode(void)
+* bool expanding(void)
+* QSize iconSize(void)
+* int insertTab(int index, QString text)
+* int insertTab_2(int index, QIcon icon, QString text)
+* bool isMovable(void)
+* bool isTabEnabled(int index)
+* void moveTab(int from, int to)
+* void removeTab(int index)
+* QTabBar::SelectionBehavior selectionBehaviorOnRemove(void)
+* void setDocumentMode(bool set)
+* void setDrawBase(bool drawTheBase)
+* void setElideMode(Qt::TextElideMode)
+* void setExpanding(bool enabled)
+* void setIconSize(QSize size)
+* void setMovable(bool movable)
+* void setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior behavior)
+* void setShape(QTabBar::Shape shape)
+* void setTabButton(int index, QTabBar::ButtonPosition position, QWidget * widget)
+* void setTabData(int index, QVariant data)
+* void setTabEnabled(int index, bool enabled)
+* void setTabIcon(int index, QIcon icon)
+* void setTabText(int index, QString text)
+* void setTabTextColor(int index, QColor color)
+* void setTabToolTip(int index, QString tip)
+* void setTabWhatsThis(int index, QString text)
+* void setTabsClosable(bool closable)
+* void setUsesScrollButtons(bool useButtons)
+* QTabBar::Shape shape(void)
+* int tabAt(QPoint position)
+* QWidget * tabButton(int index, QTabBar::ButtonPosition position)
+* QVariant tabData(int index)
+* QIcon tabIcon(int index)
+* QRect tabRect(int index)
+* QString tabText(int index)
+* QColor tabTextColor(int index)
+* QString tabToolTip(int index)
+* QString tabWhatsThis(int index)
+* bool tabsClosable(void)
+* bool usesScrollButtons(void)
+* void setCurrentIndex(int index)
+* void setcurrentChangedEvent(const char *)
+* void settabCloseRequestedEvent(const char *)
+* void settabMovedEvent(const char *)
+* const char *getcurrentChangedEvent(void)
+* const char *gettabCloseRequestedEvent(void)
+* const char *gettabMovedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTabWidget Class
+
+QTabWidget Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtabwidget.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int addTab(QWidget *page, QString)
+* void clear(void)
+* QWidget *cornerWidget(Qt::Corner corner)
+* int count(void)
+* int currentIndex(void)
+* QWidget *currentWidget(void)
+* bool documentMode(void)
+* int elideMode(void)
+* QSize iconSize(void)
+* int indexOf(QWidget *w)
+* int insertTab(int index, QWidget *page,QString)
+* bool isMovable(void)
+* bool isTabEnabled(int index)
+* void removeTab(int index)
+* void setCornerWidget(QWidget *widget, Qt::Corner corner)
+* void setDocumentMode(bool set)
+* void setElideMode(Qt::TextElideMode)
+* void setIconSize(QSize)
+* void setMovable(bool movable)
+* void setTabEnabled(int index, bool enable)
+* void setTabIcon(int index, QIcon)
+* void setTabText(int index,QString)
+* void setTabToolTip(int index, QString)
+* void setTabWhatsThis(int index, QString)
+* void setTabsClosable(bool closeable)
+* void setUsesScrollButtons(bool useButtons)
+* QIcon tabIcon(int index)
+* QString tabText(int index)
+* QString tabToolTip(int index)
+* QString tabWhatsThis(int index)
+* bool tabsClosable(void)
+* bool usesScrollButtons(void)
+* QWidget *widget(int index)
+* int heightForWidth(int width)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setCurrentIndex(int index)
+* void setCurrentWidget(QWidget *widget)
+* void setcurrentChangedEvent(const char *)
+* void settabCloseRequestedEvent(const char *)
+* const char *getcurrentChangedEvent(void)
+* const char *gettabCloseRequestedEvent(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTableView Class
+
+QTableView Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtableview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QAbstractItemView
+
+* void clearSpans(void)
+* int columnAt(int x)
+* int columnSpan(int row, int column)
+* int columnViewportPosition(int column)
+* int columnWidth(int column)
+* Qt::PenStyle gridStyle(void)
+* QHeaderView *horizontalHeader(void)
+* bool isColumnHidden(int column)
+* bool isCornerButtonEnabled(void)
+* bool isRowHidden(int row)
+* bool isSortingEnabled(void)
+* int rowAt(int y)
+* int rowHeight(int row)
+* int rowSpan(int row, int column)
+* int rowViewportPosition(int row)
+* void setColumnHidden(int column, bool hide)
+* void setColumnWidth(int column, int width)
+* void setCornerButtonEnabled(bool enable)
+* void setGridStyle(Qt::PenStyle style)
+* void setHorizontalHeader(QHeaderView *header)
+* void setRowHeight(int row, int height)
+* void setRowHidden(int row, bool hide)
+* void setSortingEnabled(bool enable)
+* void setSpan(int row, int column, int rowSpanCount, int columnSpanCount)
+* void setVerticalHeader(QHeaderView *header)
+* void setWordWrap(bool on)
+* bool showGrid(void)
+* void sortByColumn(int column, Qt::SortOrder order)
+* QHeaderView *verticalHeader(void)
+* bool wordWrap(void)
+* void hideColumn(int column)
+* void hideRow(int row)
+* void resizeColumnToContents(int column)
+* void resizeColumnsToContents(void)
+* void resizeRowToContents(int row)
+* void resizeRowsToContents(void)
+* void selectColumn(int column)
+* void selectRow(int row)
+* void setShowGrid(bool show)
+* void showColumn(int column)
+* void showRow(int row)
+
+.. index::
+       pair: RingQt Classes Reference; QTableWidget Class
+
+QTableWidget Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtablewidget.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QTableView
+
+* QWidget *cellWidget(int row, int column)
+* void closePersistentEditor(QTableWidgetItem *item)
+* int column(QTableWidgetItem *item)
+* int columnCount(void)
+* int currentColumn(void)
+* QTableWidgetItem *currentItem(void)
+* int currentRow(void)
+* void editItem(QTableWidgetItem *item)
+* QTableWidgetItem *horizontalHeaderItem(int column)
+* QTableWidgetItem *item(int row, int column)
+* QTableWidgetItem *itemAt(int ax, int ay)
+* QTableWidgetItem *itemPrototype(void)
+* void openPersistentEditor(QTableWidgetItem *item)
+* void removeCellWidget(int row, int column)
+* int row(const QTableWidgetItem *item)
+* int rowCount(void)
+* QList<QTableWidgetItem *> selectedItems(void)
+* QList<QTableWidgetSelectionRange> selectedRanges(void)
+* void setCellWidget(int row, int column, QWidget *widget)
+* void setColumnCount(int columns)
+* void setCurrentCell(int row, int column)
+* void setCurrentItem(QTableWidgetItem * item)
+* void setHorizontalHeaderItem(int column, QTableWidgetItem *item)
+* void setHorizontalHeaderLabels(QStringList)
+* void setItem(int row, int column, QTableWidgetItem *item)
+* void setItemPrototype(QTableWidgetItem *item)
+* void setRowCount(int rows)
+* void setVerticalHeaderItem(int row, QTableWidgetItem *item)
+* void sortItems(int column, Qt::SortOrder order)
+* QTableWidgetItem *takeHorizontalHeaderItem(int column)
+* QTableWidgetItem *takeItem(int row, int column)
+* QTableWidgetItem *takeVerticalHeaderItem(int row)
+* QTableWidgetItem *verticalHeaderItem(int row)
+* int visualColumn(int logicalColumn)
+* QRect visualItemRect(QTableWidgetItem *)
+* int visualRow(int logicalRow)
+* void clear(void)
+* void clearContents(void)
+* void insertColumn(int column)
+* void insertRow(int row)
+* void removeColumn(int column)
+* void removeRow(int row)
+* void scrollToItem(QTableWidgetItem *item, QAbstractItemView::ScrollHint hint)
+* void setcellActivatedEvent(const char *)
+* void setcellChangedEvent(const char *)
+* void setcellClickedEvent(const char *)
+* void setcellDoubleClickedEvent(const char *)
+* void setcellEnteredEvent(const char *)
+* void setcellPressedEvent(const char *)
+* void setcurrentCellChangedEvent(const char *)
+* void setcurrentItemChangedEvent(const char *)
+* void setitemActivatedEvent(const char *)
+* void setitemChangedEvent(const char *)
+* void setitemClickedEvent(const char *)
+* void setitemDoubleClickedEvent(const char *)
+* void setitemEnteredEvent(const char *)
+* void setitemPressedEvent(const char *)
+* void setitemSelectionChangedEvent(const char *)
+* const char *getcellActivatedEvent(void)
+* const char *getcellChangedEvent(void)
+* const char *getcellClickedEvent(void)
+* const char *getcellDoubleClickedEvent(void)
+* const char *getcellEnteredEvent(void)
+* const char *getcellPressedEvent(void)
+* const char *getcurrentCellChangedEvent(void)
+* const char *getcurrentItemChangedEvent(void)
+* const char *getitemActivatedEvent(void)
+* const char *getitemChangedEvent(void)
+* const char *getitemClickedEvent(void)
+* const char *getitemDoubleClickedEvent(void)
+* const char *getitemEnteredEvent(void)
+* const char *getitemPressedEvent(void)
+* const char *getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTableWidgetItem Class
+
+QTableWidgetItem Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtablewidgetitem.html
+
+
+Parameters : QString
+
+* QBrush background(void)
+* int checkState(void)
+* QTableWidgetItem *clone(void)
+* int column(void)
+* QVariant data(int role)
+* int flags(void)
+* QFont font(void)
+* QBrush foreground(void)
+* QIcon icon(void)
+* bool isSelected(void)
+* void read(QDataStream)
+* int row(void)
+* void setBackground(QBrush)
+* void setCheckState(Qt::CheckState state)
+* void setData(int role, QVariant)
+* void setFlags(Qt::ItemFlag flags)
+* void setFont(QFont)
+* void setForeground(QBrush)
+* void setIcon(QIcon)
+* void setSelected(bool select)
+* void setSizeHint(QSize)
+* void setStatusTip(QString)
+* void setText(QString)
+* void setTextAlignment(int alignment)
+* void setToolTip(QString)
+* void setWhatsThis(QString)
+* QSize sizeHint(void)
+* QString statusTip(void)
+* QTableWidget *tableWidget(void)
+* QString text(void)
+* int textAlignment(void)
+* QString toolTip(void)
+* int type(void)
+* QString whatsThis(void)
+* void write(QDataStream)
+
+.. index::
+       pair: RingQt Classes Reference; QTcpServer Class
+
+QTcpServer Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtcpserver.html
+
+
+Parameters : QWidget *
+
+* void close(void)
+* QString errorString(void)
+* bool hasPendingConnections(void)
+* bool isListening(void)
+* bool listen(QHostAddress, int port)
+* int maxPendingConnections(void)
+* QTcpSocket *nextPendingConnection(void)
+* void pauseAccepting(void)
+* QNetworkProxy proxy(void)
+* void resumeAccepting(void)
+* QHostAddress serverAddress(void)
+* int serverError(void)
+* int serverPort(void)
+* void setMaxPendingConnections(int numConnections)
+* void setProxy(QNetworkProxy)
+* bool setSocketDescriptor(qintptr socketDescriptor)
+* int *socketDescriptor(void)
+* bool waitForNewConnection(int msec, bool *timedOut)
+* void setacceptErrorEvent(const char *)
+* void setnewConnectionEvent(const char *)
+* const char *getacceptErrorEvent(void)
+* const char *getnewConnectionEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTcpSocket Class
+
+QTcpSocket Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtcpsocket.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QAbstractSocket
+
+* void setconnectedEvent(const char *)
+* void setdisconnectedEvent(const char *)
+* void seterrorEvent(const char *)
+* void sethostFoundEvent(const char *)
+* void setproxyAuthenticationRequiredEvent(const char *)
+* void setstateChangedEvent(const char *)
+* void setaboutToCloseEvent(const char *)
+* void setbytesWrittenEvent(const char *)
+* void setreadChannelFinishedEvent(const char *)
+* void setreadyReadEvent(const char *)
+* const char *getconnectedEvent(void)
+* const char *getdisconnectedEvent(void)
+* const char *geterrorEvent(void)
+* const char *gethostFoundEvent(void)
+* const char *getproxyAuthenticationRequiredEvent(void)
+* const char *getstateChangedEvent(void)
+* const char *getaboutToCloseEvent(void)
+* const char *getbytesWrittenEvent(void)
+* const char *getreadChannelFinishedEvent(void)
+* const char *getreadyReadEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTechnique Class
+
+QTechnique Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qtechnique.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* void addFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void addParameter(Qt3DRender::QParameter *parameter)
+* void addRenderPass(Qt3DRender::QRenderPass *pass)
+* QVector<Qt3DRender::QFilterKey *> filterKeys(void)
+* Qt3DRender::QGraphicsApiFilter * graphicsApiFilter(void)
+* QVector<Qt3DRender::QParameter *> parameters(void)
+* void removeFilterKey(Qt3DRender::QFilterKey *filterKey)
+* void removeParameter(Qt3DRender::QParameter *parameter)
+* void removeRenderPass(Qt3DRender::QRenderPass *pass)
+* QVector<Qt3DRender::QRenderPass *> renderPasses(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTest Class
+
+QTest Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtest.html
+
+* void qsleep(int)
+
+.. index::
+       pair: RingQt Classes Reference; QText2DEntity Class
+
+QText2DEntity Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qtext2dentity.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QEntity
+
+* QColor color(void)
+* QFont font(void)
+* float height(void)
+* void setColor(QColor color)
+* void setFont(QFont font)
+* void setHeight(float height)
+* void setText(QString text)
+* void setWidth(float width)
+* QString text(void)
+* float width(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextBlock Class
+
+QTextBlock Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextblock.html
+
+
+Parameters : void
+
+* int blockFormatIndex(void)
+* int blockNumber(void)
+* QTextCharFormat charFormat(void)
+* int charFormatIndex(void)
+* void clearLayout(void)
+* bool contains(int position)
+* QTextDocument *document(void)
+* bool isValid(void)
+* bool isVisible(void)
+* QTextLayout * layout(void)
+* int length(void)
+* int lineCount(void)
+* QTextBlock next(void) # In RingQt use :  QTextBlock nextblock(void)
+* int position(void)
+* QTextBlock previous(void)
+* int revision(void)
+* void setLineCount(int count)
+* void setRevision(int rev)
+* void setUserData(QTextBlockUserData * data)
+* void setUserState(int state)
+* void setVisible(bool visible)
+* QString text(void)
+* int textDirection(void)
+* QTextList * textList(void)
+* QTextBlockUserData * userData(void)
+* int userState(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextBrowser Class
+
+QTextBrowser Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextbrowser.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QTextEdit
+
+* int backwardHistoryCount(void)
+* void clearHistory(void)
+* int forwardHistoryCount(void)
+* QString historyTitle(int i)
+* QUrl historyUrl(int i)
+* bool isBackwardAvailable(void)
+* bool isForwardAvailable(void)
+* bool openExternalLinks(void)
+* bool openLinks(void)
+* QStringList searchPaths(void)
+* void setOpenExternalLinks(bool open)
+* void setOpenLinks(bool open)
+* void setSearchPaths(QStringList paths)
+* QUrl source(void)
+* void setanchorClickedEvent(const char *)
+* void setbackwardAvailableEvent(const char *)
+* void setforwardAvailableEvent(const char *)
+* void sethighlightedEvent(const char *)
+* void sethistoryChangedEvent(const char *)
+* void setsourceChangedEvent(const char *)
+* const char *getanchorClickedEvent(void)
+* const char *getbackwardAvailableEvent(void)
+* const char *getforwardAvailableEvent(void)
+* const char *gethighlightedEvent(void)
+* const char *gethistoryChangedEvent(void)
+* const char *getsourceChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextCharFormat Class
+
+QTextCharFormat Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextcharformat.html
+
+
+Parameters : void
+
+* QString anchorHref(void)
+* QStringList anchorNames(void)
+* QFont font(void)
+* QFont::Capitalization fontCapitalization(void)
+* QString fontFamily(void)
+* bool fontFixedPitch(void)
+* QFont::HintingPreference fontHintingPreference(void)
+* bool fontItalic(void)
+* bool fontKerning(void)
+* qreal fontLetterSpacing(void)
+* QFont::SpacingType fontLetterSpacingType(void)
+* bool fontOverline(void)
+* qreal fontPointSize(void)
+* int fontStretch(void)
+* bool fontStrikeOut(void)
+* QFont::StyleHint fontStyleHint(void)
+* QFont::StyleStrategy fontStyleStrategy(void)
+* bool fontUnderline(void)
+* int fontWeight(void)
+* qreal fontWordSpacing(void)
+* bool isAnchor(void)
+* bool isValid(void)
+* void setAnchor(bool anchor)
+* void setAnchorHref( QString   value)
+* void setAnchorNames( QStringList   names)
+* void setFontCapitalization(QFont::Capitalization capitalization)
+* void setFontFamily( QString   family)
+* void setFontFixedPitch(bool fixedPitch)
+* void setFontHintingPreference(QFont::HintingPreference hintingPreference)
+* void setFontItalic(bool italic)
+* void setFontKerning(bool enable)
+* void setFontLetterSpacing(qreal spacing)
+* void setFontLetterSpacingType(QFont::SpacingType letterSpacingType)
+* void setFontOverline(bool overline)
+* void setFontPointSize(qreal size)
+* void setFontStretch(int factor)
+* void setFontStrikeOut(bool strikeOut)
+* void setFontStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy )
+* void setFontStyleStrategy(QFont::StyleStrategy strategy)
+* void setFontUnderline(bool underline)
+* void setFontWeight(int weight)
+* void setFontWordSpacing(qreal spacing)
+* void setTextOutline( QPen   pen)
+* void setToolTip( QString   text)
+* void setUnderlineColor( QColor   color)
+* void setUnderlineStyle(QTextCharFormat::UnderlineStyle style)
+* void setVerticalAlignment(QTextCharFormat::VerticalAlignment alignment)
+* QPen textOutline(void)
+* QString toolTip(void)
+* QColor underlineColor(void)
+* QTextCharFormat::UnderlineStyle underlineStyle(void)
+* QTextCharFormat::VerticalAlignment verticalAlignment(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextCodec Class
+
+QTextCodec Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextcodec.html
+
+* QTextCodec *codecForName(const char *name)
+* void setCodecForLocale(QTextCodec *c)
+
+.. index::
+       pair: RingQt Classes Reference; QTextCursor Class
+
+QTextCursor Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextcursor.html
+
+
+Parameters : void
+
+* int anchor(void)
+* bool atBlockEnd(void)
+* bool atBlockStart(void)
+* bool atEnd(void)
+* bool atStart(void)
+* void beginEditBlock(void)
+* QTextBlock block(void)
+* QTextCharFormat blockCharFormat(void)
+* QTextBlockFormat blockFormat(void)
+* int blockNumber(void)
+* QTextCharFormat charFormat(void)
+* void clearSelection(void)
+* int columnNumber(void)
+* QTextList *createList(QTextListFormat)
+* QTextFrame *currentFrame(void)
+* QTextList *currentList(void)
+* QTextTable *currentTable(void)
+* void deleteChar(void)
+* void deletePreviousChar(void)
+* QTextDocument *document(void)
+* void endEditBlock(void)
+* bool hasComplexSelection(void)
+* bool hasSelection(void)
+* void insertBlock(void)
+* void insertFragment(QTextDocumentFragment)
+* QTextFrame *insertFrame(QTextFrameFormat)
+* void insertHtml(QString)
+* void insertImage(QTextImageFormat)
+* QTextList *insertList(QTextListFormat)
+* QTextTable * insertTable(int rows, int columns, QTextTableFormat)
+* void insertText(QString)
+* void insertText_2(QString,QTextCharFormat)
+* bool isCopyOf(QTextCursor)
+* bool isNull(void)
+* void joinPreviousEditBlock(void)
+* bool keepPositionOnInsert(void)
+* void mergeBlockCharFormat(QTextCharFormat)
+* void mergeBlockFormat(QTextBlockFormat)
+* void mergeCharFormat(QTextCharFormat)
+* bool movePosition(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode, int n)
+* int position(void)
+* int positionInBlock(void)
+* void removeSelectedText(void)
+* void select(QTextCursor::SelectionType selection)
+* void selectedTableCells(int *firstRow, int *numRows, int *firstColumn, int *numColumns)
+* QString selectedText(void)
+* QTextDocumentFragment selection(void)
+* int selectionEnd(void)
+* int selectionStart(void)
+* void setBlockCharFormat(QTextCharFormat)
+* void setBlockFormat(QTextBlockFormat)
+* void setCharFormat(QTextCharFormat)
+* void setKeepPositionOnInsert(bool b)
+* void setPosition(int pos, QTextCursor::MoveMode m)
+* void setVerticalMovementX(int x)
+* void setVisualNavigation(bool b)
+* int verticalMovementX(void)
+* bool visualNavigation(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextDocument Class
+
+QTextDocument Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextdocument.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* void addResource(int type,QUrl name, QVariant resource)
+* void adjustSize(void)
+* QVector<QTextFormat> allFormats(void)
+* int availableRedoSteps(void)
+* int availableUndoSteps(void)
+* QTextBlock begin(void)
+* int blockCount(void)
+* QChar characterAt(int pos)
+* int characterCount(void)
+* void clearUndoRedoStacks(QTextDocument::Stacks stacksToClear )
+* QTextDocument *clone(QObject *parent )
+* int defaultCursorMoveStyle(void)
+* QFont defaultFont(void)
+* QString defaultStyleSheet(void)
+* QTextOption defaultTextOption(void)
+* QAbstractTextDocumentLayout *documentLayout(void)
+* double documentMargin(void)
+* void drawContents(QPainter *p, QRectF rect)
+* QTextBlock end(void) # In RingQt use : QTextBlock enddoc(void)
+* QTextCursor find(QString subString, QTextCursor cursor, QTextDocument::FindFlag options )
+* QTextBlock findBlock(int pos)
+* QTextBlock findBlockByLineNumber(int lineNumber)
+* QTextBlock findBlockByNumber(int blockNumber)
+* QTextBlock firstBlock(void)
+* double idealWidth(void)
+* double indentWidth(void)
+* bool isEmpty(void)
+* bool isModified(void)
+* bool isRedoAvailable(void)
+* bool isUndoAvailable(void)
+* bool isUndoRedoEnabled(void)
+* QTextBlock lastBlock(void)
+* int lineCount(void)
+* void markContentsDirty(int position, int length)
+* int maximumBlockCount(void)
+* QString metaInformation(QTextDocument::MetaInformation info)
+* QTextObject *object(int objectIndex)
+* QTextObject *objectForFormat(QTextFormat f)
+* int pageCount(void)
+* QSizeF pageSize(void)
+* void print(QPrinter *printer)
+* void redo(QTextCursor *cursor)
+* QVariant resource(int type, QUrl name)
+* int revision(void)
+* QTextFrame *rootFrame(void)
+* void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style)
+* void setDefaultFont(QFont font)
+* void setDefaultStyleSheet(QString sheet)
+* void setDefaultTextOption(QTextOption option)
+* void setDocumentLayout(QAbstractTextDocumentLayout * layout)
+* void setDocumentMargin(double margin)
+* void setHtml(QString html)
+* void setIndentWidth(double width)
+* void setMaximumBlockCount(int maximum)
+* void setMetaInformation(QTextDocument::MetaInformation info, QString string)
+* void setPageSize(QSizeF size)
+* void setPlainText(QString text)
+* void setTextWidth(double width)
+* void setUndoRedoEnabled(bool enable)
+* void setUseDesignMetrics(bool b)
+* QSizeF size(void)
+* qreal textWidth(void)
+* QString toHtml(QByteArray encoding)
+* QString toPlainText(void)
+* void undo(QTextCursor *cursor)
+* bool useDesignMetrics(void)
+* void setModified(bool m)
+
+.. index::
+       pair: RingQt Classes Reference; QTextEdit Class
+
+QTextEdit Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextedit.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractScrollArea
+
+* bool acceptRichText(void)
+* int alignment(void)
+* QString anchorAt(QPoint)
+* bool canPaste(void)
+* QTextCharFormat currentCharFormat(void)
+* QFont currentFont(void)
+* QTextCursor cursorForPosition(QPoint)
+* QRect cursorRect(void)
+* int cursorWidth(void)
+* QTextDocument *document(void)
+* QString documentTitle(void)
+* void ensureCursorVisible(void)
+* bool find(QString, QTextDocument::FindFlag)
+* QString fontFamily(void)
+* bool fontItalic(void)
+* double fontPointSize(void)
+* bool fontUnderline(void)
+* int fontWeight(void)
+* bool isReadOnly(void)
+* bool isUndoRedoEnabled(void)
+* int lineWrapColumnOrWidth(void)
+* QVariant loadResource(int, QUrl)
+* void mergeCurrentCharFormat(QTextCharFormat)
+* void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode)
+* bool overwriteMode(void)
+* void print(QPrinter * printer)
+* void setAcceptRichText(bool accept)
+* void setCurrentCharFormat(QTextCharFormat)
+* void setCursorWidth(int width)
+* void setDocument(QTextDocument *document)
+* void setDocumentTitle(QString)
+* void setLineWrapColumnOrWidth(int w)
+* void setLineWrapMode(QTextEdit::LineWrapMode)
+* void setOverwriteMode(bool overwrite)
+* void setReadOnly(bool)
+* void setTabChangesFocus(bool)
+* void setTabStopWidth(int width)
+* void setTextCursor(QTextCursor)
+* void setTextInteractionFlags(Qt::TextInteractionFlag flags)
+* void setUndoRedoEnabled(bool enable)
+* void setWordWrapMode(QTextOption::WrapMode policy)
+* bool tabChangesFocus(void)
+* int tabStopWidth(void)
+* QColor textBackgroundColor(void)
+* QColor textColor(void)
+* QTextCursor textCursor(void)
+* int textInteractionFlags(void)
+* QString toHtml(void)
+* QString toPlainText(void)
+* int wordWrapMode(void)
+* void append(QString)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void insertHtml(QString)
+* void insertPlainText(QString)
+* void paste(void)
+* void redo(void)
+* void scrollToAnchor(QString)
+* void selectAll(void)
+* void setAlignment(Qt::AlignmentFlag a)
+* void setCurrentFont(QFont)
+* void setFontFamily(QString)
+* void setFontItalic(bool italic)
+* void setFontPointSize(double s)
+* void setFontUnderline(bool underline)
+* void setFontWeight(int weight)
+* void setHtml(QString)
+* void setPlainText(QString)
+* void setText(QString)
+* void setTextBackgroundColor(QColor)
+* void setTextColor(QColor)
+* void undo(void)
+* void zoomIn(int range)
+* void zoomOut(int range)
+* void setcopyAvailableEvent(const char *)
+* void setcurrentCharFormatChangedEvent(const char *)
+* void setcursorPositionChangedEvent(const char *)
+* void setredoAvailableEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void settextChangedEvent(const char *)
+* void setundoAvailableEvent(const char *)
+* const char *getcopyAvailableEvent(void)
+* const char *getcurrentCharFormatChangedEvent(void)
+* const char *getcursorPositionChangedEvent(void)
+* const char *getredoAvailableEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettextChangedEvent(void)
+* const char *getundoAvailableEvent(void)
+* void cyanline(void)
+* void setactivelinecolor(QColor)
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream Class
+
+QTextStream Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtextstream.html
+
+
+Parameters : void
+
+* bool atEnd(void)
+* bool autoDetectUnicode(void)
+* QTextCodec * codec(void)
+* QIODevice * device(void)
+* QTextStream::FieldAlignment fieldAlignment(void)
+* int fieldWidth(void)
+* void flush(void)
+* bool generateByteOrderMark(void)
+* int integerBase(void)
+* QLocale locale(void)
+* QTextStream::NumberFlags numberFlags(void)
+* QChar padChar(void)
+* qint64 pos(void)
+* QString read(qint64 maxlen)
+* QString readAll(void)
+* QString readLine(qint64 maxlen)
+* QTextStream::RealNumberNotation realNumberNotation(void)
+* int realNumberPrecision(void)
+* void reset(void)
+* void resetStatus(void)
+* bool seek(qint64 pos)
+* void setAutoDetectUnicode(bool enabled)
+* void setCodec(QTextCodec * codec)
+* void setCodec_2(char * codecName)
+* void setDevice(QIODevice * device)
+* void setFieldAlignment(QTextStream::FieldAlignment mode)
+* void setFieldWidth(int width)
+* void setGenerateByteOrderMark(bool generate)
+* void setIntegerBase(int base)
+* void setLocale(QLocale locale)
+* void setNumberFlags(QTextStream::NumberFlags flags)
+* void setPadChar(QChar ch)
+* void setRealNumberNotation(QTextStream::RealNumberNotation notation)
+* void setRealNumberPrecision(int precision)
+* void setStatus(QTextStream::Status status)
+* void setString(QString * string, QIODevice::OpenMode openMode)
+* void skipWhiteSpace(void)
+* QTextStream::Status status(void)
+* QString * string(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream2 Class
+
+QTextStream2 Class
+==================
+
+
+Parameters : QIODevice * device
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream3 Class
+
+QTextStream3 Class
+==================
+
+
+Parameters : FILE * fileHandle, QIODevice::OpenMode
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream4 Class
+
+QTextStream4 Class
+==================
+
+
+Parameters : QString *, QIODevice::OpenMode
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextStream5 Class
+
+QTextStream5 Class
+==================
+
+
+Parameters : QByteArray *, QIODevice::OpenMode
+
+
+Parent Class : QTextStream
+
+
+.. index::
+       pair: RingQt Classes Reference; QTextToSpeech Class
+
+QTextToSpeech Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtexttospeech.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QVector<QLocale> availableLocales(void)
+* QVector<QVoice> availableVoices(void)
+* QLocale locale(void)
+* double pitch(void)
+* double rate(void)
+* QTextToSpeech::State state(void)
+* QVoice voice(void)
+* double volume(void)
+* void pause(void)
+* void resume(void)
+* void say(QString text)
+* void setLocale(QLocale locale)
+* void setPitch(double pitch)
+* void setRate(double rate)
+* void setVoice(QVoice voice)
+* void setVolume(double volume)
+* void stop(void)
+* QStringList availableEngines(void)
+* void setlocaleChangedEvent(const char *)
+* void setpitchChangedEvent(const char *)
+* void setrateChangedEvent(const char *)
+* void setstateChangedEvent(const char *)
+* void setvoiceChangedEvent(const char *)
+* void setvolumeChangedEvent(const char *)
+* const char *getlocaleChangedEvent(void)
+* const char *getpitchChangedEvent(void)
+* const char *getrateChangedEvent(void)
+* const char *getstateChangedEvent(void)
+* const char *getvoiceChangedEvent(void)
+* const char *getvolumeChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTextureLoader Class
+
+QTextureLoader Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qtextureloader.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool isMirrored(void)
+* QUrl source(void)
+* void setMirrored(bool mirrored)
+* void setSource(QUrl source)
+
+.. index::
+       pair: RingQt Classes Reference; QTextureMaterial Class
+
+QTextureMaterial Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qtexturematerial.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* bool isAlphaBlendingEnabled(void)
+* Qt3DRender::QAbstractTexture *texture(void)
+* QVector2D textureOffset(void)
+* QMatrix3x3 textureTransform(void)
+* void setAlphaBlendingEnabled(bool enabled)
+* void setTexture(Qt3DRender::QAbstractTexture *texture)
+* void setTextureOffset(QVector2D textureOffset)
+* void setTextureTransform(QMatrix3x3 matrix)
+
+.. index::
+       pair: RingQt Classes Reference; QThread Class
+
+QThread Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qthread.html
+
+
+Parameters : QObject *
+
+
+Parent Class : QObject
+
+* QAbstractEventDispatcher *eventDispatcher(void)
+* void exit(int returnCode) # In RingQt use : void exitfromthread(int returnCode)
+* bool isFinished(void)
+* bool isInterruptionRequested(void)
+* bool isRunning(void)
+* QThread::Priority priority(void)
+* void requestInterruption(void)
+* void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
+* void setPriority(QThread::Priority priority)
+* void setStackSize(uint stackSize)
+* uint stackSize(void)
+* bool wait(unsigned long time)
+* void quit(void)
+* void start(QThread::Priority priority)
+* void terminate(void)
+* QThread *currentThread(void)
+* Qt::HANDLE currentThreadId(void)
+* int idealThreadCount(void)
+* void msleep(unsigned long msecs)
+* void sleep(unsigned long secs)
+* void usleep(unsigned long usecs)
+* void yieldCurrentThread(void)
+* void setStartedEvent(const char *)
+* void setFinishedEvent(const char *)
+* const char *getStartedEvent(void)
+* const char *getFinishedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QThreadPool Class
+
+QThreadPool Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qthreadpool.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* int activeThreadCount(void)
+* void clear(void)
+* int expiryTimeout(void)
+* int maxThreadCount(void)
+* void releaseThread(void)
+* void reserveThread(void)
+* void setExpiryTimeout(int expiryTimeout)
+* void setMaxThreadCount(int maxThreadCount)
+* void start(QRunnable * runnable, int priority)
+* bool tryStart(QRunnable * runnable)
+* bool waitForDone(int msecs)
+* QThreadPool *globalInstance(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTime Class
+
+QTime Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtime.html
+
+
+Parameters : void
+
+* QTime addMSecs(int ms)
+* QTime addSecs(int s)
+* int elapsed(void)
+* int hour(void)
+* bool isNull(void)
+* bool isValid(void)
+* int minute(void)
+* int msec(void)
+* int msecsSinceStartOfDay(void)
+* int msecsTo(QTime)
+* int restart(void)
+* int second(void)
+* int secsTo(QTime)
+* bool setHMS(int h, int m, int s, int ms)
+* void start(void)
+* QString toString(QString)
+* QTime currentTime(void)
+* QTime fromMSecsSinceStartOfDay(int msecs)
+* QTime fromString(QString,QString)
+
+.. index::
+       pair: RingQt Classes Reference; QTimer Class
+
+QTimer Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtimer.html
+
+
+Parameters : QObject *parent
+
+* int interval(void)
+* bool isActive(void)
+* bool isSingleShot(void)
+* void setInterval(int msec)
+* void setSingleShot(bool singleShot)
+* int timerId(void)
+* void start(void)
+* void stop(void)
+* void settimeoutEvent(const char *)
+* const char *gettimeoutEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QToolBar Class
+
+QToolBar Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtoolbar.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QWidget
+
+* QAction *actionAt(int x, int y)
+* QAction *addAction(QString)
+* QAction *addSeparator(void)
+* QAction *addWidget(QWidget *widget)
+* int allowedAreas(void)
+* void clear(void)
+* QSize iconSize(void)
+* QAction *insertSeparator(QAction *before)
+* QAction *insertWidget(QAction *before, QWidget *widget)
+* bool isAreaAllowed(Qt::ToolBarArea area)
+* bool isFloatable(void)
+* bool isFloating(void)
+* bool isMovable(void)
+* int orientation(void)
+* void setAllowedAreas(Qt::ToolBarArea areas)
+* void setFloatable(bool floatable)
+* void setMovable(bool movable)
+* void setOrientation(Qt::Orientation orientation)
+* QAction *toggleViewAction(void)
+* int toolButtonStyle(void)
+* QWidget *widgetForAction(QAction *action)
+* void setIconSize(QSize)
+* void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
+
+.. index::
+       pair: RingQt Classes Reference; QToolButton Class
+
+QToolButton Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtoolbutton.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractButton
+
+* Qt::ArrowType arrowType(void)
+* bool autoRaise(void)
+* QAction * defaultAction(void)
+* QMenu * menu(void)
+* QToolButton::ToolButtonPopupMode popupMode(void)
+* void setArrowType(Qt::ArrowType type)
+* void setAutoRaise(bool enable)
+* void setMenu(QMenu * menu)
+* void setPopupMode(QToolButton::ToolButtonPopupMode mode)
+* Qt::ToolButtonStyle toolButtonStyle(void)
+* void setDefaultAction(QAction * action)
+* void setToolButtonStyle(Qt::ToolButtonStyle style)
+* void showMenu(void)
+* void settriggeredEvent(const char *)
+* const char *gettriggeredEvent(void)
+* void setClickEvent(const char *)
+* const char *getClickEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTorusMesh Class
+
+QTorusMesh Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qtorusmesh.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float minorRadius(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setMinorRadius(float minorRadius)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt Classes Reference; QTransform Class
+
+QTransform Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcore-qtransform.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* QMatrix4x4 matrix(void)
+* QQuaternion rotation(void)
+* float rotationX(void)
+* float rotationY(void)
+* float rotationZ(void)
+* float scale(void)
+* QVector3D scale3D(void)
+* QVector3D translation(void)
+* void setMatrix(QMatrix4x4 matrix)
+* void setRotation(QQuaternion rotation)
+* void setRotationX(float rotationX)
+* void setRotationY(float rotationY)
+* void setRotationZ(float rotationZ)
+* void setScale(float scale)
+* void setScale3D(QVector3D scale)
+* void setTranslation(QVector3D translation)
+* QQuaternion fromAxes(QVector3D xAxis, QVector3D yAxis, QVector3D zAxis)
+* QQuaternion fromAxesAndAngles(QVector3D axis1, float angle1, QVector3D axis2, float angle2)
+* QQuaternion fromAxesAndAngles_2(QVector3D axis1, float angle1, QVector3D axis2, float angle2, QVector3D axis3, float angle3)
+* QQuaternion fromAxisAndAngle(QVector3D axis, float angle)
+* QQuaternion fromAxisAndAngle_2(float x, float y, float z, float angle)
+* QQuaternion fromEulerAngles(QVector3D eulerAngles)
+* QQuaternion fromEulerAngles_2(float pitch, float yaw, float roll)
+* QMatrix4x4 rotateAround(QVector3D point, float angle, QVector3D axis)
+* QMatrix4x4 rotateFromAxes(QVector3D xAxis, QVector3D yAxis, QVector3D zAxis)
+
+.. index::
+       pair: RingQt Classes Reference; QTreeView Class
+
+QTreeView Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtreeview.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QAbstractItemView
+
+* bool allColumnsShowFocus(void)
+* int autoExpandDelay(void)
+* int columnAt(int x)
+* int columnViewportPosition(int column)
+* int columnWidth(int column)
+* bool expandsOnDoubleClick(void)
+* QHeaderView *header(void)
+* int indentation(void)
+* QModelIndex indexAbove(QModelIndex)
+* QModelIndex indexBelow(QModelIndex)
+* bool isAnimated(void)
+* bool isColumnHidden(int column)
+* bool isExpanded(QModelIndex)
+* bool isFirstColumnSpanned(int row, QModelIndex)
+* bool isHeaderHidden(void)
+* bool isRowHidden(int row,QModelIndex)
+* bool isSortingEnabled(void)
+* bool itemsExpandable(void)
+* bool rootIsDecorated(void)
+* void setAllColumnsShowFocus(bool enable)
+* void setAnimated(bool enable)
+* void setAutoExpandDelay(int delay)
+* void setColumnHidden(int column, bool hide)
+* void setColumnWidth(int column, int width)
+* void setExpanded(QModelIndex, bool expanded)
+* void setExpandsOnDoubleClick(bool enable)
+* void setFirstColumnSpanned(int row, QModelIndex, bool span)
+* void setHeader(QHeaderView * header)
+* void setHeaderHidden(bool hide)
+* void setIndentation(int i)
+* void setItemsExpandable(bool enable)
+* void setRootIsDecorated(bool show)
+* void setRowHidden(int row,QModelIndex, bool hide)
+* void setSortingEnabled(bool enable)
+* void setUniformRowHeights(bool uniform)
+* void setWordWrap(bool on)
+* void sortByColumn(int column,Qt::SortOrder order)
+* bool uniformRowHeights(void)
+* bool wordWrap(void)
+* void dataChanged(QModelIndex,QModelIndex)
+* QModelIndex indexAt(QPoint)
+* void keyboardSearch(QString)
+* void reset(void)
+* void scrollTo(QModelIndex, QAbstractItemView::ScrollHint)
+* void selectAll(void)
+* void setModel(QAbstractItemModel *model)
+* void setRootIndex(QModelIndex)
+* void setSelectionModel(QItemSelectionModel *selectionModel)
+* QRect visualRect(QModelIndex)
+* void collapse(QModelIndex)
+* void collapseAll(void)
+* void expand(QModelIndex)
+* void expandAll(void)
+* void expandToDepth(int depth)
+* void hideColumn(int column)
+* void resizeColumnToContents(int column)
+* void showColumn(int column)
+* void setcollapsedEvent(const char *)
+* void setexpandedEvent(const char *)
+* void setactivatedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setdoubleClickedEvent(const char *)
+* void setenteredEvent(const char *)
+* void setpressedEvent(const char *)
+* void setviewportEnteredEvent(const char *)
+* const char *getcollapsedEvent(void)
+* const char *getexpandedEvent(void)
+* const char *getactivatedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getdoubleClickedEvent(void)
+* const char *getenteredEvent(void)
+* const char *getpressedEvent(void)
+* const char *getviewportEnteredEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTreeWidget Class
+
+QTreeWidget Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtreewidget.html
+
+
+Parameters : QWidget *
+
+
+Parent Class : QTreeView
+
+* void addTopLevelItem(QTreeWidgetItem *item)
+* void closePersistentEditor(QTreeWidgetItem *item, int column)
+* int columnCount(void)
+* int currentColumn(void)
+* QTreeWidgetItem *currentItem(void)
+* void editItem(QTreeWidgetItem *item, int column)
+* QTreeWidgetItem *headerItem(void)
+* int indexOfTopLevelItem(QTreeWidgetItem *item)
+* void insertTopLevelItem(int index, QTreeWidgetItem *item)
+* QTreeWidgetItem *invisibleRootItem(void)
+* bool isFirstItemColumnSpanned( QTreeWidgetItem *item)
+* QTreeWidgetItem *itemAbove(QTreeWidgetItem *item)
+* QTreeWidgetItem *itemAt(int x, int y)
+* QTreeWidgetItem *itemBelow(QTreeWidgetItem *item)
+* QWidget *itemWidget(QTreeWidgetItem *item, int column)
+* void openPersistentEditor(QTreeWidgetItem *item, int column)
+* void removeItemWidget(QTreeWidgetItem *item, int column)
+* void setColumnCount(int columns)
+* void setCurrentItem(QTreeWidgetItem * item, QItemSelectionModel::SelectionFlag column)
+* void setFirstItemColumnSpanned(QTreeWidgetItem *item, bool span)
+* void setHeaderItem(QTreeWidgetItem *item)
+* void setHeaderLabel(QString)
+* void setHeaderLabels(QStringList)
+* void setItemWidget(QTreeWidgetItem *item, int column, QWidget * widget)
+* int sortColumn(void)
+* void sortItems(int column, Qt::SortOrder order)
+* QTreeWidgetItem *takeTopLevelItem(int index)
+* QTreeWidgetItem *topLevelItem(int index)
+* int topLevelItemCount(void)
+* QRect visualItemRect(QTreeWidgetItem *item)
+* void setSelectionModel(QItemSelectionModel *selectionModel)
+* void clear(void)
+* void collapseItem(QTreeWidgetItem *item)
+* void expandItem(QTreeWidgetItem *item)
+* void scrollToItem(QTreeWidgetItem *item, QAbstractItemView::ScrollHint hint)
+* void setcollapsedEvent(const char *)
+* void setexpandedEvent(const char *)
+* void setactivatedEvent(const char *)
+* void setclickedEvent(const char *)
+* void setdoubleClickedEvent(const char *)
+* void setenteredEvent(const char *)
+* void setpressedEvent(const char *)
+* void setviewportEnteredEvent(const char *)
+* void setcurrentItemChangedEvent(const char *)
+* void setitemActivatedEvent(const char *)
+* void setitemChangedEvent(const char *)
+* void setitemClickedEvent(const char *)
+* void setitemCollapsedEvent(const char *)
+* void setitemDoubleClickedEvent(const char *)
+* void setitemEnteredEvent(const char *)
+* void setitemExpandedEvent(const char *)
+* void setitemPressedEvent(const char *)
+* void setitemSelectionChangedEvent(const char *)
+* const char *getcollapsedEvent(void)
+* const char *getexpandedEvent(void)
+* const char *getactivatedEvent(void)
+* const char *getclickedEvent(void)
+* const char *getdoubleClickedEvent(void)
+* const char *getenteredEvent(void)
+* const char *getpressedEvent(void)
+* const char *getviewportEnteredEvent(void)
+* const char *getcurrentItemChangedEvent(void)
+* const char *getitemActivatedEvent(void)
+* const char *getitemChangedEvent(void)
+* const char *getitemClickedEvent(void)
+* const char *getitemCollapsedEvent(void)
+* const char *getitemDoubleClickedEvent(void)
+* const char *getitemEnteredEvent(void)
+* const char *getitemExpandedEvent(void)
+* const char *getitemPressedEvent(void)
+* const char *getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QTreeWidgetItem Class
+
+QTreeWidgetItem Class
+=====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qtreewidgetitem.html
+
+
+Parameters : void
+
+* void addChild(QTreeWidgetItem *child)
+* QBrush background(int column)
+* int checkState(int column)
+* QTreeWidgetItem *child(int index)
+* int childCount(void)
+* int childIndicatorPolicy(void)
+* QTreeWidgetItem *clone(void)
+* int columnCount(void)
+* QVariant data(int column, int role)
+* int flags(void)
+* QFont font(int column)
+* QBrush foreground(int column)
+* QIcon icon(int column)
+* int indexOfChild(QTreeWidgetItem *child)
+* void insertChild(int index, QTreeWidgetItem *child)
+* bool isDisabled(void)
+* bool isExpanded(void)
+* bool isFirstColumnSpanned(void)
+* bool isHidden(void)
+* bool isSelected(void)
+* QTreeWidgetItem *parent(void)
+* void read(QDataStream)
+* void removeChild(QTreeWidgetItem *child)
+* void setBackground(int column,QBrush)
+* void setCheckState(int column, Qt::CheckState state)
+* void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy)
+* void setData(int column, int role,QVariant)
+* void setDisabled(bool disabled)
+* void setExpanded(bool expand)
+* void setFirstColumnSpanned(bool span)
+* void setFlags(Qt::ItemFlag flags)
+* void setFont(int column, QFont)
+* void setForeground(int column, QBrush)
+* void setHidden(bool hide)
+* void setIcon(int column, QIcon)
+* void setSelected(bool select)
+* void setSizeHint(int column, QSize)
+* void setStatusTip(int column, QString)
+* void setText(int column, QString)
+* void setTextAlignment(int column, int alignment)
+* void setToolTip(int column, QString)
+* void setWhatsThis(int column, QString)
+* QSize sizeHint(int column)
+* void sortChildren(int column, Qt::SortOrder order)
+* QString statusTip(int column)
+* QTreeWidgetItem *takeChild(int index)
+* QString text(int column)
+* int textAlignment(int column)
+* QString toolTip(int column)
+* QTreeWidget *treeWidget(void)
+* int type(void)
+* QString whatsThis(int column)
+* void write(QDataStream)
+
+.. index::
+       pair: RingQt Classes Reference; QUrl Class
+
+QUrl Class
+==========
+
+
+C++ Reference : http://doc.qt.io/qt-5/qurl.html
+
+
+Parameters : QString
+
+* void clear(void)
+* QString errorString(void)
+* QString fileName(QUrl::ComponentFormattingOption options)
+* QString fragment(QUrl::ComponentFormattingOption options)
+* bool hasFragment(void)
+* bool hasQuery(void)
+* QString host(QUrl::ComponentFormattingOption options)
+* bool isEmpty(void)
+* bool isLocalFile(void)
+* bool isParentOf(QUrl)
+* bool isRelative(void)
+* bool isValid(void)
+* QString path(QUrl::ComponentFormattingOption options)
+* int port(int defaultPort)
+* QString query(QUrl::ComponentFormattingOption options)
+* QUrl resolved(QUrl)
+* QString scheme(void)
+* void setAuthority(QString, QUrl::ParsingMode mode)
+* void setFragment(QString, QUrl::ParsingMode mode)
+* void setHost(QString, QUrl::ParsingMode mode)
+* void setPassword(QString, QUrl::ParsingMode mode)
+* void setPath(QString, QUrl::ParsingMode mode)
+* void setPort(int port)
+* void setQuery(QString, QUrl::ParsingMode mode)
+* void setScheme(QString)
+* void setUrl(QString, QUrl::ParsingMode parsingMode)
+* void setUserInfo(QString, QUrl::ParsingMode mode)
+* void setUserName(QString, QUrl::ParsingMode mode)
+* void swap(QUrl)
+* QString topLevelDomain(QUrl::ComponentFormattingOption options)
+* QString userInfo(QUrl::ComponentFormattingOption options)
+* QString userName(QUrl::ComponentFormattingOption options)
+* QUrl fromLocalFile(QString)
+
+.. index::
+       pair: RingQt Classes Reference; QUuid Class
+
+QUuid Class
+===========
+
+
+C++ Reference : http://doc.qt.io/qt-5/quuid.html
+
+
+Parameters : void
+
+* QString toString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QVBoxLayout Class
+
+QVBoxLayout Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvboxlayout.html
+
+
+Parameters : void
+
+
+Parent Class : QBoxLayout
+
+* void addWidget(QWidget *)
+* void addLayout(QLayout *)
+
+.. index::
+       pair: RingQt Classes Reference; QVariant Class
+
+QVariant Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariant.html
+
+
+Parameters : void
+
+* bool canConvert(int targetTypeId)
+* void clear(void)
+* bool convert(int targetTypeId)
+* bool isNull(void)
+* bool isValid(void)
+* void swap(QVariant)
+* QBitArray toBitArray(void)
+* bool toBool(void)
+* QByteArray toByteArray(void)
+* QChar toChar(void)
+* QDate toDate(void)
+* QDateTime toDateTime(void)
+* double toDouble(bool *ok)
+* QEasingCurve toEasingCurve(void)
+* float toFloat(bool *ok)
+* int toInt(bool *ok)
+* QJsonArray toJsonArray(void)
+* QJsonDocument toJsonDocument(void)
+* QJsonObject toJsonObject(void)
+* QJsonValue toJsonValue(void)
+* QLine toLine(void)
+* QLineF toLineF(void)
+* QLocale toLocale(void)
+* qlonglong toLongLong(bool *ok)
+* QModelIndex toModelIndex(void)
+* QPointF toPointF(void)
+* qreal toReal(bool *ok)
+* QRect toRect(void)
+* QRectF toRectF(void)
+* QRegExp toRegExp(void)
+* QRegularExpression toRegularExpression(void)
+* QSize toSize(void)
+* QSizeF toSizeF(void)
+* QStringList toStringList(void)
+* QTime toTime(void)
+* uint toUInt(bool *ok)
+* qulonglong toULongLong(bool *ok)
+* QUrl toUrl(void)
+* QUuid toUuid(void)
+* QVariant::Type type(void)
+* const char *typeName(void)
+* int userType(void)
+* QString toString(void)
+
+.. index::
+       pair: RingQt Classes Reference; QVariant2 Class
+
+QVariant2 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : int
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariant3 Class
+
+QVariant3 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : float
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariant4 Class
+
+QVariant4 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : double
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariant5 Class
+
+QVariant5 Class
+===============
+
+
+Parent Class : QVariant
+
+
+Parameters : QString
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantDouble Class
+
+QVariantDouble Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantdouble.html
+
+
+Parent Class : QVariant
+
+
+Parameters : double
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantFloat Class
+
+QVariantFloat Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantfloat.html
+
+
+Parent Class : QVariant
+
+
+Parameters : float
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantInt Class
+
+QVariantInt Class
+=================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantint.html
+
+
+Parent Class : QVariant
+
+
+Parameters : int
+
+
+.. index::
+       pair: RingQt Classes Reference; QVariantString Class
+
+QVariantString Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvariantstring.html
+
+
+Parent Class : QVariant
+
+
+Parameters : QString
+
+
+.. index::
+       pair: RingQt Classes Reference; QVector2D Class
+
+QVector2D Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvector2d.html
+
+
+Parameters : float,float
+
+* float distanceToLine(QVector2D point, QVector2D direction)
+* float distanceToPoint(QVector2D point)
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector2D normalized(void)
+* void setX(float x)
+* void setY(float y)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector3D toVector3D(void)
+* QVector4D toVector4D(void)
+* float x(void)
+* float y(void)
+* float dotProduct(QVector2D v1, QVector2D v2)
+
+.. index::
+       pair: RingQt Classes Reference; QVector3D Class
+
+QVector3D Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvector3d.html
+
+
+Parameters : float,float,float
+
+* float distanceToLine(QVector3D point, QVector3D direction)
+* float distanceToPlane(QVector3D plane, QVector3D normal)
+* float distanceToPlane_2(QVector3D plane1, QVector3D plane2, QVector3D plane3)
+* float distanceToPoint(QVector3D point)
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector3D normalized(void)
+* void setY(float y)
+* void setZ(float z)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector2D toVector2D(void)
+* QVector4D toVector4D(void)
+* float y(void)
+* float z(void)
+* QVector3D crossProduct(QVector3D v1, QVector3D v2)
+* float dotProduct(QVector3D v1, QVector3D v2)
+* QVector3D normal(QVector3D v1, QVector3D v2)
+* QVector3D normal_2(QVector3D v1, QVector3D v2, QVector3D v3)
+
+.. index::
+       pair: RingQt Classes Reference; QVector4D Class
+
+QVector4D Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvector4d.html
+
+
+Parameters : float,float,float,float
+
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector4D normalized(void)
+* void setW(float w)
+* void setX(float x)
+* void setY(float y)
+* void setZ(float z)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector2D toVector2D(void)
+* QVector2D toVector2DAffine(void)
+* QVector3D toVector3D(void)
+* QVector3D toVector3DAffine(void)
+* float w(void)
+* float x(void)
+* float y(void)
+* float z(void)
+* float dotProduct(QVector4D v1, QVector4D v2)
+
+.. index::
+       pair: RingQt Classes Reference; QVectorQVoice Class
+
+QVectorQVoice Class
+===================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvectorqvoice.html
+
+
+Parameters : void
+
+* int count(void)
+* QVoice value(int i)
+
+.. index::
+       pair: RingQt Classes Reference; QVideoWidget Class
+
+QVideoWidget Class
+==================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvideowidget.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* int aspectRatioMode(void)
+* int brightness(void)
+* int contrast(void)
+* int hue(void)
+* bool isFullScreen(void)
+* int saturation(void)
+* void setAspectRatioMode(Qt::AspectRatioMode mode)
+* void setBrightness(int brightness)
+* void setContrast(int contrast)
+* void setFullScreen(bool fullScreen)
+* void setHue(int hue)
+* void setSaturation(int saturation)
+* void setbrightnessChangedEvent(const char *)
+* void setcontrastChangedEvent(const char *)
+* void setfullScreenChangedEvent(const char *)
+* void sethueChangedEvent(const char *)
+* void setsaturationChangedEvent(const char *)
+* const char *getbrightnessChangedEvent(void)
+* const char *getcontrastChangedEvent(void)
+* const char *getfullScreenChangedEvent(void)
+* const char *gethueChangedEvent(void)
+* const char *getsaturationChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QVideoWidgetControl Class
+
+QVideoWidgetControl Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvideowidgetcontrol.html
+
+
+Parent Class : QMediaControl
+
+
+.. index::
+       pair: RingQt Classes Reference; QViewport Class
+
+QViewport Class
+===============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3drender-qviewport.html
+
+
+Parameters : Qt3DCore::QNode *
+
+* float gamma(void)
+* QRectF normalizedRect(void)
+* void setGamma(float gamma)
+* void setNormalizedRect(QRectF normalizedRect)
+
+.. index::
+       pair: RingQt Classes Reference; QVoice Class
+
+QVoice Class
+============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qvoice.html
+
+
+Parameters : void
+
+* QVoice::Age age(void)
+* QVoice::Gender gender(void)
+* QString name(void)
+* QString ageName(QVoice::Age age)
+* QString genderName(QVoice::Gender gender)
+
+.. index::
+       pair: RingQt Classes Reference; QWebEngineView Class
+
+QWebEngineView Class
+====================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwebengineview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* bool hasSelection(void)
+* QWebEngineHistory *history(void)
+* void load(QUrl) # In RingQt use : void loadpage(QUrl)
+* QWebEnginePage *page(void)
+* QAction *pageAction(QWebEnginePage::WebAction action)
+* QString selectedText(void)
+* void setContent(QByteArray,QString,QUrl)
+* void setHtml(QString,QUrl)
+* void setPage(QWebEnginePage *page)
+* void setUrl(QUrl)
+* void setZoomFactor(qreal factor)
+* QWebSettings *settings(void)
+* QString title(void)
+* void triggerPageAction(QWebEnginePage::WebAction action, bool checked)
+* QUrl url(void)
+* qreal zoomFactor(void)
+* void back(void)
+* void forward(void)
+* void reload(void)
+* void stop(void)
+* void setloadFinishedEvent(const char *)
+* void setloadProgressEvent(const char *)
+* void setloadStartedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void settitleChangedEvent(const char *)
+* void seturlChangedEvent(const char *)
+* const char *getloadFinishedEvent(void)
+* const char *getloadProgressEvent(void)
+* const char *getloadStartedEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettitleChangedEvent(void)
+* const char *geturlChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QWebView Class
+
+QWebView Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwebview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWebEngineView
+
+
+.. index::
+       pair: RingQt Classes Reference; QWebView Class
+
+QWebView Class
+==============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwebview.html
+
+
+Parameters : QWidget *parent
+
+
+Parent Class : QWidget
+
+* QWebHistory *history(void)
+* QAction *pageAction(QWebPage::WebAction action)
+* void setContent(QByteArray,QString,QUrl)
+* void setHtml(QString,QUrl)
+* void setPage(QWebPage *page)
+* void setZoomFactor(qreal factor)
+* QWebSettings *settings(void)
+* void triggerPageAction(QWebPage::WebAction action, bool checked)
+* QUrl url(void)
+* qreal zoomFactor(void)
+* void back(void)
+* void forward(void)
+* void print(QPrinter *printer)
+* void reload(void)
+* void stop(void)
+* void setloadProgressEvent(const char *)
+* void setloadStartedEvent(const char *)
+* void setselectionChangedEvent(const char *)
+* void seturlChangedEvent(const char *)
+* const char *getloadFinishedEvent(void)
+* const char *getloadProgressEvent(void)
+* const char *getloadStartedEvent(void)
+* const char *getselectionChangedEvent(void)
+* const char *gettitleChangedEvent(void)
+* const char *geturlChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QWidget Class
+
+QWidget Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwidget.html
+
+
+Parameters : void
+
+
+Parent Class : QObject
+
+* 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)
+* int foregroundRole(void)
+* QRect frameGeometry(void)
+* QSize frameSize(void)
+* QRect geometry(void)
+* void getContentsMargins(int *left, int *top, int *right, int *bottom)
+* QPixmap grab(QRect)
+* void grabGesture(Qt::GestureType gesture, Qt::GestureFlag flags)
+* void grabKeyboard(void)
+* void grabMouse(void)
+* int grabShortcut(QKeySequence , Qt::ShortcutContext context)
+* QGraphicsEffect *graphicsEffect(void)
+* QGraphicsProxyWidget *graphicsProxyWidget(void)
+* bool hasFocus(void)
+* bool hasMouseTracking(void)
+* int height(void)
+* int heightForWidth(int w)
+* int inputMethodHints(void)
+* QVariant inputMethodQuery(Qt::InputMethodQuery 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(Qt::WindowType 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, QWidget::RenderFlag)
+* void repaint(void)
+* 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(Qt::WidgetAttribute attribute, bool on)
+* void setAutoFillBackground(bool enabled)
+* void setBackgroundRole(QPalette::ColorRole role)
+* void setBaseSize(int basew, int baseh)
+* void setContentsMargins(int left, int top, int right, int bottom)
+* void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
+* void setCursor(QCursor)
+* void setFixedHeight(int h)
+* void setFixedSize(int w, int h)
+* void setFixedWidth(int w)
+* void setFocus(Qt::FocusReason reason)
+* void setFocusPolicy(Qt::FocusPolicy policy)
+* void setFocusProxy(QWidget *w)
+* void setFont(QFont)
+* void setForegroundRole(QPalette::ColorRole role)
+* void setGeometry(int x, int y, int w, int h)
+* void setGraphicsEffect(QGraphicsEffect *effect)
+* void setInputMethodHints(Qt::InputMethodHint hints)
+* void setLayout(QLayout *layout)
+* void setLayoutDirection(Qt::LayoutDirection 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(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
+* void setStatusTip(QString)
+* void setStyle(QStyle *style)
+* void setToolTip(QString)
+* void setUpdatesEnabled(bool enable)
+* void setWhatsThis(QString)
+* void setWindowFilePath(QString)
+* void setWindowFlags(Qt::WindowType type)
+* void setWindowIcon(QIcon)
+* void setWindowIconText(QString)
+* void setWindowModality(Qt::WindowModality windowModality)
+* void setWindowOpacity(double level)
+* void setWindowRole(QString)
+* void setWindowState(Qt::WindowState 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(Qt::WidgetAttribute attribute)
+* QString toolTip(void)
+* bool underMouse(void)
+* void ungrabGesture(Qt::GestureType gesture)
+* void unsetCursor(void)
+* 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)
+* QWindow *windowHandle(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)
+* QWidget *createWindowContainer(QWindow *window, QWidget *parent, Qt::WindowFlags flags)
+
+.. index::
+       pair: RingQt Classes Reference; QWindow Class
+
+QWindow Class
+=============
+
+
+C++ Reference : http://doc.qt.io/qt-5/qwindow.html
+
+
+Parameters : QScreen *
+
+
+Parent Class : QObject
+
+* QSize baseSize(void)
+* Qt::ScreenOrientation contentOrientation(void)
+* void create(void)
+* QCursor cursor(void)
+* void destroy(void)
+* qreal devicePixelRatio(void)
+* QString filePath(void)
+* Qt::WindowFlags flags(void)
+* QObject * focusObject(void)
+* QRect frameGeometry(void)
+* QMargins frameMargins(void)
+* QPoint framePosition(void)
+* QRect geometry(void)
+* int height(void)
+* QIcon icon(void)
+* bool isActive(void)
+* bool isAncestorOf(QWindow *child, QWindow::AncestorMode mode)
+* bool isExposed(void)
+* bool isModal(void)
+* bool isTopLevel(void)
+* bool isVisible(void)
+* QPoint mapFromGlobal(QPoint pos)
+* QPoint mapToGlobal(QPoint pos)
+* QRegion mask(void)
+* int maximumHeight(void)
+* QSize maximumSize(void)
+* int maximumWidth(void)
+* int minimumHeight(void)
+* QSize minimumSize(void)
+* int minimumWidth(void)
+* Qt::WindowModality modality(void)
+* qreal opacity(void)
+* QPoint position(void)
+* void reportContentOrientationChange(Qt::ScreenOrientation orientation)
+* QSurfaceFormat requestedFormat(void)
+* void resize(QSize newSize)
+* void resize_2(int w, int h)
+* QScreen * screen(void)
+* void setBaseSize(QSize size)
+* void setCursor(QCursor cursor)
+* void setFilePath(QString filePath)
+* void setFlags(Qt::WindowFlags flags)
+* void setFormat(QSurfaceFormat format)
+* void setFramePosition(QPoint point)
+* void setGeometry(int posx, int posy, int w, int h)
+* void setGeometry_2(QRect rect)
+* void setIcon(QIcon icon)
+* bool setKeyboardGrabEnabled(bool grab)
+* void setMask(QRegion region)
+* void setMaximumSize(QSize size)
+* void setMinimumSize(QSize size)
+* void setModality(Qt::WindowModality modality)
+* bool setMouseGrabEnabled(bool grab)
+* void setOpacity(qreal level)
+* void setParent(QWindow *parent)
+* void setPosition(QPoint pt)
+* void setPosition_2(int posx, int posy)
+* void setScreen(QScreen *newScreen)
+* void setSizeIncrement(QSize size)
+* void setTransientParent(QWindow *parent)
+* void setVisibility(QWindow::Visibility v)
+* void setWindowState(Qt::WindowState state)
+* QSize sizeIncrement(void)
+* QString title(void)
+* QWindow * transientParent(void)
+* Qt::WindowType type(void)
+* void unsetCursor(void)
+* QWindow::Visibility visibility(void)
+* int width(void)
+* WId winId(void)
+* Qt::WindowState windowState(void)
+* int x(void)
+* int y(void)
+* void alert(int msec)
+* bool close(void)
+* void hide(void)
+* void lower(void)
+* void raise(void)
+* void requestActivate(void)
+* void setHeight(int arg)
+* void setMaximumHeight(int h)
+* void setMaximumWidth(int w)
+* void setMinimumHeight(int h)
+* void setMinimumWidth(int w)
+* void setTitle(QString )
+* void setVisible(bool visible)
+* void setWidth(int arg)
+* void setX(int arg)
+* void setY(int arg)
+* void show(void)
+* void showFullScreen(void)
+* void showMaximized(void)
+* void showMinimized(void)
+* void showNormal(void)
+* QWindow * fromWinId(WId id)
+* void setactiveChangedEvent(const char *)
+* void setcontentOrientationChangedEvent(const char *)
+* void setfocusObjectChangedEvent(const char *)
+* void setheightChangedEvent(const char *)
+* void setmaximumHeightChangedEvent(const char *)
+* void setmaximumWidthChangedEvent(const char *)
+* void setminimumHeightChangedEvent(const char *)
+* void setminimumWidthChangedEvent(const char *)
+* void setmodalityChangedEvent(const char *)
+* void setopacityChangedEvent(const char *)
+* void setscreenChangedEvent(const char *)
+* void setvisibilityChangedEvent(const char *)
+* void setvisibleChangedEvent(const char *)
+* void setwidthChangedEvent(const char *)
+* void setwindowStateChangedEvent(const char *)
+* void setwindowTitleChangedEvent(const char *)
+* void setxChangedEvent(const char *)
+* void setyChangedEvent(const char *)
+* const char *getactiveChangedEvent(void)
+* const char *getcontentOrientationChangedEvent(void)
+* const char *getfocusObjectChangedEvent(void)
+* const char *getheightChangedEvent(void)
+* const char *getmaximumHeightChangedEvent(void)
+* const char *getmaximumWidthChangedEvent(void)
+* const char *getminimumHeightChangedEvent(void)
+* const char *getminimumWidthChangedEvent(void)
+* const char *getmodalityChangedEvent(void)
+* const char *getopacityChangedEvent(void)
+* const char *getscreenChangedEvent(void)
+* const char *getvisibilityChangedEvent(void)
+* const char *getvisibleChangedEvent(void)
+* const char *getwidthChangedEvent(void)
+* const char *getwindowStateChangedEvent(void)
+* const char *getwindowTitleChangedEvent(void)
+* const char *getxChangedEvent(void)
+* const char *getyChangedEvent(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamAttribute Class
+
+QXmlStreamAttribute Class
+=========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamattribute.html
+
+
+Parameters : void
+
+* bool isDefault(void)
+* QStringRef name(void)
+* QStringRef namespaceUri(void)
+* QStringRef prefix(void)
+* QStringRef qualifiedName(void)
+* QStringRef value(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamAttributes Class
+
+QXmlStreamAttributes Class
+==========================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamattributes.html
+
+
+Parameters : void
+
+* void append(QString  namespaceUri, QString  name, QString  value)
+* void append_2(QString  qualifiedName, QString  value)
+* bool hasAttribute(QString  qualifiedName)
+* bool hasAttribute_2(QLatin1String qualifiedName)
+* bool hasAttribute_3(QString  namespaceUri, QString  name)
+* QStringRef value(QString  namespaceUri, QString  name)
+* QStringRef value_2(QString  namespaceUri, QLatin1String name)
+* QStringRef value_3(QLatin1String namespaceUri, QLatin1String name)
+* QStringRef value_4(QString  qualifiedName)
+* QStringRef value_5(QLatin1String qualifiedName)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamEntityDeclaration Class
+
+QXmlStreamEntityDeclaration Class
+=================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamentitydeclaration.html
+
+
+Parameters : void
+
+* QStringRef name(void)
+* QStringRef notationName(void)
+* QStringRef publicId(void)
+* QStringRef systemId(void)
+* QStringRef value(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamEntityResolver Class
+
+QXmlStreamEntityResolver Class
+==============================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamentityresolver.html
+
+
+Parameters : void
+
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamNamespaceDeclaration Class
+
+QXmlStreamNamespaceDeclaration Class
+====================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamnamespacedeclaration.html
+
+
+Parameters : void
+
+* QStringRef namespaceUri(void)
+* QStringRef prefix(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamNotationDeclaration Class
+
+QXmlStreamNotationDeclaration Class
+===================================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamnotationdeclaration.html
+
+
+Parameters : void
+
+* QStringRef name(void)
+* QStringRef publicId(void)
+* QStringRef systemId(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamReader Class
+
+QXmlStreamReader Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamreader.html
+
+
+Parameters : void
+
+* void addData(QByteArray)
+* void addData_2(QString)
+* void addData_3(const char * data)
+* void addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration)
+* void addExtraNamespaceDeclarations(QXmlStreamNamespaceDeclarations)
+* bool atEnd(void)
+* QXmlStreamAttributes attributes(void)
+* qint64 characterOffset(void)
+* void clear(void)
+* qint64 columnNumber(void)
+* QIODevice *device(void)
+* QStringRef documentEncoding(void)
+* QStringRef documentVersion(void)
+* QStringRef dtdName(void)
+* QStringRef dtdPublicId(void)
+* QStringRef dtdSystemId(void)
+* QXmlStreamEntityDeclarations entityDeclarations(void)
+* QXmlStreamEntityResolver *entityResolver(void)
+* Error error(void)
+* QString errorString(void)
+* bool hasError(void)
+* bool isCDATA(void)
+* bool isCharacters(void)
+* bool isComment(void)
+* bool isDTD(void)
+* bool isEndDocument(void)
+* bool isEndElement(void)
+* bool isEntityReference(void)
+* bool isProcessingInstruction(void)
+* bool isStandaloneDocument(void)
+* bool isStartDocument(void)
+* bool isStartElement(void)
+* bool isWhitespace(void)
+* qint64 lineNumber(void)
+* QStringRef name(void)
+* QXmlStreamNamespaceDeclarations namespaceDeclarations(void)
+* bool namespaceProcessing(void)
+* QStringRef namespaceUri(void)
+* QXmlStreamNotationDeclarations notationDeclarations(void)
+* QStringRef prefix(void)
+* QStringRef processingInstructionData(void)
+* QStringRef processingInstructionTarget(void)
+* QStringRef qualifiedName(void)
+* void raiseError(QString)
+* QString readElementText(QXmlStreamReader::ReadElementTextBehaviour)
+* TokenType readNext(void)
+* bool readNextStartElement(void)
+* void setDevice(QIODevice *device)
+* void setEntityResolver(QXmlStreamEntityResolver *resolver)
+* void setNamespaceProcessing(bool)
+* void skipCurrentElement(void)
+* QStringRef text(void)
+* QString tokenString(void)
+* TokenType tokenType(void)
+
+.. index::
+       pair: RingQt Classes Reference; QXmlStreamWriter Class
+
+QXmlStreamWriter Class
+======================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qxmlstreamwriter.html
+
+
+Parameters : void
+
+* bool autoFormatting(void)
+* int autoFormattingIndent(void)
+* QTextCodec *codec(void)
+* QIODevice *device(void)
+* bool hasError(void)
+* void setAutoFormatting(bool enable)
+* void setAutoFormattingIndent(int spacesOrTabs)
+* void setCodec(QTextCodec *codec)
+* void setCodec_2(const char *codecName)
+* void setDevice(QIODevice *device)
+* void writeAttribute(QString, QString,QString)
+* void writeAttribute_2(QString, QString)
+* void writeAttribute_3(QXmlStreamAttribute)
+* void writeAttributes(QXmlStreamAttributes)
+* void writeCDATA(QString text)
+* void writeCharacters(QString text)
+* void writeComment(QString text)
+* void writeCurrentToken(QXmlStreamReader reader)
+* void writeDTD(QString dtd)
+* void writeDefaultNamespace(QString namespaceUri)
+* void writeEmptyElement(QString namespaceUri, QString name)
+* void writeEmptyElement_2(QString qualifiedName)
+* void writeEndDocument(void)
+* void writeEndElement(void)
+* void writeEntityReference(QString name)
+* void writeNamespace(QString namespaceUri, QString prefix)
+* void writeProcessingInstruction(QString target, QString data)
+* void writeStartDocument(QString version)
+* void writeStartDocument_2(QString version, bool standalone)
+* void writeStartDocument_3(void)
+* void writeStartElement(QString namespaceUri, QString name)
+* void writeStartElement_2(QString qualifiedName)
+* void writeTextElement(QString namespaceUri, QString name, QString text)
+* void writeTextElement_2(QString qualifiedName, QString text)
+
+.. index::
+       pair: RingQt Classes Reference; Qt3DCamera Class
+
+Qt3DCamera Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dcamera.html
+
+
+Parameters : Qt3DCore::QNode *
+
+
+Parent Class : QEntity
+
+* float aspectRatio(void)
+* float bottom(void)
+* float exposure(void)
+* float farPlane(void)
+* float fieldOfView(void)
+* float left(void)
+* QCameraLens *lens(void)
+* float nearPlane(void)
+* void pan(float angle)
+* void pan_2(float angle, QVector3D axis)
+* void panAboutViewCenter(float angle)
+* void panAboutViewCenter_2(float angle, QVector3D axis)
+* QQuaternion panRotation(float angle)
+* QVector3D position(void)
+* QMatrix4x4 projectionMatrix(void)
+* Qt3DRender::QCameraLens::ProjectionType projectionType(void)
+* float right(void)
+* void roll(float angle)
+* void rollAboutViewCenter(float angle)
+* QQuaternion rollRotation(float angle)
+* void rotate(QQuaternion q)
+* void rotateAboutViewCenter(QQuaternion q)
+* QQuaternion rotation(float angle, QVector3D axis)
+* void tilt(float angle)
+* void tiltAboutViewCenter(float angle)
+* QQuaternion tiltRotation(float angle)
+* float top(void)
+* Qt3DCore::QTransform * transform(void)
+* void translate(QVector3D vLocal, Qt3DRender::QCamera::CameraTranslationOption option)
+* void translateWorld(QVector3D vWorld, Qt3DRender::QCamera::CameraTranslationOption option)
+* QVector3D upVector(void)
+* QVector3D viewCenter(void)
+* QVector3D viewVector(void)
+* void setAspectRatio(float aspectRatio)
+* void setBottom(float bottom)
+* void setExposure(float exposure)
+* void setFarPlane(float farPlane)
+* void setFieldOfView(float fieldOfView)
+* void setLeft(float left)
+* void setNearPlane(float nearPlane)
+* void setPosition(QVector3D position)
+* void setProjectionMatrix(QMatrix4x4 projectionMatrix)
+* void setProjectionType(Qt3DRender::QCameraLens::ProjectionType type)
+* void setRight(float right)
+* void setTop(float top)
+* void setUpVector(QVector3D upVector)
+* void setViewCenter(QVector3D viewCenter)
+* void viewAll(void)
+* void viewEntity(Qt3DCore::QEntity *entity)
+* void viewSphere(QVector3D center, float radius)
+
+.. index::
+       pair: RingQt Classes Reference; Qt3DWindow Class
+
+Qt3DWindow Class
+================
+
+
+C++ Reference : http://doc.qt.io/qt-5/qt3dextras-qt3dwindow.html
+
+
+Parameters : void
+
+
+Parent Class : QWindow
+
+* Qt3DRender::QFrameGraphNode * activeFrameGraph(void)
+* QForwardRenderer * defaultFrameGraph(void)
+* void registerAspect(Qt3DCore::QAbstractAspect *aspect)
+* void registerAspect_2(QString name)
+* Qt3DRender::QRenderSettings * renderSettings(void)
+* void setActiveFrameGraph(Qt3DRender::QFrameGraphNode *activeFrameGraph)
+* void setRootEntity(Qt3DCore::QEntity *root)
+* Qt3DCamera *camera(void)
+
+.. index::
+       pair: RingQt Classes Reference; RingCodeHighlighter Class
+
+RingCodeHighlighter Class
+=========================
+
+
+Parameters : QTextDocument *parent
+
+* void setColors(QColor c1,QColor c2,QColor c3,QColor c4,QColor c5)
+* void setKeywordsBold(int nStatus)
+
diff --git a/docs/en/target/qtmobile.txt b/docs/en/target/qtmobile.txt
new file mode 100644 (file)
index 0000000..3ceda8a
--- /dev/null
@@ -0,0 +1,227 @@
+.. index:: 
+       single: Building RingQt Applications for Mobile; Introduction
+
+=======================================
+Building RingQt Applications for Mobile
+=======================================
+
+In this chapter we will learn about Building RingQt Applications for Mobile.
+
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Download Requirements
+
+Download Requirements
+=====================
+
+Check the next link : http://doc.qt.io/qt-5/androidgs.html
+
+Download 
+
+* The Android SDK Tools
+
+       https://developer.android.com/sdk/index.html
+
+* The Android NDK (Tested using android-ndk-r21)
+
+       http://developer.android.com/tools/sdk/ndk/index.html
+
+* Java SE Development Kit (JDK) v6 or later
+
+       https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Update the Android SDK
+
+Update the Android SDK
+======================
+
+Update the Android SDK to get the API and tools packages required for development
+
+       Tested using Android 4.4.2 (API 19)
+
+* In Windows - Define the next Environment Variables based on your system.
+
+(1) JAVA_HOME
+
+.. code-block:: ring
+       
+       For Example : C:\Program Files (x86)\Java\jdk1.8.0_05 
+
+(2) ANDROID_HOME       
+
+.. code-block:: ring
+
+       For Example : C:\JavaAndroid\AndroidSDK
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Install Qt for Android
+
+Install Qt for Android
+======================
+
+* You can install Qt for Android from the next link
+
+               https://download.qt.io/archive/qt/5.12/5.12.6/
+
+* Run Qt Creator, Select Tools > Options > Android to add the 
+    Android NDK and SDK paths. 
+
+               http://doc.qt.io/qtcreator/creator-developing-android.html
+
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Using Ring2EXE
+
+Using Ring2EXE
+==============
+
+We can use Ring2EXE to quickly prepare Qt project for our application
+
+Example:
+
+.. code-block:: none
+
+       ring2exe myapp.ring -dist -mobileqt
+
+
+.. note:: We can use the Distribute Menu in Ring Notepad
+
+.. tip:: The option ( Prepare Qt project for Mobile devices ) in the Distribute Menu
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; The Qt project for your Ring application
+
+The Qt project for your Ring application
+========================================
+
+After using Ring2EXE or the Distribute Menu in Ring Notepad 
+
+*  Using the Qt Creator Open the generated Qt project 
+
+       Folder : target/mobile/qtproject
+
+       Project file : project.pro
+
+* Using Qt Creator, You will find the compiled Ring application in the resources (YourAppName.ringo)
+
+       This file (Ring Object File) is generated by the Ring compiler using
+
+.. code-block:: none
+
+       ring YourAppName.ring -go -norun
+
+* You can build your application using Qt Creator
+
+(1) You can add your application images to the resources
+
+       Or You can use any text editor (Notepad) and modify : project.qrc
+
+(2) To find images from your Ring application, You need to use the file name in resources
+
+       Example 
+
+.. code-block:: ring
+
+       if isandroid()
+               mypic = new QPixmap(":/cards.jpg")
+       else
+               mypic = new QPixmap("cards.jpg")
+       ok
+
+.. index:: 
+       pair: Building RingQt Applications for Mobile; Comments about developing for Android using RingQt
+
+Comments about developing for Android using RingQt
+==================================================
+
+(1) The main project file is main.cpp 
+
+       This file load Ring Compiler/Virtual Machine and RingQt 
+
+       Then get the Ring Object File during the runtime from the resources
+
+       Then run the Ring Object File (ringapp.ringo) using the Ring VM 
+
+       Through main.cpp you can extract more files from the resources to temp. folder once you
+       add them (create projects with many files).
+
+(2) The next functions are missing from this Ring edition
+
+       * Database (ODBC, SQLite & MySQL)
+
+       * Security and Internet functions (LibCurl & OpenSSL)
+
+       * RingAllegro (Allegro Library)
+
+       * RingLibSDL (LibSDL Library)
+
+       Just use Qt Classes through RingQt.
+
+       For database access use the QSqlDatabase Class
+
+.. note:: All of the missing libraries ((LibCurl, OpenSSL & Allegro) can be compiled for Android, but they are not included in this Qt project.
+
+(3) use if isandroid() when you want to modify the code just for android
+
+Example:
+
+.. code-block:: ring
+
+       if isandroid()
+               // Android code
+       else
+               // other platforms
+       ok
+
+(4) Sometimes you will find that the button text/image is repeated in drawing !
+it's Qt problem that you can avoid using the next code.
+
+.. code-block:: ring
+
+       if isandroid()
+               setStyleSheet("
+                       border-style: outset;
+                       border-width: 2px;
+                       border-radius: 4px;
+                       border-color: black;
+                       padding: 6px;")
+        ok
+
+(5)  Always use Layouts instead of manual setting of controls position and size. 
+
+This is the best way to get the expected user interface to avoid problems like (controls with small/extra size)
+
+(6) When you deal with Qt Classes you can determine the images from resources (you don't need to copy them using main.cpp)
+
+
+Example: 
+
+.. code-block:: ring
+
+       if isandroid()
+           mypic = new QPixmap(":/cards.jpg")
+       else
+           mypic = new QPixmap("cards.jpg")
+       ok
+
+Now RingQt comes with the AppFile() function to determine the file name 
+
+Example:
+
+.. code-block:: ring
+
+       mypic = new QPixmap(AppFile("cards.jpg"))  # Desktop or Android
+
+(7) When you update your project code, You don't have to use Ring2EXE to generate the Qt project again
+
+Just use the Distribute Menu in Ring Notepad and select (Generate Ring Object File)
+
+Then copy the YourAppName.ringo file to target/mobile/qtproject folder and accept replacing files.
+
+(8) If your application folder contains a Qt resource file (project.qrc)
+
+Then when you use Ring2EXE or Ring Notepad (Distribute - Prepare Qt project for Mobile devices) the 
+resource file will be used 
+
+See ring/applications/cards game as an example.
diff --git a/docs/en/target/raylib_3dcamera.png b/docs/en/target/raylib_3dcamera.png
new file mode 100644 (file)
index 0000000..10028ce
Binary files /dev/null and b/docs/en/target/raylib_3dcamera.png differ
diff --git a/docs/en/target/raylib_3dcamerafree.png b/docs/en/target/raylib_3dcamerafree.png
new file mode 100644 (file)
index 0000000..d976202
Binary files /dev/null and b/docs/en/target/raylib_3dcamerafree.png differ
diff --git a/docs/en/target/raylib_3dpicking.png b/docs/en/target/raylib_3dpicking.png
new file mode 100644 (file)
index 0000000..e9e2b64
Binary files /dev/null and b/docs/en/target/raylib_3dpicking.png differ
diff --git a/docs/en/target/raylib_basicshapes.png b/docs/en/target/raylib_basicshapes.png
new file mode 100644 (file)
index 0000000..459e0f7
Binary files /dev/null and b/docs/en/target/raylib_basicshapes.png differ
diff --git a/docs/en/target/raylib_basicwindow.png b/docs/en/target/raylib_basicwindow.png
new file mode 100644 (file)
index 0000000..d35e1fb
Binary files /dev/null and b/docs/en/target/raylib_basicwindow.png differ
diff --git a/docs/en/target/raylib_bezierlines.png b/docs/en/target/raylib_bezierlines.png
new file mode 100644 (file)
index 0000000..82cc471
Binary files /dev/null and b/docs/en/target/raylib_bezierlines.png differ
diff --git a/docs/en/target/raylib_camerafirstperson.png b/docs/en/target/raylib_camerafirstperson.png
new file mode 100644 (file)
index 0000000..ba0b88a
Binary files /dev/null and b/docs/en/target/raylib_camerafirstperson.png differ
diff --git a/docs/en/target/raylib_collisionarea.png b/docs/en/target/raylib_collisionarea.png
new file mode 100644 (file)
index 0000000..b362dde
Binary files /dev/null and b/docs/en/target/raylib_collisionarea.png differ
diff --git a/docs/en/target/raylib_colorspalette.png b/docs/en/target/raylib_colorspalette.png
new file mode 100644 (file)
index 0000000..3e610ce
Binary files /dev/null and b/docs/en/target/raylib_colorspalette.png differ
diff --git a/docs/en/target/raylib_cubicmap.png b/docs/en/target/raylib_cubicmap.png
new file mode 100644 (file)
index 0000000..6552ede
Binary files /dev/null and b/docs/en/target/raylib_cubicmap.png differ
diff --git a/docs/en/target/raylib_drawring.png b/docs/en/target/raylib_drawring.png
new file mode 100644 (file)
index 0000000..83ee118
Binary files /dev/null and b/docs/en/target/raylib_drawring.png differ
diff --git a/docs/en/target/raylib_drawring2.png b/docs/en/target/raylib_drawring2.png
new file mode 100644 (file)
index 0000000..31bbee1
Binary files /dev/null and b/docs/en/target/raylib_drawring2.png differ
diff --git a/docs/en/target/raylib_ex1.png b/docs/en/target/raylib_ex1.png
new file mode 100644 (file)
index 0000000..6c424dd
Binary files /dev/null and b/docs/en/target/raylib_ex1.png differ
diff --git a/docs/en/target/raylib_followingeyes.png b/docs/en/target/raylib_followingeyes.png
new file mode 100644 (file)
index 0000000..2736564
Binary files /dev/null and b/docs/en/target/raylib_followingeyes.png differ
diff --git a/docs/en/target/raylib_fullscreen.png b/docs/en/target/raylib_fullscreen.png
new file mode 100644 (file)
index 0000000..0675f7b
Binary files /dev/null and b/docs/en/target/raylib_fullscreen.png differ
diff --git a/docs/en/target/raylib_geometricshapes.png b/docs/en/target/raylib_geometricshapes.png
new file mode 100644 (file)
index 0000000..4a578e7
Binary files /dev/null and b/docs/en/target/raylib_geometricshapes.png differ
diff --git a/docs/en/target/raylib_imagedrawing.png b/docs/en/target/raylib_imagedrawing.png
new file mode 100644 (file)
index 0000000..9b1fda2
Binary files /dev/null and b/docs/en/target/raylib_imagedrawing.png differ
diff --git a/docs/en/target/raylib_imagegeneration.png b/docs/en/target/raylib_imagegeneration.png
new file mode 100644 (file)
index 0000000..c63310a
Binary files /dev/null and b/docs/en/target/raylib_imagegeneration.png differ
diff --git a/docs/en/target/raylib_inputkeys.png b/docs/en/target/raylib_inputkeys.png
new file mode 100644 (file)
index 0000000..01aad88
Binary files /dev/null and b/docs/en/target/raylib_inputkeys.png differ
diff --git a/docs/en/target/raylib_inputmouse.png b/docs/en/target/raylib_inputmouse.png
new file mode 100644 (file)
index 0000000..faad0eb
Binary files /dev/null and b/docs/en/target/raylib_inputmouse.png differ
diff --git a/docs/en/target/raylib_inputmt.png b/docs/en/target/raylib_inputmt.png
new file mode 100644 (file)
index 0000000..e232968
Binary files /dev/null and b/docs/en/target/raylib_inputmt.png differ
diff --git a/docs/en/target/raylib_mousewheel.png b/docs/en/target/raylib_mousewheel.png
new file mode 100644 (file)
index 0000000..5a77321
Binary files /dev/null and b/docs/en/target/raylib_mousewheel.png differ
diff --git a/docs/en/target/raylib_musicplaying.png b/docs/en/target/raylib_musicplaying.png
new file mode 100644 (file)
index 0000000..183e5ff
Binary files /dev/null and b/docs/en/target/raylib_musicplaying.png differ
diff --git a/docs/en/target/raylib_rectanglescaling.png b/docs/en/target/raylib_rectanglescaling.png
new file mode 100644 (file)
index 0000000..0ce9fd5
Binary files /dev/null and b/docs/en/target/raylib_rectanglescaling.png differ
diff --git a/docs/en/target/raylib_soundloading.png b/docs/en/target/raylib_soundloading.png
new file mode 100644 (file)
index 0000000..ca3e9aa
Binary files /dev/null and b/docs/en/target/raylib_soundloading.png differ
diff --git a/docs/en/target/raylib_texturesource.png b/docs/en/target/raylib_texturesource.png
new file mode 100644 (file)
index 0000000..35ca6ff
Binary files /dev/null and b/docs/en/target/raylib_texturesource.png differ
diff --git a/docs/en/target/raylib_twocubes.png b/docs/en/target/raylib_twocubes.png
new file mode 100644 (file)
index 0000000..05bd368
Binary files /dev/null and b/docs/en/target/raylib_twocubes.png differ
diff --git a/docs/en/target/reference.txt b/docs/en/target/reference.txt
new file mode 100644 (file)
index 0000000..200b05f
--- /dev/null
@@ -0,0 +1,592 @@
+.. index:: 
+       single: Reference; Introduction
+
+==================
+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
+
+.. index:: 
+       pair: Reference; Language Keywords
+
+Language Keywords
+=================
+
+Keywords Count : 49
+
+* again
+* and
+* but
+* bye
+* call
+* case
+* catch
+* changeringkeyword
+* changeringoperator
+* class
+* def
+* do
+* done
+* else
+* elseif
+* end
+* 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
+
+.. index:: 
+       pair: Reference; Language Functions
+
+Language Functions
+==================
+
+Functions Count : 210
+
+.. code-block:: ring
+
+       acos()                      add()                       addattribute()              adddays()
+       addmethod()                 ascii()                     asin()                      assert()
+       atan()                      atan2()                     attributes()                binarysearch()
+       bytes2double()              bytes2float()               bytes2int()                 callgc()
+       ceil()                      cfunctions()                char()                      chdir()
+       classes()                   classname()                 clearerr()                  clock()
+       clockspersecond()           closelib()                  copy()                      cos()
+       cosh()                      currentdir()                date()                      dec()
+       decimals()                  del()                       diffdays()                  dir()
+       double2bytes()              eval()                      exefilename()               exefolder()
+       exp()                       fabs()                      fclose()                    feof()
+       ferror()                    fexists()                   fflush()                    fgetc()
+       fgetpos()                   fgets()                     filename()                  find()
+       float2bytes()               floor()                     fopen()                     fputc()
+       fputs()                     fread()                     freopen()                   fseek()
+       fsetpos()                   ftell()                     functions()                 fwrite()
+       getattribute()              getchar()                   globals()                   hex()
+       hex2str()                   input()                     insert()                    int2bytes()
+       intvalue()                  isalnum()                   isalpha()                   isandroid()
+       isattribute()               iscfunction()               isclass()                   iscntrl()
+       isdigit()                   isfreebsd()                 isfunction()                isglobal()
+       isgraph()                   islinux()                   islist()                    islocal()
+       islower()                   ismacosx()                  ismethod()                  ismsdos()
+       isnull()                    isnumber()                  isobject()                  ispackage()
+       ispackageclass()            ispointer()                 isprint()                   isprivateattribute()
+       isprivatemethod()           ispunct()                   isspace()                   isstring()
+       isunix()                    isupper()                   iswindows()                 iswindows64()
+       isxdigit()                  left()                      len()                       lines()
+       list()                      list2str()                  loadlib()                   locals()
+       log()                       log10()                     lower()                     max()
+       mergemethods()              methods()                   min()                       murmur3hash()
+       nullpointer()               number()                    object2pointer()            objectid()
+       packageclasses()            packagename()               packages()                  perror()
+       pointer2object()            pow()                       prevfilename()              ptrcmp()
+       raise()                     random()                    read()                      remove()
+       rename()                    reverse()                   rewind()                    right()
+       ring_give()                 ring_see()                  
+       ring_state_delete()         ring_state_filetokens()        
+       ring_state_findvar()        ring_state_init()           ring_state_main()           
+       ring_state_mainfile()       ring_state_new()            ring_state_newvar()         
+       ring_state_runcode()        ring_state_runfile()        ring_state_runobjectfile()
+       ring_state_setvar()         ringvm_callfunc()           ringvm_calllist()           
+       ringvm_cfunctionslist()     ringvm_classeslist()        ringvm_evalinscope()        
+       ringvm_fileslist()          ringvm_functionslist()      ringvm_genarray()           
+       ringvm_give()               ringvm_hideerrormsg()       ringvm_info()               
+       ringvm_memorylist()         ringvm_packageslist()       ringvm_passerror()          
+       ringvm_scopescount()        ringvm_see()                ringvm_settrace()           
+       ringvm_tracedata()          ringvm_traceevent()         ringvm_tracefunc()
+       setattribute()              shutdown()                  sin()                       sinh()
+       sort()                      space()                     sqrt()                      srandom()
+       str2hex()                   str2hexcstyle()             str2list()                  strcmp()
+       string()                    substr()                    swap()                      sysget()
+       system()                    tan()                       tanh()                      tempfile()
+       tempname()                  time()                      timelist()                  trim()
+       type()                      ungetc()                    unsigned()                  upper()
+       varptr()                    version()                   windowsnl()                 write()
+
+.. index:: 
+       pair: Reference; Compiler Errors
+
+Compiler Errors
+===============
+
+* Error (C1)  : Error in parameters list, expected identifier
+* 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!
+
+* Warning (W1) : Duplication in file name
+* Warning (W2) : The Compiler command ChangeRingKeyword requires two words as parameters
+* Warning (W3) : Compiler command ChangeRingKeyword - Keyword not found !
+* Warning (W4) : The Compiler command  ChangeRingOperator requires two words as parameters
+* Warning (W5) : Compiler command ChangeRingOperator - Operator not found !
+* Warning (W6) : Using the EXIT command outside loop!"
+* Warning (W7) : Using the LOOP command outside loop!"
+
+.. index:: 
+       pair: Reference; Runtime Errors
+
+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 
+* 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
+
+.. index:: 
+       pair: Reference; Environment Errors
+
+Environment Errors
+==================
+
+* Error (E1) : Caught SegFault
+* Error (E2) : Out of Memory
+* Error (E3) : Deleting scope while no scope!
+* Error (E4) : Long VM Instruction!
+* Error (E5) : The file type is not correct - the VM expect a ring object file
+* Error (E6) : The Ring Object File version is not correct!
+* Error (E7) : Internal error in using sscanf() function!
+* Error (E8) : Internal error in using fscanf() function!
+
+.. index:: 
+       pair: Reference; Language Grammar
+
+Language Grammar
+================
+
+Program ---> {statement}
+
+Statement ---> 'package' <Identifier> { '.' <Identifier> } ['{' {statement} '}'] ['end'|'endpackage']
+
+Statement ---> 'class' <Identifier> [ 'from'|':'|'<' <Identifier> ] ['{' {statement} '}']['end'|'endclass']
+
+Statement ---> 'func'|'def' <Identifier> [ParaList] ['{' {statement} '}']['end'|'endfunc']
+
+Statement ---> 'import' <Identifier> { '.' <Identifier> }
+
+Statement ---> 'private'
+
+Statement ---> 'load' ['package'|'again'] <Literal>
+
+Statement ---> 'loadsyntax' <Literal>
+
+Statement ---> 'changeringkeyword' <OldKeyword> <NewKeyword>
+
+Statement ---> 'changeringoperator' <OldOperator> <NewOperator>
+
+Statement ---> 'see'|'put' <Expr>
+
+Statement ---> 'give'|'get' <Identifier>
+
+Statement ---> 'if' <Expr> ['{'] {statement} [ {'but'|'elseif' <Expr> {Statement} } ] ['else' {Statement} ] 'ok'|'end'|'}'
+
+Statement ---> 'Switch' <Expr> ['{'] { 'on'|'case' <Expr> {statement} } ['other' {Statement} ]  'off'|'end'|'}'
+
+Statement ---> 'for' <Identifier> '=' <Expr> 'to' <Expr> [ 'step' <Expr> ] ['{'] {Statement} 'next'|'end'|'}'
+
+Statement ---> 'for' <Identifier> 'in' <Expr>  [ 'step' <Expr> ] ['{'] {statement} 'next'|'end'|'}'
+
+Statement ---> 'while' <Expr> ['{'] {statement} 'end'|'}'
+
+Statement ---> 'do' {statement} 'again' <Expr> 
+
+Statement ---> 'try' {statement} ['{'] 'catch' {statement} 'done'|'end'|'}'
+
+Statement ---> 'return' <Expr>
+
+Statement ---> 'bye'
+
+Statement ---> 'exit'
+
+Statement ---> 'loop'
+
+Statement ---> <Expr>
+
+Statement ---> epslion
+
+ParaList ---> epslion
+
+ParaList ---> ['('] <Identifier> [{ ',' <Identifier> }] [')']
+
+Expr ---> <LogicNot> [{ 'and'|'or' <LogicNot> }]
+
+LogicNot --> ['not'] <EqualOrNot> 
+
+EqualOrNot --> [ '='|'!=' ] <Compare>
+
+Compare ---> <BitOrXor> [ { '<' | '>' | '<=' | '>=' <BitOrXor> } ]
+
+BitOrXor ---> <BitAnd> [ { '|' | '^' <BitAnd> } ]
+
+BitAnd ---> <BitShift> [ { '&' <BitShift> } ]
+
+BitShift ---> <Arithmetic> [ { '<<' | '>>' <Arithmetic> } ]
+
+Arithmetic ---> <Term> [ { '+' | '-'  <Term>  } ]
+
+Term ---> <Range> [ { '*' | '/' | '%' <Range> } ]
+
+Range ---> <Factor> [ ':' <Factor> ]
+
+Factor ---> <Identifier> [ {Mixer} ] [ '=' <Expr> ]
+
+Factor ---> <Number>
+
+Factor ---> <Literal>
+
+Factor ---> ':' <Identifier>
+
+Factor ---> '-' <Factor>
+
+Factor ---> '(' <Expr> ')'
+
+Factor ---> <List>
+
+Factor ---> 'new' <Identifier>
+
+Factor ---> <AnonymousFunction>
+
+Factor ---> 'call' <identifier> { '.' <Identifier> } '(' <Parameters> ')'
+
+List ---> '[' [ <Expr> { ',' <Expr> } ] ']'
+
+Mixer ---> { '.' <Identifier> }
+
+Mixer ---> '[' <Expr> ']'
+
+Mixer ---> '(' [ <Expr> [ { ',' <Expr> }] ]  ')'
+
+Mixer ---> '{' {Statement} '}'
+
+AnonymousFunction ---> 'func'|'def'| [<ParaList>] '{' {Statement} '}'
+
+.. index:: 
+       pair: Reference; Virtual Machine Instructions
+
+Virtual Machine (VM) Instructions
+=================================
+
+Definitions :-
+
+* VM : Virtual Machine
+* Stack : VM Stack
+* IR : Instruction Register
+* PC : Program Counter
+* VP : Variable Pointer
+* Stack[nSize] : Last Item in the Stack (Last In - First Out)
+* VV : Variable Value (We have a Pointer to a variable, And we access this variable value)
+(Stack and Variables)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_PUSHC            Add string from the IR to the stack
+* ICO_PUSHN            Add number from the IR to the stack
+* ICO_PUSHV            Replace VP in the stack[nSize] with the variable value 
+* ICO_LOADADDRESS      Read variable name from the IR, push VP to the stack
+* ICO_ASSIGNMENT       Stack[nSize-1] VV = Stack[nSize] VV , POP Stack[nSize]
+* ICO_INC              Increment Number in Stack[nSize] by 1
+* ICO_LOADAPUSHV       The same as ICO_LOADADDRESS then ICO_PUSHV
+* ICO_NEWLINE          Store new line number (debug info)
+* ICO_FREESTACK                Remove all items from the stack , nSize = 0
+* ICO_FILENAME         Store the source code file name (debug info)
+* ICO_FREELOADASCOPE   Free the Scope List of the current Expression
+=======================        ============================================================================
+
+(Jump)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_JUMP             Set PC to new value from the IR 
+* ICO_JUMPZERO         If Stack[nSize] is a number = 0 then Set PC to new value from the IR 
+* ICO_JUMPFOR          End of for loop
+* ICO_JUMPONE          If Stack[nSize] is a number = 1 then Set PC to new value from the IR 
+* ICO_JUMPZERO2                As ICO_JUMPZERO but add 1 to the stack (required for many 'AND' conditions)
+* ICO_JUMPONE2         As ICO_JUMPONE but add 1 to the stack (required for many 'OR' conditions)
+=======================        ============================================================================
+
+(Compare)
+
+=======================        ==========================================================================================================
+Operation                      Description
+=======================        ==========================================================================================================
+* ICO_LESSEQUAL                If stack[nSize-1] <= stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_EQUAL            If stack[nSize-1] = stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_LESS             If stack[nSize-1] < stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_GREATER          If stack[nSize-1] > stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_GREATEREQUAL     If stack[nSize-1] >= stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_NOTEQUAL         If stack[nSize-1] != stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+=======================        ==========================================================================================================
+
+(Math)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_SUM              Stack[nSize-1] = Stack[nSize-1] + Stack[nSize] , POP stack[nSize]
+* ICO_SUB              Stack[nSize-1] = Stack[nSize-1] - Stack[nSize] , POP stack[nSize]
+* ICO_MUL              Stack[nSize-1] = Stack[nSize-1] * Stack[nSize] , POP stack[nSize]
+* ICO_DIV              Stack[nSize-1] = Stack[nSize-1] / Stack[nSize] , POP stack[nSize]
+* ICO_MOD              Stack[nSize-1] = Stack[nSize-1] % Stack[nSize] , POP stack[nSize]
+* ICO_NEG              Stack[nSize] = - Stack[nSize-1]
+* ICO_PLUSPLUS         Stack[nSize] = Stack[nSize] + 1
+* ICO_MINUSMINUS       Stack[nSize] = Stack[nSize] - 1
+=======================        ============================================================================
+
+(Logic)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_AND              Stack[nSize-1] = Stack[nSize-1] && Stack[nSize] , POP stack[nSize]
+* ICO_OR               Stack[nSize-1] = Stack[nSize-1] || Stack[nSize] , POP stack[nSize]
+* ICO_NOT              Stack[nSize]   = ! Stack[nSize]  
+=======================        ============================================================================
+
+(Lists)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_LISTSTART                Start New List in Temp. Memory
+* ICO_LISTITEM         Add List Item
+* ICO_LISTEND          End List
+* ICO_LOADINDEXADDRESS Stack[nSize-1] = Stack[nSize-1] VV [ Stack[nSize] ] , POP stack[nSize]
+=======================        ============================================================================
+
+(Functions)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_LOADFUNC         Find function
+* ICO_CALL             Call function
+* ICO_RETURN           Return from function
+* ICO_RETNULL          Return NULl from function
+* ICO_RETFROMEVAL      Return after eval() 
+* ICO_RETITEMREF       Return the list item reference - not the value
+* ICO_NEWFUNC          Start new function
+* ICO_BLOCKFLAG                Flag to determine where to jump later (after ICO_RETURN)
+* ICO_FUNCEXE          Start executing function
+* ICO_ENDFUNCEXE       End function execution
+* ICO_ANONYMOUS                Anonymous function
+=======================        ============================================================================
+
+(User Interface)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_PRINT            Print value to the standard output
+* ICO_GIVE             Get input from the keyboard
+=======================        ============================================================================
+
+(End Program/Loop)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_BYE              End execution of VM
+* ICO_EXITMARK         Place to exit to from a loop    
+* ICO_POPEXITMARK      Remove exit mark
+* ICO_EXIT             Break from one loop or more 
+* ICO_LOOP             Continue to next loop 
+=======================        ============================================================================
+
+(For Better Performance)
+
+========================       ============================================================================
+Operation                      Description
+========================       ============================================================================
+* ICO_PUSHP                    Push pointer to the stack
+* ICO_INCP                     Increment variable value using pointer
+* ICO_PUSHPV                   Push value of variable using variable pointer
+* ICO_INCJUMP                  Increment then jump
+* ICO_INCPJUMP                 Increment using pointer then jump
+* ICO_JUMPVARLENUM             Jump if variable value is <= numeric value
+* ICO_JUMPVARPLENUM            Jump if variable value (using pointer) <= numeric value 
+* ICO_LOADFUNCP                        Push function pointer
+* ICO_PUSHPLOCAL               Push pointer to local variable
+* ICO_INCLPJUMP                        Increment value using pointer to local variable then jump
+* ICO_JUMPVARLPLENUM           Jump if the variable value (using pointer) <= numeric value
+* ICO_INCPJUMPSTEP1            Increment value using variable pointer then jump (for loop step = 1)
+* ICO_JUMPVARPLENUMSTEP1       Increment value using variable pointer then jump (for loop step = 1)
+========================       ============================================================================
+
+(Try-Catch-Done)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_TRY              Start try region
+* ICO_DONE             End try region
+=======================        ============================================================================
+
+(Duplicate and Range)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_DUPLICATE                Duplicate stack value
+* ICO_RANGE            Create list from value to value
+=======================        ============================================================================
+
+(OOP)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_NEWOBJ           Create new object, get class name from the IR, push object pointer to the stack.
+* ICO_SETSCOPE         Called after creating new object, set the active scope to be the object scope.
+* ICO_LOADSUBADDRESS   Get object attribute, push the pointer to the stack.
+* ICO_LOADMETHOD       Find object method 
+* ICO_AFTERCALLMETHOD  Used after calling a method - normal case
+* ICO_AFTERCALLMETHOD2  Used after calling a method - second case
+* ICO_NEWCLASS         Start new class region
+* ICO_BRACESTART       Open brace
+* ICO_BRACEEND         End brace
+* ICO_IMPORT           Import package
+* ICO_PRIVATE          start private attributes region
+* ICO_SETPROPERTY      set attribute value - check for setter. 
+* ICO_CALLCLASSINIT    call class init() method.
+=======================        ============================================================================
+
+(Other)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_SETREFERENCE     Copy by reference
+* ICO_KILLREFERENCE    Remove reference
+* ICO_ASSIGNMENTPOINTER Determine the left side variable
+* ICO_BEFOREEQUAL      Determine operators like += , -= , ... etc
+=======================        ============================================================================
+
+(Bitwise Operators)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_BITAND           Stack[nSize-1] = Stack[nSize-1] & Stack[nSize] , POP stack[nSize]
+* ICO_BITOR            Stack[nSize-1] = Stack[nSize-1] | Stack[nSize] , POP stack[nSize]
+* ICO_BITXOR           Stack[nSize-1] = Stack[nSize-1] ^ Stack[nSize] , POP stack[nSize]
+* ICO_BITNOT           Stack[nSize] = ! Stack[nSize] 
+* ICO_BITSHL           Stack[nSize-1] = Stack[nSize-1] << Stack[nSize] , POP stack[nSize]
+* ICO_BITSHR           Stack[nSize-1] = Stack[nSize-1] >> Stack[nSize] , POP stack[nSize]
+=======================        ============================================================================
+
+(For Step)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_STEPNUMBER       Determine step number in for loop
+* ICO_POPSTEP          POP step number from steps stack
+* ICO_LOADAFIRST       Load the first address of variable name 
+=======================        ============================================================================
+
+(Custom Global Scope)
+
+=======================        ============================================================================
+Operation                      Description
+=======================        ============================================================================
+* ICO_NEWGLOBALSCOPE   Start new custom global scope - used by 'load package' command
+* ICO_ENDGLOBALSCOPE   End of custom global scope - used by 'load package' command
+* ICO_SETGLOBALSCOPE   Set the current global scope 
+=======================        ============================================================================
+
diff --git a/docs/en/target/resources.txt b/docs/en/target/resources.txt
new file mode 100644 (file)
index 0000000..2cfd34c
--- /dev/null
@@ -0,0 +1,71 @@
+.. index:: 
+       single: Resources; Introduction
+
+=========
+Resources
+=========
+
+In this section you will find resources about the language
+
+.. index:: 
+       pair: Resources; Ring Language Website
+
+Ring Language Website 
+=====================
+
+For news about the language check the website
+
+        http://ring-lang.net
+
+        http://ring-lang.sf.net
+
+.. index:: 
+       pair: Resources; Ring Group
+
+Ring Group
+==========
+
+For questions use the Ring Group (English)
+
+       https://groups.google.com/forum/#!forum/ring-lang
+
+
+.. index:: 
+       pair: Resources; Source Code
+
+Source Code
+===========
+
+Ring is Free-Open Source (MIT License)
+
+Source Code : https://github.com/ring-lang/ring
+
+.. index:: 
+       pair: Resources; Contact the Authors
+
+.. index:: 
+       pair: Resources; Arabic Resources
+
+Arabic Resources
+================
+
+* Arabic Tutorials by Sara Hamdy
+
+URL : https://ringprogramming4arab.wordpress.com/%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%8A-2/
+
+* Arabic Tutorials by Ahmed Hassouna (YouTube) 
+
+URL : https://www.youtube.com/watch?v=6VIHMyrEilw&list=PLHIfW1KZRIfl6KzfLziFl650MmThnQ0jT
+
+* Arabic Tutorials by Alaa Mohamed (YouTube)
+
+URL : https://www.youtube.com/watch?v=uSv5rJp6snw&list=PLgc0fyJgivssosIJu4kJGk5avIjaMzYHK
+
+* Arabic Tutorials by Mahmoud Fayed (Facebook (Live) + YouTube)
+
+URL : https://github.com/ring-lang/ring/blob/master/developers/Arabic/README.md
+
+Contact the Authors
+===================
+
+Ring Team  : http://ring-lang.sourceforge.net/team.html
\ No newline at end of file
diff --git a/docs/en/target/ring15freeglut.png b/docs/en/target/ring15freeglut.png
new file mode 100644 (file)
index 0000000..75fa0d6
Binary files /dev/null and b/docs/en/target/ring15freeglut.png differ
diff --git a/docs/en/target/ring15freeglut2.png b/docs/en/target/ring15freeglut2.png
new file mode 100644 (file)
index 0000000..0a40367
Binary files /dev/null and b/docs/en/target/ring15freeglut2.png differ
diff --git a/docs/en/target/ring15opengl.png b/docs/en/target/ring15opengl.png
new file mode 100644 (file)
index 0000000..01c18c8
Binary files /dev/null and b/docs/en/target/ring15opengl.png differ
diff --git a/docs/en/target/ring15reportshot.png b/docs/en/target/ring15reportshot.png
new file mode 100644 (file)
index 0000000..b7cacf3
Binary files /dev/null and b/docs/en/target/ring15reportshot.png differ
diff --git a/docs/en/target/ringalleg_shot1.jpg b/docs/en/target/ringalleg_shot1.jpg
new file mode 100644 (file)
index 0000000..6a301ae
Binary files /dev/null and b/docs/en/target/ringalleg_shot1.jpg differ
diff --git a/docs/en/target/ringalleg_shot2.jpg b/docs/en/target/ringalleg_shot2.jpg
new file mode 100644 (file)
index 0000000..811bc31
Binary files /dev/null and b/docs/en/target/ringalleg_shot2.jpg differ
diff --git a/docs/en/target/ringalleg_shot3.jpg b/docs/en/target/ringalleg_shot3.jpg
new file mode 100644 (file)
index 0000000..6d20f06
Binary files /dev/null and b/docs/en/target/ringalleg_shot3.jpg differ
diff --git a/docs/en/target/ringalleg_shot4.jpg b/docs/en/target/ringalleg_shot4.jpg
new file mode 100644 (file)
index 0000000..9787f3c
Binary files /dev/null and b/docs/en/target/ringalleg_shot4.jpg differ
diff --git a/docs/en/target/ringalleg_shot5.jpg b/docs/en/target/ringalleg_shot5.jpg
new file mode 100644 (file)
index 0000000..cd1588d
Binary files /dev/null and b/docs/en/target/ringalleg_shot5.jpg differ
diff --git a/docs/en/target/ringalleg_shot6.jpg b/docs/en/target/ringalleg_shot6.jpg
new file mode 100644 (file)
index 0000000..cb24fa4
Binary files /dev/null and b/docs/en/target/ringalleg_shot6.jpg differ
diff --git a/docs/en/target/ringalleg_shot7.jpg b/docs/en/target/ringalleg_shot7.jpg
new file mode 100644 (file)
index 0000000..88d24a0
Binary files /dev/null and b/docs/en/target/ringalleg_shot7.jpg differ
diff --git a/docs/en/target/ringallegrofuncsdoc.txt b/docs/en/target/ringallegrofuncsdoc.txt
new file mode 100644 (file)
index 0000000..e0d1cbf
--- /dev/null
@@ -0,0 +1,636 @@
+.. index:: 
+     single: RingAllegro Functions Reference; Introduction
+
+===============================
+RingAllegro Functions Reference
+===============================
+
+* void al_exit(void)
+* void al_run_main(void)
+* int al_init(void)
+* ALLEGRO_CONFIG *al_create_config(void)
+* void al_destroy_config(ALLEGRO_CONFIG *config)
+* ALLEGRO_CONFIG *al_load_config_file(const char *filename)
+* ALLEGRO_CONFIG *al_load_config_file_f(ALLEGRO_FILE *file)
+* bool al_save_config_file(const char *filename, const ALLEGRO_CONFIG *config)
+* bool al_save_config_file_f(ALLEGRO_FILE *file, const ALLEGRO_CONFIG *config)
+* void al_add_config_section(ALLEGRO_CONFIG *config, const char *name)
+* void al_add_config_comment(ALLEGRO_CONFIG *config, const char *section, const char *comment)
+* const char *al_get_config_value(const ALLEGRO_CONFIG *config,const char *section, const char *key)
+* void al_set_config_value(ALLEGRO_CONFIG *config,const char *section, const char *key, const char *value)
+* char const *al_get_first_config_section(ALLEGRO_CONFIG const *config,ALLEGRO_CONFIG_SECTION **iterator)
+* char const *al_get_next_config_section(ALLEGRO_CONFIG_SECTION **iterator)
+* char const *al_get_first_config_entry(ALLEGRO_CONFIG const *config,char const *section, ALLEGRO_CONFIG_ENTRY **iterator)
+* char const *al_get_next_config_entry(ALLEGRO_CONFIG_ENTRY **iterator)
+* ALLEGRO_CONFIG *al_merge_config(const ALLEGRO_CONFIG *cfg1,const ALLEGRO_CONFIG *cfg2)
+* void al_merge_config_into(ALLEGRO_CONFIG *master, const ALLEGRO_CONFIG *add)
+* ALLEGRO_DISPLAY *al_create_display(int w, int h)
+* void al_destroy_display(ALLEGRO_DISPLAY *display)
+* int al_get_new_display_flags(void)
+* void al_set_new_display_flags(int flags)
+* int al_get_new_display_option(int option, int *importance)
+* void al_set_new_display_option(int option, int value, int importance)
+* void al_reset_new_display_options(void)
+* void al_get_new_window_position(int *x, int *y)
+* void al_set_new_window_position(int x, int y)
+* int al_get_new_display_refresh_rate(void)
+* void al_set_new_display_refresh_rate(int refresh_rate)
+* ALLEGRO_EVENT_SOURCE *al_get_display_event_source(ALLEGRO_DISPLAY *display)
+* ALLEGRO_BITMAP *al_get_backbuffer(ALLEGRO_DISPLAY *display)
+* void al_flip_display(void)
+* void al_update_display_region(int x, int y, int width, int height)
+* bool al_wait_for_vsync(void)
+* int al_get_display_width(ALLEGRO_DISPLAY *display)
+* int al_get_display_height(ALLEGRO_DISPLAY *display)
+* bool al_resize_display(ALLEGRO_DISPLAY *display, int width, int height)
+* bool al_acknowledge_resize(ALLEGRO_DISPLAY *display)
+* void al_get_window_position(ALLEGRO_DISPLAY *display, int *x, int *y)
+* void al_set_window_position(ALLEGRO_DISPLAY *display, int x, int y)
+* int al_get_display_flags(ALLEGRO_DISPLAY *display)
+* bool al_set_display_flag(ALLEGRO_DISPLAY *display, int flag, bool onoff)
+* int al_get_display_option(ALLEGRO_DISPLAY *display, int option)
+* int al_get_display_format(ALLEGRO_DISPLAY *display)
+* int al_get_display_refresh_rate(ALLEGRO_DISPLAY *display)
+* void al_set_window_title(ALLEGRO_DISPLAY *display, const char *title)
+* void al_set_display_icon(ALLEGRO_DISPLAY *display, ALLEGRO_BITMAP *icon)
+* void al_set_display_icons(ALLEGRO_DISPLAY *display,int num_icons, ALLEGRO_BITMAP *icons[])
+* bool al_inhibit_screensaver(bool inhibit)
+* void al_acknowledge_drawing_halt(ALLEGRO_DISPLAY *display)
+* void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY *display)
+* int al_get_display_orientation(ALLEGRO_DISPLAY* display)
+* void al_set_display_option(ALLEGRO_DISPLAY *display, int option, int value)
+* bool al_get_window_constraints(ALLEGRO_DISPLAY *display,int *min_w, int *min_h, int *max_w, int *max_h)
+* bool al_set_window_constraints(ALLEGRO_DISPLAY *display,int min_w, int min_h, int max_w, int max_h)
+* ALLEGRO_EVENT_QUEUE *al_create_event_queue(void)
+* void al_destroy_event_queue(ALLEGRO_EVENT_QUEUE *queue)
+* void al_register_event_source(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT_SOURCE *source)
+* void al_unregister_event_source(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT_SOURCE *source)
+* bool al_is_event_queue_empty(ALLEGRO_EVENT_QUEUE *queue)
+* bool al_get_next_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)
+* bool al_peek_next_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)
+* bool al_drop_next_event(ALLEGRO_EVENT_QUEUE *queue)
+* void al_flush_event_queue(ALLEGRO_EVENT_QUEUE *queue)
+* void al_wait_for_event(ALLEGRO_EVENT_QUEUE *queue, ALLEGRO_EVENT *ret_event)
+* bool al_wait_for_event_timed(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT *ret_event, float secs)
+* bool al_wait_for_event_until(ALLEGRO_EVENT_QUEUE *queue,ALLEGRO_EVENT *ret_event, ALLEGRO_TIMEOUT *timeout)
+* void al_init_user_event_source(ALLEGRO_EVENT_SOURCE *src)
+* void al_destroy_user_event_source(ALLEGRO_EVENT_SOURCE *src)
+* intptr_t al_get_event_source_data(const ALLEGRO_EVENT_SOURCE *source)
+* void al_set_event_source_data(ALLEGRO_EVENT_SOURCE *source, intptr_t data)
+* ALLEGRO_FILE *al_fopen(const char *path, const char *mode)
+* ALLEGRO_FILE *al_fopen_interface(const ALLEGRO_FILE_INTERFACE *drv,const char *path, const char *mode)
+* ALLEGRO_FILE *al_fopen_slice(ALLEGRO_FILE *fp, size_t initial_size, const char *mode)
+* void al_fclose(ALLEGRO_FILE *f)
+* size_t al_fread(ALLEGRO_FILE *f, void *ptr, size_t size)
+* size_t al_fwrite(ALLEGRO_FILE *f, const void *ptr, size_t size)
+* bool al_fflush(ALLEGRO_FILE *f)
+* int64_t al_ftell(ALLEGRO_FILE *f)
+* bool al_fseek(ALLEGRO_FILE *f, int64_t offset, int whence)
+* bool al_feof(ALLEGRO_FILE *f)
+* bool al_ferror(ALLEGRO_FILE *f)
+* void al_fclearerr(ALLEGRO_FILE *f)
+* int al_fungetc(ALLEGRO_FILE *f, int c)
+* int64_t al_fsize(ALLEGRO_FILE *f)
+* int al_fgetc(ALLEGRO_FILE *f)
+* int al_fputc(ALLEGRO_FILE *f, int c)
+* int16_t al_fread16le(ALLEGRO_FILE *f)
+* int16_t al_fread16be(ALLEGRO_FILE *f)
+* size_t al_fwrite16le(ALLEGRO_FILE *f, int16_t w)
+* size_t al_fwrite16be(ALLEGRO_FILE *f, int16_t w)
+* int32_t al_fread32le(ALLEGRO_FILE *f)
+* int32_t al_fread32be(ALLEGRO_FILE *f)
+* size_t al_fwrite32le(ALLEGRO_FILE *f, int32_t l)
+* size_t al_fwrite32be(ALLEGRO_FILE *f, int32_t l)
+* char *al_fgets(ALLEGRO_FILE *f, char * const buf, size_t max)
+* ALLEGRO_USTR *al_fget_ustr(ALLEGRO_FILE *f)
+* int al_fputs(ALLEGRO_FILE *f, char const *p)
+* ALLEGRO_FILE *al_fopen_fd(int fd, const char *mode)
+* ALLEGRO_FILE *al_make_temp_file(const char *template, ALLEGRO_PATH **ret_path)
+* void al_set_new_file_interface(const ALLEGRO_FILE_INTERFACE *file_interface
+* void al_set_standard_file_interface(void)
+* const ALLEGRO_FILE_INTERFACE *al_get_new_file_interface(void)
+* ALLEGRO_FILE *al_create_file_handle(const ALLEGRO_FILE_INTERFACE *drv,void *userdata)
+* void *al_get_file_userdata(ALLEGRO_FILE *f)
+* ALLEGRO_FS_ENTRY *al_create_fs_entry(const char *path)
+* void al_destroy_fs_entry(ALLEGRO_FS_ENTRY *fh)
+* const char *al_get_fs_entry_name(ALLEGRO_FS_ENTRY *e)
+* bool al_update_fs_entry(ALLEGRO_FS_ENTRY *e)
+* uint32_t al_get_fs_entry_mode(ALLEGRO_FS_ENTRY *e)
+* time_t al_get_fs_entry_atime(ALLEGRO_FS_ENTRY *e)
+* time_t al_get_fs_entry_ctime(ALLEGRO_FS_ENTRY *e)
+* time_t al_get_fs_entry_mtime(ALLEGRO_FS_ENTRY *e)
+* off_t al_get_fs_entry_size(ALLEGRO_FS_ENTRY *e)
+* bool al_fs_entry_exists(ALLEGRO_FS_ENTRY *e)
+* bool al_remove_fs_entry(ALLEGRO_FS_ENTRY *e)
+* bool al_filename_exists(const char *path)
+* bool al_remove_filename(const char *path)
+* bool al_open_directory(ALLEGRO_FS_ENTRY *e)
+* ALLEGRO_FS_ENTRY *al_read_directory(ALLEGRO_FS_ENTRY *e)
+* bool al_close_directory(ALLEGRO_FS_ENTRY *e)
+* char *al_get_current_directory(void)
+* bool al_change_directory(const char *path)
+* bool al_make_directory(const char *path)
+* ALLEGRO_FILE *al_open_fs_entry(ALLEGRO_FS_ENTRY *e, const char *mode)
+* void al_set_fs_interface(const ALLEGRO_FS_INTERFACE *fs_interface)
+* void al_set_standard_fs_interface(void)
+* const ALLEGRO_FS_INTERFACE *al_get_fs_interface(void)
+* al_fixed al_itofix(int x);
+* int al_fixtoi(al_fixed x);
+* int al_fixfloor(al_fixed x);
+* int al_fixceil(al_fixed x);
+* al_fixed al_ftofix(double x);
+* double al_fixtof(al_fixed x);
+* al_fixed al_fixmul(al_fixed x, al_fixed y);
+* al_fixed al_fixdiv(al_fixed x, al_fixed y);
+* al_fixed al_fixadd(al_fixed x, al_fixed y);
+* al_fixed al_fixsub(al_fixed x, al_fixed y);
+* al_fixed al_fixsin(al_fixed x);
+* al_fixed al_fixcos(al_fixed x);
+* al_fixed al_fixtan(al_fixed x);
+* al_fixed al_fixasin(al_fixed x);
+* al_fixed al_fixacos(al_fixed x);
+* al_fixed al_fixatan(al_fixed x)
+* al_fixed al_fixatan2(al_fixed y, al_fixed x)
+* al_fixed al_fixsqrt(al_fixed x)
+* al_fixed al_fixhypot(al_fixed x, al_fixed y)
+* ALLEGRO_DISPLAY_MODE *al_get_display_mode(int index, ALLEGRO_DISPLAY_MODE *mode)
+* int al_get_num_display_modes(void)
+* ALLEGRO_COLOR al_map_rgb(unsigned char r, unsigned char g, unsigned char b)
+* ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
+* ALLEGRO_COLOR al_map_rgba(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+* ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)
+* void al_unmap_rgb(ALLEGRO_COLOR color,unsigned char *r, unsigned char *g, unsigned char *b)
+* void al_unmap_rgb_f(ALLEGRO_COLOR color, float *r, float *g, float *b)
+* void al_unmap_rgba(ALLEGRO_COLOR color,unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *a)
+* void al_unmap_rgba_f(ALLEGRO_COLOR color,float *r, float *g, float *b, float *a)
+* int al_get_pixel_size(int format)
+* int al_get_pixel_format_bits(int format)
+* ALLEGRO_LOCKED_REGION *al_lock_bitmap(ALLEGRO_BITMAP *bitmap,int format, int flags)
+* ALLEGRO_LOCKED_REGION *al_lock_bitmap_region(ALLEGRO_BITMAP *bitmap,int x, int y, int width, int height, int format, int flags)
+* void al_unlock_bitmap(ALLEGRO_BITMAP *bitmap)
+* ALLEGRO_BITMAP *al_create_bitmap(int w, int h)
+* ALLEGRO_BITMAP *al_create_sub_bitmap(ALLEGRO_BITMAP *parent,int x, int y, int w, int h)
+* ALLEGRO_BITMAP *al_clone_bitmap(ALLEGRO_BITMAP *bitmap)
+* void al_destroy_bitmap(ALLEGRO_BITMAP *bitmap)
+* int al_get_new_bitmap_flags(void)
+* int al_get_new_bitmap_format(void)
+* void al_set_new_bitmap_flags(int flags)
+* void al_add_new_bitmap_flag(int flag)
+* void al_set_new_bitmap_format(int format)
+* int al_get_bitmap_flags(ALLEGRO_BITMAP *bitmap)
+* int al_get_bitmap_format(ALLEGRO_BITMAP *bitmap)
+* int al_get_bitmap_height(ALLEGRO_BITMAP *bitmap)
+* int al_get_bitmap_width(ALLEGRO_BITMAP *bitmap)
+* ALLEGRO_COLOR al_get_pixel(ALLEGRO_BITMAP *bitmap, int x, int y)
+* bool al_is_bitmap_locked(ALLEGRO_BITMAP *bitmap)
+* bool al_is_compatible_bitmap(ALLEGRO_BITMAP *bitmap)
+* bool al_is_sub_bitmap(ALLEGRO_BITMAP *bitmap)
+* ALLEGRO_BITMAP *al_get_parent_bitmap(ALLEGRO_BITMAP *bitmap)
+* void al_clear_to_color(ALLEGRO_COLOR color)
+* void al_draw_bitmap(ALLEGRO_BITMAP *bitmap, float dx, float dy, int flags)
+* void al_draw_tinted_bitmap(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR tint,float dx, float dy, int flags)
+* void al_draw_bitmap_region(ALLEGRO_BITMAP *bitmap,float sx, float sy, float sw, float sh, float dx, float dy, int flags)
+* void al_draw_tinted_bitmap_region(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float sx, float sy, float sw, float sh, float dx, float dy,int flags)
+* void al_draw_pixel(float x, float y, ALLEGRO_COLOR color)
+* void al_draw_rotated_bitmap(ALLEGRO_BITMAP *bitmap,float cx, float cy, float dx, float dy, float angle, int flags)
+* void al_draw_tinted_rotated_bitmap(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float angle, int flags)
+* void al_draw_scaled_rotated_bitmap(ALLEGRO_BITMAP *bitmap,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_tinted_scaled_rotated_bitmap(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_tinted_scaled_rotated_bitmap_region(ALLEGRO_BITMAP *bitmap,float sx, float sy, float sw, float sh,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_scaled_bitmap(ALLEGRO_BITMAP *bitmap,float sx, float sy, float sw, float sh,float dx, float dy, float dw, float dh, int flags)
+* void al_draw_tinted_scaled_bitmap(ALLEGRO_BITMAP *bitmap,ALLEGRO_COLOR tint,float sx, float sy, float sw, float sh,float dx, float dy, float dw, float dh, int flags)
+* ALLEGRO_BITMAP *al_get_target_bitmap(void)
+* void al_put_pixel(int x, int y, ALLEGRO_COLOR color)
+* void al_put_blended_pixel(int x, int y, ALLEGRO_COLOR color)
+* void al_set_target_bitmap(ALLEGRO_BITMAP *bitmap)
+* void al_set_target_backbuffer(ALLEGRO_DISPLAY *display)
+* ALLEGRO_DISPLAY *al_get_current_display(void)
+* void al_get_blender(int *op, int *src, int *dst)
+* void al_get_separate_blender(int *op, int *src, int *dst,int *alpha_op, int *alpha_src, int *alpha_dst)
+* void al_set_blender(int op, int src, int dst)
+* void al_set_separate_blender(int op, int src, int dst,int alpha_op, int alpha_src, int alpha_dst)
+* void al_get_clipping_rectangle(int *x, int *y, int *w, int *h)
+* void al_set_clipping_rectangle(int x, int y, int width, int height)
+* void al_reset_clipping_rectangle(void)
+* void al_convert_mask_to_alpha(ALLEGRO_BITMAP *bitmap, ALLEGRO_COLOR mask_color)
+* void al_hold_bitmap_drawing(bool hold)
+* bool al_is_bitmap_drawing_held(void)
+* ALLEGRO_BITMAP *al_load_bitmap_f(ALLEGRO_FILE *fp, const char *ident)
+* bool al_save_bitmap(const char *filename, ALLEGRO_BITMAP *bitmap)
+* bool al_save_bitmap_f(ALLEGRO_FILE *fp, const char *ident,ALLEGRO_BITMAP *bitmap)
+* bool al_install_joystick(void)
+* void al_uninstall_joystick(void)
+* bool al_is_joystick_installed(void)
+* bool al_reconfigure_joysticks(void)
+* int al_get_num_joysticks(void)
+* ALLEGRO_JOYSTICK * al_get_joystick(int num)
+* void al_release_joystick(ALLEGRO_JOYSTICK *joy)
+* bool al_get_joystick_active(ALLEGRO_JOYSTICK *joy)
+* const char *al_get_joystick_name(ALLEGRO_JOYSTICK *joy)
+* const char *al_get_joystick_stick_name(ALLEGRO_JOYSTICK *joy, int stick)
+* const char *al_get_joystick_axis_name(ALLEGRO_JOYSTICK *joy, int stick, int axis)
+* const char *al_get_joystick_button_name(ALLEGRO_JOYSTICK *joy, int button)
+* int al_get_joystick_stick_flags(ALLEGRO_JOYSTICK *joy, int stick)
+* int al_get_joystick_num_sticks(ALLEGRO_JOYSTICK *joy)
+* int al_get_joystick_num_axes(ALLEGRO_JOYSTICK *joy, int stick)
+* int al_get_joystick_num_buttons(ALLEGRO_JOYSTICK *joy)
+* void al_get_joystick_state(ALLEGRO_JOYSTICK *joy, ALLEGRO_JOYSTICK_STATE *ret_state)
+* ALLEGRO_EVENT_SOURCE *al_get_joystick_event_source(void)
+* bool al_install_keyboard(void)
+* bool al_is_keyboard_installed(void)
+* void al_uninstall_keyboard(void)
+* void al_get_keyboard_state(ALLEGRO_KEYBOARD_STATE *ret_state)
+* bool al_key_down(const ALLEGRO_KEYBOARD_STATE *state, int keycode)
+* const char *al_keycode_to_name(int keycode)
+* bool al_set_keyboard_leds(int leds)
+* ALLEGRO_EVENT_SOURCE *al_get_keyboard_event_source(void)
+* void *al_malloc_with_context(size_t n,int line, const char *file, const char *func)
+* void al_free_with_context(void *ptr, int line, const char *file, const char *func)
+* void *al_realloc_with_context(void *ptr, size_t n,int line, const char *file, const char *func)
+* void *al_calloc_with_context(size_t count, size_t n,int line, const char *file, const char *func)
+* void al_set_memory_interface(ALLEGRO_MEMORY_INTERFACE *memory_interface)
+* int al_get_new_display_adapter(void)
+* void al_set_new_display_adapter(int adapter)
+* bool al_get_monitor_info(int adapter, ALLEGRO_MONITOR_INFO *info)
+* int al_get_num_video_adapters(void)
+* bool al_install_mouse(void)
+* bool al_is_mouse_installed(void)
+* void al_uninstall_mouse(void)
+* unsigned int al_get_mouse_num_axes(void)
+* unsigned int al_get_mouse_num_buttons(void)
+* void al_get_mouse_state(ALLEGRO_MOUSE_STATE *ret_state)
+* int al_get_mouse_state_axis(const ALLEGRO_MOUSE_STATE *state, int axis)
+* bool al_mouse_button_down(const ALLEGRO_MOUSE_STATE *state, int button)
+* bool al_set_mouse_xy(ALLEGRO_DISPLAY *display, int x, int y)
+* bool al_set_mouse_z(int z)
+* bool al_set_mouse_w(int w)
+* bool al_set_mouse_axis(int which, int value)
+* ALLEGRO_EVENT_SOURCE *al_get_mouse_event_source(void)
+* ALLEGRO_MOUSE_CURSOR *al_create_mouse_cursor(ALLEGRO_BITMAP *bmp,int x_focus, int y_focus)
+* void al_destroy_mouse_cursor(ALLEGRO_MOUSE_CURSOR *cursor)
+* bool al_set_mouse_cursor(ALLEGRO_DISPLAY *display, ALLEGRO_MOUSE_CURSOR *cursor)
+* bool al_set_system_mouse_cursor(ALLEGRO_DISPLAY *display,ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id)
+* bool al_get_mouse_cursor_position(int *ret_x, int *ret_y)
+* bool al_hide_mouse_cursor(ALLEGRO_DISPLAY *display)
+* bool al_show_mouse_cursor(ALLEGRO_DISPLAY *display)
+* bool al_grab_mouse(ALLEGRO_DISPLAY *display)
+* bool al_ungrab_mouse(void)
+* ALLEGRO_PATH *al_create_path(const char *str)
+* ALLEGRO_PATH *al_create_path_for_directory(const char *str)
+* void al_destroy_path(ALLEGRO_PATH *path)
+* ALLEGRO_PATH *al_clone_path(const ALLEGRO_PATH *path)
+* bool al_join_paths(ALLEGRO_PATH *path, const ALLEGRO_PATH *tail)
+* bool al_rebase_path(const ALLEGRO_PATH *head, ALLEGRO_PATH *tail)
+* const char *al_get_path_drive(const ALLEGRO_PATH *path)
+* int al_get_path_num_components(const ALLEGRO_PATH *path)
+* const char *al_get_path_component(const ALLEGRO_PATH *path, int i)
+* const char *al_get_path_tail(const ALLEGRO_PATH *path)
+* const char *al_get_path_filename(const ALLEGRO_PATH *path)
+* const char *al_get_path_basename(const ALLEGRO_PATH *path)
+* const char *al_get_path_extension(const ALLEGRO_PATH *path)
+* void al_set_path_drive(ALLEGRO_PATH *path, const char *drive)
+* void al_append_path_component(ALLEGRO_PATH *path, const char *s)
+* void al_insert_path_component(ALLEGRO_PATH *path, int i, const char *s)
+* void al_replace_path_component(ALLEGRO_PATH *path, int i, const char *s)
+* void al_remove_path_component(ALLEGRO_PATH *path, int i)
+* void al_drop_path_tail(ALLEGRO_PATH *path)
+* void al_set_path_filename(ALLEGRO_PATH *path, const char *filename)
+* bool al_set_path_extension(ALLEGRO_PATH *path, char const *extension)
+* const char *al_path_cstr(const ALLEGRO_PATH *path, char delim)
+* bool al_make_path_canonical(ALLEGRO_PATH *path)
+* void al_restore_state(ALLEGRO_STATE const *state)
+* void al_store_state(ALLEGRO_STATE *state, int flags
+* int al_get_errno(void)
+* void al_set_errno(int errnum)
+* void al_uninstall_system(void)
+* bool al_is_system_installed(void)
+* uint32_t al_get_allegro_version(void)
+* ALLEGRO_PATH *al_get_standard_path(int id)
+* void al_set_exe_name(char const *path)
+* void al_set_app_name(const char *app_name)
+* void al_set_org_name(const char *org_name)
+* const char *al_get_app_name(void)
+* const char *al_get_org_name(void)
+* ALLEGRO_CONFIG *al_get_system_config(void)
+* ALLEGRO_THREAD *al_create_thread(void)
+* void al_run_detached_thread(void)
+* 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)
+* int al_wait_cond_until(ALLEGRO_COND *cond, ALLEGRO_MUTEX *mutex,const ALLEGRO_TIMEOUT *timeout)
+* void al_broadcast_cond(ALLEGRO_COND *cond)
+* void al_signal_cond(ALLEGRO_COND *cond)
+* double al_get_time(void)
+* void al_init_timeout(ALLEGRO_TIMEOUT *timeout, double seconds)
+* void al_rest(double seconds)
+* ALLEGRO_TIMER *al_create_timer(double speed_secs)
+* void al_start_timer(ALLEGRO_TIMER *timer)
+* void al_stop_timer(ALLEGRO_TIMER *timer)
+* bool al_get_timer_started(const ALLEGRO_TIMER *timer)
+* void al_destroy_timer(ALLEGRO_TIMER *timer)
+* int64_t al_get_timer_count(const ALLEGRO_TIMER *timer)
+* void al_set_timer_count(ALLEGRO_TIMER *timer, int64_t new_count)
+* void al_add_timer_count(ALLEGRO_TIMER *timer, int64_t diff)
+* double al_get_timer_speed(const ALLEGRO_TIMER *timer)
+* void al_set_timer_speed(ALLEGRO_TIMER *timer, double new_speed_secs)
+* ALLEGRO_EVENT_SOURCE *al_get_timer_event_source(ALLEGRO_TIMER *timer)
+* void al_copy_transform(ALLEGRO_TRANSFORM *dest, const ALLEGRO_TRANSFORM *src)
+* void al_use_transform(const ALLEGRO_TRANSFORM *trans)
+* const ALLEGRO_TRANSFORM *al_get_current_transform(void)
+* void al_invert_transform(ALLEGRO_TRANSFORM *trans)
+* int al_check_inverse(const ALLEGRO_TRANSFORM *trans, float tol)
+* void al_identity_transform(ALLEGRO_TRANSFORM *trans)
+* void al_build_transform(ALLEGRO_TRANSFORM *trans, float x, float y,float sx, float sy, float theta)
+* void al_translate_transform(ALLEGRO_TRANSFORM *trans, float x, float y)
+* void al_rotate_transform(ALLEGRO_TRANSFORM *trans, float theta)
+* void al_scale_transform(ALLEGRO_TRANSFORM *trans, float sx, float sy)
+* void al_transform_coordinates(const ALLEGRO_TRANSFORM *trans, float *x, float *y)
+* void al_compose_transform(ALLEGRO_TRANSFORM *trans, const ALLEGRO_TRANSFORM *other)
+* ALLEGRO_USTR *al_ustr_new(const char *s)
+* ALLEGRO_USTR *al_ustr_new_from_buffer(const char *s, size_t size)
+* void al_ustr_free(ALLEGRO_USTR *us)
+* const char *al_cstr(const ALLEGRO_USTR *us)
+* void al_ustr_to_buffer(const ALLEGRO_USTR *us, char *buffer, int size)
+* char *al_cstr_dup(const ALLEGRO_USTR *us)
+* ALLEGRO_USTR *al_ustr_dup(const ALLEGRO_USTR *us)
+* ALLEGRO_USTR *al_ustr_dup_substr(const ALLEGRO_USTR *us, int start_pos,int end_pos)
+* const ALLEGRO_USTR *al_ustr_empty_string(void)
+* const ALLEGRO_USTR *al_ref_cstr(ALLEGRO_USTR_INFO *info, const char *s)
+* const ALLEGRO_USTR *al_ref_buffer(ALLEGRO_USTR_INFO *info, const char *s, size_t size)
+* const ALLEGRO_USTR *al_ref_ustr(ALLEGRO_USTR_INFO *info, const ALLEGRO_USTR *us,int start_pos, int end_pos)
+* size_t al_ustr_size(const ALLEGRO_USTR *us)
+* size_t al_ustr_length(const ALLEGRO_USTR *us)
+* int al_ustr_offset(const ALLEGRO_USTR *us, int index)
+* bool al_ustr_next(const ALLEGRO_USTR *us, int *pos)
+* bool al_ustr_prev(const ALLEGRO_USTR *us, int *pos)
+* int32_t al_ustr_get(const ALLEGRO_USTR *ub, int pos)
+* int32_t al_ustr_get_next(const ALLEGRO_USTR *us, int *pos)
+* int32_t al_ustr_prev_get(const ALLEGRO_USTR *us, int *pos)
+* bool al_ustr_insert(ALLEGRO_USTR *us1, int pos, const ALLEGRO_USTR *us2)
+* bool al_ustr_insert_cstr(ALLEGRO_USTR *us, int pos, const char *s)
+* size_t al_ustr_insert_chr(ALLEGRO_USTR *us, int pos, int32_t c)
+* bool al_ustr_append(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_append_cstr(ALLEGRO_USTR *us, const char *s)
+* size_t al_ustr_append_chr(ALLEGRO_USTR *us, int32_t c)
+* bool al_ustr_remove_chr(ALLEGRO_USTR *us, int pos)
+* bool al_ustr_remove_range(ALLEGRO_USTR *us, int start_pos, int end_pos)
+* bool al_ustr_truncate(ALLEGRO_USTR *us, int start_pos)
+* bool al_ustr_ltrim_ws(ALLEGRO_USTR *us)
+* bool al_ustr_rtrim_ws(ALLEGRO_USTR *us)
+* bool al_ustr_trim_ws(ALLEGRO_USTR *us)
+* bool al_ustr_assign(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_assign_substr(ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2,int start_pos, int end_pos)
+* bool al_ustr_assign_cstr(ALLEGRO_USTR *us1, const char *s)
+* size_t al_ustr_set_chr(ALLEGRO_USTR *us, int start_pos, int32_t c)
+* bool al_ustr_replace_range(ALLEGRO_USTR *us1, int start_pos1, int end_pos1,const ALLEGRO_USTR *us2)
+* int al_ustr_find_chr(const ALLEGRO_USTR *us, int start_pos, int32_t c)
+* int al_ustr_rfind_chr(const ALLEGRO_USTR *us, int end_pos, int32_t c)
+* int al_ustr_find_set(const ALLEGRO_USTR *us, int start_pos,const ALLEGRO_USTR *accept)
+* int al_ustr_find_set_cstr(const ALLEGRO_USTR *us, int start_pos,const char *accept)
+* int al_ustr_find_cset(const ALLEGRO_USTR *us, int start_pos,const ALLEGRO_USTR *reject)
+* int al_ustr_find_cset_cstr(const ALLEGRO_USTR *us, int start_pos,const char *reject)
+* int al_ustr_find_str(const ALLEGRO_USTR *haystack, int start_pos,const ALLEGRO_USTR *needle)
+* int al_ustr_find_cstr(const ALLEGRO_USTR *haystack, int start_pos,const char *needle)
+* int al_ustr_rfind_str(const ALLEGRO_USTR *haystack, int end_pos,const ALLEGRO_USTR *needle)
+* int al_ustr_rfind_cstr(const ALLEGRO_USTR *haystack, int end_pos,const char *needle)
+* bool al_ustr_find_replace(ALLEGRO_USTR *us, int start_pos,const ALLEGRO_USTR *find, const ALLEGRO_USTR *replace)
+* bool al_ustr_find_replace_cstr(ALLEGRO_USTR *us, int start_pos,const char *find, const char *replace)
+* int al_ustr_compare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* int al_ustr_ncompare(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2, int n)
+* bool al_ustr_equal(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_has_prefix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_has_prefix_cstr(const ALLEGRO_USTR *us1, const char *s2)
+* bool al_ustr_has_suffix(const ALLEGRO_USTR *us1, const ALLEGRO_USTR *us2)
+* bool al_ustr_has_suffix_cstr(const ALLEGRO_USTR *us1, const char *s2)
+* ALLEGRO_USTR *al_ustr_new_from_utf16(uint16_t const *s)
+* size_t al_ustr_size_utf16(const ALLEGRO_USTR *us)
+* size_t al_ustr_encode_utf16(const ALLEGRO_USTR *us, uint16_t *s,size_t n)
+* size_t al_utf8_width(int c)
+* size_t al_utf8_encode(char s[], int32_t c)
+* size_t al_utf16_width(int c)
+* LPDIRECT3DDEVICE9 al_get_d3d_device(ALLEGRO_DISPLAY *display)
+* LPDIRECT3DTEXTURE9 al_get_d3d_system_texture(ALLEGRO_BITMAP *bitmap)
+* LPDIRECT3DTEXTURE9 al_get_d3d_video_texture(ALLEGRO_BITMAP *bitmap)
+* bool al_have_d3d_non_pow2_texture_support(void)
+* bool al_have_d3d_non_square_texture_support(void)
+* void al_get_d3d_texture_position(ALLEGRO_BITMAP *bitmap, int *u, int *v)
+* bool al_is_d3d_device_lost(ALLEGRO_DISPLAY *display)
+* ALLEGRO_OGL_EXT_LIST *al_get_opengl_extension_list(void)
+* void *al_get_opengl_proc_address(const char *name)
+* GLuint al_get_opengl_texture(ALLEGRO_BITMAP *bitmap)
+* void al_get_opengl_texture_size(ALLEGRO_BITMAP *bitmap, int *w, int *h)
+* void al_get_opengl_texture_position(ALLEGRO_BITMAP *bitmap, int *u, int *v)
+* GLuint al_get_opengl_fbo(ALLEGRO_BITMAP *bitmap)
+* void al_remove_opengl_fbo(ALLEGRO_BITMAP *bitmap)
+* bool al_have_opengl_extension(const char *extension);
+* uint32_t al_get_opengl_version(void)
+* int al_get_opengl_variant(void)
+* void al_set_current_opengl_context(ALLEGRO_DISPLAY *display)
+* bool al_install_audio(void)
+* void al_uninstall_audio(void)
+* bool al_is_audio_installed(void)
+* bool al_reserve_samples(int reserve_samples)
+* uint32_t al_get_allegro_audio_version(void)
+* size_t al_get_audio_depth_size(ALLEGRO_AUDIO_DEPTH depth)
+* size_t al_get_channel_count(ALLEGRO_CHANNEL_CONF conf)
+* ALLEGRO_VOICE *al_create_voice(unsigned int freq,ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
+* void al_destroy_voice(ALLEGRO_VOICE *voice)
+* void al_detach_voice(ALLEGRO_VOICE *voice)
+* bool al_attach_audio_stream_to_voice(ALLEGRO_AUDIO_STREAM *stream,ALLEGRO_VOICE *voice)
+* bool al_attach_mixer_to_voice(ALLEGRO_MIXER *mixer, ALLEGRO_VOICE *voice)
+* bool al_attach_sample_instance_to_voice(ALLEGRO_SAMPLE_INSTANCE *spl,ALLEGRO_VOICE *voice)
+* unsigned int al_get_voice_frequency(const ALLEGRO_VOICE *voice)
+* ALLEGRO_CHANNEL_CONF al_get_voice_channels(const ALLEGRO_VOICE *voice)
+* ALLEGRO_AUDIO_DEPTH al_get_voice_depth(const ALLEGRO_VOICE *voice)
+* bool al_get_voice_playing(const ALLEGRO_VOICE *voice)
+* bool al_set_voice_playing(ALLEGRO_VOICE *voice, bool val)
+* unsigned int al_get_voice_position(const ALLEGRO_VOICE *voice)
+* bool al_set_voice_position(ALLEGRO_VOICE *voice, unsigned int val)
+* ALLEGRO_SAMPLE *al_create_sample(void *buf, unsigned int samples,unsigned int freq, ALLEGRO_AUDIO_DEPTH depth,ALLEGRO_CHANNEL_CONF chan_conf, bool free_buf)
+* void al_destroy_sample(ALLEGRO_SAMPLE *spl)
+* bool al_play_sample(ALLEGRO_SAMPLE *spl, float gain, float pan, float speed,int loop, ALLEGRO_SAMPLE_ID *ret_id)
+* void al_stop_sample(ALLEGRO_SAMPLE_ID *spl_id)
+* void al_stop_samples(void)
+* ALLEGRO_CHANNEL_CONF al_get_sample_channels(const ALLEGRO_SAMPLE *spl)
+* ALLEGRO_AUDIO_DEPTH al_get_sample_depth(const ALLEGRO_SAMPLE *spl)
+* unsigned int al_get_sample_frequency(const ALLEGRO_SAMPLE *spl)
+* unsigned int al_get_sample_length(const ALLEGRO_SAMPLE *spl)
+* void *al_get_sample_data(const ALLEGRO_SAMPLE *spl)
+* ALLEGRO_SAMPLE_INSTANCE *al_create_sample_instance(ALLEGRO_SAMPLE *sample_data)
+* void al_destroy_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_play_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_stop_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_CHANNEL_CONF al_get_sample_instance_channels(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_AUDIO_DEPTH al_get_sample_instance_depth(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* unsigned int al_get_sample_instance_frequency(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* unsigned int al_get_sample_instance_length(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_length(ALLEGRO_SAMPLE_INSTANCE *spl,unsigned int val)
+* unsigned int al_get_sample_instance_position(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_position(ALLEGRO_SAMPLE_INSTANCE *spl,unsigned int val)
+* float al_get_sample_instance_speed(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_speed(ALLEGRO_SAMPLE_INSTANCE *spl, float val)
+* float al_get_sample_instance_gain(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_gain(ALLEGRO_SAMPLE_INSTANCE *spl, float val)
+* float al_get_sample_instance_pan(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_pan(ALLEGRO_SAMPLE_INSTANCE *spl, float val)
+* float al_get_sample_instance_time(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_PLAYMODE al_get_sample_instance_playmode(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_playmode(ALLEGRO_SAMPLE_INSTANCE *spl,ALLEGRO_PLAYMODE val)
+* bool al_get_sample_instance_playing(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample_instance_playing(ALLEGRO_SAMPLE_INSTANCE *spl, bool val)
+* bool al_get_sample_instance_attached(const ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_detach_sample_instance(ALLEGRO_SAMPLE_INSTANCE *spl)
+* ALLEGRO_SAMPLE *al_get_sample(ALLEGRO_SAMPLE_INSTANCE *spl)
+* bool al_set_sample(ALLEGRO_SAMPLE_INSTANCE *spl, ALLEGRO_SAMPLE *data)
+* ALLEGRO_MIXER *al_create_mixer(unsigned int freq,ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
+* void al_destroy_mixer(ALLEGRO_MIXER *mixer)
+* ALLEGRO_MIXER *al_get_default_mixer(void)
+* bool al_set_default_mixer(ALLEGRO_MIXER *mixer)
+* bool al_restore_default_mixer(void)
+* bool al_attach_mixer_to_mixer(ALLEGRO_MIXER *stream, ALLEGRO_MIXER *mixer)
+* bool al_attach_sample_instance_to_mixer(ALLEGRO_SAMPLE_INSTANCE *spl,ALLEGRO_MIXER *mixer)
+* bool al_attach_audio_stream_to_mixer(ALLEGRO_AUDIO_STREAM *stream, ALLEGRO_MIXER *mixer)
+* unsigned int al_get_mixer_frequency(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_frequency(ALLEGRO_MIXER *mixer, unsigned int val)
+* ALLEGRO_CHANNEL_CONF al_get_mixer_channels(const ALLEGRO_MIXER *mixer)
+* ALLEGRO_AUDIO_DEPTH al_get_mixer_depth(const ALLEGRO_MIXER *mixer)
+* float al_get_mixer_gain(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_gain(ALLEGRO_MIXER *mixer, float new_gain)
+* ALLEGRO_MIXER_QUALITY al_get_mixer_quality(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_quality(ALLEGRO_MIXER *mixer, ALLEGRO_MIXER_QUALITY new_quality)
+* bool al_get_mixer_playing(const ALLEGRO_MIXER *mixer)
+* bool al_set_mixer_playing(ALLEGRO_MIXER *mixer, bool val)
+* bool al_get_mixer_attached(const ALLEGRO_MIXER *mixer)
+* bool al_detach_mixer(ALLEGRO_MIXER *mixer)
+* void al_destroy_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* ALLEGRO_EVENT_SOURCE *al_get_audio_stream_event_source(ALLEGRO_AUDIO_STREAM *stream)
+* void al_drain_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* bool al_rewind_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* unsigned int al_get_audio_stream_frequency(const ALLEGRO_AUDIO_STREAM *stream)
+* ALLEGRO_CHANNEL_CONF al_get_audio_stream_channels(const ALLEGRO_AUDIO_STREAM *stream)
+* ALLEGRO_AUDIO_DEPTH al_get_audio_stream_depth(const ALLEGRO_AUDIO_STREAM *stream)
+* unsigned int al_get_audio_stream_length(const ALLEGRO_AUDIO_STREAM *stream)
+* float al_get_audio_stream_speed(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_speed(ALLEGRO_AUDIO_STREAM *stream, float val)
+* float al_get_audio_stream_gain(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_gain(ALLEGRO_AUDIO_STREAM *stream, float val)
+* float al_get_audio_stream_pan(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_pan(ALLEGRO_AUDIO_STREAM *stream, float val)
+* bool al_get_audio_stream_playing(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_playing(ALLEGRO_AUDIO_STREAM *stream, bool val)
+* ALLEGRO_PLAYMODE al_get_audio_stream_playmode(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_playmode(ALLEGRO_AUDIO_STREAM *stream,ALLEGRO_PLAYMODE val)
+* bool al_get_audio_stream_attached(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_detach_audio_stream(ALLEGRO_AUDIO_STREAM *stream)
+* void *al_get_audio_stream_fragment(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_fragment(ALLEGRO_AUDIO_STREAM *stream, void *val)
+* unsigned int al_get_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM *stream)
+* unsigned int al_get_available_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM *stream)
+* bool al_seek_audio_stream_secs(ALLEGRO_AUDIO_STREAM *stream, double time)
+* double al_get_audio_stream_position_secs(ALLEGRO_AUDIO_STREAM *stream)
+* double al_get_audio_stream_length_secs(ALLEGRO_AUDIO_STREAM *stream)
+* bool al_set_audio_stream_loop_secs(ALLEGRO_AUDIO_STREAM *stream,double start, double end)
+* ALLEGRO_SAMPLE *al_load_sample(const char *filename)
+* ALLEGRO_SAMPLE *al_load_sample_f(ALLEGRO_FILE* fp, const char *ident)
+* ALLEGRO_AUDIO_STREAM *al_load_audio_stream(const char *filename,size_t buffer_count, unsigned int samples)
+* ALLEGRO_AUDIO_STREAM *al_load_audio_stream_f(ALLEGRO_FILE* fp, const char *ident,size_t buffer_count, unsigned int samples)
+* bool al_save_sample(const char *filename, ALLEGRO_SAMPLE *spl)
+* bool al_save_sample_f(ALLEGRO_FILE *fp, const char *ident, ALLEGRO_SAMPLE *spl)
+* bool al_init_acodec_addon(void)
+* uint32_t al_get_allegro_acodec_version(void)
+* ALLEGRO_COLOR al_color_cmyk(float c, float m, float y, float k)
+* void al_color_cmyk_to_rgb(float cyan, float magenta, float yellow,float key, float *red, float *green, float *blue)
+* ALLEGRO_COLOR al_color_hsl(float h, float s, float l)
+* void al_color_hsl_to_rgb(float hue, float saturation, float lightness,float *red, float *green, float *blue)
+* ALLEGRO_COLOR al_color_hsv(float h, float s, float v)
+* void al_color_hsv_to_rgb(float hue, float saturation, float value,float *red, float *green, float *blue)
+* ALLEGRO_COLOR al_color_html(char const *string)
+* void al_color_html_to_rgb(char const *string,float *red, float *green, float *blue)
+* void al_color_rgb_to_html(float red, float green, float blue,char *string)
+* ALLEGRO_COLOR al_color_name(char const *name)
+* bool al_color_name_to_rgb(char const *name, float *r, float *g, float *b)
+* void al_color_rgb_to_cmyk(float red, float green, float blue,float *cyan, float *magenta, float *yellow, float *key)
+* void al_color_rgb_to_hsl(float red, float green, float blue,float *hue, float *saturation, float *lightness)
+* void al_color_rgb_to_hsv(float red, float green, float blue,float *hue, float *saturation, float *value)
+* char const *al_color_rgb_to_name(float r, float g, float b)
+* void al_color_rgb_to_yuv(float red, float green, float blue,float *y, float *u, float *v)
+* ALLEGRO_COLOR al_color_yuv(float y, float u, float v)
+* void al_color_yuv_to_rgb(float y, float u, float v,float *red, float *green, float *blue)
+* uint32_t al_get_allegro_color_version(void)
+* void al_init_font_addon(void)
+* void al_shutdown_font_addon(void)
+* ALLEGRO_FONT *al_load_font(char const *filename, int size, int flags)
+* void al_destroy_font(ALLEGRO_FONT *f)
+* int al_get_font_ascent(const ALLEGRO_FONT *f)
+* int al_get_font_descent(const ALLEGRO_FONT *f)
+* int al_get_text_width(const ALLEGRO_FONT *f, const char *str)
+* int al_get_ustr_width(const ALLEGRO_FONT *f, ALLEGRO_USTR const *ustr)
+* void al_draw_text(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x, float y, int flags,char const *text)
+* void al_draw_ustr(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x, float y, int flags,const ALLEGRO_USTR *ustr)
+* void al_draw_justified_text(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x1, float x2,float y, float diff, int flags, const char *text)
+* void al_draw_justified_ustr(const ALLEGRO_FONT *font,ALLEGRO_COLOR color, float x1, float x2,float y, float diff, int flags, const ALLEGRO_USTR *ustr)
+* void al_get_text_dimensions(const ALLEGRO_FONT *f,char const *text,int *bbx, int *bby, int *bbw, int *bbh)
+* void al_get_ustr_dimensions(const ALLEGRO_FONT *f,ALLEGRO_USTR const *ustr,int *bbx, int *bby, int *bbw, int *bbh)
+* uint32_t al_get_allegro_font_version(void)
+* ALLEGRO_FONT *al_grab_font_from_bitmap(ALLEGRO_BITMAP *bmp,int ranges_n, const int ranges[])
+* ALLEGRO_FONT *al_load_bitmap_font(const char *fname)
+* ALLEGRO_FONT *al_create_builtin_font(void)
+* bool al_init_ttf_addon(void)
+* void al_shutdown_ttf_addon(void)
+* ALLEGRO_FONT *al_load_ttf_font(char const *filename, int size, int flags)
+* ALLEGRO_FONT *al_load_ttf_font_f(ALLEGRO_FILE *file,char const *filename, int size, int flags)
+* ALLEGRO_FONT *al_load_ttf_font_stretch(char const *filename, int w, int h,int flags)
+* ALLEGRO_FONT *al_load_ttf_font_stretch_f(ALLEGRO_FILE *file,char const *filename, int w, int h, int flags)
+* uint32_t al_get_allegro_ttf_version(void)
+* bool al_init_image_addon(void)
+* void al_shutdown_image_addon(void)
+* uint32_t al_get_allegro_image_version(void)
+* ALLEGRO_FILE *al_open_memfile(void *mem, int64_t size, const char *mode)
+* uint32_t al_get_allegro_memfile_version(void)
+* bool al_init_native_dialog_addon(void)
+* void al_shutdown_native_dialog_addon(void)
+* ALLEGRO_FILECHOOSER *al_create_native_file_dialog(char const *initial_path,char const *title,char const *patterns,int mode)
+* bool al_show_native_file_dialog(ALLEGRO_DISPLAY *display,ALLEGRO_FILECHOOSER *dialog)
+* int al_get_native_file_dialog_count(const ALLEGRO_FILECHOOSER *dialog)
+* const char *al_get_native_file_dialog_path(const ALLEGRO_FILECHOOSER *dialog, size_t i)
+* void al_destroy_native_file_dialog(ALLEGRO_FILECHOOSER *dialog)
+* int al_show_native_message_box(ALLEGRO_DISPLAY *display,char const *title, char const *heading, char const *text,char const *buttons, int flags)
+* ALLEGRO_TEXTLOG *al_open_native_text_log(char const *title, int flags)
+* void al_close_native_text_log(ALLEGRO_TEXTLOG *textlog)
+* uint32_t al_get_allegro_native_dialog_version(void)
+* void al_set_physfs_file_interface(void)
+* uint32_t al_get_allegro_physfs_version(void)
+* uint32_t al_get_allegro_primitives_version(void)
+* bool al_init_primitives_addon(void)
+* void al_shutdown_primitives_addon(void)
+* void al_draw_line(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color, float thickness)
+* void al_draw_triangle(float x1, float y1, float x2, float y2,float x3, float y3, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_triangle(float x1, float y1, float x2, float y2,float x3, float y3, ALLEGRO_COLOR color)
+* void al_draw_rectangle(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_rectangle(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color)
+* void al_draw_rounded_rectangle(float x1, float y1, float x2, float y2,float rx, float ry, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_rounded_rectangle(float x1, float y1, float x2, float y2,float rx, float ry, ALLEGRO_COLOR color)
+* void al_calculate_arc(float* dest, int stride, float cx, float cy,float rx, float ry, float start_theta, float delta_theta, float thickness,int num_points)
+* void al_draw_pieslice(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_pieslice(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color)
+* void al_draw_ellipse(float cx, float cy, float rx, float ry,ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_ellipse(float cx, float cy, float rx, float ry,ALLEGRO_COLOR color)
+* void al_draw_circle(float cx, float cy, float r, ALLEGRO_COLOR color,float thickness)
+* void al_draw_filled_circle(float cx, float cy, float r, ALLEGRO_COLOR color)
+* void al_draw_arc(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_elliptical_arc(float cx, float cy, float rx, float ry, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_ribbon(const float *points, int points_stride, ALLEGRO_COLOR color,float thickness, int num_segments)
+* int al_draw_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,ALLEGRO_BITMAP* texture, int start, int end, int type)
+* int al_draw_indexed_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,ALLEGRO_BITMAP* texture, const int* indices, int num_vtx, int type)
+* ALLEGRO_VERTEX_DECL* al_create_vertex_decl(const ALLEGRO_VERTEX_ELEMENT* elements, int stride)
+* void al_destroy_vertex_decl(ALLEGRO_VERTEX_DECL* decl)
diff --git a/docs/en/target/ringapps.txt b/docs/en/target/ringapps.txt
new file mode 100644 (file)
index 0000000..34c1aec
--- /dev/null
@@ -0,0 +1,590 @@
+.. index:: 
+       single: Applications developed in little hours; Introduction
+
+=================================================
+Applications developed in little hours
+=================================================
+
+Ring is a new programming language that focuses on the Natural Language Programming and Declarative Programming paradigms 
+and will let you think different about programming and how to solve your problems in a better way. It's just released in 2016.01.25!  
+In little days we got thousands of downloads and many developers started learning and 
+using the language. Their feedback are the secret behind the language progress and success. 
+They said that Ring is powerful, beautiful and easy to learn, Some of them provided good examples about what can be done using Ring in little hours. 
+They are very happy with the language productivity.
+
+.. index:: 
+       pair: Applications developed in little hours; Quotes about Ring
+
+Quotes about Ring
+=================
+
+"I like Smalltalk very much but now I like Ring better!"
+       , Gal Zsolt (Hungary)
+
+"I find the language and its syntax very natural and easy to follow."
+       , Bhudda (United States)
+
+"Very nice approach for a new language."
+       , Matth Moestl (Austria)
+
+"Very interesting! I will keep an eye on it.!"
+       , Eslipak (Argentina)
+
+"I'd like to see some benchmarks. Otherwise, at first glance, it looks really promising."
+       , Alex Deva (Sweden)
+
+"Excellent"
+       , Liju Sankar (United States)
+
+"I wish you the best with this project."
+       , David O'Neil (United States)
+
+"Just fantastic."
+       , Jose Antonio (Mexico)
+
+"This looks like it was developed by some very competent people."
+       , Jim Clack (United States)
+
+"The Ring programming language seems pretty interesting so far."
+       , Eric Johnson (United States)
+
+"Thank you for this awesome language and wonderful ready to use Qt binding."
+       , Martial FAESSEL
+
+"I think it's great what he does for the community of developers and novice programming."
+       , Marino Esteban 
+
+"Ring is just awesome. The language is so cool and fluent. I am sure it's going to be BIG."
+       , Ahmed Zain
+
+"What a proud, really wish you Eng. Mahmoud Samir and Your Team  moving forward  ^_^
+ and from now , considered me a big  fan of the Ring programming language."
+       , Zainab Mahmoud
+
+"Well guys I love this language and it appears that you have created perfect language."
+       , Moemen Ghulmi
+
+"Good work Mahmoud, I've installed ring pl, and it's very perfect language."
+       , Ahmed Omar (Egypt)
+
+"Thanks for this great startup programming language. I wish you best of luck."
+       , Elkhouaja Khalid
+
+"Congratulations! I am very happy and I wish you Success and good luck."
+       , Abobasmla Hassan
+
+"Good Features of multi-use language on the Web, Mobile and Desktop."
+       , Abdelrhman Haider
+
+"Very interesting effort."
+       , Giannakakis Kostas (Greece)
+
+"I am too lazy to open comment window and write message.
+But in your case I must say "Perfect"
+Really, create new remarkable language like your Ring is
+really perfect job. Even create editor for your language
+in your language with only few rows...
+Even noticed in rosettacode.org !
+
+I read your previous articles and I tried these examples
+a few days ago and I will continue. I love Ring.
+
+P.S.: Anders Hejlsberg, Niklaus Wirth, Bjarne Stroustrup, Ada Lovelace
+Hall of fame is waiting...."
+       , Martin Nedopil (Czech Republic )
+
+"Ring seems very attractive to me through its very easy design and the Qt bindings. 
+I like its declarative approach and the generous documentation."
+       , Shalok Shalom (Austria)
+
+"Ring (and plenty of extension library + Qt) is wonderful."
+       , Kovacs Attila (Hungary)
+
+"Since two days I'm trying Ring and I'm really impressed, in add to power
+commands and easy use, it's really very efficient and very fast.
+
+Each day I hope to find the couple of the year PWCT+RING ... Maybe for my
+Christmas gift!!!!  HO HO HO HO
+
+Continue your fantastic job and congratulations."
+       , Jose Le Roux (France)
+
+"There are 3 different styles, it looks like Python and C"
+       , 64remy
+
+"I was taking a tour around Rosettacode and have found Ring. 
+I like the syntax a lot. It's clean and easy to understand.
+It looks like a very clean BASIC dialect without sigils.
+I can say that this is the easiest and the most BASIC-like language I've ever tried."
+       , Tomaaz 
+
+"Thanks for your effort. I took a quick look and found it interesting. 
+ You are trying to follow more or less like Clipper with simple command and no rigid declaration rules. Good."
+       , Anand Gupta 
+
+"Thanks for this wonderful language"
+       , Vinod kc (India)
+
+"Very enlightening. good job!"
+       , Southmountain (United States)
+
+"The thing I liked was the loop exiting"
+       , Leon de boer (Australia)
+
+"An outstanding and easy language to program with."
+       , Kenneth Burgo (Philippines)
+
+"I chose your language as I feel I can understand it better than other languages"
+       , Harry Singh
+
+"I like the totality of the language, far more features than expected and the freedom of expressiveness is unique."
+       , Evikone
+
+"Thank you very much Mahmoud! I am using ring for many experiments and so far I love it.  
+ I really want to continue using ring and contribute what I can."
+       , John (SienSystem)
+
+"Sir, Very Good"
+       , Kamlesh Patel
+
+"That's more than a "cool" syntax, the example of writing free-form text between
+ curly-brackets such that each word calls a function. Which could be interesting 
+ (A syntax like that would be nice for declaring text styles)"
+       , LaurieCheers
+
+"If you browse around you see they have listed 160 contributors. 
+ This year they have entered Top 100 in the TIOBE index. Lot of effort 
+ seem to have been made to make this language pop out and
+ catch the attention of masses."
+       , Htuhola
+
+"I like the idea of The Ring being in ANSI C
+ it's an impressive creation, and a lot of skill went into it"
+       , Garry Taylor
+
+"Very innovative language! Syntactically clean"
+       , CodeProject Member
+
+"The author must be commended for the readily-obvious hard work and effort that has gone into creating a rich ecosystem for his language.
+It seems that the language is quite extensive as well. I would find it useful to see a BNF grammar and concise coverage of its semantics."
+       , Xx-Leninist-1917-Xx (Reddit)
+
+"I can see the AI of the future using this technology to solve computational problems for..... the humans."
+       , Cryptonite (United States)
+
+"I like your programming language, I like you are going to develop mobile app using RingQt and also 
+I appreciate your web library."
+       , Domenico D'Oria (Italy)       
+
+"Congratulations for the great work with this new programming language."
+       , Kenny Silva (Venezuela)
+
+"Ring is an amazingly full-featured language and so well documented (the bane of most newer languages out there!)"
+       , Alex McCullie
+
+" I found the language yesterday, and liked the Qt bindings, as they give a declarative way to create a QtWidgets GUI."
+       , Cochise Cesar
+
+"Ring does look intriguing, and I'll be reading more of the documentation soon"
+       , Jamie Cooper
+
+"I was recently considering designing my own dynamically-typed, prototypical language and then developing a means to compile it into C/C++. However, last night I was surfing the web and noticed a little-known language called "Ring" which you've recently created. I began reading the Motivation section in Wikibooks to see why the language was designed and implemented, and I was shocked to see that someone else had created a language with the same intention and need as myself. I mean, it's mind-blowing that someone would have addressed every issue I have with the currently accepted languages. Why bother with C/C++ when the syntax can be cryptic and they are largely antiquated - why should we still be dealing with header files, etc? Moreover, your comments on Java and C# being too verbose and forcing OOP onto the user is spot on as well - yet these languages are still primarily used by millions of programmers for the most mundane tasks. At this point, I'm led to believe that it's simply a matter of legacy applications that still haven't made the transition, as well as the ever-popular "Appeal to Popularity" fallacy shared by many in academia and enterprise. Then we come to languages, that are easier and much more modern, and yet even now, are being to show their age. Languages like Python which stresses whitespace and indentation, as well as (just like the formerly mentioned languages) irrelevant tokens for the conditional statements. Granted, it's not as bad as tracking down various curly braces or semi-colons, but one misstep in indentation might as well be as frustrating to track down. The same could be true of Ruby, except with Ruby, we have even odder conventions embedded into the design of the language, which I don't feel the need to address and moreover, we're left with something like Lua which is missing a great many features that the previously mentioned languages include. There are many more languages and faults with them, we could claim that PHP is nothing more than a glue for web pages and backends but with so many frameworks available now, it's falling by the wayside fast. Javascript is constantly being cloned. So, each of these general purpose languages, which we all know are mostly domain-specific and in some cases, also oriented at certain OS(C# was before 2016 and Obj-C/Swift will likely always be primarily for MacOS apps). So, then we're left with several additional options, involving everything from hybrids to other imperative-based languages like D, GoLang, Scala, Julia, etc. But finally, there's a new language called Ring - and yes, it may just end up ruling them all. It's the unicorn we've finally been waiting to arrive, that can handle multiple domains, tasks, and paradigms. I honestly can't wait to jump in and when I do I probably won't come back up anytime soon. My only apprehension is that the language may not include a library or primitive functions for math as Python and Julia do. Aside from that, if so, hopefully, I won't be having to use linear expressions as arrays (considering how intellectually lazy it is to do) and that there will be more support/tools as the community continues to grow. It's crazy to think it's only been around for a year and yet, it's already, practically a batteries-included language."
+
+       , Gedalya (YouTube)
+
+"Thank you Mr. Mahmoud for all the wonderful work, whenever I dive in the Source code I see the great effort, further development more excellence, God will reward you with what you wish"
+
+       , Azzedine Ramal
+
+"What a great joy to find this surprisingly genius language !!!. It was a total joy to go through the documentation and look at the samples in Rosetta code.
+Marvelous work. I would even leave my fortune to the development of this language. Keep the good work going and wishing this language will go viral.
+
+ps: Thanks for keeping array index to start with 1. It means a lot."
+
+       , Nehemiah Jacob (Sydney, Australia)
+
+"I find it very interesting. Especially the fact that it is cross platform makes it something to keep an eye on."
+
+       , Boudewijn Lutgerink 
+
+"The language I like the most. Efficient, simple, easy, flexible and wonderful language."
+       , Roshan Ali
+
+"I like variety. The richer the toolbox, the more appropriate the tool."
+       , Jonathan Day (Quora)
+
+"I greatly appreciated your work and congratulations on what has been achieved."
+       , Umberto Meglio (Italy)
+
+"Thanks a lot I just found Ring two days ago and I decided to learn it, it is amazing, the samples are helping a lot."
+       , Zaraki Ken
+
+"Extraordinary. well done sir"
+       , RugbyLeague (CodeProject Member - United Kingdom)
+
+"The Ring language is pleasant. You get ahead very quickly."
+       , Neskuk (CodeProject Member - Switzerland)
+
+"I'm happy to use your language."
+       , Akhil Reddy
+
+"I am enjoying using the Ring Programming language."
+       , Gabriel Wendt
+
+"I'm loving this language!"
+       , Pablo Prieto
+
+"Ring Notepad is a an example of the power of Ring.
+It is like NotePad++ with built in form design capability, drag and drop, object attributes etc.
+It is a marvelous application"
+       ,  Bert Mariani (Italy)
+
+"Ring is the language that offers the greatest potential for converting programmers frustrated with the amount of time it takes to develop apps in C/C++, C#  and other OOP-based languages.
+Considering the extent to which Ring has evolved since the first release in 2016, the Ring team has proven itself worthy of a very high achievement award in the world of programming languages.
+The extent to which Ring has simplified the development database apps, web apps and GUI apps is a great credit to the Ring team.
+Ring's implementation of OOP and GUI based apps is far superior to C++ and C#. 
+Another major achievement of the Ring team is the ease at which programmers can get on-line access to Ring documentation, compared to on-line C++ and C# documentation.
+The Ring Game Engine is truly elegant and it's designer (s)  deserve lots of credit for such an impressive bit of software."
+       , L Godioleskky
+
+"Strongly speaking, it is a strong and new game programming language."
+       , isVowel (Japan)
+
+"The language seems to have some interesting features, specially the use of braces to access object fields and methods."
+       , Nuaua (Reddit)
+
+"The code that implements the Ring VM actually looks quite nice. There is a bunch of test code -- great!"
+       , Peterfirefly (Reddit)
+
+"Ring seems promising. It first appeared in 2016 although it's concept is older. It is meant to be portable and can be embedded in C/C++ projects"
+       , Wim ten Brink (Quora - Top Writer (2018))
+
+"Interesting alternative to Lua."
+       , djxtc (Sourceforge)
+
+"Ring is a serious thing in the programming language landscape. One should understand its foundation before she can shape an opinion worth considering. There are several innovations out-there with a clear commitment from its designer to simplicity, flexibility and learn-ability.
+Natural language as its imagined by Ring opens a window for an unlimited set of applications otherwise impossible to think about. One can built an interactive chatbot based on a rich domain specific language in a matter of hours not months.
+Combined with a smart yet effective implementation of a declarative programming paradigm, Ring empowers the creation of any kind of programming language on top of it, with any set of syntax. Even the language keywords can be overwritten to serve one's own keywords in any human language not only English.
+Ring is a disruption, a big intellectual step forward but also a beautiful reincarnation of several legacy ideas and best practices from other old languages like Basic, Lisp and others. Those ideas are a humanity heritage that new visionaries like Mahmoud S. Fayed, the Ring designer, but also Rick Hickey, the Clojure designer, are trying to callback in todays world of complex programmability.
+An other dimension of Ring, which formed one of its basic motivations, relates to visual programming. Software is a fluid and evolutionary creature and textual code is not accessible to the most of common humans. The promise of visual programming is to empower people, enhance understandability and invite business users to the arena of software development more intuitively. Ring was made by design with an objective of having a programming language capable of better supporting the visual paradigm.
+Gamification is a first-class citizen in the language. This is a tremendous advantage compared to other general-purpose programming languages. Ring supports a large number of gaming libraries and open a large window of capabilities to use, not only in gaming but also in business and education applications.
+The best way to assessing the power of Ring is to looking into it and reflecting about the number of problems it is capable to solve."
+       , Mansour Ayouni (Tunisia)
+
+"I have only known ring-lang for few weeks, really love features and visions of ring: bracket access, class region, declarative and natural programming.
+It's simple and beautiful the way ring deal with these paradigms. I think it's really great work what you're done, and doing.
+I want to develop ethereum client in ring language, not only but it's style. It'll have natural and declarative code on it's main part.
+Furthermore, It will be fantastic if there is "natural language -> evm bytecode" compiler, maybe ring have the solution"
+       , Asta 
+
+"The language looks great!"
+       , Eric Hawk
+
+"You put a lot of work in the Ring and you're a great programmer
+I saw your examples in 3D I've looked at part of your project, it's really great"
+       , Rafal Jopek
+
+"Looks like a big project and an impressive piece of work"
+       , Rochus Keller (PhD From ETH Zurich, Switzerland)
+
+.. index:: 
+       pair: Applications developed in little hours; FetchStockData Application
+
+FetchStockData Application
+==========================
+
+URL : https://groups.google.com/forum/#!topic/ring-lang/-fa1U_SXSjo
+
+Author : Bert Mariani
+
+This App is written in Ring. 
+
+It will fetch stock data from Yahoo and draw various types of charts.
+Any valid stock ticker can be entered, or selected from the drop down list - Select Symbol.
+
+It will not guarantee that you make money in the stock market.
+But it will visualize the history of the stock.
+
+.. image:: getquotesmac.png
+       :alt: GetQuotesHistory on MacOS X
+
+.. index:: 
+       pair: Applications developed in little hours; Fifteen Puzzle Game 2
+
+Fifteen Puzzle Game 2
+=====================
+
+URL : https://github.com/ring-lang/ring/blob/master/applications/fifteenpuzzle/CalmoSoftFifteenPuzzleGame.ring
+
+Author : Gal Zsolt (CalmoSoft)
+
+.. image:: fifteen2.png
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; Google API Shortener Application
+
+Google API Shortener Application
+================================
+
+Author : John Storm (SienSystem)
+
+Hi everyone,
+
+Wanted to (finally) share a first release version of a small but very nice tool 
+to shorten urls using the Google shortener API.   The code is fully documented, 
+maybe too documented, but, provides a good reference as to what is going on. 
+
+You can obtain your own API key, or you can use my key to test and use the tool.  
+
+Hope you enjoy the application.  Please feel free to test at your convenience.  
+
+Ring is FUN!!
+
+.. image:: urlappmacshot3.png
+       :alt: URLShortener - shot 3
+
+
+
+.. image:: urlappmacshot4.png
+       :alt: URLShortener - shot 4
+
+.. index:: 
+       pair: Applications developed in little hours; Analog Clock
+
+Analog Clock
+============
+
+URL : https://github.com/ring-lang/ring/blob/master/applications/analogclock/AnalogClock-Image.ring
+
+Author : Bert Mariani
+
+.. image:: analogclock.png
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; TicTacToe Game
+
+TicTacToe Game
+==============
+
+URL : https://github.com/AbdelrahmanGIT/RingSamples/blob/master/src/TecTacToe.ring
+
+Author : Abdelrahman Mohammed
+
+.. image:: tictactoe.jpg
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; Squares Puzzle Game
+
+Squares Puzzle Game
+===================
+
+URL : https://github.com/MajdiSobain/RingAllegro_SquaresPuzzle
+
+Author : Majdi Sobain
+
+This project is about (Squares Puzzle) popular game that I have programmed using
+ring language with its RingAllegro Library. The principle of this game is very known to all of us, 
+which is moving squares to get the real full shape of the original picture.
+
+This game could be played using mouse and keyboard as well, showing a message of congratulations at the successful solving.
+
+.. image:: ringapps_shot2.png
+       :alt: Ring Application
+
+.. index:: 
+       pair: Applications developed in little hours; Video-Music-Player Application
+
+Video-Music-Player Application
+==============================
+
+Author : Bert Mariani
+
+Screen Shot:
+
+.. image:: videomusicplayer.jpg
+       :alt: Video Music Player
+
+
+.. index:: 
+       pair: Applications developed in little hours; Calculator Application
+
+Calculator Application
+======================
+
+Author : Magdy Ragab
+
+Updated Version by Gal Zsolt and Bert Mariani
+
+Screen Shot:
+
+.. image:: newcalc2.png
+       :alt: Ring Calculator
+
+
+.. index:: 
+       pair:  Applications developed in little hours; Windows StartUp Manager Application
+
+Windows StartUp Manager Application
+===================================
+
+URL : https://github.com/ring-lang/WinStartupManager
+
+Author : Majdi Sobain
+
+Windows Startup Manager is an application that has the ability to let 
+the user control what programs should start at Windows booting time. 
+It gives you the ability to show, edit, delete, or even add new programs
+entries to be lunched at Windows booting time.
+
+It is specialized at managing Windows startup entries that are stored in
+Windows Registry only, but provides a quick option to edit programs 
+shortcuts type entries.
+
+Screen Shot:
+
+.. image:: winstartupman.jpg
+       :alt: Windows Startup Manager
+
+.. index:: 
+       pair: Applications developed in little hours; Werdy Application
+
+Werdy Application
+=================
+
+URL : https://github.com/ring-lang/werdy
+
+Author : Magdy Ragab
+
+Quran application includes reading suras, searching and bookmarking.
+
+The applcation is provided for Windows, Linux and Android.
+
+.. image:: ringapps_shot1.png
+       :width: 300pt
+       :height: 300pt
+       :alt: Ring Application
+
+
+.. index:: 
+       pair: Applications developed in little hours; Samples in this book
+
+Samples in this book
+====================
+
+The next samples are developed in little hours and we will introduce them through this book.
+
+The next screen shot for he Ring Notepad application
+
+.. image:: ringnotepad_screenshot.png
+       :alt: Ring Application
+
+The next screen shot for the Cards Game
+
+.. image:: ringapps_shot4.png
+       :alt: Ring Application
+
+The next screen shot for the Cards Game (Android)
+
+.. image:: ringqt_shot52.jpg
+       :alt: Ring Application
+
+The next screen shot from the Web Development chapter
+
+.. image:: ex24_2.jpg
+       :alt: Ring Application
+
+The next screen shots for simple 2D Games that we will present in the Game Engine Chapter.
+
+Stars Fighter Game
+
+.. image:: starsfighter.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring Application
+
+Flappy Bird 3000 Game
+
+.. image:: flappybird.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring Application
+
+Super Man 2016 Game
+
+.. image:: superman.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring Application
+
+The next screen shot for the TicTacToe 3D Game
+
+Screen Shot:
+
+.. image:: tictactoe3d.png
+       :width: 450pt
+       :height: 350pt
+       :alt: TicTacToe 3D Game
+
+The next screen shot for the Gold Magic 800 Game
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 
+
+
+.. index:: 
+       pair: Applications developed in little hours; Innovative
+
+Innovative
+==========
+
+The language comes with better support for Natural Language Programming and 
+Declarative Programming. The innovation comes in supporting these paradigms 
+with new practical techniques on the top of Object-Oriented Programming and 
+Functional Programming. No need to know anything about (Compilers and Parsing). 
+You get the language constructs ready for use to create domain-specific languages 
+in a fraction of time. 
+
+Articles:-
+
+* Natural Language Programming Library : 
+https://www.codeproject.com/Articles/1200766/Using-the-Natural-Language-Programming-Library-NLP
+
+* Natural Language Programming : 
+https://www.codeproject.com/Articles/1138605/Natural-Language-Programming-in-the-Ring-Programmi
+
+* The Declarative Approach :
+https://www.codeproject.com/Articles/1222105/The-declarative-approach-of-the-Ring-programming-l
+
+* Syntax Flexibility : 
+https://www.codeproject.com/Articles/1137388/Syntax-Flexibility-in-the-Ring-Programming-Languag
+
+* The Ring Programming Language : 
+https://www.codeproject.com/Articles/1089887/The-Ring-Programming-Language
+
+
+.. image:: ringnatural.png
+       :alt: NLP in Ring
+
+.. index:: 
+       pair: Applications developed in little hours; Practical
+
+Practical
+=========
+
+Many of the Ring libraries (StdLib, WebLib, Natural Library, Games Engine, etc.) and 
+the Ring IDE (Ring Notepad, Form Designer, etc.) are written in the Ring language 
+itself. Ring is ready for use in production and increase the developers productivity. 
+
+Check the Form Designer source code : 
+https://github.com/ring-lang/ring/tree/master/applications/formdesigner
+
+.. image:: ringformdesigner.png
+       :alt: Ring Form Designer
+
+We can run the Form Designer as Android application!
+
+.. image:: formdesignerandroid.png
+       :alt: Form Designer - Android
\ No newline at end of file
diff --git a/docs/en/target/ringapps_shot1.png b/docs/en/target/ringapps_shot1.png
new file mode 100644 (file)
index 0000000..1b8a0f1
Binary files /dev/null and b/docs/en/target/ringapps_shot1.png differ
diff --git a/docs/en/target/ringapps_shot2.png b/docs/en/target/ringapps_shot2.png
new file mode 100644 (file)
index 0000000..7dec247
Binary files /dev/null and b/docs/en/target/ringapps_shot2.png differ
diff --git a/docs/en/target/ringapps_shot3.png b/docs/en/target/ringapps_shot3.png
new file mode 100644 (file)
index 0000000..f4dd5cc
Binary files /dev/null and b/docs/en/target/ringapps_shot3.png differ
diff --git a/docs/en/target/ringapps_shot4.png b/docs/en/target/ringapps_shot4.png
new file mode 100644 (file)
index 0000000..02b2a4e
Binary files /dev/null and b/docs/en/target/ringapps_shot4.png differ
diff --git a/docs/en/target/ringapps_shot5.jpg b/docs/en/target/ringapps_shot5.jpg
new file mode 100644 (file)
index 0000000..fc3be94
Binary files /dev/null and b/docs/en/target/ringapps_shot5.jpg differ
diff --git a/docs/en/target/ringapps_shot6.jpg b/docs/en/target/ringapps_shot6.jpg
new file mode 100644 (file)
index 0000000..786bf3c
Binary files /dev/null and b/docs/en/target/ringapps_shot6.jpg differ
diff --git a/docs/en/target/ringbeep.txt b/docs/en/target/ringbeep.txt
new file mode 100644 (file)
index 0000000..145c6a9
--- /dev/null
@@ -0,0 +1,94 @@
+.. index:: 
+     single: Create your first extension; Introduction
+
+===========================
+Create your first extension
+===========================
+
+In this chapter we will create RingBeep
+
+RingBeep is a simple extension for the beep() function in Windows API
+
+Just a simple example about creating extensions
+
+.. index:: 
+     pair: Create your first extension; Location
+
+Location
+========
+
+You will find this extension in the ring/extensions/ringbeep folder
+
+.. index:: 
+     pair: Create your first extension; Steps to create the extension
+
+Steps to create the extension
+=============================
+
+At first we write the configuration file in : ringbeep.cf
+
+.. code-block:: none
+
+       notepad ringbeep.cf
+
+The file ringbeep.cf contains
+
+.. code-block:: none
+
+       <code>
+       #include "windows.h"
+       </code>
+
+       int Beep(int dwFreq,int dwDuration)
+
+Then we run : gencode.bat to generate ringbeep.c
+
+.. code-block:: none
+
+       gencode.bat
+
+The gencode.bat contains the next command to call Ring Extensions Generator
+
+.. code-block:: none
+
+       ring ..\codegen\parsec.ring ringbeep.cf ringbeep.c
+
+Then we build the extension using :
+
+.. code-block:: none
+
+       buildvc.bat
+
+The file buildvc.bat contains the next commands to build the extension using Visual C/C++
+
+.. code-block:: none
+
+       cls
+       call ../../src/locatevc.bat
+       cl /c /DEBUG ringbeep.c -I"..\..\include"
+       link /DEBUG ringbeep.obj  ..\..\lib\ring.lib kernel32.lib /DLL /OUT:ringbeep.dll ^
+                                                               /SUBSYSTEM:CONSOLE,"5.01" 
+       del ringbeep.obj
+
+.. index:: 
+     pair: Create your first extension; Testing the extension
+
+Testing the extension
+=====================
+
+Then we test the function using
+
+.. code-block:: none
+
+       ring test.ring
+
+The file test.ring contains
+
+.. code-block:: ring
+
+       loadlib("ringbeep.dll")
+
+       for f = 750 to 1000 step 50
+               beep(f,300)
+       next
+
diff --git a/docs/en/target/ringconsolecolorsfuncsdoc.txt b/docs/en/target/ringconsolecolorsfuncsdoc.txt
new file mode 100644 (file)
index 0000000..2045337
--- /dev/null
@@ -0,0 +1,42 @@
+.. index:: 
+     single: RingConsoleColors Functions Reference; Introduction
+
+=====================================
+RingConsoleColors Functions Reference
+=====================================
+
+* CC_FG_NONE
+* CC_FG_BLACK
+* CC_FG_DARK_RED
+* CC_FG_DARK_GREEN
+* CC_FG_DARK_YELLOW
+* CC_FG_DARK_BLUE
+* CC_FG_DARK_MAGENTA
+* CC_FG_DARK_CYAN
+* CC_FG_GRAY
+* CC_FG_DARK_GRAY
+* CC_FG_RED
+* CC_FG_GREEN
+* CC_FG_YELLOW
+* CC_FG_BLUE
+* CC_FG_MAGENTA
+* CC_FG_CYAN
+* CC_FG_WHITE
+* CC_BG_NONE
+* CC_BG_BLACK
+* CC_BG_DARK_RED
+* CC_BG_DARK_GREEN
+* CC_BG_DARK_YELLOW
+* CC_BG_DARK_BLUE
+* CC_BG_DARK_MAGENTA
+* CC_BG_DARK_CYAN
+* CC_BG_GRAY
+* CC_BG_DARK_GRAY
+* CC_BG_RED
+* CC_BG_GREEN
+* CC_BG_YELLOW
+* CC_BG_BLUE
+* CC_BG_MAGENTA
+* CC_BG_CYAN
+* CC_BG_WHITE
+* void cc_print(int color,const char *string)
diff --git a/docs/en/target/ringcube3d.png b/docs/en/target/ringcube3d.png
new file mode 100644 (file)
index 0000000..fec6ef3
Binary files /dev/null and b/docs/en/target/ringcube3d.png differ
diff --git a/docs/en/target/ringemacs.png b/docs/en/target/ringemacs.png
new file mode 100644 (file)
index 0000000..7ea4569
Binary files /dev/null and b/docs/en/target/ringemacs.png differ
diff --git a/docs/en/target/ringemb.txt b/docs/en/target/ringemb.txt
new file mode 100644 (file)
index 0000000..cd6736f
--- /dev/null
@@ -0,0 +1,335 @@
+.. index:: 
+       single: Embedding Ring in Ring; Embedding Ring in Ring
+
+======================
+Embedding Ring in Ring
+======================
+
+In this chapter we will learn about embedding Ring in Ring programs and applications.
+
+.. index:: 
+       pair: Embedding Ring in Ring; Embedding Ring in Ring without sharing the State
+
+Embedding Ring in Ring without sharing the State
+================================================
+
+From Ring 1.0 we already have functions for embedding Ring in the C language. Also we
+can execute Ring code inside Ring programs using the eval() function. In this release
+we provide functions for embedding Ring in Ring programs without sharing the state.
+
+Advantages:
+
+(1) Quick integration for Ring programs and applications together without conflicts.
+
+(2) Execute and run Ring code in safe environments that we can trace.
+
+Example:
+
+.. code-block:: ring
+
+       pState = ring_state_init()
+       ring_state_runcode(pState,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState,"x = 10")
+
+       pState2 = ring_state_init()
+       ring_state_runcode(pState2,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState2,"x = 20")
+
+       ring_state_runcode(pState,"see x +nl")
+       ring_state_runcode(pState2,"see x +nl")
+
+       v1 = ring_state_findvar(pState,"x")
+       v2 = ring_state_findvar(pState2,"x")
+
+       see v1[3] + nl
+       see V2[3] + nl
+
+       ring_state_delete(pState)
+       ring_state_delete(pState2)
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       Hello, World!
+       10
+       20
+       10
+       20
+
+.. index:: 
+       pair: Embedding Ring in Ring; Serial Execution of Programs
+
+Serial Execution of Programs
+============================
+
+We can execute application after another application using ring_state_main()
+
+Example:
+
+.. code-block:: ring
+
+       chdir(exefolder()+"/../applications/formdesigner")
+       ring_state_main('formdesigner.ring')
+       chdir(exefolder()+"/../applications/cards")
+       ring_state_main('cards.ring')
+
+.. index:: 
+       pair: Embedding Ring in Ring; ring_state_setvar()
+
+ring_state_setvar()
+===================
+
+Using ring_state_setvar() we can set variables value
+
+The value could be (String, Number, List or C Pointer)
+
+We need this function to quickly pass lists and C pointers to the Sub Ring Environment
+
+Syntax:
+
+.. code-block:: none
+
+       ring_state_setvar(oState,cVariableName,Value)
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       myapp   = null
+       win     = null
+
+       func main
+               myapp = new qApp {
+                       win = new qWidget() {
+                               setWindowTitle("Advanced Example on using ring_state_setvar()")
+                               move(100,100)
+                               resize(600,400)
+                               new qPushButton(win) {
+                                       setText("Test")
+                                       setClickEvent("Test()")
+                               }
+                               # We need this because using load 'guilib.ring' in
+                               # the sub environment
+                               # Will create timers by Qt and closing the window 
+                               # will not be enough to close the application
+                               oFilter = new qAllEvents(win)
+                               oFilter.setCloseEvent("myapp.quit()")
+                               win.installeventfilter(oFilter)
+                               show()
+                       }
+                       exec()
+               }
+
+       func test
+               pState = ring_state_init()
+               ring_state_runcode(pstate,"load 'guilib.ring'")
+               ring_state_runcode(pState,"x = NULL")
+               # Pass String
+                       ring_state_setvar(pState,"x","hello")
+                       ring_state_runcode(pState,"? x")
+               # Pass Number
+                       ring_state_setvar(pState,"x",100)
+                       ring_state_runcode(pState,"? x")
+               # Pass List
+                       ring_state_setvar(pState,"x",["one","two","three"])
+                       ring_state_runcode(pState,"? x")
+               # Pass Object
+               # We can't pass the Ring Object (win)
+               # Because Objects store pointers to the Class Information
+               # And the class is related to the Parent Ring Environment
+               # And the sub Ring environment can't access it
+               # But we can pass C pointers like win.pObject
+                       ring_state_setvar(pState,"x",win.pObject)
+               # Now we create the object again but using the same C pointer
+               # So we have access to the Same window in the parent Ring enviroment
+                       ring_state_runcode(pState,"
+                               new qWidget {
+                                       pObject = x
+                                       setwindowtitle('Message from the Sub Ring Environment')
+                               }
+                       ")
+               ring_state_delete(pState)
+
+
+.. index:: 
+       pair: Embedding Ring in Ring; ring_state_new() and ring_state_mainfile()
+
+ring_state_new() and ring_state_mainfile()
+==========================================
+
+Using ring_state_new() and ring_state_mainfile() we can run Ring programs from Ring programs
+
+But unlike ring_state_main(), Here we can control when to delete the Ring state!
+
+This is important when we run GUI programs from GUI programs
+
+Because they will share the GUI Library (RingQt), And In this case the caller will call
+
+qApp.Exec()
+
+So the sub program, will not stop and will return to the Main program
+
+Here deleting the State of the sub programs will lead to a problem when we run the sub program events
+
+So keeping the state is important for sub GUI programs hosted in GUI programs.
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       func main
+               new qApp {
+                       win = new qWidget() {
+                               setWindowTitle("Test ring_state_mainfile()")
+                               resize(400,400) move(100,100)
+                               btn = new qPushButton(Win) {
+                                       settext("test")
+                                       setclickevent("mytest()")
+                               }
+                               show()
+                       }
+                       exec()
+               }
+
+       func mytest
+               pState = ring_state_new()
+               ring_state_mainfile(pState,"runprogram.ring")
+               # Here we don't delete the state if we will run GUI application
+               # So we can run the GUI application events 
+                       // ring_state_delete(pState)
+
+If you will use this feature, remember to update the previous example based on your application needs
+
+So you can call ring_state_delete() at some point to avoid the memory leak!
+
+.. index:: 
+       pair: Embedding Ring in Ring; Runtime Errors when Embedding Ring in Ring
+
+Runtime Errors when Embedding Ring in Ring
+==========================================
+
+Starting from Ring 1.8 
+
+When embedding Ring in Ring, the error in the hosted environment will not close the host
+
+Example:
+
+.. code-block:: ring
+
+       ? "Start the test!" 
+
+       pState = ring_state_init()
+
+       ring_state_runcode(pState," ? 'Let us try having an error' ? x")
+
+       ring_state_delete(pState)
+
+       ? ""
+       ? "End of test!"
+
+Output:
+
+.. code-block:: none
+
+       Start the test!
+       Let us try having an error
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file Ring_EmbeddedCode
+       End of test!
+
+.. index:: 
+       pair: Embedding Ring in Ring; ring_state_filetokens() function
+
+ring_state_filetokens() function
+================================
+
+Starting from Ring 1.12 we have the ring_state_filetokens() function
+
+Using this function we can get all the tokens in the ring source code file.
+
+.. code-block:: ring
+
+       C_FILENAME      = "test_tokens.ring"
+       C_WIDTH         = 12
+
+       # write the file
+               write(C_FILENAME,'
+                               see "Hello, World!"
+                               ? 3*2+3
+                               Name = "Ring"
+                               ? Name
+       ')
+
+       # Token Type
+               C_KEYWORD       = 0
+               C_OPERATOR      = 1
+               C_LITERAL       = 2
+               C_NUMBER        = 3
+               C_IDENTIFIER    = 4
+               C_ENDLINE       = 5
+
+       # Keywords List
+       aKEYWORDS = ["IF","TO","OR","AND","NOT","FOR","NEW","FUNC", 
+       "FROM","NEXT","LOAD","ELSE","SEE","WHILE","OK","CLASS","RETURN","BUT", 
+       "END","GIVE","BYE","EXIT","TRY","CATCH","DONE","SWITCH","ON","OTHER","OFF", 
+       "IN","LOOP","PACKAGE","IMPORT","PRIVATE","STEP","DO","AGAIN","CALL","ELSEIF", 
+       "PUT","GET","CASE","DEF","ENDFUNC","ENDCLASS","ENDPACKAGE", 
+       "CHANGERINGKEYWORD","CHANGERINGOPERATOR","LOADSYNTAX"]
+
+       pState = ring_state_new()
+       aList = ring_state_filetokens(pState,C_FILENAME)
+       PrintTokens(aList)
+       ring_state_delete(pState)
+
+       func PrintTokens aList
+               for aToken in aList
+                       switch aToken[1]
+                       on C_KEYWORD 
+                               ? Width("Keyword",C_WIDTH) + ": "  + aKeywords[0+aToken[2]]
+                       on C_OPERATOR 
+                               ? Width("Operator",C_WIDTH)  + ": " + aToken[2]
+                       on C_LITERAL 
+                               ? Width("Literal",C_WIDTH)  + ": " + aToken[2]
+                       on C_NUMBER 
+                               ? Width("Number",C_WIDTH)  + ": " + aToken[2]
+                       on C_IDENTIFIER 
+                               ? Width("Identifier",C_WIDTH)  + ": " + aToken[2]
+                       on C_ENDLINE 
+                               ? "EndLine"
+                       other
+                               
+                       off
+               next
+
+       func Width cText,nWidth
+               return cText+copy(" ",nWidth-len(cText))
+
+Output:
+
+.. code-block:: none
+
+       EndLine
+       Keyword     : SEE
+       Literal     : Hello, World!
+       EndLine
+       Operator    : ?
+       Number      : 3
+       Operator    : *
+       Number      : 2
+       Operator    : +
+       Number      : 3
+       EndLine
+       Identifier  : name
+       Operator    : =
+       Literal     : Ring
+       EndLine
+       Operator    : ?
+       Identifier  : name
+       EndLine
diff --git a/docs/en/target/ringformdesigner.png b/docs/en/target/ringformdesigner.png
new file mode 100644 (file)
index 0000000..47bd6bb
Binary files /dev/null and b/docs/en/target/ringformdesigner.png differ
diff --git a/docs/en/target/ringfreeglutfuncsdoc.txt b/docs/en/target/ringfreeglutfuncsdoc.txt
new file mode 100644 (file)
index 0000000..f6e164c
--- /dev/null
@@ -0,0 +1,288 @@
+.. index:: 
+     single: RingFreeGLUT Functions Reference; Introduction
+
+================================
+RingFreeGLUT Functions Reference
+================================
+
+* GLUT_RGB
+* GLUT_RGBA
+* GLUT_INDEX
+* GLUT_SINGLE
+* GLUT_DOUBLE
+* GLUT_ACCUM
+* GLUT_ALPHA
+* GLUT_DEPTH
+* GLUT_STENCIL
+* GLUT_MULTISAMPLE
+* GLUT_STEREO
+* GLUT_LUMINANCE
+* GLUT_KEY_F1
+* GLUT_KEY_F2
+* GLUT_KEY_F3
+* GLUT_KEY_F4
+* GLUT_KEY_F5
+* GLUT_KEY_F6
+* GLUT_KEY_F7
+* GLUT_KEY_F8
+* GLUT_KEY_F9
+* GLUT_KEY_F10
+* GLUT_KEY_F11
+* GLUT_KEY_F12
+* GLUT_KEY_LEFT
+* GLUT_KEY_UP
+* GLUT_KEY_RIGHT
+* GLUT_KEY_DOWN
+* GLUT_KEY_PAGE_UP
+* GLUT_KEY_PAGE_DOWN
+* GLUT_KEY_HOME
+* GLUT_KEY_END
+* GLUT_KEY_INSERT
+* GLUT_LEFT_BUTTON
+* GLUT_MIDDLE_BUTTON
+* GLUT_RIGHT_BUTTON
+* GLUT_DOWN
+* GLUT_UP
+* GLUT_LEFT
+* GLUT_ENTERED
+* GLUT_MENU_NOT_IN_USE
+* GLUT_MENU_IN_USE
+* GLUT_NOT_VISIBLE
+* GLUT_VISIBLE
+* GLUT_HIDDEN
+* GLUT_FULLY_RETAINED
+* GLUT_PARTIALLY_RETAINED
+* GLUT_FULLY_COVERED
+* GLUT_WINDOW_X
+* GLUT_WINDOW_Y
+* GLUT_WINDOW_WIDTH
+* GLUT_WINDOW_HEIGHT
+* GLUT_WINDOW_BUFFER_SIZE
+* GLUT_WINDOW_STENCIL_SIZE
+* GLUT_WINDOW_DEPTH_SIZE
+* GLUT_WINDOW_RED_SIZE
+* GLUT_WINDOW_GREEN_SIZE
+* GLUT_WINDOW_BLUE_SIZE
+* GLUT_WINDOW_ALPHA_SIZE
+* GLUT_WINDOW_ACCUM_RED_SIZE
+* GLUT_WINDOW_ACCUM_GREEN_SIZE
+* GLUT_WINDOW_ACCUM_BLUE_SIZE
+* GLUT_WINDOW_ACCUM_ALPHA_SIZE
+* GLUT_WINDOW_DOUBLEBUFFER
+* GLUT_WINDOW_RGBA
+* GLUT_WINDOW_PARENT
+* GLUT_WINDOW_NUM_CHILDREN
+* GLUT_WINDOW_COLORMAP_SIZE
+* GLUT_WINDOW_NUM_SAMPLES
+* GLUT_WINDOW_STEREO
+* GLUT_WINDOW_CURSOR
+* GLUT_SCREEN_WIDTH
+* GLUT_SCREEN_HEIGHT
+* GLUT_SCREEN_WIDTH_MM
+* GLUT_SCREEN_HEIGHT_MM
+* GLUT_MENU_NUM_ITEMS
+* GLUT_DISPLAY_MODE_POSSIBLE
+* GLUT_INIT_WINDOW_X
+* GLUT_INIT_WINDOW_Y
+* GLUT_INIT_WINDOW_WIDTH
+* GLUT_INIT_WINDOW_HEIGHT
+* GLUT_INIT_DISPLAY_MODE
+* GLUT_ELAPSED_TIME
+* GLUT_WINDOW_FORMAT_ID
+* GLUT_HAS_KEYBOARD
+* GLUT_HAS_MOUSE
+* GLUT_HAS_SPACEBALL
+* GLUT_HAS_DIAL_AND_BUTTON_BOX
+* GLUT_HAS_TABLET
+* GLUT_NUM_MOUSE_BUTTONS
+* GLUT_NUM_SPACEBALL_BUTTONS
+* GLUT_NUM_BUTTON_BOX_BUTTONS
+* GLUT_NUM_DIALS
+* GLUT_NUM_TABLET_BUTTONS
+* GLUT_DEVICE_IGNORE_KEY_REPEAT
+* GLUT_DEVICE_KEY_REPEAT
+* GLUT_HAS_JOYSTICK
+* GLUT_OWNS_JOYSTICK
+* GLUT_JOYSTICK_BUTTONS
+* GLUT_JOYSTICK_AXES
+* GLUT_JOYSTICK_POLL_RATE
+* GLUT_OVERLAY_POSSIBLE
+* GLUT_LAYER_IN_USE
+* GLUT_HAS_OVERLAY
+* GLUT_TRANSPARENT_INDEX
+* GLUT_NORMAL_DAMAGED
+* GLUT_OVERLAY_DAMAGED
+* GLUT_VIDEO_RESIZE_POSSIBLE
+* GLUT_VIDEO_RESIZE_IN_USE
+* GLUT_VIDEO_RESIZE_X_DELTA
+* GLUT_VIDEO_RESIZE_Y_DELTA
+* GLUT_VIDEO_RESIZE_WIDTH_DELTA
+* GLUT_VIDEO_RESIZE_HEIGHT_DELTA
+* GLUT_VIDEO_RESIZE_X
+* GLUT_VIDEO_RESIZE_Y
+* GLUT_VIDEO_RESIZE_WIDTH
+* GLUT_VIDEO_RESIZE_HEIGHT
+* GLUT_NORMAL
+* GLUT_OVERLAY
+* GLUT_ACTIVE_SHIFT
+* GLUT_ACTIVE_CTRL
+* GLUT_ACTIVE_ALT
+* GLUT_CURSOR_RIGHT_ARROW
+* GLUT_CURSOR_LEFT_ARROW
+* GLUT_CURSOR_INFO
+* GLUT_CURSOR_DESTROY
+* GLUT_CURSOR_HELP
+* GLUT_CURSOR_CYCLE
+* GLUT_CURSOR_SPRAY
+* GLUT_CURSOR_WAIT
+* GLUT_CURSOR_TEXT
+* GLUT_CURSOR_CROSSHAIR
+* GLUT_CURSOR_UP_DOWN
+* GLUT_CURSOR_LEFT_RIGHT
+* GLUT_CURSOR_TOP_SIDE
+* GLUT_CURSOR_BOTTOM_SIDE
+* GLUT_CURSOR_LEFT_SIDE
+* GLUT_CURSOR_RIGHT_SIDE
+* GLUT_CURSOR_TOP_LEFT_CORNER
+* GLUT_CURSOR_TOP_RIGHT_CORNER
+* GLUT_CURSOR_BOTTOM_RIGHT_CORNER
+* GLUT_CURSOR_BOTTOM_LEFT_CORNER
+* GLUT_CURSOR_INHERIT
+* GLUT_CURSOR_NONE
+* GLUT_CURSOR_FULL_CROSSHAIR
+* GLUT_RED
+* GLUT_GREEN
+* GLUT_BLUE
+* GLUT_KEY_REPEAT_OFF
+* GLUT_KEY_REPEAT_ON
+* GLUT_KEY_REPEAT_DEFAULT
+* GLUT_JOYSTICK_BUTTON_A
+* GLUT_JOYSTICK_BUTTON_B
+* GLUT_JOYSTICK_BUTTON_C
+* GLUT_JOYSTICK_BUTTON_D
+* GLUT_GAME_MODE_ACTIVE
+* GLUT_GAME_MODE_POSSIBLE
+* GLUT_GAME_MODE_WIDTH
+* GLUT_GAME_MODE_HEIGHT
+* GLUT_GAME_MODE_PIXEL_DEPTH
+* GLUT_GAME_MODE_REFRESH_RATE
+* GLUT_GAME_MODE_DISPLAY_CHANGED
+* GLUT_STROKE_ROMAN
+* GLUT_STROKE_MONO_ROMAN
+* GLUT_BITMAP_9_BY_15
+* GLUT_BITMAP_8_BY_13
+* GLUT_BITMAP_TIMES_ROMAN_10
+* GLUT_BITMAP_TIMES_ROMAN_24
+* GLUT_BITMAP_HELVETICA_10
+* GLUT_BITMAP_HELVETICA_12
+* GLUT_BITMAP_HELVETICA_18
+* void glutInit(void)
+* void glutDisplayFunc(const char *)
+* void glutReshapeFunc(const char *)
+* int glutEventWidth(void)
+* int glutEventHeight(void)
+* void glutIdleFunc(const char *)
+* void glutKeyboardFunc(const char *)
+* void glutSpecialFunc(const char *)
+* void glutSpecialUpFunc(const char *)
+* void glutMouseFunc(const char *)
+* void glutMotionFunc(const char *)
+* int glutCreateMenu(const char *)
+* void glutMenuStatusFunc(const char *)
+* int glutEventKey(void)
+* int glutEventX(void)
+* int glutEventY(void)
+* int glutEventButton(void)
+* int glutEventState(void)
+* int glutEventValue(void)
+* int glutEventStatus(void)
+* void test_draw(void)
+* void glutInitWindowPosition(int x, int y)
+* void glutInitWindowSize(int width, int height)
+* void glutInitDisplayMode(unsigned displayMode)
+* void glutInitDisplayString(const char * displayMode)
+* int glutCreateWindow(const char * title)
+* int glutCreateSubWindow(int window, int x, int y, int width, int height)
+* void glutDestroyWindow(int window)
+* void glutSetWindow(int window)
+* int glutGetWindow(void)
+* void glutSetWindowTitle(const char * title)
+* void glutSetIconTitle(const char * title)
+* void glutReshapeWindow(int width, int height)
+* void glutPositionWindow(int x, int y)
+* void glutShowWindow(void)
+* void glutHideWindow(void)
+* void glutIconifyWindow(void)
+* void glutPushWindow(void)
+* void glutPopWindow(void)
+* void glutFullScreen(void)
+* void glutPostWindowRedisplay(int window)
+* void glutPostRedisplay(void)
+* void glutSwapBuffers(void)
+* void glutWarpPointer(int x, int y)
+* void glutSetCursor(int cursor)
+* void glutEstablishOverlay(void)
+* void glutRemoveOverlay(void)
+* void glutUseLayer(GLenum layer)
+* void glutPostOverlayRedisplay(void)
+* void glutPostWindowOverlayRedisplay(int window)
+* void glutShowOverlay(void)
+* void glutHideOverlay(void)
+* void glutDestroyMenu(int menu)
+* int glutGetMenu(void)
+* void glutSetMenu(int menu)
+* void glutAddMenuEntry(const char * label, int value)
+* void glutAddSubMenu(const char * label, int subMenu)
+* void glutChangeToMenuEntry(int item, const char * label, int value)
+* void glutChangeToSubMenu(int item, const char * label, int value)
+* void glutRemoveMenuItem(int item)
+* void glutAttachMenu(int button)
+* void glutDetachMenu(int button)
+* int glutGet(GLenum query)
+* int glutDeviceGet(GLenum query)
+* int glutGetModifiers(void)
+* int glutLayerGet(GLenum query)
+* void glutBitmapCharacter(void *font, int character)
+* int glutBitmapWidth(void *font, int character)
+* void glutStrokeCharacter(void *font, int character)
+* int glutStrokeWidth(void *font, int character)
+* GLfloat glutStrokeWidthf(void *font, int character)
+* int glutBitmapLength(void *font, char * string)
+* int glutStrokeLength(void *font, char * string)
+* GLfloat glutStrokeLengthf(void *font, char *string)
+* void glutWireCube(double size)
+* void glutSolidCube(double size)
+* void glutWireSphere(double radius, GLint slices, GLint stacks)
+* void glutSolidSphere(double radius, GLint slices, GLint stacks)
+* void glutWireCone(double base, double height, GLint slices, GLint stacks)
+* void glutSolidCone(double base, double height, GLint slices, GLint stacks)
+* void glutWireTorus(double innerRadius, double outerRadius, GLint sides, GLint rings)
+* void glutSolidTorus(double innerRadius, double outerRadius, GLint sides, GLint rings)
+* void glutWireDodecahedron(void)
+* void glutSolidDodecahedron(void)
+* void glutWireOctahedron(void)
+* void glutSolidOctahedron(void)
+* void glutWireTetrahedron(void)
+* void glutSolidTetrahedron(void)
+* void glutWireIcosahedron(void)
+* void glutSolidIcosahedron(void)
+* void glutWireTeapot(double size)
+* void glutSolidTeapot(double size)
+* void glutGameModeString(const char * string)
+* int glutEnterGameMode(void)
+* void glutLeaveGameMode(void)
+* int glutGameModeGet(GLenum query)
+* int glutVideoResizeGet(GLenum query)
+* void glutSetupVideoResizing(void)
+* void glutStopVideoResizing(void)
+* void glutVideoResize(int x, int y, int width, int height)
+* void glutVideoPan(int x, int y, int width, int height)
+* void glutSetColor(int color, GLfloat red, GLfloat green, GLfloat blue)
+* GLfloat glutGetColor(int color, int component)
+* void glutCopyColormap(int window)
+* void glutIgnoreKeyRepeat(int ignore)
+* void glutSetKeyRepeat(int repeatMode)
+* void glutForceJoystickFunc(void)
+* int glutExtensionSupported(const char * extension)
+* void glutReportErrors(void)
+* void glutMainLoop(void)
diff --git a/docs/en/target/ringincloud.png b/docs/en/target/ringincloud.png
new file mode 100644 (file)
index 0000000..7e37d21
Binary files /dev/null and b/docs/en/target/ringincloud.png differ
diff --git a/docs/en/target/ringinvscode.png b/docs/en/target/ringinvscode.png
new file mode 100644 (file)
index 0000000..f12d24d
Binary files /dev/null and b/docs/en/target/ringinvscode.png differ
diff --git a/docs/en/target/ringlibcurlfuncsdoc.txt b/docs/en/target/ringlibcurlfuncsdoc.txt
new file mode 100644 (file)
index 0000000..400ca4b
--- /dev/null
@@ -0,0 +1,285 @@
+.. index:: 
+     single: RingLibCurl Functions Reference; Introduction
+
+===============================
+RingLibCurl Functions Reference
+===============================
+
+* CURLOPT_VERBOSE
+* CURLOPT_HEADER
+* CURLOPT_NOPROGRESS
+* CURLOPT_NOSIGNAL
+* CURLOPT_WILDCARDMATCH
+* CURLOPT_WRITEFUNCTION
+* CURLOPT_WRITEDATA
+* CURLOPT_READFUNCTION
+* CURLOPT_READDATA
+* CURLOPT_IOCTLFUNCTION
+* CURLOPT_IOCTLDATA
+* CURLOPT_SEEKFUNCTION
+* CURLOPT_SEEKDATA
+* CURLOPT_SOCKOPTFUNCTION
+* CURLOPT_SOCKOPTDATA
+* CURLOPT_OPENSOCKETFUNCTION
+* CURLOPT_OPENSOCKETDATA
+* CURLOPT_CLOSESOCKETFUNCTION
+* CURLOPT_CLOSESOCKETDATA
+* CURLOPT_PROGRESSFUNCTION
+* CURLOPT_PROGRESSDATA
+* CURLOPT_HEADERFUNCTION
+* CURLOPT_HEADERDATA
+* CURLOPT_DEBUGFUNCTION
+* CURLOPT_DEBUGDATA
+* CURLOPT_SSL_CTX_FUNCTION
+* CURLOPT_SSL_CTX_DATA
+* CURLOPT_CONV_TO_NETWORK_FUNCTION
+* CURLOPT_CONV_FROM_NETWORK_FUNCTION
+* CURLOPT_CONV_FROM_UTF8_FUNCTION
+* CURLOPT_INTERLEAVEFUNCTION
+* CURLOPT_INTERLEAVEDATA
+* CURLOPT_CHUNK_BGN_FUNCTION
+* CURLOPT_CHUNK_END_FUNCTION
+* CURLOPT_CHUNK_DATA
+* CURLOPT_FNMATCH_FUNCTION
+* CURLOPT_FNMATCH_DATA
+* CURLOPT_ERRORBUFFER
+* CURLOPT_STDERR
+* CURLOPT_FAILONERROR
+* CURLOPT_URL
+* CURLOPT_PROTOCOLS
+* CURLOPT_REDIR_PROTOCOLS
+* CURLOPT_PROXY
+* CURLOPT_PROXYPORT
+* CURLOPT_PROXYTYPE
+* CURLOPT_NOPROXY
+* CURLOPT_HTTPPROXYTUNNEL
+* CURLOPT_SOCKS5_GSSAPI_SERVICE
+* CURLOPT_SOCKS5_GSSAPI_NEC
+* CURLOPT_INTERFACE
+* CURLOPT_LOCALPORT
+* CURLOPT_LOCALPORTRANGE
+* CURLOPT_DNS_CACHE_TIMEOUT
+* CURLOPT_DNS_USE_GLOBAL_CACHE
+* CURLOPT_BUFFERSIZE
+* CURLOPT_PORT
+* CURLOPT_TCP_NODELAY
+* CURLOPT_ADDRESS_SCOPE
+* CURLOPT_NETRC
+* CURLOPT_NETRC_FILE
+* CURLOPT_USERPWD
+* CURLOPT_PROXYUSERPWD
+* CURLOPT_USERNAME
+* CURLOPT_PASSWORD
+* CURLOPT_PROXYUSERNAME
+* CURLOPT_PROXYPASSWORD
+* CURLOPT_HTTPAUTH
+* CURLOPT_TLSAUTH_USERNAME
+* CURLOPT_TLSAUTH_PASSWORD
+* CURLOPT_TLSAUTH_TYPE
+* CURLOPT_PROXYAUTH
+* CURLOPT_AUTOREFERER
+* CURLOPT_ACCEPT_ENCODING
+* CURLOPT_TRANSFER_ENCODING
+* CURLOPT_FOLLOWLOCATION
+* CURLOPT_UNRESTRICTED_AUTH
+* CURLOPT_MAXREDIRS
+* CURLOPT_POSTREDIR
+* CURLOPT_PUT
+* CURLOPT_POST
+* CURLOPT_POSTFIELDS
+* CURLOPT_POSTFIELDSIZE
+* CURLOPT_POSTFIELDSIZE_LARGE
+* CURLOPT_COPYPOSTFIELDS
+* CURLOPT_HTTPPOST
+* CURLOPT_REFERER
+* CURLOPT_USERAGENT
+* CURLOPT_HTTPHEADER
+* CURLOPT_HTTP200ALIASES
+* CURLOPT_COOKIE
+* CURLOPT_COOKIEFILE
+* CURLOPT_COOKIEJAR
+* CURLOPT_COOKIESESSION
+* CURLOPT_COOKIELIST
+* CURLOPT_HTTPGET
+* CURLOPT_HTTP_VERSION
+* CURLOPT_IGNORE_CONTENT_LENGTH
+* CURLOPT_HTTP_CONTENT_DECODING
+* CURLOPT_HTTP_TRANSFER_DECODING
+* CURLOPT_MAIL_FROM
+* CURLOPT_MAIL_RCPT
+* CURLOPT_TFTP_BLKSIZE
+* CURLOPT_FTPPORT
+* CURLOPT_QUOTE
+* CURLOPT_POSTQUOTE
+* CURLOPT_PREQUOTE
+* CURLOPT_APPEND
+* CURLOPT_FTP_USE_EPRT
+* CURLOPT_FTP_USE_EPSV
+* CURLOPT_FTP_USE_PRET
+* CURLOPT_FTP_CREATE_MISSING_DIRS
+* CURLOPT_FTP_RESPONSE_TIMEOUT
+* CURLOPT_FTP_ALTERNATIVE_TO_USER
+* CURLOPT_FTP_SKIP_PASV_IP
+* CURLOPT_FTPSSLAUTH
+* CURLOPT_FTP_SSL_CCC
+* CURLOPT_FTP_ACCOUNT
+* CURLOPT_FTP_FILEMETHOD
+* CURLOPT_RTSP_REQUEST
+* CURLOPT_RTSP_SESSION_ID
+* CURLOPT_RTSP_STREAM_URI
+* CURLOPT_RTSP_TRANSPORT
+* CURLOPT_RTSP_CLIENT_CSEQ
+* CURLOPT_RTSP_SERVER_CSEQ
+* CURLOPT_TRANSFERTEXT
+* CURLOPT_PROXY_TRANSFER_MODE
+* CURLOPT_CRLF
+* CURLOPT_RANGE
+* CURLOPT_RESUME_FROM
+* CURLOPT_RESUME_FROM_LARGE
+* CURLOPT_CUSTOMREQUEST
+* CURLOPT_FILETIME
+* CURLOPT_DIRLISTONLY
+* CURLOPT_NOBODY
+* CURLOPT_INFILESIZE
+* CURLOPT_INFILESIZE_LARGE
+* CURLOPT_UPLOAD
+* CURLOPT_MAXFILESIZE
+* CURLOPT_MAXFILESIZE_LARGE
+* CURLOPT_TIMECONDITION
+* CURLOPT_TIMEVALUE
+* CURLOPT_TIMEOUT
+* CURLOPT_TIMEOUT_MS
+* CURLOPT_LOW_SPEED_LIMIT
+* CURLOPT_LOW_SPEED_TIME
+* CURLOPT_MAX_SEND_SPEED_LARGE
+* CURLOPT_MAX_RECV_SPEED_LARGE
+* CURLOPT_MAXCONNECTS
+* CURLOPT_FRESH_CONNECT
+* CURLOPT_FORBID_REUSE
+* CURLOPT_CONNECTTIMEOUT
+* CURLOPT_CONNECTTIMEOUT_MS
+* CURLOPT_IPRESOLVE
+* CURLOPT_CONNECT_ONLY
+* CURLOPT_USE_SSL
+* CURLOPT_RESOLVE
+* CURLOPT_SSLCERT
+* CURLOPT_SSLCERTTYPE
+* CURLOPT_SSLKEY
+* CURLOPT_SSLKEYTYPE
+* CURLOPT_KEYPASSWD
+* CURLOPT_SSLENGINE
+* CURLOPT_SSLENGINE_DEFAULT
+* CURLOPT_SSLVERSION
+* CURLOPT_SSL_VERIFYHOST
+* CURLOPT_SSL_VERIFYPEER
+* CURLOPT_CAINFO
+* CURLOPT_ISSUERCERT
+* CURLOPT_CAPATH
+* CURLOPT_CRLFILE
+* CURLOPT_CERTINFO
+* CURLOPT_RANDOM_FILE
+* CURLOPT_EGDSOCKET
+* CURLOPT_SSL_CIPHER_LIST
+* CURLOPT_SSL_SESSIONID_CACHE
+* CURLOPT_KRBLEVEL
+* CURLOPT_GSSAPI_DELEGATION
+* CURLOPT_SSH_AUTH_TYPES
+* CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+* CURLOPT_SSH_PUBLIC_KEYFILE
+* CURLOPT_SSH_PRIVATE_KEYFILE
+* CURLOPT_SSH_KNOWNHOSTS
+* CURLOPT_SSH_KEYFUNCTION
+* CURLOPT_SSH_KEYDATA
+* CURLOPT_PRIVATE
+* CURLOPT_SHARE
+* CURLOPT_NEW_FILE_PERMS
+* CURLOPT_NEW_DIRECTORY_PERMS
+* CURLOPT_TELNETOPTIONS
+* CURLE_OK
+* CURLE_UNKNOWN_OPTION
+* CURLE_NOT_BUILT_IN
+* CURLINFO_EFFECTIVE_URL
+* CURLINFO_RESPONSE_CODE
+* CURLINFO_HTTP_CONNECTCODE
+* CURLINFO_FILETIME
+* CURLINFO_TOTAL_TIME
+* CURLINFO_NAMELOOKUP_TIME
+* CURLINFO_CONNECT_TIME
+* CURLINFO_APPCONNECT_TIME
+* CURLINFO_PRETRANSFER_TIME
+* CURLINFO_STARTTRANSFER_TIME
+* CURLINFO_REDIRECT_TIME
+* CURLINFO_REDIRECT_COUNT
+* CURLINFO_REDIRECT_URL
+* CURLINFO_SIZE_UPLOAD
+* CURLINFO_SIZE_DOWNLOAD
+* CURLINFO_SPEED_DOWNLOAD
+* CURLINFO_SPEED_UPLOAD
+* CURLINFO_HEADER_SIZE
+* CURLINFO_REQUEST_SIZE
+* CURLINFO_SSL_VERIFYRESULT
+* CURLINFO_SSL_ENGINES
+* CURLINFO_CONTENT_LENGTH_DOWNLOAD
+* CURLINFO_CONTENT_LENGTH_UPLOAD
+* CURLINFO_CONTENT_TYPE
+* CURLINFO_PRIVATE
+* CURLINFO_HTTPAUTH_AVAIL
+* CURLINFO_PROXYAUTH_AVAIL
+* CURLINFO_OS_ERRNO
+* CURLINFO_NUM_CONNECTS
+* CURLINFO_PRIMARY_IP
+* CURLINFO_PRIMARY_PORT
+* CURLINFO_LOCAL_IP
+* CURLINFO_LOCAL_PORT
+* CURLINFO_COOKIELIST
+* CURLINFO_LASTSOCKET
+* CURLINFO_FTP_ENTRY_PATH
+* CURLINFO_CERTINFO
+* CURLINFO_CONDITION_UNMET
+* CURLINFO_RTSP_SESSION_ID
+* CURLINFO_RTSP_CLIENT_CSEQ
+* CURLINFO_RTSP_SERVER_CSEQ
+* CURLINFO_RTSP_CSEQ_RECV
+* CURLFORM_COPYNAME
+* CURLFORM_PTRNAME
+* CURLFORM_COPYCONTENTS
+* CURLFORM_PTRCONTENTS
+* CURLFORM_CONTENTSLENGTH
+* CURLFORM_FILECONTENT
+* CURLFORM_FILE
+* CURLFORM_CONTENTTYPE
+* CURLFORM_FILENAME
+* CURLFORM_BUFFER
+* CURLFORM_BUFFERPTR
+* CURLFORM_BUFFERLENGTH
+* CURLFORM_STREAM
+* CURLFORM_ARRAY
+* CURLFORM_CONTENTHEADER
+* CURL *curl_easy_init(void)
+* void curl_easy_cleanup(CURL * handle )
+* CURLcode curl_easy_setopt_1(CURL *handle, CURLoption option, int)
+* CURLcode curl_easy_setopt_2(CURL *handle, CURLoption option, const char *)
+* CURLcode curl_easy_setopt_3(CURL *handle, CURLoption option, void *)
+* CURLcode curl_easy_setopt_4(CURL *handle, CURLoption option, CURLLIST *)
+* CURLcode curl_easy_perform(CURL * easy_handle )
+* String *curl_easy_perform_silent(CURL * easy_handle )
+* CURLcode curl_easy_getinfo_1(CURL *handle, CURLINFO info, char **urlp)
+* CURLcode curl_easy_getinfo_2(CURL *handle, CURLINFO info, long *codep)
+* CURLcode curl_easy_getinfo_3(CURL *handle, CURLINFO info, double *timep)
+* CURLcode curl_easy_getinfo_4(CURL *handle, CURLINFO info, CURLLIST **engine_list)
+* CURLcode curl_easy_getinfo_5(CURL *handle, CURLINFO info, struct curl_certinfo *chainp)
+* CURLcode curl_easy_getinfo_6(CURL *handle, CURLINFO info, struct curl_tlssessioninfo **session)
+* char *curl_version(void)
+* time_t curl_getdate(char * datestring , time_t *now )
+* CURLFORMcode curl_formadd_1(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, const char *, CURLformoption)
+* CURLFORMcode curl_formadd_2(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, const char *,CURLformoption, const char *, CURLformoption)
+* CURLFORMcode curl_formadd_3(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, void *, CURLformoption)
+* CURLFORMcode curl_formadd_4(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, void *,CURLformoption, long , CURLformoption)
+* CURLFORMcode curl_formadd_5(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, void *,CURLformoption, long , CURLformoption, const char* , CURLformoption)
+* CURLFORMcode curl_formadd_6(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption, const char *,CURLformoption, void * , CURLformoption, long , CURLformoption)
+* CURLFORMcode curl_formadd_7(struct curl_httppost **firstitem, struct curl_httppost **lastitem, CURLformoption, const char *, CURLformoption,  struct curl_forms [], CURLformoption)
+* void curl_formfree(struct curl_httppost * form)
+* CURLLIST *curl_slist_append(CURLLIST * list, const char * string )
+* void curl_slist_free_all(CURLLIST * list)
+* char *curl_easy_escape( CURL * curl , const char * string , int length )
+* char *curl_easy_unescape( CURL * curl , const char * url , int inlength , int * outlength )
diff --git a/docs/en/target/ringlibsdlandroid_shot1.png b/docs/en/target/ringlibsdlandroid_shot1.png
new file mode 100644 (file)
index 0000000..d1b733f
Binary files /dev/null and b/docs/en/target/ringlibsdlandroid_shot1.png differ
diff --git a/docs/en/target/ringlibsdlandroid_shot2.png b/docs/en/target/ringlibsdlandroid_shot2.png
new file mode 100644 (file)
index 0000000..8439b7a
Binary files /dev/null and b/docs/en/target/ringlibsdlandroid_shot2.png differ
diff --git a/docs/en/target/ringlibsdlfuncsdoc.txt b/docs/en/target/ringlibsdlfuncsdoc.txt
new file mode 100644 (file)
index 0000000..04d5a3f
--- /dev/null
@@ -0,0 +1,875 @@
+.. index:: \r
+     single: RingLibSDL Functions Reference; Introduction\r
+\r
+==============================\r
+RingLibSDL Functions Reference\r
+==============================\r
+\r
+* MIX_DEFAULT_FORMAT\r
+* SDL_QUIT\r
+* SDL_BUTTON_LEFT\r
+* SDL_BUTTON_MIDDLE\r
+* SDL_BUTTON_RIGHT\r
+* SDL_PRESSED\r
+* SDL_RELEASED\r
+* SDL_APP_TERMINATING\r
+* SDL_APP_LOWMEMORY\r
+* SDL_APP_WILLENTERBACKGROUND\r
+* SDL_APP_DIDENTERBACKGROUND\r
+* SDL_APP_WILLENTERFOREGROUND\r
+* SDL_APP_DIDENTERFOREGROUND\r
+* SDL_WINDOWEVENT\r
+* SDL_SYSWMEVENT\r
+* SDL_KEYDOWN\r
+* SDL_KEYUP\r
+* SDL_TEXTEDITING\r
+* SDL_TEXTINPUT\r
+* SDL_MOUSEMOTION\r
+* SDL_MOUSEBUTTONDOWN\r
+* SDL_MOUSEBUTTONUP\r
+* SDL_MOUSEWHEEL\r
+* SDL_JOYAXISMOTION\r
+* SDL_JOYBALLMOTION\r
+* SDL_JOYHATMOTION\r
+* SDL_JOYBUTTONDOWN\r
+* SDL_JOYBUTTONUP\r
+* SDL_JOYDEVICEADDED\r
+* SDL_JOYDEVICEREMOVED\r
+* SDL_CONTROLLERAXISMOTION\r
+* SDL_CONTROLLERBUTTONDOWN\r
+* SDL_CONTROLLERBUTTONUP\r
+* SDL_CONTROLLERDEVICEADDED\r
+* SDL_CONTROLLERDEVICEREMOVED\r
+* SDL_CONTROLLERDEVICEREMAPPED\r
+* SDL_FINGERDOWN\r
+* SDL_FINGERUP\r
+* SDL_FINGERMOTION\r
+* SDL_DOLLARGESTURE\r
+* SDL_DOLLARRECORD\r
+* SDL_MULTIGESTURE\r
+* SDL_CLIPBOARDUPDATE\r
+* SDL_DROPFILE\r
+* SDL_RENDER_TARGETS_RESET\r
+* SDL_USEREVENT\r
+* SDL_LASTEVENT\r
+* SDL_NET_MAJOR_VERSION\r
+* SDL_NET_MINOR_VERSION\r
+* SDL_NET_PATCHLEVEL\r
+* INADDR_ANY\r
+* INADDR_NONE\r
+* INADDR_BROADCAST\r
+* SDLNET_MAX_UDPCHANNELS\r
+* SDLNET_MAX_UDPADDRESSES\r
+* SDLK_0\r
+* SDLK_1\r
+* SDLK_2\r
+* SDLK_3\r
+* SDLK_4\r
+* SDLK_5\r
+* SDLK_6\r
+* SDLK_7\r
+* SDLK_8\r
+* SDLK_9\r
+* SDLK_a\r
+* SDLK_AC_BACK\r
+* SDLK_AC_BOOKMARKS\r
+* SDLK_AC_FORWARD\r
+* SDLK_AC_HOME\r
+* SDLK_AC_REFRESH\r
+* SDLK_AC_SEARCH\r
+* SDLK_AC_STOP\r
+* SDLK_AGAIN\r
+* SDLK_ALTERASE\r
+* SDLK_QUOTE\r
+* SDLK_APPLICATION\r
+* SDLK_AUDIOMUTE\r
+* SDLK_AUDIONEXT\r
+* SDLK_AUDIOPLAY\r
+* SDLK_AUDIOPREV\r
+* SDLK_BRIGHTNESSDOWN\r
+* SDLK_BRIGHTNESSUP\r
+* SDLK_c\r
+* SDLK_CALCULATOR\r
+* SDLK_CANCEL\r
+* SDLK_CAPSLOCK\r
+* SDLK_CLEAR\r
+* SDLK_CLEARAGAIN\r
+* SDLK_COMMA\r
+* SDLK_COMPUTER\r
+* SDLK_COPY\r
+* SDLK_CRSEL\r
+* SDLK_CURRENCYSUBUNIT\r
+* SDLK_CURRENCYUNIT\r
+* SDLK_CUT\r
+* SDLK_d\r
+* SDLK_DECIMALSEPARATOR\r
+* SDLK_DELETE\r
+* SDLK_DISPLAYSWITCH\r
+* SDLK_DOWN\r
+* SDLK_e\r
+* SDLK_EJECT\r
+* SDLK_END\r
+* SDLK_EQUALS\r
+* SDLK_ESCAPE\r
+* SDLK_EXECUTE\r
+* SDLK_EXSEL\r
+* SDLK_f\r
+* SDLK_F1\r
+* SDLK_F10\r
+* SDLK_F11\r
+* SDLK_F12\r
+* SDLK_F13\r
+* SDLK_F14\r
+* SDLK_F15\r
+* SDLK_F16\r
+* SDLK_F17\r
+* SDLK_F18\r
+* SDLK_F19\r
+* SDLK_F2\r
+* SDLK_F20\r
+* SDLK_F21\r
+* SDLK_F22\r
+* SDLK_F23\r
+* SDLK_F24\r
+* SDLK_F3\r
+* SDLK_F4\r
+* SDLK_F5\r
+* SDLK_F6\r
+* SDLK_F7\r
+* SDLK_F8\r
+* SDLK_F9\r
+* SDLK_FIND\r
+* SDLK_g\r
+* SDLK_BACKQUOTE\r
+* SDLK_h\r
+* SDLK_HELP\r
+* SDLK_HOME\r
+* SDLK_i\r
+* SDLK_INSERT\r
+* SDLK_j\r
+* SDLK_k\r
+* SDLK_KBDILLUMDOWN\r
+* SDLK_KBDILLUMTOGGLE\r
+* SDLK_KBDILLUMUP\r
+* SDLK_KP_0\r
+* SDLK_KP_00\r
+* SDLK_KP_000\r
+* SDLK_KP_1\r
+* SDLK_KP_2\r
+* SDLK_KP_3\r
+* SDLK_KP_4\r
+* SDLK_KP_5\r
+* SDLK_KP_6\r
+* SDLK_KP_7\r
+* SDLK_KP_8\r
+* SDLK_KP_9\r
+* SDLK_KP_A\r
+* SDLK_KP_AMPERSAND\r
+* SDLK_KP_AT\r
+* SDLK_KP_B\r
+* SDLK_KP_BACKSPACE\r
+* SDLK_KP_BINARY\r
+* SDLK_KP_C\r
+* SDLK_KP_CLEAR\r
+* SDLK_KP_CLEARENTRY\r
+* SDLK_KP_COLON\r
+* SDLK_KP_COMMA\r
+* SDLK_KP_D\r
+* SDLK_KP_DBLAMPERSAND\r
+* SDLK_KP_DBLVERTICALBAR\r
+* SDLK_KP_DECIMAL\r
+* SDLK_KP_DIVIDE\r
+* SDLK_KP_E\r
+* SDLK_KP_ENTER\r
+* SDLK_KP_EQUALS\r
+* SDLK_KP_EQUALSAS400\r
+* SDLK_KP_EXCLAM\r
+* SDLK_KP_F\r
+* SDLK_KP_GREATER\r
+* SDLK_KP_HASH\r
+* SDLK_KP_HEXADECIMAL\r
+* SDLK_KP_LEFTBRACE\r
+* SDLK_KP_LEFTPAREN\r
+* SDLK_KP_LESS\r
+* SDLK_KP_MEMADD\r
+* SDLK_KP_MEMCLEAR\r
+* SDLK_KP_MEMDIVIDE\r
+* SDLK_KP_MEMMULTIPLY\r
+* SDLK_KP_MEMRECALL\r
+* SDLK_KP_MEMSTORE\r
+* SDLK_KP_MEMSUBTRACT\r
+* SDLK_KP_MINUS\r
+* SDLK_KP_MULTIPLY\r
+* SDLK_KP_OCTAL\r
+* SDLK_KP_PERCENT\r
+* SDLK_KP_PERIOD\r
+* SDLK_KP_PLUS\r
+* SDLK_KP_PLUSMINUS\r
+* SDLK_KP_POWER\r
+* SDLK_KP_RIGHTBRACE\r
+* SDLK_KP_RIGHTPAREN\r
+* SDLK_KP_SPACE\r
+* SDLK_KP_TAB\r
+* SDLK_KP_VERTICALBAR\r
+* SDLK_KP_XOR\r
+* SDLK_l\r
+* SDLK_LALT\r
+* SDLK_LCTRL\r
+* SDLK_LEFT\r
+* SDLK_LEFTBRACKET\r
+* SDLK_LGUI\r
+* SDLK_LSHIFT\r
+* SDLK_m\r
+* SDLK_MAIL\r
+* SDLK_MEDIASELECT\r
+* SDLK_MENU\r
+* SDLK_MINUS\r
+* SDLK_MODE\r
+* SDLK_MUTE\r
+* SDLK_n\r
+* SDLK_NUMLOCKCLEAR\r
+* SDLK_o\r
+* SDLK_OPER\r
+* SDLK_OUT\r
+* SDLK_p\r
+* SDLK_PAGEDOWN\r
+* SDLK_PAGEUP\r
+* SDLK_PASTE\r
+* SDLK_PAUSE\r
+* SDLK_PERIOD\r
+* SDLK_POWER\r
+* SDLK_PRINTSCREEN\r
+* SDLK_PRIOR\r
+* SDLK_q\r
+* SDLK_r\r
+* SDLK_RALT\r
+* SDLK_RCTRL\r
+* SDLK_RETURN\r
+* SDLK_RETURN2\r
+* SDLK_RGUI\r
+* SDLK_RIGHT\r
+* SDLK_RIGHTBRACKET\r
+* SDLK_RSHIFT\r
+* SDLK_s\r
+* SDLK_SCROLLLOCK\r
+* SDLK_SELECT\r
+* SDLK_SEMICOLON\r
+* SDLK_SEPARATOR\r
+* SDLK_SLASH\r
+* SDLK_SLEEP\r
+* SDLK_SPACE\r
+* SDLK_STOP\r
+* SDLK_SYSREQ\r
+* SDLK_t\r
+* SDLK_TAB\r
+* SDLK_THOUSANDSSEPARATOR\r
+* SDLK_u\r
+* SDLK_UNDO\r
+* SDLK_UNKNOWN\r
+* SDLK_UP\r
+* SDLK_v\r
+* SDLK_VOLUMEDOWN\r
+* SDLK_VOLUMEUP\r
+* SDLK_w\r
+* SDLK_WWW\r
+* SDLK_x\r
+* SDLK_y\r
+* SDLK_z\r
+* SDLK_AMPERSAND\r
+* SDLK_ASTERISK\r
+* SDLK_AT\r
+* SDLK_CARET\r
+* SDLK_COLON\r
+* SDLK_DOLLAR\r
+* SDLK_EXCLAIM\r
+* SDLK_GREATER\r
+* SDLK_HASH\r
+* SDLK_LEFTPAREN\r
+* SDLK_LESS\r
+* SDLK_PERCENT\r
+* SDLK_PLUS\r
+* SDLK_QUESTION\r
+* SDLK_QUOTEDBL\r
+* SDLK_RIGHTPAREN\r
+* SDLK_UNDERSCORE\r
+* SDL_THREAD_PRIORITY_LOW\r
+* SDL_THREAD_PRIORITY_NORMAL\r
+* SDL_THREAD_PRIORITY_HIGH\r
+* void SDL_RenderCopy2(SDL_Renderer *,SDL_Texture *)\r
+* void SDL_Delay(int)\r
+* void SDL_Init(int)\r
+* int SDL_InitSubSystem(Uint32 flags)\r
+* void SDL_Quit(void)\r
+* void SDL_QuitSubSystem(Uint32 flags)\r
+* void SDL_SetMainReady(void)\r
+* Uint32 SDL_WasInit(Uint32 flags)\r
+* SDL_bool SDL_SetHint(const char *name,const char *value)\r
+* SDL_bool SDL_SetHintWithPriority(const char *name,const char *value,SDL_HintPriority priority)\r
+* void SDL_ClearError(void)\r
+* const char *SDL_GetError(void)\r
+* SDL_LogPriority SDL_LogGetPriority(int category)\r
+* void SDL_LogResetPriorities(void)\r
+* void SDL_LogSetAllPriority(SDL_LogPriority priority)\r
+* SDL_AssertionHandler SDL_GetDefaultAssertionHandler(void)\r
+* void SDL_ResetAssertionReport(void)\r
+* void SDL_SetAssertionHandler(SDL_AssertionHandler handler,void *userdata)\r
+* void SDL_TriggerBreakpoint(void)\r
+* void SDL_assert(int)\r
+* void SDL_assert_paranoid(int)\r
+* void SDL_assert_release(int)\r
+* const char * SDL_GetRevision(void)\r
+* int SDL_GetRevisionNumber(void)\r
+* void SDL_GetVersion(SDL_version *ver)\r
+* SDL_Window *SDL_CreateWindow(const char * title,int x, int y,int w,int h,Uint32 flags)\r
+* void SDL_DestroyWindow(SDL_Window *window)\r
+* void SDL_DisableScreenSaver(void)\r
+* void SDL_EnableScreenSaver(void)\r
+* SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)\r
+* void SDL_GL_DeleteContext(SDL_GLContext context)\r
+* SDL_bool SDL_GL_ExtensionSupported(const char *extension)\r
+* int SDL_GL_GetAttribute(SDL_GLattr attr,int *value)\r
+* SDL_GLContext SDL_GL_GetCurrentContext(void)\r
+* SDL_Window *SDL_GL_GetCurrentWindow(void)\r
+* void SDL_GL_GetDrawableSize(SDL_Window *window,int *w,int *h)\r
+* void *SDL_GL_GetProcAddress(const char *proc)\r
+* int SDL_GL_GetSwapInterval(void)\r
+* int SDL_GL_LoadLibrary(const char *path)\r
+* int SDL_GL_MakeCurrent(SDL_Window *window,SDL_GLContext context)\r
+* void SDL_GL_ResetAttributes(void)\r
+* int SDL_GL_SetAttribute(SDL_GLattr attr,int value)\r
+* int SDL_GL_SetSwapInterval(int interval)\r
+* void SDL_GL_SwapWindow(SDL_Window *window)\r
+* void SDL_GL_UnloadLibrary(void)\r
+* SDL_DisplayMode *SDL_GetClosestDisplayMode(int displayIndex,SDL_DisplayMode *mode,SDL_DisplayMode *closest)\r
+* int SDL_GetCurrentDisplayMode(int displayIndex,SDL_DisplayMode *mode)\r
+* const char *SDL_GetCurrentVideoDriver(void)\r
+* int SDL_GetDesktopDisplayMode(int displayIndex,SDL_DisplayMode *mode)\r
+* int SDL_GetDisplayBounds(int displayIndex,SDL_Rect *rect)\r
+* int SDL_GetNumVideoDisplays(void)\r
+* int SDL_GetNumVideoDrivers(void)\r
+* const char * SDL_GetVideoDriver(int index)\r
+* void *SDL_GetWindowData(SDL_Window *window,const char *name)\r
+* int SDL_GetWindowDisplayIndex(SDL_Window *window)\r
+* int SDL_GetWindowDisplayMode(SDL_Window *window,SDL_DisplayMode *mode)\r
+* Uint32 SDL_GetWindowFlags(SDL_Window *window)\r
+* SDL_Window *SDL_GetWindowFromID(Uint32 id)\r
+* int SDL_GetWindowGammaRamp(SDL_Window *window,Uint16 *red,Uint16 *green,Uint16 *blue)\r
+* SDL_bool SDL_GetWindowGrab(SDL_Window *window)\r
+* Uint32 SDL_GetWindowID(SDL_Window* window)\r
+* void SDL_GetWindowMaximumSize(SDL_Window *window,int *w,int *h)\r
+* void SDL_GetWindowMinimumSize(SDL_Window *window,int *w,int *h)\r
+* void SDL_GetWindowPosition(SDL_Window *window,int *x,int *y)\r
+* void SDL_GetWindowSize(SDL_Window *window,int *w,int *h)\r
+* SDL_Surface *SDL_GetWindowSurface(SDL_Window *window)\r
+* const char *SDL_GetWindowTitle(SDL_Window *window)\r
+* SDL_bool SDL_IsScreenSaverEnabled(void)\r
+* void SDL_MaximizeWindow(SDL_Window *window)\r
+* void SDL_MinimizeWindow(SDL_Window *window)\r
+* void SDL_RaiseWindow(SDL_Window *window)\r
+* void SDL_RestoreWindow(SDL_Window *window)\r
+* void SDL_SetWindowBordered(SDL_Window *window,SDL_bool bordered)\r
+* int SDL_SetWindowBrightness(SDL_Window *window,float brightness)\r
+* void *SDL_SetWindowData(SDL_Window *window,const char *name,void *userdata)\r
+* int SDL_SetWindowDisplayMode(SDL_Window *window,const SDL_DisplayMode *mode)\r
+* int SDL_SetWindowFullscreen(SDL_Window *window,Uint32 flags)\r
+* int SDL_SetWindowGammaRamp(SDL_Window *window,const Uint16 *red,const Uint16 *green,const Uint16* blue)\r
+* void SDL_SetWindowGrab(SDL_Window *window,SDL_bool grabbed)\r
+* void SDL_SetWindowMinimumSize(SDL_Window* window,int min_w,int min_h)\r
+* void SDL_SetWindowSize(SDL_Window *window,int w,int h)\r
+* void SDL_SetWindowTitle(SDL_Window *window,const char *title)\r
+* int SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata,int *buttonid)\r
+* int SDL_ShowSimpleMessageBox(Uint32 flags,const char *title,const char *message,SDL_Window *window)\r
+* void SDL_ShowWindow(SDL_Window *window)\r
+* int SDL_UpdateWindowSurface(SDL_Window *window)\r
+* int SDL_UpdateWindowSurfaceRects(SDL_Window *window,const SDL_Rect *rects,int numrects)\r
+* int SDL_VideoInit(const char *driver_name)\r
+* void SDL_VideoQuit(void)\r
+* SDL_Renderer *SDL_CreateRenderer(SDL_Window *window,int index,Uint32 flags)\r
+* SDL_Renderer *SDL_CreateSoftwareRenderer(SDL_Surface *surface)\r
+* SDL_Texture *SDL_CreateTexture(SDL_Renderer *renderer,Uint32 format,int access,int w,int h)\r
+* SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer,SDL_Surface *surface)\r
+* void SDL_DestroyTexture(SDL_Texture *texture)\r
+* int SDL_GL_BindTexture(SDL_Texture *texture,float *texw,float *texh)\r
+* int SDL_GL_UnbindTexture(SDL_Texture *texture)\r
+* int SDL_GetNumRenderDrivers(void)\r
+* int SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer,SDL_BlendMode *blendMode)\r
+* int SDL_GetRenderDrawColor(SDL_Renderer *renderer,Uint8 *r,Uint8 *g,Uint8 *b,Uint8 *a)\r
+* int SDL_GetRenderDriverInfo(int index,SDL_RendererInfo *info)\r
+* SDL_Texture *SDL_GetRenderTarget(SDL_Renderer *renderer)\r
+* SDL_Renderer *SDL_GetRenderer(SDL_Window *window)\r
+* int SDL_GetRendererInfo(SDL_Renderer *renderer,SDL_RendererInfo *info)\r
+* int SDL_GetRendererOutputSize(SDL_Renderer *renderer,int *w,int *h)\r
+* int SDL_GetTextureAlphaMod(SDL_Texture *texture,Uint8 *alpha)\r
+* int SDL_GetTextureBlendMode(SDL_Texture *texture,SDL_BlendMode *blendMode)\r
+* int SDL_GetTextureColorMod(SDL_Texture *texture,Uint8 *r,Uint8 *g,Uint8 *b)\r
+* int SDL_LockTexture(SDL_Texture *texture,const SDL_Rect *rect,void **pixels,int *pitch)\r
+* int SDL_QueryTexture(SDL_Texture *texture,int *format,int *access,int *w,int *h)\r
+* int SDL_RenderClear(SDL_Renderer *renderer)\r
+* int SDL_RenderCopy(SDL_Renderer *renderer,SDL_Texture *texture,const SDL_Rect *srcrect,const SDL_Rect *dstrect)\r
+* int SDL_RenderCopyEx(SDL_Renderer *renderer,SDL_Texture *texture,const SDL_Rect *srcrect,const SDL_Rect *dstrect,const double angle,const SDL_Point *center,const SDL_RendererFlip flip)\r
+* int SDL_RenderDrawLine(SDL_Renderer *renderer,int x1,int y1,int x2,int y2)\r
+* int SDL_RenderDrawLines(SDL_Renderer *renderer,const SDL_Point *points,int count)\r
+* int SDL_RenderDrawPoint(SDL_Renderer *renderer,int x, int y)\r
+* int SDL_RenderDrawPoints(SDL_Renderer *renderer,const SDL_Point *points,int count)\r
+* int SDL_RenderDrawRect(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* int SDL_RenderDrawRects(SDL_Renderer *renderer,const SDL_Rect *rects,int count)\r
+* int SDL_RenderFillRect(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* int SDL_RenderFillRects(SDL_Renderer *renderer,const SDL_Rect* rects,int count)\r
+* void SDL_RenderGetClipRect(SDL_Renderer *renderer,SDL_Rect *rect)\r
+* void SDL_RenderGetScale(SDL_Renderer *renderer,float *scaleX,float *scaleY)\r
+* void SDL_RenderGetViewport(SDL_Renderer *renderer,SDL_Rect *rect)\r
+* int SDL_RenderReadPixels(SDL_Renderer *renderer,const SDL_Rect *rect,Uint32 format,void *pixels,int pitch)\r
+* int SDL_RenderSetClipRect(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* int SDL_RenderSetScale(SDL_Renderer *renderer,float scaleX,float scaleY)\r
+* int SDL_RenderSetViewport(SDL_Renderer *renderer,const SDL_Rect *rect)\r
+* SDL_bool SDL_RenderTargetSupported(SDL_Renderer *renderer)\r
+* int SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer,SDL_BlendMode blendMode)\r
+* int SDL_SetRenderDrawColor(SDL_Renderer *renderer,Uint8 r,Uint8 g,Uint8 b,Uint8 a)\r
+* int SDL_SetRenderTarget(SDL_Renderer *renderer,SDL_Texture *texture)\r
+* int SDL_SetTextureAlphaMod(SDL_Texture *texture,Uint8 alpha)\r
+* int SDL_SetTextureBlendMode(SDL_Texture *texture,SDL_BlendMode blendMode)\r
+* int SDL_SetTextureColorMod(SDL_Texture *texture,Uint8 r,Uint8 g,Uint8 b)\r
+* void SDL_UnlockTexture(SDL_Texture *texture)\r
+* int SDL_UpdateTexture(SDL_Texture *texture,const SDL_Rect *rect,const void*pixels,int pitch)\r
+* int SDL_UpdateYUVTexture(SDL_Texture *texture,const SDL_Rect *rect,const Uint8 *Yplane,int Ypitch,const Uint8 *Uplane,int Upitch,const Uint8 *Vplane,int Vpitch)\r
+* SDL_PixelFormat *SDL_AllocFormat(Uint32 pixel_format)\r
+* SDL_Palette *SDL_AllocPalette(int ncolors)\r
+* void SDL_CalculateGammaRamp(float gamma,Uint16 *ramp)\r
+* void SDL_FreeFormat(SDL_PixelFormat *format)\r
+* void SDL_FreePalette(SDL_Palette *palette)\r
+* const char *SDL_GetPixelFormatName(Uint32 format)\r
+* void SDL_GetRGB(Uint32 pixel,const SDL_PixelFormat* format,Uint8 *r,Uint8 *g,Uint8 *b)\r
+* void SDL_GetRGBA(Uint32 pixel,const SDL_PixelFormat* format,Uint8 *r,Uint8 *g,Uint8 *b,Uint8 *a)\r
+* Uint32 SDL_MapRGB(const SDL_PixelFormat* format,Uint8 r,Uint8 g, Uint8 b)\r
+* Uint32 SDL_MapRGBA(const SDL_PixelFormat* format,Uint8 r,Uint8 g, Uint8 b, Uint8 a)\r
+* Uint32 SDL_MasksToPixelFormatEnum(int bpp,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)\r
+* SDL_bool SDL_PixelFormatEnumToMasks(Uint32 format,int *bpp,Uint32 *Rmask,Uint32 *Gmask,Uint32 *Bmask,Uint32 *Amask)\r
+* int SDL_SetPaletteColors(SDL_Palette *palette,const SDL_Color *colors,int firstcolor,int ncolors)\r
+* int SDL_SetPixelFormatPalette(SDL_PixelFormat *format,SDL_Palette *palette)\r
+* SDL_bool SDL_EnclosePoints(const SDL_Point* points,int count,const SDL_Rect *clip,SDL_Rect *result)\r
+* SDL_bool SDL_HasIntersection(const SDL_Rect *A,const SDL_Rect *B)\r
+* SDL_bool SDL_IntersectRect(const SDL_Rect *A,const SDL_Rect *B,SDL_Rect *result)\r
+* SDL_bool SDL_IntersectRectAndLine(const SDL_Rect *rect,int *X1,int *Y1,int *X2,int *Y2)\r
+* SDL_bool SDL_RectEquals(const SDL_Rect *a,const SDL_Rect *b)\r
+* void SDL_UnionRect(const SDL_Rect *A,const SDL_Rect *B,SDL_Rect *result)\r
+* int SDL_BlitScaled(SDL_Surface *src,const SDL_Rect *srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* int SDL_BlitSurface(SDL_Surface *src,const SDL_Rect* srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* int SDL_ConvertPixels(int width,int height,Uint32 src_format,const void *src,int src_pitch,Uint32 dst_format,void *dst,int dst_pitch)\r
+* SDL_Surface *SDL_ConvertSurface(SDL_Surface *src,const SDL_PixelFormat *fmt,Uint32 flags)\r
+* SDL_Surface *SDL_ConvertSurfaceFormat(SDL_Surface *src,Uint32 pixel_format,Uint32 flags)\r
+* SDL_Surface *SDL_CreateRGBSurface(Uint32 flags,int width,int height,int depth,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)\r
+* SDL_Surface* SDL_CreateRGBSurfaceFrom(void *pixels,int width,int height,int depth,int pitch,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)\r
+* int SDL_FillRect(SDL_Surface *dst,const SDL_Rect *rect,Uint32 color)\r
+* int SDL_FillRects(SDL_Surface *dst,const SDL_Rect *rects,int count,Uint32 color)\r
+* void SDL_FreeSurface(SDL_Surface *surface)\r
+* void SDL_GetClipRect(SDL_Surface *surface,SDL_Rect *rect)\r
+* int SDL_GetColorKey(SDL_Surface *surface,Uint32 *key)\r
+* int SDL_GetSurfaceAlphaMod(SDL_Surface *surface,Uint8 *alpha)\r
+* int SDL_GetSurfaceBlendMode(SDL_Surface *surface,SDL_BlendMode *blendMode)\r
+* int SDL_GetSurfaceColorMod(SDL_Surface *surface,Uint8 *r,Uint8 *g,Uint8 *b)\r
+* SDL_Surface *SDL_LoadBMP(const char *file)\r
+* SDL_Surface *SDL_LoadBMP_RW(SDL_RWops *src,int freesrc)\r
+* int SDL_LockSurface(SDL_Surface *surface)\r
+* int SDL_LowerBlit(SDL_Surface *src,SDL_Rect *srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* int SDL_LowerBlitScaled(SDL_Surface *src,SDL_Rect *srcrect,SDL_Surface *dst,SDL_Rect *dstrect)\r
+* SDL_bool SDL_MUSTLOCK(SDL_Surface *surface)\r
+* int SDL_SaveBMP(SDL_Surface *surface,const char *file)\r
+* int SDL_SaveBMP_RW(SDL_Surface *surface,SDL_RWops *dst,int freedst)\r
+* SDL_bool SDL_SetClipRect(SDL_Surface *surface,const SDL_Rect *rect)\r
+* int SDL_SetColorKey(SDL_Surface *surface,int flag,Uint32 key)\r
+* int SDL_SetSurfaceAlphaMod(SDL_Surface *surface,Uint8 alpha)\r
+* int SDL_SetSurfaceBlendMode(SDL_Surface *surface,SDL_BlendMode blendMode)\r
+* int SDL_SetSurfaceColorMod(SDL_Surface *surface,Uint8 r,Uint8 g,Uint8 b)\r
+* int SDL_SetSurfacePalette(SDL_Surface *surface,SDL_Palette *palette)\r
+* int SDL_SetSurfaceRLE(SDL_Surface *surface,int flag)\r
+* void SDL_UnlockSurface(SDL_Surface* surface)\r
+* SDL_bool SDL_GetWindowWMInfo(SDL_Window *window,SDL_SysWMinfo *info)\r
+* char *SDL_GetClipboardText(void)\r
+* SDL_bool SDL_HasClipboardText(void)\r
+* int SDL_SetClipboardText(const char *text)\r
+* void SDL_AddEventWatch(SDL_EventFilter filter,void *userdata)\r
+* void SDL_DelEventWatch(SDL_EventFilter filter,void *userdata)\r
+* Uint8 SDL_EventState(Uint32 type,int state)\r
+* void SDL_FilterEvents(SDL_EventFilter filter,void *userdata)\r
+* void SDL_FlushEvent(Uint32 type)\r
+* void SDL_FlushEvents(Uint32 minType,Uint32 maxType)\r
+* SDL_bool SDL_GetEventFilter(SDL_EventFilter *filter,void **userdata)\r
+* Uint8 SDL_GetEventState(Uint32 type)\r
+* int SDL_GetNumTouchDevices(void)\r
+* int SDL_GetNumTouchFingers(SDL_TouchID touchID)\r
+* SDL_TouchID SDL_GetTouchDevice(int index)\r
+* SDL_Finger* SDL_GetTouchFinger(SDL_TouchID touchID,int index)\r
+* SDL_bool SDL_HasEvent(Uint32 type)\r
+* SDL_bool SDL_HasEvents(Uint32 minType,Uint32 maxType)\r
+* int SDL_LoadDollarTemplates(SDL_TouchID touchId,SDL_RWops *src)\r
+* int SDL_PeepEvents(SDL_Event *events,int numevents,SDL_eventaction action,Uint32 minType,Uint32 maxType)\r
+* int SDL_PollEvent(SDL_Event *event)\r
+* void SDL_PumpEvents(void)\r
+* int SDL_PushEvent(SDL_Event *event)\r
+* SDL_bool SDL_QuitRequested(void)\r
+* int SDL_RecordGesture(SDL_TouchID touchId)\r
+* Uint32 SDL_RegisterEvents(int numevents)\r
+* int SDL_SaveAllDollarTemplates(SDL_RWops *dst)\r
+* int SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst)\r
+* void SDL_SetEventFilter(SDL_EventFilter filter,void *userdata)\r
+* int SDL_WaitEvent(SDL_Event *event)\r
+* int SDL_WaitEventTimeout(SDL_Event *event,int timeout)\r
+* SDL_Keycode SDL_GetKeyFromName(const char * name)\r
+* SDL_Keycode SDL_GetKeyFromScancode(SDL_Scancode scancode)\r
+* const char * SDL_GetKeyName(SDL_Keycode key)\r
+* SDL_Window* SDL_GetKeyboardFocus(void)\r
+* const Uint8* SDL_GetKeyboardState(int* numkeys)\r
+* SDL_Keymod SDL_GetModState(void)\r
+* SDL_Scancode SDL_GetScancodeFromKey(SDL_Keycode key)\r
+* SDL_Scancode SDL_GetScancodeFromName(const char * name)\r
+* const char * SDL_GetScancodeName(SDL_Scancode scancode)\r
+* SDL_bool SDL_HasScreenKeyboardSupport(void)\r
+* SDL_bool SDL_IsScreenKeyboardShown(SDL_Window* window)\r
+* SDL_bool SDL_IsTextInputActive(void)\r
+* void SDL_SetModState(SDL_Keymod modstate)\r
+* void SDL_SetTextInputRect(SDL_Rect* rect)\r
+* void SDL_StartTextInput(void)\r
+* void SDL_StopTextInput(void)\r
+* SDL_Cursor *SDL_CreateCursor(const Uint8 *data,const Uint8 *mask,int w,int h,int hot_x,int hot_y)\r
+* void SDL_FreeCursor(SDL_Cursor *cursor)\r
+* SDL_Cursor *SDL_GetCursor(void)\r
+* SDL_Cursor *SDL_GetDefaultCursor(void)\r
+* Uint32 SDL_GetMouseState(int *x,int * y)\r
+* SDL_bool SDL_GetRelativeMouseMode(void)\r
+* Uint32 SDL_GetRelativeMouseState(int *x,int *y)\r
+* void SDL_SetCursor(SDL_Cursor *cursor)\r
+* int SDL_SetRelativeMouseMode(SDL_bool enabled)\r
+* int SDL_ShowCursor(int toggle)\r
+* void SDL_JoystickClose(SDL_Joystick *joystick)\r
+* SDL_bool SDL_JoystickGetAttached(SDL_Joystick *joystick)\r
+* Sint16 SDL_JoystickGetAxis(SDL_Joystick *joystick,int axis)\r
+* int SDL_JoystickGetBall(SDL_Joystick *joystick,int ball,int *dx,int *dy)\r
+* Uint8 SDL_JoystickGetButton(SDL_Joystick *joystick,int button)\r
+* SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)\r
+* SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick *joystick)\r
+* SDL_JoystickGUID SDL_JoystickGetGUIDFromString(const char *pchGUID)\r
+* void SDL_JoystickGetGUIDString(SDL_JoystickGUID guid,char *pszGUID,int cbGUID)\r
+* Uint8 SDL_JoystickGetHat(SDL_Joystick *joystick,int hat)\r
+* SDL_JoystickID SDL_JoystickInstanceID(SDL_Joystick *joystick)\r
+* const char *SDL_JoystickName(SDL_Joystick *joystick)\r
+* const char *SDL_JoystickNameForIndex(int device_index)\r
+* int SDL_JoystickNumAxes(SDL_Joystick *joystick)\r
+* int SDL_JoystickNumBalls(SDL_Joystick *joystick)\r
+* int SDL_JoystickNumButtons(SDL_Joystick *joystick)\r
+* int SDL_JoystickNumHats(SDL_Joystick *joystick)\r
+* SDL_Joystick *SDL_JoystickOpen(int device_index)\r
+* void SDL_JoystickUpdate(void)\r
+* int SDL_NumJoysticks(void)\r
+* int SDL_GameControllerAddMapping(const char *mappingString)\r
+* int SDL_GameControllerAddMappingsFromFile(const char *filename)\r
+* int SDL_GameControllerAddMappingsFromRW(SDL_RWops *rw,int freerw)\r
+* void SDL_GameControllerClose(SDL_GameController *gamecontroller)\r
+* int SDL_GameControllerEventState(int state)\r
+* Sint16 SDL_GameControllerGetAxis(SDL_GameController *gamecontroller,SDL_GameControllerAxis axis)\r
+* SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const char *pchString)\r
+* SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller,SDL_GameControllerAxis axis)\r
+* SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller,SDL_GameControllerButton button)\r
+* Uint8 SDL_GameControllerGetButton(SDL_GameController *gamecontroller,SDL_GameControllerButton button)\r
+* SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const char *pchString)\r
+* SDL_Joystick *SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller)\r
+* const char *SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis)\r
+* const char *SDL_GameControllerGetStringForButton(SDL_GameControllerButton button)\r
+* char *SDL_GameControllerMapping(SDL_GameController *gamecontroller)\r
+* char *SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid)\r
+* const char *SDL_GameControllerName(SDL_GameController *gamecontroller)\r
+* const char *SDL_GameControllerNameForIndex(int joystick_index)\r
+* SDL_GameController* SDL_GameControllerOpen(int joystick_index)\r
+* void SDL_GameControllerUpdate(void)\r
+* SDL_bool SDL_IsGameController(int joystick_index)\r
+* void SDL_HapticClose(SDL_Haptic* haptic)\r
+* void SDL_HapticDestroyEffect(SDL_Haptic *haptic,int effect)\r
+* int SDL_HapticEffectSupported(SDL_Haptic *haptic,SDL_HapticEffect *effect)\r
+* int SDL_HapticGetEffectStatus(SDL_Haptic *haptic,int effect)\r
+* int SDL_HapticIndex(SDL_Haptic *haptic)\r
+* const char *SDL_HapticName(int device_index)\r
+* int SDL_HapticNewEffect(SDL_Haptic *haptic,SDL_HapticEffect *effect)\r
+* int SDL_HapticNumAxes(SDL_Haptic *haptic)\r
+* int SDL_HapticNumEffects(SDL_Haptic *haptic)\r
+* int SDL_HapticNumEffectsPlaying(SDL_Haptic *haptic)\r
+* SDL_Haptic *SDL_HapticOpen(int device_index)\r
+* SDL_Haptic *SDL_HapticOpenFromJoystick(SDL_Joystick *joystick)\r
+* SDL_Haptic *SDL_HapticOpenFromMouse(void)\r
+* int SDL_HapticOpened(int device_index)\r
+* int SDL_HapticPause(SDL_Haptic *haptic)\r
+* unsigned int SDL_HapticQuery(SDL_Haptic *haptic)\r
+* int SDL_HapticRumbleInit(SDL_Haptic *haptic)\r
+* int SDL_HapticRumblePlay(SDL_Haptic *haptic,float strength,Uint32 length)\r
+* int SDL_HapticRumbleStop(SDL_Haptic *haptic)\r
+* int SDL_HapticRumbleSupported(SDL_Haptic *haptic)\r
+* int SDL_HapticRunEffect(SDL_Haptic *haptic,int effect,Uint32 iterations)\r
+* int SDL_HapticSetAutocenter(SDL_Haptic *haptic,int autocenter)\r
+* int SDL_HapticSetGain(SDL_Haptic *haptic,int gain)\r
+* int SDL_HapticStopAll(SDL_Haptic *haptic)\r
+* int SDL_HapticStopEffect(SDL_Haptic *haptic,int effect)\r
+* int SDL_HapticUnpause(SDL_Haptic *haptic)\r
+* int SDL_HapticUpdateEffect(SDL_Haptic *haptic,int effect,SDL_HapticEffect *data)\r
+* int SDL_JoystickIsHaptic(SDL_Joystick *joystick)\r
+* int SDL_MouseIsHaptic(void)\r
+* int SDL_NumHaptics(void)\r
+* int SDL_AudioInit(const char * driver_name)\r
+* void SDL_AudioQuit(void)\r
+* int SDL_BuildAudioCVT(SDL_AudioCVT *cvt,SDL_AudioFormat src_format,Uint8 src_channels,int src_rate,SDL_AudioFormat dst_format,Uint8 dst_channels,int dst_rate)\r
+* void SDL_CloseAudioDevice(SDL_AudioDeviceID dev)\r
+* int SDL_ConvertAudio(SDL_AudioCVT *cvt)\r
+* void SDL_FreeWAV(Uint8 *audio_buf)\r
+* const char * SDL_GetAudioDeviceName(int index,int iscapture)\r
+* SDL_AudioStatus SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev)\r
+* const char * SDL_GetAudioDriver(int index)\r
+* SDL_AudioStatus SDL_GetAudioStatus(void)\r
+* const char * SDL_GetCurrentAudioDriver(void)\r
+* int SDL_GetNumAudioDevices(int iscapture)\r
+* int SDL_GetNumAudioDrivers(void)\r
+* SDL_AudioSpec *SDL_LoadWAV_RW(SDL_RWops *src,int freesrc,SDL_AudioSpec *spec,Uint8 **audio_buf,Uint32 *audio_len)\r
+* void SDL_LockAudio(void)\r
+* void SDL_LockAudioDevice(SDL_AudioDeviceID dev)\r
+* void SDL_MixAudio(Uint8 *dst,const Uint8* src,Uint32 len,int volume)\r
+* void SDL_MixAudioFormat(Uint8 *dst,const Uint8 *src,SDL_AudioFormat format,Uint32 len,int volume)\r
+* int SDL_OpenAudio(SDL_AudioSpec *desired,SDL_AudioSpec *obtained)\r
+* SDL_AudioDeviceID SDL_OpenAudioDevice(const char *device,int iscapture,const SDL_AudioSpec *desired,SDL_AudioSpec *obtained,int allowed_changes)\r
+* void SDL_PauseAudio(int pause_on)\r
+* void SDL_PauseAudioDevice(SDL_AudioDeviceID dev,int pause_on)\r
+* void SDL_UnlockAudio(void)\r
+* void SDL_UnlockAudioDevice(SDL_AudioDeviceID dev)\r
+* char *SDL_GetBasePath(void)\r
+* char *SDL_GetPrefPath(const char *org,const char *app)\r
+* SDL_RWops *SDL_AllocRW(void)\r
+* void SDL_FreeRW(SDL_RWops *area)\r
+* SDL_RWops *SDL_RWFromConstMem(const void* mem,int size)\r
+* SDL_RWops *SDL_RWFromFP(void *fp,SDL_bool autoclose)\r
+* SDL_RWops *SDL_RWFromFile(const char *file,const char *mode)\r
+* SDL_RWops *SDL_RWFromMem(void *mem,int   size)\r
+* int SDL_RWclose(struct SDL_RWops *context)\r
+* size_t SDL_RWread(struct SDL_RWops *context,void *ptr,size_t size,size_t maxnum)\r
+* Sint64 SDL_RWseek(SDL_RWops *context,Sint64 offset,int whence)\r
+* Sint64 SDL_RWsize(SDL_RWops *context)\r
+* Sint64 SDL_RWtell(struct SDL_RWops *context)\r
+* size_t SDL_RWwrite(struct SDL_RWops *context,const void *ptr,size_t size,size_t num)\r
+* Uint16 SDL_ReadBE16(SDL_RWops *src)\r
+* Uint32 SDL_ReadBE32(SDL_RWops *src)\r
+* Uint64 SDL_ReadBE64(SDL_RWops *src)\r
+* Uint16 SDL_ReadLE16(SDL_RWops *src)\r
+* Uint32 SDL_ReadLE32(SDL_RWops *src)\r
+* Uint64 SDL_ReadLE64(SDL_RWops *src)\r
+* Uint8 SDL_ReadU8(SDL_RWops *src)\r
+* size_t SDL_WriteBE16(SDL_RWops *dst,Uint16 value)\r
+* size_t SDL_WriteBE32(SDL_RWops *dst,Uint32 value)\r
+* size_t SDL_WriteBE64(SDL_RWops *dst,Uint64 value)\r
+* size_t SDL_WriteLE16(SDL_RWops *dst,Uint16 value)\r
+* size_t SDL_WriteLE32(SDL_RWops *dst,Uint32 value)\r
+* size_t SDL_WriteLE64(SDL_RWops *dst,Uint64 value)\r
+* size_t SDL_WriteU8(SDL_RWops *dst,Uint8 value)\r
+* void *SDL_LoadFunction(void *handle,const char *name)\r
+* void *SDL_LoadObject(const char *sofile)\r
+* void SDL_UnloadObject(void *handle)\r
+* const char *SDL_GetPlatform(void)\r
+* int SDL_GetCPUCacheLineSize(void)\r
+* int SDL_GetCPUCount(void)\r
+* int SDL_GetSystemRAM(void)\r
+* SDL_bool SDL_Has3DNow(void)\r
+* SDL_bool SDL_HasAVX(void)\r
+* SDL_bool SDL_HasMMX(void)\r
+* SDL_bool SDL_HasRDTSC(void)\r
+* SDL_bool SDL_HasSSE(void)\r
+* SDL_bool SDL_HasSSE2(void)\r
+* SDL_bool SDL_HasSSE3(void)\r
+* SDL_bool SDL_HasSSE41(void)\r
+* SDL_bool SDL_HasSSE42(void)\r
+* SDL_PowerState SDL_GetPowerInfo(int *secs,int *pct)\r
+* double SDL_acos(double x)\r
+* int IMG_Init(int flags)\r\r
+* void IMG_Quit(void)\r
+* SDL_Surface *IMG_Load(const char *file)\r
+* SDL_Surface *IMG_Load_RW(SDL_RWops *src, int freesrc)\r
+* SDL_Surface *IMG_LoadTyped_RW(SDL_RWops *src, int freesrc, char *type)\r
+* SDL_Surface *IMG_LoadCUR_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadBMP_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadPNM_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src)\r\r
+* SDL_Surface *IMG_LoadXCF_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadPCX_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadGIF_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadJPG_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadTIF_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadTGA_RW(SDL_RWops *src)\r\r
+* SDL_Surface *IMG_LoadLBM_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_LoadXV_RW(SDL_RWops *src)\r
+* SDL_Surface *IMG_ReadXPMFromArray(char **xpm)\r
+* int IMG_isCUR(SDL_RWops *src)\r
+* int IMG_isICO(SDL_RWops *src)\r
+* int IMG_isBMP(SDL_RWops *src)\r\r
+* int IMG_isPNM(SDL_RWops *src)\r
+* int IMG_isXPM(SDL_RWops *src)\r
+* int IMG_isXCF(SDL_RWops *src)\r\r
+* int IMG_isPCX(SDL_RWops *src)\r\r
+* int IMG_isGIF(SDL_RWops *src)\r
+* int IMG_isJPG(SDL_RWops *src)\r\r
+* int IMG_isTIF(SDL_RWops *src)\r\r
+* int IMG_isPNG(SDL_RWops *src)\r
+* int IMG_isLBM(SDL_RWops *src)\r
+* int IMG_isXV(SDL_RWops *src)\r
+* int TTF_Init(void)\r
+* int TTF_WasInit(void)\r
+* void TTF_Quit(void)\r
+* TTF_Font *TTF_OpenFont(const char *file, int ptsize)\r
+* TTF_Font *TTF_OpenFontRW(SDL_RWops *src, int freesrc, int ptsize)\r
+* TTF_Font *TTF_OpenFontIndex(const char *file, int ptsize, long index)\r\r
+* TTF_Font *TTF_OpenFontIndexRW(SDL_RWops *src, int freesrc, int ptsize, long index)\r
+* void TTF_CloseFont(TTF_Font *font)\r
+* void TTF_ByteSwappedUNICODE(int swapped)\r
+* int TTF_GetFontStyle(TTF_Font *font)\r
+* void TTF_SetFontStyle(TTF_Font *font, int style)\r\r
+* int TTF_GetFontOutline(TTF_Font *font)\r
+* void TTF_SetFontOutline(TTF_Font *font, int outline)\r\r
+* int TTF_GetFontHinting(TTF_Font *font)\r
+* void TTF_SetFontHinting(TTF_Font *font, int hinting)\r
+* int TTF_GetFontKerning(TTF_Font *font)\r\r
+* void TTF_SetFontKerning(TTF_Font *font, int allowed)\r
+* int TTF_FontHeight(const TTF_Font *font)\r
+* int TTF_FontAscent(const TTF_Font *font)\r\r
+* int TTF_FontDescent(const TTF_Font *font)\r\r
+* int TTF_FontLineSkip(const TTF_Font *font)\r
+* long TTF_FontFaces(const TTF_Font *font)\r\r
+* int TTF_FontFaceIsFixedWidth(const TTF_Font *font)\r
+* char *TTF_FontFaceFamilyName(const TTF_Font *font)\r
+* char *TTF_FontFaceStyleName(const TTF_Font *font)\r
+* int TTF_GlyphIsProvided(const TTF_Font *font, Uint16 ch)\r\r
+* int TTF_GlyphMetrics(TTF_Font *font, Uint16 ch, int *minx, int *maxx, int *miny, int *maxy, int *advance)\r
+* int TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h)\r
+* int TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h)\r\r
+* int TTF_SizeUNICODE(TTF_Font *font, const Uint16 *text, int *w, int *h)\r\r
+* SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg)\r
+* SDL_Surface *TTF_RenderUTF8_Solid(TTF_Font *font, const char *text,SDL_Color fg)\r
+* SDL_Surface *TTF_RenderUNICODE_Solid(TTF_Font *font, const Uint16 *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderGlyph_Solid(TTF_Font *font, Uint16 ch, SDL_Color fg)\r
+* SDL_Surface *TTF_RenderText_Shaded(TTF_Font *font, const char *text,SDL_Color fg, SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderUTF8_Shaded(TTF_Font *font, const char *text,SDL_Color fg, SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderUNICODE_Shaded(TTF_Font *font, const Uint16 *text,SDL_Color fg, SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderGlyph_Shaded(TTF_Font *font, Uint16 ch, SDL_Color fg,SDL_Color bg)\r\r
+* SDL_Surface *TTF_RenderText_Blended(TTF_Font *font, const char *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderUTF8_Blended(TTF_Font *font, const char *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderUNICODE_Blended(TTF_Font *font, const Uint16 *text,SDL_Color fg)\r\r
+* SDL_Surface *TTF_RenderGlyph_Blended(TTF_Font *font, Uint16 ch, SDL_Color fg)\r
+* int Mix_Init(int flags)\r
+* void Mix_Quit(void)\r
+* int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize)\r
+* void Mix_CloseAudio(void)\r
+* int Mix_QuerySpec(int *frequency, Uint16 *format, int *channels)\r
+* int Mix_GetNumChunkDecoders(void)\r
+* const char *Mix_GetChunkDecoder(int index)\r
+* Mix_Chunk *Mix_LoadWAV(char *file)\r
+* Mix_Chunk *Mix_LoadWAV_RW(SDL_RWops *src, int freesrc)\r
+* Mix_Chunk *Mix_QuickLoad_WAV(Uint8 *mem)\r
+* void Mix_FreeChunk(Mix_Chunk *chunk)\r
+* int Mix_AllocateChannels(int numchans)\r
+* int Mix_Volume(int channel, int volume)\r
+* int Mix_PlayChannel(int channel, Mix_Chunk *chunk, int loops)\r
+* int Mix_PlayChannelTimed(int channel, Mix_Chunk *chunk, int loops, int ticks)\r
+* int Mix_FadeInChannel(int channel, Mix_Chunk *chunk, int loops, int ms)\r
+* int Mix_FadeInChannelTimed(int channel, Mix_Chunk *chunk,int loops, int ms, int ticks)\r
+* void Mix_Pause(int channel)\r
+* void Mix_Resume(int channel)\r
+* int Mix_HaltChannel(int channel)\r
+* int Mix_ExpireChannel(int channel, int ticks)\r
+* int Mix_FadeOutChannel(int channel, int ms)\r
+* int Mix_Paused(int channel)\r
+* Mix_Fading Mix_FadingChannel(int which)\r
+* Mix_Chunk *Mix_GetChunk(int channel)\r
+* int Mix_ReserveChannels(int num)\r
+* int Mix_GroupChannel(int which, int tag)\r
+* int Mix_GroupChannels(int from, int to, int tag)\r
+* int Mix_GroupCount(int tag)\r
+* int Mix_GroupAvailable(int tag)\r
+* int Mix_GroupOldest(int tag)\r
+* int Mix_GroupNewer(int tag)\r
+* int Mix_FadeOutGroup(int tag, int ms)\r
+* int Mix_HaltGroup(int tag)\r
+* int Mix_GetNumMusicDecoders(void)\r
+* const char *Mix_GetMusicDecoder(int index)\r
+* Mix_Music *Mix_LoadMUS(const char *file)\r
+* void Mix_FreeMusic(Mix_Music *music)\r
+* int Mix_PlayMusic(Mix_Music *music, int loops)\r
+* int Mix_FadeInMusic(Mix_Music *music, int loops, int ms)\r
+* int Mix_FadeInMusicPos(Mix_Music *music, int loops, int ms, double position)\r
+* int Mix_PlayingMusic(void)\r
+* int Mix_PausedMusic(void)\r
+* Mix_Fading Mix_FadingMusic(void)\r
+* void *Mix_GetMusicHookData(void)\r
+* int Mix_RegisterEffect(int chan, Mix_EffectFunc_t f, Mix_EffectDone_t d,void *arg)\r
+* int Mix_UnregisterEffect(int channel, Mix_EffectFunc_t f)\r
+* int Mix_UnregisterAllEffects(int channel)\r
+* int Mix_SetDistance(int channel, Uint8 distance)\r
+* int Mix_SetPosition(int channel, Sint16 angle, Uint8 distance)\r
+* int Mix_SetReverseStereo(int channel, int flip)\r
+* int SDLNet_Init(void)\r
+* void SDLNet_Quit(void)\r
+* char *SDLNet_GetError(void)\r
+* void SDLNet_Write16(Uint16 value, void *area)\r
+* void SDLNet_Write32(Uint32 value, void *area)\r
+* Uint16 SDLNet_Read16(void *area)\r
+* Uint32 SDLNet_Read32(void *area)\r
+* int SDLNet_ResolveHost(IPaddress *address, const char *host, Uint16 port)\r
+* const char *SDLNet_ResolveIP(IPaddress *address)\r
+* TCPsocket SDLNet_TCP_Open(IPaddress *ip)\r
+* void SDLNet_TCP_Close(TCPsocket sock)\r
+* TCPsocket SDLNet_TCP_Accept(TCPsocket server)\r
+* int SDLNet_TCP_Send(TCPsocket sock, const void *data, int len)\r
+* int SDLNet_TCP_Recv(TCPsocket sock, void *data, int maxlen)\r
+* UDPsocket SDLNet_UDP_Open(Uint16 port)\r
+* void SDLNet_UDP_Close(UDPsocket sock)\r
+* int SDLNet_UDP_Bind(UDPsocket sock, int channel, IPaddress *address)\r
+* void SDLNet_UDP_Unbind(UDPsocket sock, int channel)\r
+* IPaddress *SDLNet_UDP_GetPeerAddress(UDPsocket sock, int channel)\r
+* int SDLNet_UDP_Send(UDPsocket sock, int channel, UDPpacket *packet)\r
+* int SDLNet_UDP_Recv(UDPsocket sock, UDPpacket *packet)\r
+* int SDLNet_UDP_SendV(UDPsocket sock, UDPpacket **packetV, int npackets)\r
+* int SDLNet_UDP_RecvV(UDPsocket sock, UDPpacket **packetV)\r
+* UDPpacket *SDLNet_AllocPacket(int size)\r
+* int SDLNet_ResizePacket(UDPpacket *packet, int size)\r
+* void SDLNet_FreePacket(UDPpacket *packet)\r
+* UDPpacket **SDLNet_AllocPacketV(int howmany, int size)\r
+* void SDLNet_FreePacketV(UDPpacket **packetV)\r
+* SDLNet_SocketSet SDLNet_AllocSocketSet(int maxsockets)\r
+* void SDLNet_FreeSocketSet(SDLNet_SocketSet set)\r
+* int SDLNet_AddSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock)\r
+* int SDLNet_TCP_AddSocket(SDLNet_SocketSet set, TCPsocket sock)\r
+* int SDLNet_UDP_AddSocket(SDLNet_SocketSet set, UDPsocket sock)\r
+* int SDLNet_DelSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock)\r
+* int SDLNet_TCP_DelSocket(SDLNet_SocketSet set, TCPsocket sock)\r
+* int SDLNet_UDP_DelSocket(SDLNet_SocketSet set, UDPsocket sock)\r
+* int SDLNet_CheckSockets(SDLNet_SocketSet set, Uint32 timeout)\r
+* int SDLNet_SocketReady(TCPsocket sock)\r
+* int circleRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a)\r
+* SDL_Thread *SDL_CreateThread(SDL_ThreadFunction fn,const char *name,void *data)\r
+* void SDL_DetachThread(SDL_Thread *thread)\r
+* SDL_threadID SDL_GetThreadID(SDL_Thread *thread)\r
+* const char *SDL_GetThreadName(SDL_Thread* thread)\r
+* int SDL_SetThreadPriority(SDL_ThreadPriority priority)\r
+* SDL_TLSID SDL_TLSCreate(void)\r
+* void *SDL_TLSGet(SDL_TLSID id)\r
+* int SDL_TLSSet(SDL_TLSID   id,const void *value,void *)\r
+* SDL_threadID SDL_ThreadID(void)\r
+* void SDL_WaitThread(SDL_Thread *thread,int *status)\r
+* int SDL_CondBroadcast(SDL_cond *cond)\r
+* int SDL_CondSignal(SDL_cond *cond)\r
+* int SDL_CondWait(SDL_cond *cond,SDL_mutex *mutex)\r
+* int SDL_CondWaitTimeout(SDL_cond *cond,SDL_mutex *mutex,Uint32 ms)\r
+* SDL_cond *SDL_CreateCond(void)\r
+* SDL_mutex *SDL_CreateMutex(void)\r
+* SDL_sem *SDL_CreateSemaphore(Uint32 initial_value)\r
+* void SDL_DestroyCond(SDL_cond *cond)\r
+* void SDL_DestroyMutex(SDL_mutex *mutex)\r
+* void SDL_DestroySemaphore(SDL_sem *sem)\r
+* int SDL_LockMutex(SDL_mutex *mutex)\r
+* int SDL_SemPost(SDL_sem *sem)\r
+* int SDL_SemTryWait(SDL_sem *sem)\r
+* Uint32 SDL_SemValue(SDL_sem *sem)\r
+* int SDL_SemWait(SDL_sem *sem)\r
+* int SDL_SemWaitTimeout(SDL_sem *sem,Uint32   ms)\r
+* int SDL_TryLockMutex(SDL_mutex *mutex)\r
+* int SDL_UnlockMutex(SDL_mutex *mutex)\r
diff --git a/docs/en/target/ringlibuvfuncsdoc.txt b/docs/en/target/ringlibuvfuncsdoc.txt
new file mode 100644 (file)
index 0000000..b59e57b
--- /dev/null
@@ -0,0 +1,286 @@
+.. index:: 
+     single: RingLibuv Functions Reference; Introduction
+
+=============================
+RingLibuv Functions Reference
+=============================
+
+* int uv_loop_init(uv_loop_t* loop)
+* int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, int)
+* int uv_loop_close(uv_loop_t* loop)
+* uv_loop_t* uv_default_loop(void)
+* int uv_run(uv_loop_t* loop, uv_run_mode mode)
+* int uv_loop_alive(const uv_loop_t* loop)
+* void uv_stop(uv_loop_t* loop)
+* size_t uv_loop_size(void)
+* int uv_backend_fd(const uv_loop_t* loop)
+* int uv_backend_timeout(const uv_loop_t* loop)
+* uint64_t uv_now(const uv_loop_t* loop)
+* void uv_update_time(uv_loop_t* loop)
+* void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg)
+* void uv_walk_2(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg)
+* int uv_loop_fork(uv_loop_t* loop)
+* int uv_is_active(const uv_handle_t* handle)
+* int uv_is_closing(const uv_handle_t* handle)
+* void uv_close(uv_handle_t* handle, uv_close_cb close_cb)
+* void uv_close_2(uv_handle_t* handle, uv_close_cb close_cb)
+* void uv_ref(uv_handle_t* handle)
+* void uv_unref(uv_handle_t* handle)
+* int uv_has_ref(const uv_handle_t* handle)
+* size_t uv_handle_size(uv_handle_type type)
+* int uv_send_buffer_size(uv_handle_t* handle, int* value)
+* int uv_recv_buffer_size(uv_handle_t* handle, int* value)
+* int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd)
+* int uv_cancel(uv_req_t* req)
+* size_t uv_req_size(uv_req_type type)
+* int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle)
+* int uv_timer_start(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)
+* int uv_timer_start_2(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)
+* int uv_timer_stop(uv_timer_t* handle)
+* int uv_timer_again(uv_timer_t* handle)
+* void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat)
+* uint64_t uv_timer_get_repeat(const uv_timer_t* handle)
+* int uv_prepare_init(uv_loop_t* loop, uv_prepare_t* prepare)
+* int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb)
+* int uv_prepare_start_2(uv_prepare_t* prepare, uv_prepare_cb cb)
+* int uv_prepare_stop(uv_prepare_t* prepare)
+* int uv_check_init(uv_loop_t* loop, uv_check_t* check)
+* int uv_check_start(uv_check_t* check, uv_check_cb cb)
+* int uv_check_start_2(uv_check_t* check, uv_check_cb cb)
+* int uv_check_stop(uv_check_t* check)
+* int uv_idle_init(uv_loop_t* loop, uv_idle_t* idle)
+* int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb)
+* int uv_idle_start_2(uv_idle_t* idle, uv_idle_cb cb)
+* int uv_idle_stop(uv_idle_t* idle)
+* int uv_async_init(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb)
+* int uv_async_init_2(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb)
+* int uv_async_send(uv_async_t* async)
+* int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd)
+* int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, uv_os_sock_t socket)
+* int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb)
+* int uv_poll_start_2(uv_poll_t* handle, int events, uv_poll_cb cb)
+* int uv_poll_stop(uv_poll_t* poll)
+* int uv_signal_init(uv_loop_t* loop, uv_signal_t* signal)
+* int uv_signal_start(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_2(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_oneshot(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_oneshot_2(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_stop(uv_signal_t* signal)
+* void uv_disable_stdio_inheritance(void)
+* int uv_spawn(uv_loop_t* loop, uv_process_t* handle, const uv_process_options_t* options)
+* int uv_process_kill(uv_process_t* handle, int signum)
+* int uv_kill(int pid, int signum)
+* int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb)
+* int uv_shutdown_2(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb)
+* int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb)
+* int uv_listen_2(uv_stream_t* stream, int backlog, uv_connection_cb cb)
+* int uv_accept(uv_stream_t* server, uv_stream_t* client)
+* int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
+* int uv_read_start_2(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
+* int uv_read_stop(uv_stream_t*)
+* int uv_write(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_write_cb cb)
+* int uv_write_2(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_write_cb cb)
+* int uv_write2(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_stream_t* send_handle, uv_write_cb cb)
+* int uv_write2_2(uv_write_t* req, uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs, uv_stream_t* send_handle, uv_write_cb cb)
+* int uv_try_write(uv_stream_t* handle, uv_buf_t *bufs, unsigned int nbufs)
+* int uv_is_readable(const uv_stream_t* handle)
+* int uv_is_writable(const uv_stream_t* handle)
+* int uv_stream_set_blocking(uv_stream_t* handle, int blocking)
+* int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle)
+* int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags)
+* int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock)
+* int uv_tcp_nodelay(uv_tcp_t* handle, int enable)
+* int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay)
+* int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable)
+* int uv_tcp_bind(uv_tcp_t *handle,sockaddr *addr,unsigned int flags)
+* int uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_tcp_getpeername(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, sockaddr * addr, uv_connect_cb cb)
+* int uv_tcp_connect_2(uv_connect_t* req, uv_tcp_t* handle, sockaddr * addr, uv_connect_cb cb)
+* int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc)
+* int uv_pipe_open(uv_pipe_t* handle, uv_file file)
+* int uv_pipe_bind(uv_pipe_t* handle, const char * name)
+* void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, const char * name, uv_connect_cb cb)
+* void uv_pipe_connect_2(uv_connect_t* req, uv_pipe_t* handle, const char * name, uv_connect_cb cb)
+* int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size)
+* int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size)
+* void uv_pipe_pending_instances(uv_pipe_t* handle, int count)
+* int uv_pipe_pending_count(uv_pipe_t* handle)
+* uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle)
+* int uv_pipe_chmod(uv_pipe_t* handle, int flags)
+* int uv_tty_init(uv_loop_t* loop, uv_tty_t* handle, uv_file fd, int readable)
+* int uv_tty_set_mode(uv_tty_t* handle, uv_tty_mode_t mode)
+* int uv_tty_reset_mode(void)
+* int uv_tty_get_winsize(uv_tty_t* handle, int* width, int* height)
+* int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle)
+* int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned int flags)
+* int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock)
+* int uv_udp_bind(uv_udp_t* handle, sockaddr * addr, unsigned int flags)
+* int uv_udp_getsockname(const uv_udp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_udp_set_membership(uv_udp_t* handle, const char * multicast_addr, const char * interface_addr, uv_membership membership)
+* int uv_udp_set_multicast_loop(uv_udp_t* handle, int on)
+* int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl)
+* int uv_udp_set_multicast_interface(uv_udp_t* handle, const char * interface_addr)
+* int uv_udp_set_broadcast(uv_udp_t* handle, int on)
+* int uv_udp_set_ttl(uv_udp_t* handle, int ttl)
+* int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t *bufs, unsigned int nbufs, sockaddr * addr, uv_udp_send_cb send_cb)
+* int uv_udp_send_2(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t *bufs, unsigned int nbufs, sockaddr * addr, uv_udp_send_cb send_cb)
+* int uv_udp_try_send(uv_udp_t* handle, uv_buf_t *bufs, unsigned int nbufs, sockaddr * addr)
+* int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb)
+* int uv_udp_recv_start_2(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb)
+* int uv_udp_recv_stop(uv_udp_t* handle)
+* int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle)
+* int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, const char * path, unsigned int flags)
+* int uv_fs_event_start_2(uv_fs_event_t* handle, uv_fs_event_cb cb, const char * path, unsigned int flags)
+* int uv_fs_event_stop(uv_fs_event_t* handle)
+* int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* size)
+* int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle)
+* int uv_fs_poll_start(uv_fs_poll_t* handle, uv_fs_poll_cb poll_cb, const char * path, unsigned int interval)
+* int uv_fs_poll_start_2(uv_fs_poll_t* handle, uv_fs_poll_cb poll_cb, const char * path, unsigned int interval)
+* int uv_fs_poll_stop(uv_fs_poll_t* handle)
+* int uv_fs_poll_getpath(uv_fs_poll_t* handle, char* buffer, size_t* size)
+* void uv_fs_req_cleanup(uv_fs_t* req)
+* int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, int mode, uv_fs_cb cb)
+* int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_mkdtemp(uv_loop_t* loop, uv_fs_t* req, const char * tpl, uv_fs_cb cb)
+* int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, uv_fs_cb cb)
+* int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent)
+* int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb)
+* int uv_fs_copyfile(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb)
+* int uv_fs_access(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb)
+* int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char * path, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_close_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_open_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, int mode, uv_fs_cb cb)
+* int uv_fs_read_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_unlink_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_write_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t *bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_mkdir_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_mkdtemp_2(uv_loop_t* loop, uv_fs_t* req, const char * tpl, uv_fs_cb cb)
+* int uv_fs_rmdir_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_scandir_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int flags, uv_fs_cb cb)
+* int uv_fs_stat_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_fstat_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_lstat_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_rename_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_fsync_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_fdatasync_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_ftruncate_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb)
+* int uv_fs_copyfile_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_sendfile_2(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb)
+* int uv_fs_access_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_chmod_2(uv_loop_t* loop, uv_fs_t* req, const char * path, int mode, uv_fs_cb cb)
+* int uv_fs_fchmod_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb)
+* int uv_fs_utime_2(uv_loop_t* loop, uv_fs_t* req, const char * path, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_futime_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_link_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, uv_fs_cb cb)
+* int uv_fs_symlink_2(uv_loop_t* loop, uv_fs_t* req, const char * path, const char * new_path, int flags, uv_fs_cb cb)
+* int uv_fs_readlink_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_realpath_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_fs_cb cb)
+* int uv_fs_chown_2(uv_loop_t* loop, uv_fs_t* req, const char * path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_fchown_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
+* int uv_queue_work_2(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
+* int uv_getaddrinfo(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char * node, const char * service, const struct addrinfo* hints)
+* int uv_getaddrinfo_2(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char * node, const char * service, const struct addrinfo* hints)
+* void uv_freeaddrinfo(struct addrinfo* ai)
+* int uv_getnameinfo(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, sockaddr * addr, int flags)
+* int uv_getnameinfo_2(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, sockaddr * addr, int flags)
+* int uv_dlopen(const char * filename, uv_lib_t* lib)
+* void uv_dlclose(uv_lib_t* lib)
+* int uv_dlsym(uv_lib_t* lib, const char * name, void** ptr)
+* const char * uv_dlerror(const uv_lib_t* lib)
+* int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg)
+* int uv_thread_create_2(uv_thread_t* tid, uv_thread_cb entry, void* arg)
+* uv_thread_t uv_thread_self(void)
+* int uv_thread_join(uv_thread_t *tid)
+* int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2)
+* int uv_key_create(uv_key_t* key)
+* void uv_key_delete(uv_key_t* key)
+* void* uv_key_get(uv_key_t* key)
+* void uv_key_set(uv_key_t* key, void* value)
+* int uv_mutex_init(uv_mutex_t* handle)
+* int uv_mutex_init_recursive(uv_mutex_t* handle)
+* void uv_mutex_destroy(uv_mutex_t* handle)
+* void uv_mutex_lock(uv_mutex_t* handle)
+* int uv_mutex_trylock(uv_mutex_t* handle)
+* void uv_mutex_unlock(uv_mutex_t* handle)
+* int uv_rwlock_init(uv_rwlock_t* rwlock)
+* void uv_rwlock_destroy(uv_rwlock_t* rwlock)
+* void uv_rwlock_rdlock(uv_rwlock_t* rwlock)
+* int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_rdunlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_wrlock(uv_rwlock_t* rwlock)
+* int uv_rwlock_trywrlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_wrunlock(uv_rwlock_t* rwlock)
+* int uv_sem_init(uv_sem_t* sem, unsigned int value)
+* void uv_sem_destroy(uv_sem_t* sem)
+* void uv_sem_post(uv_sem_t* sem)
+* void uv_sem_wait(uv_sem_t* sem)
+* int uv_sem_trywait(uv_sem_t* sem)
+* int uv_cond_init(uv_cond_t* cond)
+* void uv_cond_destroy(uv_cond_t* cond)
+* void uv_cond_signal(uv_cond_t* cond)
+* void uv_cond_broadcast(uv_cond_t* cond)
+* void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex)
+* int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout)
+* int uv_barrier_init(uv_barrier_t* barrier, unsigned int count)
+* void uv_barrier_destroy(uv_barrier_t* barrier)
+* int uv_barrier_wait(uv_barrier_t* barrier)
+* uv_handle_type uv_guess_handle(uv_file file)
+* int uv_replace_allocator(uv_malloc_func malloc_func, uv_realloc_func realloc_func, uv_calloc_func calloc_func, uv_free_func free_func)
+* uv_buf_t uv_buf_init(char* base, unsigned int len)
+* char** uv_setup_args(int argc, char** argv)
+* int uv_get_process_title(char* buffer, size_t size)
+* int uv_set_process_title(const char * title)
+* int uv_resident_set_memory(size_t* rss)
+* int uv_uptime(double* uptime)
+* int uv_getrusage(uv_rusage_t* rusage)
+* uv_pid_t uv_os_getpid(void)
+* uv_pid_t uv_os_getppid(void)
+* int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count)
+* void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count)
+* int uv_interface_addresses(uv_interface_address_t** addresses, int* count)
+* void uv_free_interface_addresses(uv_interface_address_t* addresses, int count)
+* int uv_ip6_addr(const char * ip, int port, sockaddr_in6* addr)
+* int uv_ip4_name(sockaddr_in* src, char* dst, size_t size)
+* int uv_ip6_name(sockaddr_in6* src, char* dst, size_t size)
+* int uv_inet_ntop(int af, const void* src, char* dst, size_t size)
+* int uv_inet_pton(int af, const char * src, void* dst)
+* int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size)
+* int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size)
+* int uv_exepath(char* buffer, size_t* size)
+* int uv_cwd(char* buffer, size_t* size)
+* int uv_chdir(const char * dir)
+* int uv_os_homedir(char* buffer, size_t* size)
+* int uv_os_tmpdir(char* buffer, size_t* size)
+* int uv_os_get_passwd(uv_passwd_t* pwd)
+* void uv_os_free_passwd(uv_passwd_t* pwd)
+* uint64_t uv_get_total_memory(void)
+* uint64_t uv_hrtime(void)
+* void uv_print_all_handles(uv_loop_t* loop, FILE* stream)
+* void uv_print_active_handles(uv_loop_t* loop, FILE* stream)
+* int uv_os_getenv(const char * name, char* buffer, size_t* size)
+* int uv_os_setenv(const char * name, const char * value)
+* int uv_os_unsetenv(const char * name)
+* int uv_os_gethostname(char* buffer, size_t* size)
diff --git a/docs/en/target/ringlibzipfuncsdoc.txt b/docs/en/target/ringlibzipfuncsdoc.txt
new file mode 100644 (file)
index 0000000..8ba8985
--- /dev/null
@@ -0,0 +1,19 @@
+.. index:: 
+     single: RingLibZip Functions Reference; Introduction
+
+==============================
+RingLibZip Functions Reference
+==============================
+
+* ZIP_T *zip_openfile(const char *, const char *)
+* int zip_entry_open(ZIP_T*, const char *)
+* int zip_entry_write(ZIP_T*, const char *,int)
+* int zip_entry_fwrite(ZIP_T*, const char *)
+* int zip_entry_read(ZIP_T*, void *, size_t *)
+* int zip_entry_fread(ZIP_T*, const char *cFile)
+* int zip_entry_close(ZIP_T*)
+* void zip_extract_file(const char *cZIPFile,const char *cFile)
+* void zip_extract_allfiles(const char *cFile, const char *cFolder)
+* void zip_close(ZIP_T*)
+* int zip_filescount(ZIP_T *)
+* const char *zip_getfilenamebyindex(ZIP_T *pZip,int index)
diff --git a/docs/en/target/ringmurmurhashfuncsdoc.txt b/docs/en/target/ringmurmurhashfuncsdoc.txt
new file mode 100644 (file)
index 0000000..4033025
--- /dev/null
@@ -0,0 +1,75 @@
+.. index:: 
+     single: RingMurmurHash Functions Reference; Introduction
+
+=====================================
+RingMurmurHash Functions Reference
+=====================================
+
+"   MurmurHash is a non-cryptographic hash function suitable for general hash-based lookup.
+    It was created by Austin Appleby in 2008 and is currently hosted on Github along with its test suite named 'SMHasher'.
+    It also exists in a number of variants,[5] all of which have been released into the public domain.
+    The name comes from two basic operations, multiply (MU) and rotate (R), used in its inner loop.  "
+
+Murmurhash extension is an extension written to implement a full implementation for the MurmurHash library.
+
+Developer: Hassan Ahmed
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; MurmurHash1 functions
+
+MurmurHash1 functions
+=====================
+
+uint32_t murmurhash1(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash1_aligned(string key, int seed, [bool return_type]);
+
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; MurmurHash2 functions
+
+MurmurHash2 functions
+=====================
+
+uint32_t murmurhash2(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash2a(string key, int seed, [bool return_type]);
+
+uint64_t murmurhash64a(string key, int seed, [bool return_type]);
+
+uint64_t murmurhash64b(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash_neutral2(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash_aligned2(string key, int seed, [bool return_type]);
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; MurmurHash3 functions
+
+MurmurHash3 functions
+=====================
+
+uint32_t murmurhash3_x86_32(string key, int seed, [bool return_type]);
+
+list murmurhash3_x86_128(string key, int seed, [bool return_type]);
+
+list murmurhash3_x64_128(string key, int seed, [bool return_type]);
+
+The third optional parameter is to set the type of the returned value, this parameter accepts a bool value [ true, false ], true will return a Hex value, while false will return a integer value.
+
+.. index:: 
+     pair: RingMurmurHash Functions Reference; Example
+
+Example
+=======
+
+
+.. code-block:: ring
+
+       load "murmurhashlib.ring"
+
+       key = "Ring Language"
+
+       see murmurhash3_x86_32(key, 0, 0) + nl // Output: 1894444853
+       see murmurhash3_x86_32(key, 0, 1) + nl // Output: 70eaef35
+
diff --git a/docs/en/target/ringnatural.png b/docs/en/target/ringnatural.png
new file mode 100644 (file)
index 0000000..b6d9738
Binary files /dev/null and b/docs/en/target/ringnatural.png differ
diff --git a/docs/en/target/ringnotepad.txt b/docs/en/target/ringnotepad.txt
new file mode 100644 (file)
index 0000000..4705627
--- /dev/null
@@ -0,0 +1,339 @@
+.. index:: 
+       single: Ring Notepad; Introduction
+
+==================
+Using Ring Notepad
+==================
+
+In this chapter we will learn about using Ring Notepad to write and execute Ring programs quickly
+
+Ring Notepad is just a simple application developed using the Ring language.
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Main Window
+
+Ring Notepad - Main Window
+==========================
+
+When we run the Ring Notepad we get the next dockable windows
+
+* Project Files Window : where we can select and open any ring file (*.ring) quickly.
+* Source Code Window : Where we write the source code. 
+* Form Designer Window : The Form Designer to create GUI application forms.
+* Web Browser Window : Where we read the documentation or quickly open any website.
+* Output Window : Output when we run programs that print to the standard output
+* Function Window : List of functions in the current source file
+* Classes Window : List of classes in the current source file
+
+.. image:: urn_shot1.png
+       :alt: Using Ring Notepad
+
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first console application 
+
+Creating and running your first Console Application 
+===================================================
+
+At first we will type the source code
+
+.. code-block:: ring
+
+       See "Hello, World!"
+
+As in the next image 
+
+.. image:: urn_shot2.png
+       :alt: Using Ring Notepad
+
+Then we will click on the "Save" button from the toolbar (or press CTRL+S)
+
+.. image:: urn_shot3.png
+       :alt: Using Ring Notepad
+
+Determine the source code file name and location. 
+
+For example type : hello 
+
+This will create a new source code file called : hello.ring
+
+.. image:: urn_shot4.png
+       :alt: Using Ring Notepad
+
+To run the program click on "Debug (Run then wait!)" button from the toolbar
+
+.. image:: urn_shot5.png
+       :alt: Using Ring Notepad
+
+The next screen shot present the application during the runtime
+
+Press Enter to continue and return to the Ring Notepad.
+
+.. image:: urn_shot6.png
+       :alt: Using Ring Notepad
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first GUI application 
+
+Creating and running your first GUI/Mobile Application 
+======================================================
+
+To learn how to create GUI applications using Ring check the "Desktop and Mobile development using RingQt" chapter.
+
+Source Code:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               new qWidget() {
+                       resize(400,400)
+                       setWindowTitle("Hello, World!")
+                       show()
+               }
+               exec()
+       }
+
+In Ring notepad we have a special button to run GUI applications without displaying the console window.
+
+.. image:: urn_shot7.png
+       :alt: Using Ring Notepad
+
+The next screen shot present the application during the runtime
+
+.. image:: urn_shot8.png
+       :alt: Using Ring Notepad
+
+       
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first Web application 
+
+Creating and running your first Web Application 
+===============================================
+
+To learn how support Ring in your web server and how to create web applications using Ring check 
+the "Web Development (CGI Library)" chapter.
+
+.. note:: You need to support the Ring language in your web server to be able to run the next example.
+
+Source Code:
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       load "weblib.ring"
+
+       Import System.Web
+
+       new page {
+
+               text("Hello, World!")
+
+       }
+
+
+We can run the application in any web browser or in the browser that are embedded in Ring Notepad.
+
+.. image:: urn_shot9.png
+       :alt: Using Ring Notepad
+
+For Windows users, Ring comes with Apache Web server!
+
+We can run any web application from any folder directly without doing any configuration.
+
+.. image:: runwebapp1.png
+       :alt: Ring Notepad - Run Web Application - shot 1
+
+.. index:: 
+       pair: Ring Notepad; Ring Notepad - Creating and running your first game 
+
+Creating and running your first Desktop/Mobile Game
+===================================================
+
+To learn about creating 2D Games using Ring check the "Demo Project - Game Engine for 2D Games" chapter.
+
+Source Code:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                           
+
+       func main                                        
+
+               oGame = New Game                         
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER            
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=true        
+                               Scaled=true
+                       }
+               }                                        
+
+
+We can run the application as any GUI application.
+
+.. image:: urn_shot10.png
+       :alt: Using Ring Notepad
+
+
+.. index:: 
+       pair: Ring Notepad; The Main File in the Project
+
+The Main File in the Project
+============================
+
+The idea of the Main File ToolBar is to determine the main file in the project When the project contains many source code files
+
+Using this feature we can run the project (Main File) at any time while opening other files in the project without the need to switch to the Main File to run the project.
+
+To quickly use this feature
+
+(Open the project main file)
+
+Press Ctrl+Shift+M to set the current source code file as the main file
+
+Open and modify other source code files in the project
+
+To run the project (Main File) at any time press Ctrl+Shift+F5 (GUI) or Ctrl+Shift+D (Console)
+
+Screen Shots:
+
+.. image:: urn_shot11.png
+       :alt: Ring Notepad
+
+.. image:: urn_shot12.png
+       :alt: Ring Notepad
+
+
+.. index:: 
+       pair: Ring Notepad; The File Menu
+
+The File Menu
+=============
+
+From this menu we can create, open and save the source code files.
+
+Another feature in this menu is "Print to PDF" 
+
+.. image:: rnotemenu_file.png
+       :alt: Ring Notepad - File Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Edit Menu
+
+The Edit Menu
+=============
+
+From the Edit menu we can Cut, Copy and Paste text.
+
+Also we can change the font and the colors.
+
+We can Go to a specific line or use the Find and Replace window 
+to find and replace text.
+
+Also We can set the Tab Width (Number of Spaces)
+
+Starting from Ring 1.8 we have the (Find in Files) option.
+
+Starting from Ring 1.11 we have the (Insert Text, Lower Case, Upper Case & Capitalize) options.
+
+.. image:: rnotemenu_edit.png
+       :alt: Ring Notepad - Edit Menu
+
+.. index:: 
+       pair: Ring Notepad; The View Menu
+
+The View Menu
+=============
+
+From this menu we can show/hide the dockable windows
+
+Also we can change the Style of the Ring Notepad
+
+Common Styles are (Fusion White and Modern Black)
+
+.. image:: rnotemenu_view.png
+       :alt: Ring Notepad - View Menu
+
+Also we can quickly show/hide group of dockable windows based on the context
+
+.. image:: rnotemenu_mode.png
+       :alt: Ring Notepad - View Menu - Set Mode
+
+
+.. index:: 
+       pair: Ring Notepad; The Program Menu
+
+The Program Menu
+================
+
+From this menu we can run the programs
+
+Also we can set the Main file in the project
+
+.. image:: rnotemenu_program.png
+       :alt: Ring Notepad - Program Menu
+
+.. index:: 
+       pair: Ring Notepad; The Browser Menu
+
+The Browser Menu
+================
+
+From this menu we can quickly open common links in the browser
+
+.. image:: rnotemenu_browser.png
+       :alt: Ring Notepad - Browser Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Tools Menu
+
+The Tools Menu
+==============
+
+From this menu we can run the Form Designer in separate window
+
+Also we can run the REPL (Read-Eval-Print-Loop) application
+
+.. image:: rnotemenu_tools.png
+       :alt: Ring Notepad - Tools Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Distribute Menu
+
+The Distribute Menu
+===================
+
+From this menu we can build an executable file for the application
+
+Also we can prepare the application for distribution 
+
+.. image:: rnotedistributemenu.png
+       :alt: Ring Notepad - Distribute Menu
+
+
+.. index:: 
+       pair: Ring Notepad; The Help Menu
+
+The Help Menu
+=============
+
+From this menu we can get the help files (CHM & PDF)
+
+.. image:: rnotemenu_help.png
+       :alt: Ring Notepad - Help Menu
+
+
+
+
diff --git a/docs/en/target/ringnotepad_screenshot.png b/docs/en/target/ringnotepad_screenshot.png
new file mode 100644 (file)
index 0000000..a204e82
Binary files /dev/null and b/docs/en/target/ringnotepad_screenshot.png differ
diff --git a/docs/en/target/ringonmanjarolinux.png b/docs/en/target/ringonmanjarolinux.png
new file mode 100644 (file)
index 0000000..844fcba
Binary files /dev/null and b/docs/en/target/ringonmanjarolinux.png differ
diff --git a/docs/en/target/ringopengl11funcsdoc.txt b/docs/en/target/ringopengl11funcsdoc.txt
new file mode 100644 (file)
index 0000000..a2fe13e
--- /dev/null
@@ -0,0 +1,877 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/target/ringopengl12funcsdoc.txt b/docs/en/target/ringopengl12funcsdoc.txt
new file mode 100644 (file)
index 0000000..506bd83
--- /dev/null
@@ -0,0 +1,917 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.2) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.2) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/target/ringopengl13funcsdoc.txt b/docs/en/target/ringopengl13funcsdoc.txt
new file mode 100644 (file)
index 0000000..e6d8cfe
--- /dev/null
@@ -0,0 +1,1013 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.3) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.3) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/target/ringopengl14funcsdoc.txt b/docs/en/target/ringopengl14funcsdoc.txt
new file mode 100644 (file)
index 0000000..bbf9532
--- /dev/null
@@ -0,0 +1,1052 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.4) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.4) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/target/ringopengl15funcsdoc.txt b/docs/en/target/ringopengl15funcsdoc.txt
new file mode 100644 (file)
index 0000000..8cc3665
--- /dev/null
@@ -0,0 +1,1102 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.5) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 1.5) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/target/ringopengl20funcsdoc.txt b/docs/en/target/ringopengl20funcsdoc.txt
new file mode 100644 (file)
index 0000000..90cf9a4
--- /dev/null
@@ -0,0 +1,1186 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 2.0) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 2.0) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void *lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble *equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte *v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble *v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat *v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint *v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort *v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte *v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint *v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort *v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte *v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble *v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat *v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint *v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort *v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte *v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint *v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort *v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint *textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void *pointer)
+* void glEdgeFlagv(const GLboolean *flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble *u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat *u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble *u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat *u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat *params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint *params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint *textures)
+* void glGetBooleanv(GLenum pname, GLboolean *params)
+* void glGetClipPlane(GLenum plane, GLdouble *equation)
+* void glGetDoublev(GLenum pname, GLdouble *params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat *params)
+* void glGetIntegerv(GLenum pname, GLint *params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat *params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint *params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble *v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat *v)
+* void glGetMapiv(GLenum target, GLenum query, GLint *v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint *params)
+* void glGetPixelMapfv(GLenum map, GLfloat *values)
+* void glGetPixelMapuiv(GLenum map, GLuint *values)
+* void glGetPixelMapusv(GLenum map, GLushort *values)
+* void glGetPointerv(GLenum pname, void* *params)
+* void glGetPolygonStipple(GLubyte *mask)
+* GLubyte * glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint *params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble *params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat *params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint *params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void *pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat *params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint *params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble *c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat *c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint *c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort *c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte *c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void *pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat *params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint *params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat *params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint *params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble *m)
+* void glLoadMatrixf(const GLfloat *m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint *params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble *m)
+* void glMultMatrixf(const GLfloat *m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte *v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble *v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat *v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint *v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort *v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void *pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat *values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte *mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble *v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat *v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint *v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort *v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble *v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat *v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint *v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort *v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble *v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat *v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint *v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort *v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble *v1, const GLdouble *v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat *v1, const GLfloat *v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint *v1, const GLint *v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort *v1, const GLshort *v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint *buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble *v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat *v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint *v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort *v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble *v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat *v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint *v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort *v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble *v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat *v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint *v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort *v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble *v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat *v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint *v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort *v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint *params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint *params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat *params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint *params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble *v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat *v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint *v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort *v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble *v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat *v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint *v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort *v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble *v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat *v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint *v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort *v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void *pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/en/target/ringopengl21funcsdoc.txt b/docs/en/target/ringopengl21funcsdoc.txt
new file mode 100644 (file)
index 0000000..4021008
--- /dev/null
@@ -0,0 +1,1466 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 2.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 2.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl30funcsdoc.txt b/docs/en/target/ringopengl30funcsdoc.txt
new file mode 100644 (file)
index 0000000..30907fd
--- /dev/null
@@ -0,0 +1,1571 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.0) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.0) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl31funcsdoc.txt b/docs/en/target/ringopengl31funcsdoc.txt
new file mode 100644 (file)
index 0000000..7ff162e
--- /dev/null
@@ -0,0 +1,1605 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl32funcsdoc.txt b/docs/en/target/ringopengl32funcsdoc.txt
new file mode 100644 (file)
index 0000000..9f77a9a
--- /dev/null
@@ -0,0 +1,1627 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.2) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.2) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl33funcsdoc.txt b/docs/en/target/ringopengl33funcsdoc.txt
new file mode 100644 (file)
index 0000000..f0f02de
--- /dev/null
@@ -0,0 +1,1628 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.3) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 3.3) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_RGB10_A2UI
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl40funcsdoc.txt b/docs/en/target/ringopengl40funcsdoc.txt
new file mode 100644 (file)
index 0000000..0b9f92d
--- /dev/null
@@ -0,0 +1,1641 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.0) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.0) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl41funcsdoc.txt b/docs/en/target/ringopengl41funcsdoc.txt
new file mode 100644 (file)
index 0000000..62021db
--- /dev/null
@@ -0,0 +1,1641 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.1) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.1) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl42funcsdoc.txt b/docs/en/target/ringopengl42funcsdoc.txt
new file mode 100644 (file)
index 0000000..79de5b2
--- /dev/null
@@ -0,0 +1,1649 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.2) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.2) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl43funcsdoc.txt b/docs/en/target/ringopengl43funcsdoc.txt
new file mode 100644 (file)
index 0000000..dde841a
--- /dev/null
@@ -0,0 +1,1651 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.3) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.3) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl44funcsdoc.txt b/docs/en/target/ringopengl44funcsdoc.txt
new file mode 100644 (file)
index 0000000..15ff710
--- /dev/null
@@ -0,0 +1,1654 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.4) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.4) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl45funcsdoc.txt b/docs/en/target/ringopengl45funcsdoc.txt
new file mode 100644 (file)
index 0000000..0e39358
--- /dev/null
@@ -0,0 +1,1655 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.5) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.5) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringopengl46funcsdoc.txt b/docs/en/target/ringopengl46funcsdoc.txt
new file mode 100644 (file)
index 0000000..b86c3da
--- /dev/null
@@ -0,0 +1,1676 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.6) Functions Reference; Introduction
+
+===========================================
+RingOpenGL (OpenGL 4.6) Functions Reference
+===========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT
+* GL_PARAMETER_BUFFER
+* GL_PARAMETER_BUFFER_BINDING
+* GL_TRANSFORM_FEEDBACK_OVERFLOW
+* GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW
+* GL_VERTICES_SUBMITTED
+* GL_PRIMITIVES_SUBMITTED
+* GL_VERTEX_SHADER_INVOCATIONS
+* GL_TESS_CONTROL_SHADER_PATCHES
+* GL_TESS_EVALUATION_SHADER_INVOCATIONS
+* GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED
+* GL_FRAGMENT_SHADER_INVOCATIONS
+* GL_COMPUTE_SHADER_INVOCATIONS
+* GL_CLIPPING_INPUT_PRIMITIVES
+* GL_CLIPPING_OUTPUT_PRIMITIVES
+* GL_TEXTURE_MAX_ANISOTROPY
+* GL_MAX_TEXTURE_MAX_ANISOTROPY
+* GL_POLYGON_OFFSET_CLAMP
+* GL_SHADER_BINARY_FORMAT_SPIR_V
+* GL_SPIR_V_BINARY
+* GL_SPIR_V_EXTENSIONS
+* GL_NUM_SPIR_V_EXTENSIONS
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint * textures,GLboolean * residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar *name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte * bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid * data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid * lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble * equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte * v)
+* void glColor3sv(const GLshort * v)
+* void glColor3iv(const GLint * v)
+* void glColor3fv(const GLfloat * v)
+* void glColor3dv(const GLdouble * v)
+* void glColor3ubv(const GLubyte * v)
+* void glColor3usv(const GLushort * v)
+* void glColor3uiv(const GLuint * v)
+* void glColor4bv(const GLbyte * v)
+* void glColor4sv(const GLshort * v)
+* void glColor4iv(const GLint * v)
+* void glColor4fv(const GLfloat * v)
+* void glColor4dv(const GLdouble * v)
+* void glColor4ubv(const GLubyte * v)
+* void glColor4usv(const GLushort * v)
+* void glColor4uiv(const GLuint * v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid * data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint * buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint * ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint * textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum *bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid * indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid * pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat * buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat * params)
+* void glFogiv(GLenum pname,const GLint * params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble * coord)
+* void glFogCoordfv(GLfloat * coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid * pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint * buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint * ids)
+* void glGenTextures(GLsizei n,GLuint * textures)
+* void glGetBooleanv(GLenum pname,GLboolean * params)
+* void glGetDoublev(GLenum pname,GLdouble * params)
+* void glGetFloatv(GLenum pname,GLfloat * params)
+* void glGetIntegerv(GLenum pname,GLint * params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei *length,GLint *size,GLenum *type,GLchar *name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei *count,GLuint *shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar *name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint * data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid ** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid * data)
+* void glGetClipPlane(GLenum plane,GLdouble * equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid * table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid * img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid * image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint * params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid * values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat * params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint * params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble * v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat * v)
+* void glGetMapiv(GLenum target,GLenum query,GLint * v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat * params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint * params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid * values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetPixelMapfv(GLenum map,GLfloat * data)
+* void glGetPixelMapuiv(GLenum map,GLuint * data)
+* void glGetPixelMapusv(GLenum map,GLushort * data)
+* void glGetPointerv(GLenum pname,GLvoid ** params)
+* void glGetPolygonStipple(GLubyte * pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint *params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint * params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid * row,GLvoid * column,GLvoid * span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint *params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei *length,GLchar *infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei *length,GLchar *source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint * params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble * params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat * params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint * params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid * img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat * params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat * params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint * params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat *params)
+* void glGetUniformiv(GLuint program,GLint location,GLint *params)
+* GLint glGetUniformLocation(GLuint program,const GLchar *name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble *params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat *params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint *params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid **pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort * c)
+* void glIndexiv(const GLint * c)
+* void glIndexfv(const GLfloat * c)
+* void glIndexdv(const GLdouble * c)
+* void glIndexubv(const GLubyte * c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid * pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat * params)
+* void glLightiv(GLenum light,GLenum pname,const GLint * params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat * params)
+* void glLightModeliv(GLenum pname,const GLint * params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble * m)
+* void glLoadMatrixf(const GLfloat * m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble * m)
+* void glLoadTransposeMatrixf(const GLfloat * m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat * points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble * points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat * points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble * points)
+* void * glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble * m)
+* void glMultMatrixf(const GLfloat * m)
+* void glMultTransposeMatrixd(const GLdouble * m)
+* void glMultTransposeMatrixf(const GLfloat * m)
+* void glMultiDrawArrays(GLenum mode,GLint * first,GLsizei * count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei * count,GLenum type,const GLvoid ** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord1iv(GLenum target,const GLint * v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord2iv(GLenum target,const GLint * v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord3iv(GLenum target,const GLint * v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble * v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort * v)
+* void glMultiTexCoord4iv(GLenum target,const GLint * v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat * v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble * v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte * v)
+* void glNormal3dv(const GLdouble * v)
+* void glNormal3fv(const GLfloat * v)
+* void glNormal3iv(const GLint * v)
+* void glNormal3sv(const GLshort * v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat * values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint * values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort * values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte * pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint * textures,const GLclampf * priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid * data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble * v1,const GLdouble * v2)
+* void glRectfv(const GLfloat * v1,const GLfloat * v2)
+* void glRectiv(const GLint * v1,const GLint * v2)
+* void glRectsv(const GLshort * v1,const GLshort * v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte * v)
+* void glSecondaryColor3sv(const GLshort * v)
+* void glSecondaryColor3iv(const GLint * v)
+* void glSecondaryColor3fv(const GLfloat * v)
+* void glSecondaryColor3dv(const GLdouble * v)
+* void glSecondaryColor3ubv(const GLubyte * v)
+* void glSecondaryColor3usv(const GLushort * v)
+* void glSecondaryColor3uiv(const GLuint * v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glSelectBuffer(GLsizei size,GLuint * buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * row,const GLvoid * column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar **string,const GLint *length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort * v)
+* void glTexCoord1iv(const GLint * v)
+* void glTexCoord1fv(const GLfloat * v)
+* void glTexCoord1dv(const GLdouble * v)
+* void glTexCoord2sv(const GLshort * v)
+* void glTexCoord2iv(const GLint * v)
+* void glTexCoord2fv(const GLfloat * v)
+* void glTexCoord2dv(const GLdouble * v)
+* void glTexCoord3sv(const GLshort * v)
+* void glTexCoord3iv(const GLint * v)
+* void glTexCoord3fv(const GLfloat * v)
+* void glTexCoord3dv(const GLdouble * v)
+* void glTexCoord4sv(const GLshort * v)
+* void glTexCoord4iv(const GLint * v)
+* void glTexCoord4fv(const GLfloat * v)
+* void glTexCoord4dv(const GLdouble * v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint * params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat * params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble * params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat * params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint * params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid * data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid * data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat *value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint *value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint *value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat *value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort * v)
+* void glVertex2iv(const GLint * v)
+* void glVertex2fv(const GLfloat * v)
+* void glVertex2dv(const GLdouble * v)
+* void glVertex3sv(const GLshort * v)
+* void glVertex3iv(const GLint * v)
+* void glVertex3fv(const GLfloat * v)
+* void glVertex3dv(const GLdouble * v)
+* void glVertex4sv(const GLshort * v)
+* void glVertex4iv(const GLint * v)
+* void glVertex4fv(const GLfloat * v)
+* void glVertex4dv(const GLdouble * v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib1sv(GLuint index,const GLshort *v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib2sv(GLuint index,const GLshort *v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib3sv(GLuint index,const GLshort *v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat *v)
+* void glVertexAttrib4sv(GLuint index,const GLshort *v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble *v)
+* void glVertexAttrib4iv(GLuint index,const GLint *v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte *v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte *v)
+* void glVertexAttrib4usv(GLuint index,const GLushort *v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint *v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid * pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid * pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort * v)
+* void glWindowPos2iv(const GLint * v)
+* void glWindowPos2fv(const GLfloat * v)
+* void glWindowPos2dv(const GLdouble * v)
+* void glWindowPos3sv(const GLshort * v)
+* void glWindowPos3iv(const GLint * v)
+* void glWindowPos3fv(const GLfloat * v)
+* void glWindowPos3dv(const GLdouble * v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte * gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte * gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat * model,const GLfloat * perspective,const GLint * view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs *gluNewNurbsRenderer(void)
+* GLUquadric *gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat * knots,GLint stride,GLfloat * control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint * viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void * dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble * location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble * model,const GLdouble * proj,const GLint * view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/en/target/ringpm.txt b/docs/en/target/ringpm.txt
new file mode 100644 (file)
index 0000000..27f09d3
--- /dev/null
@@ -0,0 +1,632 @@
+.. index:: 
+       single: Ring Package Manager (RingPM); Introduction
+
+=================================
+The Ring Package Manager (RingPM)
+=================================
+
+In this chapter we will learn about using the Ring Package Manager (RingPM)
+
+RingPM is a tool for discovering, installing and updating Ring packages.
+
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Features
+
+Features
+========
+
+The Package Manager uses Semantic Versioning to check compatibility between packages 
+
+The Package Manager comes with the next options
+
+.. code-block:: none
+
+       Usage   : ringpm [command]
+       Command : search  [keywords...]
+       Command : refresh : Update the Registry (Packages List)
+       Command : install [ <packagename> [from <UserName>] [branch <branchname>] ]
+       Command : list    [-u : check updates]
+       Command : run     [packagename]
+       Command : update  <packagename>
+       Command : remove  <packagename>
+       Command : format  : Delete All Packages
+       Command : new     <packagename>
+       Command : package : Create package in the current folder
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Discovering Packages
+
+Discovering Packages
+====================
+
+We can discover new packages using the Search command
+
+Using this command we can search in the RingPM Registry (Packages Index)
+
+The RingPM Registry is a local copy of all registred packages.
+
+.. code-block:: none
+
+       ringpm search [keywords...]
+
+Example:
+
+.. code-block:: none
+
+       ringpm search notepad
+
+Output:
+
+.. code-block:: none
+
+       Package : ringnotepad (Ring Notepad)
+       Package : notepadppeditorextension (Notepad++ Editor Extension package)
+
+To print all packages in the RingPM Registry, use the search command without keywords.
+
+Example:
+
+.. code-block:: none
+
+       ringpm search
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Updating the RingPM Registry
+
+Updating the RingPM Registry
+============================
+
+The RingPM Registry is a local copy of all registred packages.
+
+We can update the local copy using the Refresh command
+
+Example:
+
+.. code-block:: none
+
+       ringpm refresh
+
+Output:
+
+.. code-block:: none
+
+       No updates to the Registry, Nothing to do!
+
+Or
+
+.. code-block:: none
+
+       The Registry is updated from revision 110 (2019/01/13) to revision 112 (2019/01/15)
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Installing Packages
+
+Installing Packages
+===================
+
+
+We can install new packages using the Install command
+
+.. code-block:: none
+
+       ringpm install [ <packagename> [from <UserName>] [branch <branchname>] ]
+
+We can type only the package name to get the package information from the RingPM Registry or
+we can determine the user name (GitHub) and the branch name of the github project (optional).
+
+If the current folder is a package folder then we don't need to write the package name. 
+
+Example (1) :
+
+.. code-block:: none
+
+       ringpm install ringnotepad
+
+Example (2) :
+
+.. code-block:: none
+
+       ringpm install goldmagic800
+
+Example (3) :
+
+.. code-block:: none
+
+       ringpm install gameoflife
+
+If the package is not added to the RingPM Registry, We can install it directly from the GitHub user
+
+Example (4) :
+
+.. code-block:: none
+
+       ringpm install firstpackage from mahmoudfayed
+
+To run the package after installation
+
+.. code-block:: none
+
+       ringpm run firstpackage
+
+To install a package in the current folder
+
+Example (5) :
+
+.. code-block:: none
+
+       ringpm install
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Printing List of Installed Packages
+
+Printing List of Installed Packages
+===================================
+
+We can know the installed packages using the List command
+
+.. code-block:: none
+
+       ringpm list [-u : check updates]
+
+Example
+
+.. code-block:: none
+
+       ringpm list
+
+Output
+
+.. code-block:: none
+
+       (analogclock)          : The AnalogClock Package [master]         -- (1.0.0)
+       (androidringlibsdl)    : The AndroidRingLibSDL Package [master]   -- (1.0.0)
+       (androidringqt)        : The AndroidRingQt Package [master]       -- (1.0.0)
+       (atomeditorextension)  : The AtomEditorExtension Package [master] -- (1.0.0)
+       (bignumber)            : The BigNumber Package [master]           -- (1.0.0)
+       (calculator)           : The Calculator Package [master]          -- (1.0.0)
+       (cards)                : The Cards Package [master]               -- (1.0.0)
+       (checkers)             : The Checkers Package [master]            -- (1.0.0)
+       (chess)                : The Chess Package [master]               -- (1.0.0)
+       ....
+
+To check for new updates
+
+.. code-block:: none
+
+       ringpm list -u
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Run Package
+
+Run Package
+===========
+
+After installing a package, we can run it using the Run command.
+
+.. code-block:: none
+
+       ringpm run [packagename]
+
+Example(1):
+
+.. code-block:: none
+
+       ringpm run ringnotepad
+
+Example(2):
+
+.. code-block:: none
+
+       ringpm run goldmagic800
+
+Example(3):
+
+.. code-block:: none
+
+       ringpm run gameoflife
+
+To run a package in the current folder
+
+Example(4):
+
+.. code-block:: none
+
+       ringpm run
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Update Package
+
+Update Package
+==============
+
+We can update a package using the Update command
+
+.. code-block:: none
+
+       ringpm update <packagename>
+
+Example:
+
+.. code-block:: none
+
+       ringpm update ringnotepad
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Remove Package
+
+Remove Package
+==============
+
+We can remove a package using the Remove command
+
+.. code-block:: none
+
+       ringpm remove <packagename>
+
+Example:
+
+.. code-block:: none
+
+       ringpm remove ringnotepad
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Deleting All Packages
+
+Deleting All Packages
+=====================
+
+We can delete all packages using the Format command
+
+Example:
+
+.. code-block:: none
+
+       ringpm format
+
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Creating New Package
+
+Creating New Package
+====================
+
+We can create new package using the New command
+
+.. code-block:: none
+
+       ringpm new <packagename>
+
+Example:
+
+.. code-block:: none
+
+       ringpm new myapp
+
+This will create new folder called my myapp
+
+The new folder will contains the next file
+
+* package.ring : The package description and files 
+* main.ring : main program (used by the Run command)
+* lib.ring : library file for the package 
+
+File  : main.ring
+
+.. code-block:: ring
+
+       # The Main File
+
+       load "lib.ring"
+
+       func main
+
+               ? "Hello, World!"
+
+
+File : lib.ring
+
+.. code-block:: ring
+
+       # The Library File
+
+File : package.ring
+
+.. code-block:: ring
+
+       aPackageInfo = [
+               :name = "The myapp Package",
+               :description = "Our myapp package using the Ring programming language",
+               :folder = "myapp",
+               :developer = "",
+               :email = "",
+               :license = "MIT License",
+               :version = "1.0.0",
+               :ringversion = "1.10",
+               :versions =     [
+                       [
+                               :version = "1.0.0",
+                               :branch = "master"
+                       ]
+               ],
+               :libs =         [
+                       [
+                               :name = "",
+                               :version = "",
+                               :providerusername = ""
+                       ]
+               ],
+               :files =        [
+                       "lib.ring",
+                       "main.ring"
+               ],
+               :ringfolderfiles =      [
+
+               ],
+               :windowsfiles =         [
+
+               ],
+               :linuxfiles =   [
+
+               ],
+               :ubuntufiles =  [
+
+               ],
+               :fedorafiles =  [
+
+               ],
+               :macosfiles =   [
+
+               ],
+               :windowsringfolderfiles =       [
+
+               ],
+               :linuxringfolderfiles =         [
+
+               ],
+               :ubunturingfolderfiles =        [
+
+               ],
+               :fedoraringfolderfiles =        [
+
+               ],
+               :macosringfolderfiles =         [
+
+               ],
+               :run = "ring main.ring",
+               :windowsrun = "",
+               :linuxrun = "",
+               :macosrun = "",
+               :ubunturun = "",
+               :fedorarun = "",
+               :setup = "",
+               :windowssetup = "",
+               :linuxsetup = "",
+               :macossetup = "",
+               :ubuntusetup = "",
+               :fedorasetup = "",
+               :remove = "",
+               :windowsremove = "",
+               :linuxremove = "",
+               :macosremove = "",
+               :ubunturemove = "",
+               :fedoraremove = ""
+       ]
+       
+.. index:: 
+       pair: Ring Package Manager (RingPM); The Package Description File
+
+The Package Description File
+============================
+
+The package description file contains the package information defined in the list aPackageInfo
+
+=======================        =================================================================================
+Attribute              Description
+=======================        =================================================================================
+Name                   Package Name
+Description            Package Desciption
+Folder                 The Folder Name (Will be created in ring/ringpm/packages)
+Developer              The Package Developer Name  
+Email                  The Package Developer Email
+License                        The Package License
+Version                        The Current Version of the Package (Latest Release)
+RingVersion            The Required Ring Language Version (Minimum Version)
+Versions               List of different versions provided by different branches in the GitHub project 
+Libs                   List of dependencies (Defined by name, version & GitHub user name)
+Files                  List of files (will be installed in ring/ringpm/packages/[Folder]
+RingFolderFiles                List of files (will be installed in ring folder)
+WindowsFiles           Like (Files) but for Microsoft Windows Only
+LinuxFiles             Like (Files) but for Linux Only
+MacOSFiles             Like (Files) but for macOS Only
+UbuntuFiles            Like (Files) but for Ubuntu Only
+FedoraFiles            Like (Files) but for Fedora Only
+WindowsRingFolderFiles         Like (RingFolderFiles) but for Microsoft Windows Only
+LinuxRingFolderFiles   Like (RingFolderFiles) but for Linux Only
+MacOSRingFolderFiles   Like (RingFolderFiles) but for macOS Only
+UbuntuRingFolderFiles  Like (RingFolderFiles) but for Ubuntu Only
+FedoraRingFolderFiles  Like (RingFolderFiles) but for Fedora Only
+Run                    System Command (Command prompt or Terminal) to run the package
+WindowsRun             Like (Run) but for Microsoft Windows Only
+LinuxRun               Like (Run) but for Linux Only
+MacOSRun               Like (Run) but for macOS Only
+UbuntuRun              Like (Run) but for Ubuntu Only
+FedoraRun              Like (Run) but for Fedora Only
+Setup                  System Command (Command prompt or Terminal) after downloading the package files
+WindowsSetup           Like (Setup) but for Microsoft Windows Only
+LinuxSetup             Like (Setup) but for Linux Only
+MacOSSetup             Like (Setup) but for macOS Only
+UbuntuSetup            Like (Setup) but for Ubuntu Only
+FedoraSetup            Like (Setup) but for Fedora Only
+Remove                 System Command (Command prompt or Terminal) before removing the package files
+WindowsRemove          Like (Remove) but for Microsoft Windows Only
+LinuxRemove            Like (Remove) but for Linux Only
+MacOSRemove            Like (Remove) but for macOS Only
+UbuntuRemove           Like (Remove) but for Ubuntu Only
+FedoraRemove           Like (Remove) but for Fedora Only
+=======================        =================================================================================
+
+
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); Create Package in the Current Folder
+
+Create Package in the Current Folder
+====================================
+
+To create a package for an application that already exists, go to the application folder then type
+
+.. code-block:: none
+
+       ringpm package
+
+This will create the package definition file (package.ring) and will add all of the application files to the package definition.
+
+Each RingPM package contains the package definition file (package.ring)
+
+The package definition file is a list that describe the package information and files.
+
+Example : 
+
+The package definition file for the Ring Notepad package
+
+.. code-block:: ring
+
+       aPackageInfo = [
+               :name = "The RingNotepad Package",
+               :description = "Our RingNotepad package using the Ring programming language",
+               :folder = "ringnotepad",
+               :developer = "Mahmoud Fayed",
+               :email = "msfclipper@yahoo.com",
+               :license = "MIT License",
+               :version = "1.0.0",
+               :ringversion = "1.10",
+               :versions =     [
+                       [
+                               :version = "1.0.0",
+                               :branch = "master"
+                       ]
+               ],
+               :libs =         [
+                       [
+                               :name = "stdlib",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "ringqt",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "findinfiles",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "formdesigner",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "libdepwin_apache",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ]
+               ],
+               :files =        [
+                       "main.ring",
+                       "README.md"
+               ],
+               :ringfolderfiles =      [
+                       "applications/rnote/batch/killwebserver.bat",
+                       "applications/rnote/batch/run.bat",
+                       "applications/rnote/batch/run2.bat",
+                       "applications/rnote/image/back.jpg",
+                       "applications/rnote/image/back2.jpg",
+                       "applications/rnote/image/close.png",
+                       "applications/rnote/image/colors.png",
+                       "applications/rnote/image/copy.png",
+                       "applications/rnote/image/cut.png",
+                       "applications/rnote/image/debug.png",
+                       "applications/rnote/image/font.png",
+                       "applications/rnote/image/formdesigner.png",
+                       "applications/rnote/image/new.png",
+                       "applications/rnote/image/notepad.png",
+                       "applications/rnote/image/open.png",
+                       "applications/rnote/image/paste.png",
+                       "applications/rnote/image/print.png",
+                       "applications/rnote/image/project.png",
+                       "applications/rnote/image/richtext.png",
+                       "applications/rnote/image/run.png",
+                       "applications/rnote/image/rungui.png",
+                       "applications/rnote/image/save.png",
+                       "applications/rnote/image/saveas.png",
+                       "applications/rnote/image/search.png",
+                       "applications/rnote/image/source.png",
+                       "applications/rnote/image/undo.png",
+                       "applications/rnote/image/web.png",
+                       "applications/rnote/README.md",
+                       "applications/rnote/rnote.ring",
+                       "applications/rnote/rnoteactivefile.ring",
+                       "applications/rnote/rnoteactivefolder.ring",
+                       "applications/rnote/rnoteautocomplete.ring",
+                       "applications/rnote/rnotebase.ring",
+                       "applications/rnote/rnotecontroller.ring",
+                       "applications/rnote/rnotedistribute.ring",
+                       "applications/rnote/rnoteeditmenu.ring",
+                       "applications/rnote/rnoteeditorevents.ring",
+                       "applications/rnote/rnotefilemenu.ring",
+                       "applications/rnote/rnotefiles.ring",
+                       "applications/rnote/rnotefilestabs.ring",
+                       "applications/rnote/rnotefind.ring",
+                       "applications/rnote/rnotefindinfiles.ring",
+                       "applications/rnote/rnoteformdesigner.ring",
+                       "applications/rnote/rnotegoto.ring",
+                       "applications/rnote/rnotehelp.ring",
+                       "applications/rnote/rnotelists.ring",
+                       "applications/rnote/rnotemainfiletoolbar.ring",
+                       "applications/rnote/rnotemainwindow.ring",
+                       "applications/rnote/rnotemode.ring",
+                       "applications/rnote/rnoteoutputwindow.ring",
+                       "applications/rnote/rnoteprogrammenu.ring",
+                       "applications/rnote/rnoterun.ring",
+                       "applications/rnote/rnotesettings.ring",
+                       "applications/rnote/rnotestyle.ring",
+                       "applications/rnote/rnotetabwidth.ring",
+                       "applications/rnote/rnotetools.ring",
+                       "applications/rnote/rnotetreeviewevents.ring",
+                       "applications/rnote/rnoteviewmenu.ring",
+                       "applications/rnote/rnotewebbrowser.ring"
+               ],
+               :run = "ring main.ring"
+       ]
+
+.. index:: 
+       pair: Ring Package Manager (RingPM); The RingPM Registry File
+
+The RingPM Registry File
+========================
+
+The RingPM Registry is a local copy of all registred packages.
+
+.. code-block:: ring
+
+       aPackagesRegistry = [
+               [ :name = "ringpresentation",
+                 :description = "Powerpoint presentation for the Ring programming language",
+                 :ProviderUserName = "ringpackages"
+               ]
+               # ...
+       ]
+
+Each package is defined using a list that determine 
+
+* Package Name
+* Package Description
+* Provider User Name (GitHub User Name)
+
+We can register new packages by updating the registry file then sending a Pull Request
+
+URL : https://github.com/ring-lang/ring/blob/master/ringpm/registry/registry.ring
+
diff --git a/docs/en/target/ringqt_shot1.jpg b/docs/en/target/ringqt_shot1.jpg
new file mode 100644 (file)
index 0000000..6be6b88
Binary files /dev/null and b/docs/en/target/ringqt_shot1.jpg differ
diff --git a/docs/en/target/ringqt_shot10.jpg b/docs/en/target/ringqt_shot10.jpg
new file mode 100644 (file)
index 0000000..77f98d0
Binary files /dev/null and b/docs/en/target/ringqt_shot10.jpg differ
diff --git a/docs/en/target/ringqt_shot11.jpg b/docs/en/target/ringqt_shot11.jpg
new file mode 100644 (file)
index 0000000..af53b68
Binary files /dev/null and b/docs/en/target/ringqt_shot11.jpg differ
diff --git a/docs/en/target/ringqt_shot12.jpg b/docs/en/target/ringqt_shot12.jpg
new file mode 100644 (file)
index 0000000..cebc4bb
Binary files /dev/null and b/docs/en/target/ringqt_shot12.jpg differ
diff --git a/docs/en/target/ringqt_shot13.jpg b/docs/en/target/ringqt_shot13.jpg
new file mode 100644 (file)
index 0000000..d5f69ab
Binary files /dev/null and b/docs/en/target/ringqt_shot13.jpg differ
diff --git a/docs/en/target/ringqt_shot14.jpg b/docs/en/target/ringqt_shot14.jpg
new file mode 100644 (file)
index 0000000..5919832
Binary files /dev/null and b/docs/en/target/ringqt_shot14.jpg differ
diff --git a/docs/en/target/ringqt_shot15-B.jpg b/docs/en/target/ringqt_shot15-B.jpg
new file mode 100644 (file)
index 0000000..46491bd
Binary files /dev/null and b/docs/en/target/ringqt_shot15-B.jpg differ
diff --git a/docs/en/target/ringqt_shot15.jpg b/docs/en/target/ringqt_shot15.jpg
new file mode 100644 (file)
index 0000000..c2a2f00
Binary files /dev/null and b/docs/en/target/ringqt_shot15.jpg differ
diff --git a/docs/en/target/ringqt_shot16.jpg b/docs/en/target/ringqt_shot16.jpg
new file mode 100644 (file)
index 0000000..d6c13ae
Binary files /dev/null and b/docs/en/target/ringqt_shot16.jpg differ
diff --git a/docs/en/target/ringqt_shot17.jpg b/docs/en/target/ringqt_shot17.jpg
new file mode 100644 (file)
index 0000000..4c2f196
Binary files /dev/null and b/docs/en/target/ringqt_shot17.jpg differ
diff --git a/docs/en/target/ringqt_shot18.jpg b/docs/en/target/ringqt_shot18.jpg
new file mode 100644 (file)
index 0000000..c5e0fda
Binary files /dev/null and b/docs/en/target/ringqt_shot18.jpg differ
diff --git a/docs/en/target/ringqt_shot19.jpg b/docs/en/target/ringqt_shot19.jpg
new file mode 100644 (file)
index 0000000..6ccb1dd
Binary files /dev/null and b/docs/en/target/ringqt_shot19.jpg differ
diff --git a/docs/en/target/ringqt_shot2.jpg b/docs/en/target/ringqt_shot2.jpg
new file mode 100644 (file)
index 0000000..85df266
Binary files /dev/null and b/docs/en/target/ringqt_shot2.jpg differ
diff --git a/docs/en/target/ringqt_shot20.jpg b/docs/en/target/ringqt_shot20.jpg
new file mode 100644 (file)
index 0000000..add0364
Binary files /dev/null and b/docs/en/target/ringqt_shot20.jpg differ
diff --git a/docs/en/target/ringqt_shot21.jpg b/docs/en/target/ringqt_shot21.jpg
new file mode 100644 (file)
index 0000000..e02df0a
Binary files /dev/null and b/docs/en/target/ringqt_shot21.jpg differ
diff --git a/docs/en/target/ringqt_shot22.jpg b/docs/en/target/ringqt_shot22.jpg
new file mode 100644 (file)
index 0000000..6d86117
Binary files /dev/null and b/docs/en/target/ringqt_shot22.jpg differ
diff --git a/docs/en/target/ringqt_shot23.jpg b/docs/en/target/ringqt_shot23.jpg
new file mode 100644 (file)
index 0000000..2dabd0d
Binary files /dev/null and b/docs/en/target/ringqt_shot23.jpg differ
diff --git a/docs/en/target/ringqt_shot24.jpg b/docs/en/target/ringqt_shot24.jpg
new file mode 100644 (file)
index 0000000..95e585f
Binary files /dev/null and b/docs/en/target/ringqt_shot24.jpg differ
diff --git a/docs/en/target/ringqt_shot25.jpg b/docs/en/target/ringqt_shot25.jpg
new file mode 100644 (file)
index 0000000..4db7f4b
Binary files /dev/null and b/docs/en/target/ringqt_shot25.jpg differ
diff --git a/docs/en/target/ringqt_shot26.jpg b/docs/en/target/ringqt_shot26.jpg
new file mode 100644 (file)
index 0000000..86d5a36
Binary files /dev/null and b/docs/en/target/ringqt_shot26.jpg differ
diff --git a/docs/en/target/ringqt_shot27.jpg b/docs/en/target/ringqt_shot27.jpg
new file mode 100644 (file)
index 0000000..8093a83
Binary files /dev/null and b/docs/en/target/ringqt_shot27.jpg differ
diff --git a/docs/en/target/ringqt_shot28.jpg b/docs/en/target/ringqt_shot28.jpg
new file mode 100644 (file)
index 0000000..d37333c
Binary files /dev/null and b/docs/en/target/ringqt_shot28.jpg differ
diff --git a/docs/en/target/ringqt_shot29.jpg b/docs/en/target/ringqt_shot29.jpg
new file mode 100644 (file)
index 0000000..8c121ce
Binary files /dev/null and b/docs/en/target/ringqt_shot29.jpg differ
diff --git a/docs/en/target/ringqt_shot3.jpg b/docs/en/target/ringqt_shot3.jpg
new file mode 100644 (file)
index 0000000..e06b786
Binary files /dev/null and b/docs/en/target/ringqt_shot3.jpg differ
diff --git a/docs/en/target/ringqt_shot30.jpg b/docs/en/target/ringqt_shot30.jpg
new file mode 100644 (file)
index 0000000..70c477d
Binary files /dev/null and b/docs/en/target/ringqt_shot30.jpg differ
diff --git a/docs/en/target/ringqt_shot31.jpg b/docs/en/target/ringqt_shot31.jpg
new file mode 100644 (file)
index 0000000..6e2abe7
Binary files /dev/null and b/docs/en/target/ringqt_shot31.jpg differ
diff --git a/docs/en/target/ringqt_shot32.jpg b/docs/en/target/ringqt_shot32.jpg
new file mode 100644 (file)
index 0000000..31ab916
Binary files /dev/null and b/docs/en/target/ringqt_shot32.jpg differ
diff --git a/docs/en/target/ringqt_shot33.jpg b/docs/en/target/ringqt_shot33.jpg
new file mode 100644 (file)
index 0000000..3063664
Binary files /dev/null and b/docs/en/target/ringqt_shot33.jpg differ
diff --git a/docs/en/target/ringqt_shot34.jpg b/docs/en/target/ringqt_shot34.jpg
new file mode 100644 (file)
index 0000000..b30e2e9
Binary files /dev/null and b/docs/en/target/ringqt_shot34.jpg differ
diff --git a/docs/en/target/ringqt_shot35.jpg b/docs/en/target/ringqt_shot35.jpg
new file mode 100644 (file)
index 0000000..d178473
Binary files /dev/null and b/docs/en/target/ringqt_shot35.jpg differ
diff --git a/docs/en/target/ringqt_shot36.jpg b/docs/en/target/ringqt_shot36.jpg
new file mode 100644 (file)
index 0000000..d684307
Binary files /dev/null and b/docs/en/target/ringqt_shot36.jpg differ
diff --git a/docs/en/target/ringqt_shot37.jpg b/docs/en/target/ringqt_shot37.jpg
new file mode 100644 (file)
index 0000000..2bbd564
Binary files /dev/null and b/docs/en/target/ringqt_shot37.jpg differ
diff --git a/docs/en/target/ringqt_shot38.jpg b/docs/en/target/ringqt_shot38.jpg
new file mode 100644 (file)
index 0000000..ec6f632
Binary files /dev/null and b/docs/en/target/ringqt_shot38.jpg differ
diff --git a/docs/en/target/ringqt_shot39.jpg b/docs/en/target/ringqt_shot39.jpg
new file mode 100644 (file)
index 0000000..e2365ca
Binary files /dev/null and b/docs/en/target/ringqt_shot39.jpg differ
diff --git a/docs/en/target/ringqt_shot4.jpg b/docs/en/target/ringqt_shot4.jpg
new file mode 100644 (file)
index 0000000..02e58c9
Binary files /dev/null and b/docs/en/target/ringqt_shot4.jpg differ
diff --git a/docs/en/target/ringqt_shot40.jpg b/docs/en/target/ringqt_shot40.jpg
new file mode 100644 (file)
index 0000000..ed63658
Binary files /dev/null and b/docs/en/target/ringqt_shot40.jpg differ
diff --git a/docs/en/target/ringqt_shot41.jpg b/docs/en/target/ringqt_shot41.jpg
new file mode 100644 (file)
index 0000000..dc8ec01
Binary files /dev/null and b/docs/en/target/ringqt_shot41.jpg differ
diff --git a/docs/en/target/ringqt_shot42.jpg b/docs/en/target/ringqt_shot42.jpg
new file mode 100644 (file)
index 0000000..124f6cb
Binary files /dev/null and b/docs/en/target/ringqt_shot42.jpg differ
diff --git a/docs/en/target/ringqt_shot43.jpg b/docs/en/target/ringqt_shot43.jpg
new file mode 100644 (file)
index 0000000..ab8e07f
Binary files /dev/null and b/docs/en/target/ringqt_shot43.jpg differ
diff --git a/docs/en/target/ringqt_shot44.jpg b/docs/en/target/ringqt_shot44.jpg
new file mode 100644 (file)
index 0000000..cd29ce2
Binary files /dev/null and b/docs/en/target/ringqt_shot44.jpg differ
diff --git a/docs/en/target/ringqt_shot45.jpg b/docs/en/target/ringqt_shot45.jpg
new file mode 100644 (file)
index 0000000..cb8b58b
Binary files /dev/null and b/docs/en/target/ringqt_shot45.jpg differ
diff --git a/docs/en/target/ringqt_shot46.jpg b/docs/en/target/ringqt_shot46.jpg
new file mode 100644 (file)
index 0000000..2caef03
Binary files /dev/null and b/docs/en/target/ringqt_shot46.jpg differ
diff --git a/docs/en/target/ringqt_shot47.jpg b/docs/en/target/ringqt_shot47.jpg
new file mode 100644 (file)
index 0000000..0815aed
Binary files /dev/null and b/docs/en/target/ringqt_shot47.jpg differ
diff --git a/docs/en/target/ringqt_shot48.jpg b/docs/en/target/ringqt_shot48.jpg
new file mode 100644 (file)
index 0000000..fd422d6
Binary files /dev/null and b/docs/en/target/ringqt_shot48.jpg differ
diff --git a/docs/en/target/ringqt_shot49.jpg b/docs/en/target/ringqt_shot49.jpg
new file mode 100644 (file)
index 0000000..c529f50
Binary files /dev/null and b/docs/en/target/ringqt_shot49.jpg differ
diff --git a/docs/en/target/ringqt_shot5-b.jpg b/docs/en/target/ringqt_shot5-b.jpg
new file mode 100644 (file)
index 0000000..a42cbf9
Binary files /dev/null and b/docs/en/target/ringqt_shot5-b.jpg differ
diff --git a/docs/en/target/ringqt_shot5.jpg b/docs/en/target/ringqt_shot5.jpg
new file mode 100644 (file)
index 0000000..9407d53
Binary files /dev/null and b/docs/en/target/ringqt_shot5.jpg differ
diff --git a/docs/en/target/ringqt_shot50.jpg b/docs/en/target/ringqt_shot50.jpg
new file mode 100644 (file)
index 0000000..e0c4500
Binary files /dev/null and b/docs/en/target/ringqt_shot50.jpg differ
diff --git a/docs/en/target/ringqt_shot51.jpg b/docs/en/target/ringqt_shot51.jpg
new file mode 100644 (file)
index 0000000..09446fb
Binary files /dev/null and b/docs/en/target/ringqt_shot51.jpg differ
diff --git a/docs/en/target/ringqt_shot52.jpg b/docs/en/target/ringqt_shot52.jpg
new file mode 100644 (file)
index 0000000..66c5524
Binary files /dev/null and b/docs/en/target/ringqt_shot52.jpg differ
diff --git a/docs/en/target/ringqt_shot6.jpg b/docs/en/target/ringqt_shot6.jpg
new file mode 100644 (file)
index 0000000..54188f8
Binary files /dev/null and b/docs/en/target/ringqt_shot6.jpg differ
diff --git a/docs/en/target/ringqt_shot7.jpg b/docs/en/target/ringqt_shot7.jpg
new file mode 100644 (file)
index 0000000..d1d5cac
Binary files /dev/null and b/docs/en/target/ringqt_shot7.jpg differ
diff --git a/docs/en/target/ringqt_shot8.jpg b/docs/en/target/ringqt_shot8.jpg
new file mode 100644 (file)
index 0000000..a43f210
Binary files /dev/null and b/docs/en/target/ringqt_shot8.jpg differ
diff --git a/docs/en/target/ringqt_shot9.jpg b/docs/en/target/ringqt_shot9.jpg
new file mode 100644 (file)
index 0000000..a851ba1
Binary files /dev/null and b/docs/en/target/ringqt_shot9.jpg differ
diff --git a/docs/en/target/ringqtandroid_shot1.png b/docs/en/target/ringqtandroid_shot1.png
new file mode 100644 (file)
index 0000000..7a745eb
Binary files /dev/null and b/docs/en/target/ringqtandroid_shot1.png differ
diff --git a/docs/en/target/ringqtobjects.txt b/docs/en/target/ringqtobjects.txt
new file mode 100644 (file)
index 0000000..92e1091
--- /dev/null
@@ -0,0 +1,218 @@
+.. index:: 
+       single: Objects Library for RingQt Application; Introduction
+
+======================================
+Objects Library for RingQt Application
+======================================
+
+In this chapter we will learn about the objects library for RingQt applications.
+
+Ring comes with the Objects library for RingQt applications. Instead of using global
+variables for windows objects and connecting events to objects using the object name, the
+Objects Library will manage the GUI objects and will provide a more natural API to quickly
+create one or many windows from the same class and the library provide a way to quickly set methods
+to be executed when an event is fired. Also the library provide a natural interface to
+quickly use the parent or the caller windows from the child or sub windows.
+
+The Objects Library is designed to be used with the MVC Design Pattern.
+
+The Objects Library is merged in RingQt so you can use it directly when you use RingQt
+
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Library Usage
+
+Library Usage
+=============
+
+* Use the Open_Window(cWindowControllerClassName) function to open new Windows
+* Create at least Two Classes for each window, The Controller Class and the View Class
+* Create each controller class from the WindowsControllerParent Class
+* Create each view class from the WindowsViewParent Class
+* Use the Last_Window() function to get the object of the last window created (The Controller object).
+* When you call a sub window, use the SetParentObject() method and pass the self object.
+* In the View Class, To determine the event method use the Method(cMethodName) function.
+* The Method(cMethodName) function determine the method in the controller class that will be executed.
+* Each controller class contains by default the CloseAction() method that you can call to close the window.
+* You don't need to call the Show() Method for each window, When you use Open_Window() It will be called.
+* In the view class, Define the GUI window object as an attribute called win.
+* You can use Open_WindowNoShow() to avoid displaying the window.
+* You can use Open_WindowAndLink() to quickly get methods to access the windows.
+       
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Example
+
+Example
+=======
+
+In the next example we will create two types of windows.
+
+* Main Window contains a button. When the user click on the button a sub window will be opened.
+* The User Can click on the button many times to open many sub windows.
+* Each Sub Window contains Two buttons.
+* The first button in the sub window change the Main and the Sub Windows Titles.
+* The second button in the sub window close the Sub Window.
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               open_window( :MainWindowController )
+               exec()
+       }
+
+       class MainWindowController from WindowsControllerParent
+               oView = new MainWindowView
+               func SubWindowAction
+                       Open_window( :SubWindowController )
+                       Last_Window().SetParentObject(self)
+
+       class MainWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Main Window")
+                       btnSub = new qPushButton(win) {
+                               setText("Sub Window")
+                               setClickEvent( Method( :SubWindowAction ) )
+                       }
+                       resize(400,400)
+               }
+
+       class SubWindowController from WindowsControllerParent
+               oView = new SubWindowView
+               func SetMainWindowTitleAction
+                       Parent().oView.win.SetWindowTitle("Message from the Sub Window")
+                       oView.win.SetWindowTitle("Click Event Done!")
+
+       class SubWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Sub Window")
+                       btnMsg = new qPushButton(win) {
+                               setText("Set Main Window Title")
+                               setClickEvent( Method( :SetMainWindowTitleAction ) )
+                       }
+                       btnClose = new qPushButton(win) {
+                               Move(200,0)
+                               setText("Close")
+                               setClickEvent( Method( :CloseAction ) )
+                       }
+                       resize(400,400)
+               }
+
+The next screen shot after creating three sub windows.
+
+.. image:: objectslib1.png
+       :alt: Objects Library Example - Shot 1
+
+The next screen shot after clicking on the button in each sub window.
+
+.. image:: objectslib2.png
+       :alt: Objects Library Example - Shot 2
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Open_WindowAndLink() Function
+
+Open_WindowAndLink() Function
+=============================
+
+We can use the Open_WindowAndLink() function to connect between the application
+windows, pass messages (call methods) between the objects. 
+
+This function uses Meta-programming to define dynamic methods in the
+Caller Class to use the dynamic objects of other windows that we create.
+
+Example : (Uses the Form Designer)
+
+First Window
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/firstwindowView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/firstwindowController.ring
+
+Second Window
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/secondwindowView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/secondwindowController.ring
+
+In the next code for example (from FirstWindowController.ring)
+
+The Open_WindowAndLink() will create an object from the SecondWindowController Class
+
+Then will add the Method : SecondWindow(), IsSecondWindow() Methods
+to the FirstWindowController Class
+
+Also will add the Method : FirstWindow(), IsFirstWindow() Methods
+to the SecondWindowController Class
+
+So the SendMessage() method in FirstWindowController class can
+use the SecondWindow() method to access the object.
+
+This is more simple than using Last_Window(), Parent() and
+SetParentObject() methods.
+
+.. code-block:: ring
+
+       class firstwindowController from windowsControllerParent
+
+           oView = new firstwindowView
+
+           func OpenSecondWindow
+               Open_WindowAndLink(:SecondWindowController,self)
+
+           func SendMessage
+               if IsSecondWindow() 
+                   SecondWindow().setMessage("Message from the first window")
+               ok
+
+           func setMessage cMessage
+               oView.Label1.setText(cMessage)
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Open_WindowInPackages() Function
+
+Open_WindowInPackages() Function
+================================
+
+The Open_WindowInPackages() function is the same as Open_Window()
+but takes an extra list that determine the packages 
+to import before opening the window.
+
+Syntax:
+
+.. code-block:: ring
+
+       Open_WindowInPackages(cClassName,aPackagesList)
+
+Example:
+
+The next example from the Form Designer source code, Open the Window Flags window
+using the open_windowInPackages() function.
+
+We determine the class name "WindowFlagsController" and the packages name.
+
+The Window Flags window uses the FormDesigner and System.GUI packages.
+
+.. code-block:: ring
+
+       open_windowInPackages(:WindowFlagsController,[
+               "formdesigner",
+               "System.GUI"
+       ])
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Object Library Source Code
+
+Objects Library Source Code
+===========================
+
+The library source code is very simple, You can check the source code files 
+
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/objects.ring
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/subwindows.ring
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/objectslib.ring
+
+.. index:: 
+       pair: Objects Library for RingQt Application; Open_WindowAndLink() Function
+
diff --git a/docs/en/target/ringqtpixmap2.png b/docs/en/target/ringqtpixmap2.png
new file mode 100644 (file)
index 0000000..5537703
Binary files /dev/null and b/docs/en/target/ringqtpixmap2.png differ
diff --git a/docs/en/target/ringraylib.txt b/docs/en/target/ringraylib.txt
new file mode 100644 (file)
index 0000000..089cef3
--- /dev/null
@@ -0,0 +1,2360 @@
+.. index:: 
+       Single: Using RingRayLib;  Introduction
+
+================
+Using RingRayLib
+================
+
+In this chapter we will learn how to use the RingRayLib extension.
+
+
+.. index:: 
+       pair: Using RingRayLib; Introduction
+
+Introduction
+============
+
+RingRayLib is an extension for the RayLib game programming library.
+
+Also RayGUI functions are supported by this extension.
+
+
+.. index:: 
+       pair: Using RingRayLib; Basic Window
+
+Basic Window
+============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth     = 800
+       screenHeight    = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+               ClearBackground(RED)
+               DrawText("Congrats! You created your first window!", 190, 200, 20, WHITE)
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_basicwindow.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Input Keys
+
+Input Keys
+==========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - keyboard input")
+       ballPosition = Vector2(screenWidth/2, screenHeight/2)
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+                       if IsKeyDown(KEY_RIGHT) ballPosition.x += 2 ok
+                       if IsKeyDown(KEY_LEFT)  ballPosition.x -= 2 ok
+                       if IsKeyDown(KEY_UP)    ballPosition.y -= 2 ok
+                       if IsKeyDown(KEY_DOWN)  ballPosition.y += 2 ok
+                       BeginDrawing()
+                       ClearBackground(RAYWHITE)
+                       DrawText("move the ball with arrow keys", 10, 10, 20, DARKGRAY)
+                       DrawCircleV(ballPosition, 50, MAROON)
+                       EndDrawing()
+       end    
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_inputkeys.png
+       :alt: RayLib Example
+
+
+.. index:: 
+       pair: Using RingRayLib; Input Mouse
+
+Input Mouse
+===========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - mouse input")
+
+       ballPosition    = Vector2(100, 100)
+       ballColor       = DARKBLUE
+
+       SetTargetFPS(60)
+
+       while ! WindowShouldClose()
+
+                       ballPosition = GetMousePosition()
+
+                       if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                               ballColor = MAROON
+                       but IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)   
+                               ballColor = LIME
+                       but IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)    
+                               ballColor = DARKBLUE
+                       ok
+
+                       BeginDrawing()
+                       ClearBackground(BLACK)
+                       DrawCircleV(ballPosition, 40, ballColor)
+                       DrawText("move ball with mouse and click mouse button to change color",
+                                10, 10, 20, YELLOW)
+                       EndDrawing()
+
+       end
+        
+       CloseWindow()  
+
+Screen Shot:
+
+.. image:: raylib_inputmouse.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; 3D Camera
+
+3D Camera
+=========
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera mode")
+
+       camera = Camera3D(
+               0, 10, 10,              // Camera position
+               0, 0, 0 ,               // Camera looking at point
+               0, 1, 0,                // Camera up vector (rotation towards target)
+               45,                     // Camera field-of-view Y
+               CAMERA_PERSPECTIVE)     // Camera mode type
+
+       cubePosition = Vector3(0, 0, 0)
+
+       SetTargetFPS(60)           
+               
+       while !WindowShouldClose()
+
+                       BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       BeginMode3D(camera)
+
+                       DrawCube(cubePosition, 2, 2, 2, RED)
+                       DrawCubeWires(cubePosition, 2, 2, 2, MAROON)
+
+                       DrawGrid(10, 1)
+
+                       EndMode3D()
+
+                       DrawText("Welcome to the third dimension!", 10, 40, 20, DARKGRAY)
+
+                       DrawFPS(10, 10)
+
+                       EndDrawing()
+
+       end 
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_3dcamera.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; 3D Camera Free
+
+3D Camera Free
+==============
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free")
+
+       camera = Camera3D(
+               10, 10, 10,             // Camera position
+               0, 0, 0 ,               // Camera looking at point
+               0, 1, 0,                // Camera up vector (rotation towards target)
+               45,                     // Camera field-of-view Y
+               CAMERA_PERSPECTIVE)     // Camera mode type
+
+       cubePosition = Vector3(0, 0, 0)
+
+       SetCameraMode(camera, CAMERA_FREE)              // Set a free camera mode
+
+       SetTargetFPS(60)                   
+
+       while !WindowShouldClose()
+
+                       UpdateCamera(camera)
+
+                       if IsKeyDown("Z") camera.target = Vector3( 0, 0, 0) ok
+
+                       BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       BeginMode3D(camera)
+
+                       DrawCube(cubePosition, 2, 2, 2, RED)
+                       DrawCubeWires(cubePosition, 2, 2, 2, MAROON)
+
+                       DrawGrid(10, 1)
+
+                       EndMode3D()
+
+                       DrawRectangle( 10, 10, 320, 133, Fade(SKYBLUE, 0.5))
+                       DrawRectangleLines( 10, 10, 320, 133, BLUE)
+
+                       DrawText("Free camera default controls:", 20, 20, 10, BLACK)
+                       DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY)
+                       DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY)
+                       DrawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, DARKGRAY)
+                       DrawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom",
+                                40, 100, 10, DARKGRAY)
+                       DrawText("- Z to zoom to (0, 0, 0)", 40, 120, 10, DARKGRAY)
+
+                       EndDrawing()
+       end 
+
+       CloseWindow() 
+
+
+Screen Shot:
+
+.. image:: raylib_3dcamerafree.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Mouse Wheel 
+
+Mouse Wheel 
+===========
+
+.. code-block:: ring           
+               
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - input mouse wheel")
+
+       boxPositionY = screenHeight/2 - 40
+       scrollSpeed = 4            
+
+       SetTargetFPS(60)  
+
+       while !WindowShouldClose()
+               boxPositionY -= (GetMouseWheelMove()*scrollSpeed)
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawRectangle(screenWidth/2 - 40, boxPositionY, 80, 80, MAROON)
+
+               DrawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, GRAY)
+               DrawText("Box position Y: "+boxPositionY, 10, 40, 20, LIGHTGRAY)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_mousewheel.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Input Multi-touch
+
+Input Multi-touch
+=================
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - input multitouch")
+
+       ballPosition = Vector2(-100, -100)
+       ballColor = BEIGE
+
+       touchCounter = 0
+       touchPosition = vector2(0,0)
+
+       MAX_TOUCH_POINTS = 5
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               ballPosition = GetMousePosition()
+
+               ballColor = BEIGE
+
+               if IsMouseButtonDown(MOUSE_LEFT_BUTTON) ballColor = MAROON ok
+               if IsMouseButtonDown(MOUSE_MIDDLE_BUTTON) ballColor = LIME ok
+               if IsMouseButtonDown(MOUSE_RIGHT_BUTTON) ballColor = DARKBLUE ok
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON) touchCounter = 10 ok
+               if IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON) touchCounter = 10 ok
+               if IsMouseButtonPressed(MOUSE_RIGHT_BUTTON) touchCounter = 10 ok
+
+               if touchCounter > 0 touchCounter-- ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               for i = 0 to MAX_TOUCH_POINTS-1
+                       touchPosition = GetTouchPosition(i)  
+
+                       if touchPosition.x >= 0 && touchPosition.y >= 0
+                               DrawCircleV(touchPosition, 34, ORANGE)
+                               DrawText(""+ i, touchPosition.x - 10, 
+                                       touchPosition.y - 70, 40, BLACK)
+                       ok
+               next
+
+               DrawCircleV(ballPosition, 30 + (touchCounter*3), ballColor)
+
+               DrawText("move ball with mouse and click mouse button to change color",
+                                10, 10, 20, DARKGRAY)
+               DrawText("touch the screen at multiple locations to get multiple balls",
+                                10, 30, 20, DARKGRAY)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()     
+
+Screen Shot:
+
+.. image:: raylib_inputmt.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Camera First Person
+
+Camera First Person
+===================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       MAX_COLUMNS = 20
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera first person")
+
+       camera = Camera3d(
+               4, 2, 4,
+               0, 1, 0,
+               0, 1, 0,
+               60,
+               CAMERA_PERSPECTIVE
+       )
+
+       heights = list(MAX_COLUMNS)
+       positions = list(MAX_COLUMNS)
+       for item in positions item = vector3(0,0,0) next 
+       colors = list(MAX_COLUMNS)
+       for item in colors item = BLACK next
+
+       for i = 1 to  MAX_COLUMNS 
+               heights[i] = GetRandomValue(1, 12)
+               positions[i] = Vector3(GetRandomValue(-15, 15),
+                                heights[i]/2, GetRandomValue(-15, 15) )
+               colors[i] = RAYLibColor(GetRandomValue(20, 255),
+                                GetRandomValue(10, 55), 30, 255 )
+       next
+
+       SetCameraMode(camera, CAMERA_FIRST_PERSON)
+
+       SetTargetFPS(60)                     
+
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               DrawPlane(Vector3( 0, 0, 0 ), Vector2(32, 32 ), LIGHTGRAY) // Draw ground
+               DrawCube(Vector3( -16, 2.5, 0 ), 1, 5, 32, BLUE)     // Draw a blue wall
+               DrawCube(Vector3( 16, 2.5, 0 ), 1, 5, 32, LIME)      // Draw a green wall
+               DrawCube(Vector3( 0, 2.5, 16 ), 32, 5, 1, GOLD)      // Draw a yellow wall
+
+               for i = 1 to  MAX_COLUMNS 
+                       DrawCube(positions[i], 2, heights[i], 2, colors[i])
+                       DrawCubeWires(positions[i], 2, heights[i], 2, MAROON)
+               next
+
+               EndMode3D()
+
+               DrawRectangle( 10, 10, 220, 70, Fade(SKYBLUE, 0.5f))
+               DrawRectangleLines( 10, 10, 220, 70, BLUE)
+
+               DrawText("First person camera default controls:", 20, 20, 10, BLACK)
+               DrawText("- Move with keys: W, A, S, D", 40, 40, 10, DARKGRAY)
+               DrawText("- Mouse move to look around", 40, 60, 10, DARKGRAY)
+
+               EndDrawing()
+       end 
+               
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_camerafirstperson.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; 3D Picking
+
+3D Picking
+==========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d picking")
+
+       camera = Camera3D(
+               10, 10, 10,
+               0, 0, 0 ,
+               0, 1, 0 ,
+               45,
+               CAMERA_PERSPECTIVE
+       )
+
+       cubePosition = Vector3( 0, 1, 0 )
+       cubeSize = Vector3( 2, 2, 2 )
+
+       ray = Ray(0,0,0,0,0,0)
+
+       collision = false
+
+       SetCameraMode(camera, CAMERA_FREE) 
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                       if !collision
+                               ray = GetMouseRay(GetMousePosition(), camera)
+                               collision = CheckCollisionRayBox(ray,
+                               BoundingBox( cubePosition.x - cubeSize.x/2, 
+                               cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2,
+                               cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2,
+                               cubePosition.z + cubeSize.z/2 ) )
+                       else collision = false
+                       ok
+               ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               if collision
+                       DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED)
+                       DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON)
+
+                       DrawCubeWires(cubePosition, cubeSize.x + 0.2f,
+                                       cubeSize.y + 0.2f, cubeSize.z + 0.2f, GREEN)
+               else
+                       DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY)
+                       DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY)
+               ok
+
+               DrawRay(ray, MAROON)
+               DrawGrid(10, 1)
+
+               EndMode3D()
+
+               DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY)
+
+               if collision  DrawText("BOX SELECTED", 
+                       (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, 
+                       screenHeight * 0.1f, 30, GREEN) ok
+
+               DrawFPS(10, 10)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_3dpicking.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Full Screen
+
+Full Screen
+===========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth     = 1024
+       screenHeight    = 768
+
+       InitWindow(screenWidth, screenHeight, "Full Screen")
+       ToggleFullScreen()
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+                       ClearBackground(DARKBLUE)
+                       DrawText("Count from 1 to 10", 190, 200, 20, Yellow)
+                       for t = 1 to 10
+                               DrawText("Number: " + t, 190, 200+(30*t), 20, WHITE)
+                       next 
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_fullscreen.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Two Cubes
+
+Two Cubes
+=========      
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - Two Cubes")
+
+       camera = Camera3D(
+               10, 10, 10,
+               0, 0, 0 ,
+               0, 1, 0 ,
+               45,
+               CAMERA_PERSPECTIVE
+       )
+
+       cubePosition1 = Vector3( 0, 1, 4 )
+       cubePosition2 = Vector3( 0, 1, -4 )
+       cubeSize = Vector3( 2, 2, 2 )
+
+       ray = Ray(0,0,0,0,0,0)
+
+       collision1 = false
+       collision2 = false
+
+       SetCameraMode(camera, CAMERA_FREE) 
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+                       UpdateCamera(camera)
+
+                       if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                               if !collision1
+                                       ray = GetMouseRay(GetMousePosition(), camera)
+
+                                       collision1 = CheckCollisionRayBox(ray,
+                                       BoundingBox( cubePosition1.x - 
+                                       cubeSize.x/2, cubePosition1.y - cubeSize.y/2,
+                                       cubePosition1.z - cubeSize.z/2,
+                                       cubePosition1.x + cubeSize.x/2,
+                                       cubePosition1.y + cubeSize.y/2,
+                                       cubePosition1.z + cubeSize.z/2 ) )
+                               else 
+                                       collision1 = false
+                               ok
+                               if  !collision2
+                                       ray = GetMouseRay(GetMousePosition(), camera)
+
+                                       collision2 = CheckCollisionRayBox(ray,
+                                       BoundingBox( cubePosition2.x -
+                                       cubeSize.x/2, cubePosition2.y - cubeSize.y/2,
+                                       cubePosition2.z - cubeSize.z/2,
+                                       cubePosition2.x + cubeSize.x/2,
+                                       cubePosition2.y + cubeSize.y/2,
+                                       cubePosition2.z + cubeSize.z/2 ) )
+                               else 
+                                       collision2 = false
+                       ok
+               ok
+
+                       BeginDrawing()
+
+                               ClearBackground(RAYWHITE)
+
+                               BeginMode3D(camera)
+
+                                        if collision1
+                                               DrawCube(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, RED)
+                                               DrawCubeWires(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, MAROON)
+
+                                               DrawCubeWires(cubePosition1, cubeSize.x +
+                                               0.2f, cubeSize.y + 0.2f,
+                                               cubeSize.z + 0.2f, GREEN)
+                                               collision1 = true
+                                        else
+                                               DrawCube(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, GRAY)
+                                               DrawCubeWires(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, DARKGRAY)
+                                               collision1 = false
+                                        ok
+
+                                        if collision2
+                                               DrawCube(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, RED)
+                                               DrawCubeWires(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, MAROON)
+
+                                               DrawCubeWires(cubePosition2, cubeSize.x +
+                                               0.2f, cubeSize.y + 0.2f,
+                                               cubeSize.z + 0.2f, GREEN)
+                                               collision2 = true
+                                        else
+                                               DrawCube(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, GRAY)
+                                               DrawCubeWires(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, DARKGRAY)
+                                               collision2 = false
+                                        ok
+
+
+                                       DrawRay(ray, MAROON)
+                                       DrawGrid(10, 1)
+
+                               EndMode3D()
+
+                               DrawText("Try selecting the box with mouse!", 240, 10,
+                                               20, DARKGRAY)
+
+                               if collision1 or collision2  
+                                       DrawText("BOX SELECTED", 
+                                       (screenWidth - MeasureText("BOX SELECTED", 30)) / 2,
+                                       screenHeight * 0.1f, 30, GREEN) 
+                               ok
+
+                               DrawFPS(10, 10)
+
+                       EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_twocubes.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Basic Shapes
+
+Basic Shapes
+============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY)
+
+               DrawCircle(screenWidth/4, 120, 35, DARKBLUE)
+
+               DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED)
+               DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE)  
+               DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD)
+
+               DrawTriangle(Vector2(screenWidth/4*3, 80),
+                                        Vector2(screenWidth/4*3 - 60, 150),
+                                        Vector2(screenWidth/4*3 + 60, 150), VIOLET)
+
+               DrawPoly(Vector2(screenWidth/4*3, 320), 6, 80, 0, BROWN)
+
+               DrawCircleGradient(screenWidth/4, 220, 60, GREEN, SKYBLUE)
+
+               DrawLine(18, 42, screenWidth - 18, 42, BLACK)
+               DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE)
+               DrawTriangleLines(Vector2(screenWidth/4*3, 160),
+                               Vector2(screenWidth/4*3 - 20, 230),
+                               Vector2(screenWidth/4*3 + 20, 230), DARKBLUE)
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_basicshapes.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Draw Ring
+
+Draw Ring
+=========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - draw ring")
+
+       center = Vector2((GetScreenWidth() - 300)/2, GetScreenHeight()/2 )
+
+       innerRadius = 80        outerRadius = 190
+       startAngle = 0          endAngle = 360          segments = 0
+       drawRing = true         drawRingLines = false   drawCircleLines = false
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawLine(500, 0, 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.6))
+               DrawRectangle(500, 0, GetScreenWidth() - 500,
+                                GetScreenHeight(), Fade(LIGHTGRAY, 0.3))
+
+               if drawRing DrawRing(center, innerRadius, outerRadius, 
+                       startAngle, endAngle, segments, Fade(MAROON, 0.3)) ok
+               if drawRingLines DrawRingLines(center, innerRadius, 
+                       outerRadius, startAngle, endAngle,
+                        segments, Fade(BLACK, 0.4)) ok
+               if drawCircleLines DrawCircleSectorLines(center, outerRadius,
+                       startAngle, endAngle, segments, Fade(BLACK, 0.4)) ok
+
+               startAngle = GuiSliderBar(Rectangle( 600, 40, 120, 20 ), 
+                               "StartAngle", startAngle, -450, 450, true)
+               endAngle = GuiSliderBar(Rectangle( 600, 70, 120, 20 ), 
+                               "EndAngle", endAngle, -450, 450, true)
+
+               innerRadius = GuiSliderBar(Rectangle( 600, 140, 120, 20 ), 
+                               "InnerRadius", innerRadius, 0, 100, true)
+               outerRadius = GuiSliderBar(Rectangle( 600, 170, 120, 20 ), 
+                               "OuterRadius", outerRadius, 0, 200, true)
+
+               segments = GuiSliderBar(Rectangle( 600, 240, 120, 20 ), 
+                               "Segments", segments, 0, 100, true)
+
+               drawRing = GuiCheckBox(Rectangle( 600, 320, 20, 20 ), 
+                               "Draw Ring", drawRing)
+               drawRingLines = GuiCheckBox(Rectangle( 600, 350, 20, 20 ), 
+                               "Draw RingLines", drawRingLines)
+               drawCircleLines = GuiCheckBox(Rectangle( 600, 380, 20, 20 ), 
+                               "Draw CircleLines", drawCircleLines)
+
+               if segments >= 4        
+                       DrawText("MODE: MANUAL", 600, 270, 10, MAROON)
+               else            
+                       DrawText("MODE: AUTO", 600, 270, 10, DARKGRAY)  
+               ok
+               
+               DrawFPS(10, 10)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_drawring.png
+       :alt: RayLib Example
+
+Screen Shot (2):
+
+.. image:: raylib_drawring2.png
+       :alt: RayLib Example
+
+
+.. index:: 
+       pair: Using RingRayLib; Bezier Lines
+
+Bezier Lines
+============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       SetConfigFlags(FLAG_MSAA_4X_HINT)
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines")
+
+       start = Vector2(0,0)
+       endvec = Vector2(screenWidth,screenHeight)
+
+       SetTargetFPS(60)  
+
+       while (!WindowShouldClose())  
+
+               if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
+                       start = GetMousePosition() 
+               else (IsMouseButtonDown(MOUSE_RIGHT_BUTTON))
+                         endvec = GetMousePosition()
+               ok
+               
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+               DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS",
+                                15, 20, 20, GRAY)
+               DrawLineBezier(start, endvec, 2.0, RED)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_bezierlines.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Collision Area
+
+Collision Area
+==============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - collision area")
+
+       // Box A: Moving box
+       boxA = Rectangle( 10, GetScreenHeight()/2 - 50, 200, 100 )
+       boxASpeedX = 4
+
+       // Box B: Mouse moved box
+       boxB = Rectangle( GetScreenWidth()/2 - 30, GetScreenHeight()/2 - 30, 60, 60 )
+
+       boxCollision = GetCollisionRec(boxA, boxB)
+
+       boxCollision = Rectangle( 0,0,0,0 ) // Collision rectangle
+
+       screenUpperLimit = 40      // Top menu limits
+
+       pause = false             // Movement pause
+       collision = false         // Collision detection
+
+       SetTargetFPS(60)               
+
+       while !WindowShouldClose()  
+
+               // Move box if not paused
+               if (not pause) boxA.x += boxASpeedX ok
+
+               // Bounce box on x screen limits
+               if (((boxA.x + boxA.width) >= GetScreenWidth()) or (boxA.x <= 0)) 
+                       boxASpeedX = boxASpeedX*(-1) ok
+
+               // Update player-controlled-box (box02)
+               boxB.x = GetMouseX() - boxB.width/2
+               boxB.y = GetMouseY() - boxB.height/2
+
+               // Make sure Box B does not go out of move area limits
+               if ((boxB.x + boxB.width) >= GetScreenWidth()) 
+                       boxB.x = GetScreenWidth() - boxB.width 
+               else (boxB.x <= 0) boxB.x = 0 ok
+
+               if ((boxB.y + boxB.height) >= GetScreenHeight()) 
+                       boxB.y = GetScreenHeight() - boxB.height
+               else (boxB.y <= screenUpperLimit) boxB.y = screenUpperLimit ok
+
+               // Check boxes collision
+               collision = CheckCollisionRecs(boxA, boxB)
+
+               // Get collision rectangle (only on collision)
+               if (collision) boxCollision = GetCollisionRec(boxA, boxB) ok
+
+               // Pause Box A movement
+               if (IsKeyPressed(KEY_SPACE)) pause = not pause ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       if collision = true
+                          color = RED
+                       else
+                          color = BLACK
+                       ok
+                       DrawRectangle(0, 0, screenWidth, screenUpperLimit, color)
+                       DrawRectangleRec(boxA, GOLD)
+
+                       boxB.x = GetMouseX() - boxB.width/2
+                       boxB.y = GetMouseY() - boxB.height/2
+                       collision = CheckCollisionRecs(boxA, boxB)
+                       DrawRectangleRec(boxB, BLUE)
+                       boxCollision = GetCollisionRec(boxA, boxB)
+
+                       if (collision) = true
+
+                               // Draw collision area
+                               DrawRectangleRec(boxCollision, LIME)
+
+                               // Draw collision message
+                               DrawText("COLLISION!", GetScreenWidth()/2 -
+                                                MeasureText("COLLISION!", 20)/2,
+                                               screenUpperLimit/2 - 10, 20, BLACK)
+
+                               // Draw collision area
+                               DrawText("Collision Area: " + 
+                                       string(boxCollision.width*boxCollision.height),
+                                       GetScreenWidth()/2 - 100, 
+                                       screenUpperLimit + 10, 20, BLACK)
+
+                       ok
+
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_collisionarea.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Following Eyes
+
+Following Eyes
+==============
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - following eyes")
+
+       scleraLeftPosition = Vector2( GetScreenWidth()/2 - 100, GetScreenHeight()/2 )
+       scleraRightPosition = Vector2( GetScreenWidth()/2 + 100, GetScreenHeight()/2 )
+       scleraRadius = 80
+
+       irisLeftPosition = Vector2( GetScreenWidth()/2 - 100, GetScreenHeight()/2 )
+       irisRightPosition = Vector2( GetScreenWidth()/2 + 100, GetScreenHeight()/2 )
+       irisRadius = 24
+
+       angle = 0.0
+       dx = 0.0 dy = 0.0 dxx = 0.0 dyy = 0.0
+
+       SetTargetFPS(60) 
+
+       while !WindowShouldClose()
+
+               irisLeftPosition = GetMousePosition()
+               irisRightPosition = GetMousePosition()
+
+               // Check not inside the left eye sclera
+               if !CheckCollisionPointCircle(irisLeftPosition,
+                       scleraLeftPosition, scleraRadius - 20)
+                       dx = irisLeftPosition.x - scleraLeftPosition.x
+                       dy = irisLeftPosition.y - scleraLeftPosition.y
+
+                       angle = atan2(dy, dx)
+
+                       dxx = (scleraRadius - irisRadius)*cos(angle)
+                       dyy = (scleraRadius - irisRadius)*sin(angle)
+
+                       irisLeftPosition.x = scleraLeftPosition.x + dxx
+                       irisLeftPosition.y = scleraLeftPosition.y + dyy
+               ok
+
+               // Check not inside the right eye sclera
+               if !CheckCollisionPointCircle(irisRightPosition,
+                        scleraRightPosition, scleraRadius - 20)
+                       dx = irisRightPosition.x - scleraRightPosition.x
+                       dy = irisRightPosition.y - scleraRightPosition.y
+
+                       angle = atan2(dy, dx)
+
+                       dxx = (scleraRadius - irisRadius)*cos(angle)
+                       dyy = (scleraRadius - irisRadius)*sin(angle)
+
+                       irisRightPosition.x = scleraRightPosition.x + dxx
+                       irisRightPosition.y = scleraRightPosition.y + dyy
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawCircleV(scleraLeftPosition, scleraRadius, LIGHTGRAY)
+                       DrawCircleV(irisLeftPosition, irisRadius, BROWN)
+                       DrawCircleV(irisLeftPosition, 10, BLACK)
+
+                       DrawCircleV(scleraRightPosition, scleraRadius, LIGHTGRAY)
+                       DrawCircleV(irisRightPosition, irisRadius, DARKGREEN)
+                       DrawCircleV(irisRightPosition, 10, BLACK)
+
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Screen Shot:
+
+.. image:: raylib_followingeyes.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Colors Palette 
+
+Colors Palette 
+==============
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       MAX_COLORS_COUNT = 21          // Number of colors available
+
+       screenWidth = 800
+       screenHeight = 450
+       colors = list(MAX_COLORS_COUNT)
+       colorNames = list(MAX_COLORS_COUNT)
+       colorsRecs = list(MAX_COLORS_COUNT)
+       colorState = list(MAX_COLORS_COUNT)
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - colors palette")
+
+       colors = [
+               DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN,
+               GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW,
+               GREEN, SKYBLUE, PURPLE, BEIGE ]
+
+       colorNames = [
+               "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE",
+               "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN",
+               "LIGHTGRAY", "PINK", "YELLOW", "GREEN", "SKYBLUE", "PURPLE", "BEIGE" ]
+
+       for i = 1 to MAX_COLORS_COUNT
+               colorsRecs[i] = new Rectangle(0,0,0,0) 
+       next
+
+       for i = 1 to MAX_COLORS_COUNT
+               colorState[i] = 0
+       next
+
+
+       // Fills colorsRecs data (for every rectangle)
+       for i = 1 to MAX_COLORS_COUNT
+               colorsRecs[i].x = 20 + 100*((i-1)%7) + 10*((i-1)%7)
+               colorsRecs[i].y = 80 + 100*floor((i-1)/7) + 10*floor((i-1)/7)
+               colorsRecs[i].width = 100
+               colorsRecs[i].height = 100
+       next
+
+       mousePoint = Vector2( 0.0, 0.0 )
+
+       SetTargetFPS(60)
+
+       // Main game loop
+       while !WindowShouldClose()
+
+               mousePoint = GetMousePosition()
+
+               for i = 1 to MAX_COLORS_COUNT 
+                       if (CheckCollisionPointRec(mousePoint,
+                                colorsRecs[i])) colorState[i] = 1
+                       else colorState[i] = 0 ok
+               next
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("raylib colors palette", 28, 42, 20, BLACK)
+                       DrawText("press SPACE to see all colors",
+                                        GetScreenWidth() - 180,
+                                        GetScreenHeight() - 40, 10, GRAY)
+
+                       for i = 1 to MAX_COLORS_COUNT    // Draw all rectangles
+                               if colorState[i]
+                                  cstate = 0.6
+                               else
+                                  cstate = 1.0
+                               ok
+
+                               DrawRectangleRec(colorsRecs[i], Fade(colors[i], cstate))
+
+                               if (IsKeyDown(KEY_SPACE) || colorState[i])
+                                       DrawRectangle(colorsRecs[i].x,
+                                       colorsRecs[i].y + colorsRecs[i].height - 26,
+                                       colorsRecs[i].width, 20, BLACK)
+                                       DrawRectangleLinesEx(colorsRecs[i], 6,
+                                       Fade(BLACK, 0.3f))
+                                       DrawText(colorNames[i], colorsRecs[i].x + 
+                                       colorsRecs[i].width - MeasureText(colorNames[i],
+                                       10) - 12, colorsRecs[i].y +
+                                       colorsRecs[i].height - 20, 10, colors[i])
+                               ok
+                       next
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_colorspalette.png
+       :alt: RayLib Example
+       
+.. index:: 
+       pair: Using RingRayLib; Functions
+
+.. index:: 
+       pair: Using RingRayLib; Rectangle Scaling 
+
+Rectangle Scaling 
+=================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       MOUSE_SCALE_MARK_SIZE = 12
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                        "raylib [shapes] example - rectangle scaling mouse")
+
+       rec = Rectangle( 100, 100, 200, 80 )
+
+       mousePosition = Vector2( 0,0 )
+
+       mouseScaleReady = false
+       mouseScaleMode = false
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               mousePosition = GetMousePosition()
+
+               if (CheckCollisionPointRec(mousePosition, rec) and
+                       CheckCollisionPointRec(mousePosition,
+                        Rectangle(rec.x + rec.width - MOUSE_SCALE_MARK_SIZE,
+                               rec.y + rec.height - MOUSE_SCALE_MARK_SIZE,
+                                MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE )))
+                       mouseScaleReady = true
+                       if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) 
+                               mouseScaleMode = true ok
+               else mouseScaleReady = false ok
+
+               if (mouseScaleMode)
+               
+                       mouseScaleReady = true
+
+                       rec.width = (mousePosition.x - rec.x)
+                       rec.height = (mousePosition.y - rec.y)
+
+                       if (rec.width < MOUSE_SCALE_MARK_SIZE) 
+                               rec.width = MOUSE_SCALE_MARK_SIZE ok
+                       if (rec.height < MOUSE_SCALE_MARK_SIZE) 
+                               rec.height = MOUSE_SCALE_MARK_SIZE ok
+
+                       if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) 
+                               mouseScaleMode = false ok
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("Scale rectangle dragging from bottom-right corner!",
+                                        10, 10, 20, GRAY)
+
+                       DrawRectangleRec(rec, Fade(GREEN, 0.5f))
+
+                       if (mouseScaleReady)
+                  
+                               DrawRectangleLinesEx(rec, 1, RED)
+                               DrawTriangle(Vector2( rec.x + rec.width -
+                               MOUSE_SCALE_MARK_SIZE, rec.y + rec.height ),
+                               Vector2( rec.x + rec.width, rec.y + rec.height ),
+                               Vector2( rec.x + rec.width, rec.y + rec.height -
+                                        MOUSE_SCALE_MARK_SIZE ), RED)
+                       ok
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+
+Screen Shot:
+
+.. image:: raylib_rectanglescaling.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Music Playing 
+
+Music Playing 
+=============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [audio] example - music playing (streaming)")
+
+       InitAudioDevice()               
+
+       music = LoadMusicStream("guitar_noodling.ogg")
+
+       PlayMusicStream(music)
+
+       timePlayed = 0.0
+       pause = false
+
+       SetTargetFPS(60)
+
+
+       while !WindowShouldClose()
+
+               UpdateMusicStream(music)  
+
+               if IsKeyPressed(KEY_SPACE)   
+                       StopMusicStream(music)
+                       PlayMusicStream(music)
+               ok
+
+               if IsKeyPressed(KEY_P)
+                       pause = !pause
+
+                       if pause 
+                               PauseMusicStream(music)
+                       else 
+                               ResumeMusicStream(music)
+                       ok
+               ok
+
+               timePlayed = GetMusicTimePlayed(music) / GetMusicTimeLength(music) *400
+
+               if timePlayed > 400 
+                       StopMusicStream(music)
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY)
+
+                                DrawRectangle(200, 200, 400, 12, LIGHTGRAY)
+                                DrawRectangle(200, 200, timePlayed, 12, MAROON)
+                       DrawRectangleLines(200, 200, 400, 12, GRAY)
+
+                       DrawText("PRESS SPACE  TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY)
+                       DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY)
+
+               EndDrawing()
+
+       end 
+
+       UnloadMusicStream(music)
+
+       CloseAudioDevice()
+
+       CloseWindow()
+
+Screen Shot:
+       
+.. image:: raylib_musicplaying.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: Using RingRayLib; Sound Loading
+
+Sound Loading
+=============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                       "raylib [audio] example - sound loading and playing")
+
+       InitAudioDevice()       
+
+       fxWav = LoadSound("sound.wav")         
+       fxOgg = LoadSound("tanatana.ogg")  
+
+
+       SetTargetFPS(60) 
+
+       while !WindowShouldClose()
+
+               if IsKeyPressed(KEY_SPACE) PlaySound(fxWav)  ok  
+               if IsKeyPressed(KEY_ENTER) PlaySound(fxOgg)  ok  
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("Press SPACE to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY)
+                       DrawText("Press ENTER to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY)
+
+               EndDrawing()
+               
+       end
+
+       UnloadSound(fxWav)
+       UnloadSound(fxOgg)
+
+       CloseAudioDevice() 
+
+       CloseWindow()
+
+Screen Shot:
+       
+.. image:: raylib_soundloading.png
+       :alt: RayLib Example
+
+       
+.. index:: 
+       pair: Using RingRayLib; Image Drawing
+
+Image Drawing
+=============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                        "raylib [textures] example - image drawing")
+
+       cat = LoadImage("cat.png")                              
+
+       ImageCrop( cat,  Rectangle( 100, 10, 280, 380 ))        
+       ImageFlipHorizontal( cat)                               
+       ImageResize( cat, 150, 200)                             
+
+       parrots = LoadImage("parrots.png")                      
+
+       ImageDraw( parrots, cat, Rectangle( 0, 0, cat.width, cat.height ), 
+                               Rectangle( 30, 40, cat.width*1.5, cat.height*1.5 ))
+       ImageCrop( parrots, Rectangle( 0, 50, parrots.width, parrots.height - 100 )) 
+
+       UnloadImage(cat)       
+
+       font = LoadFont("custom_jupiter_crash.png")
+
+       ImageDrawTextEx(parrots, Vector2( 300, 230 ), font,
+                        "PARROTS & CAT", font.baseSize, -2, WHITE)
+       UnloadFont(font);                              
+
+       texture = LoadTextureFromImage(parrots)        
+
+       UnloadImage(parrots)                           
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawTexture(texture, screenWidth/2 - texture.width/2,
+                       screenHeight/2 - texture.height/2 - 40, WHITE)
+               DrawRectangleLines(screenWidth/2 - texture.width/2,
+                       screenHeight/2 - texture.height/2 - 40,
+                        texture.width, texture.height, DARKGRAY)
+
+               DrawText("We are drawing only one texture from various images composed!",
+                                       240, 350, 10, DARKGRAY)
+               DrawText("Source images have been cropped, scaled,"+
+                               " flipped and copied one over the other.",
+                                       190, 370, 10, DARKGRAY)
+
+               EndDrawing()
+       end
+
+       UnloadTexture(texture)       
+
+       CloseWindow()                
+
+Screen Shot:
+       
+.. image:: raylib_imagedrawing.png
+       :alt: RayLib Example
+
+       
+.. index:: 
+       pair: Using RingRayLib; Image Generation
+
+Image Generation
+================
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       NUM_TEXTURES = 7
+       textures     = list(7)
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [textures] example - procedural images generation")
+
+       verticalGradient   = GenImageGradientV(screenWidth, screenHeight, RED, BLUE)
+       horizontalGradient = GenImageGradientH(screenWidth, screenHeight, RED, BLUE)
+       radialGradient     = GenImageGradientRadial(screenWidth,
+                                screenHeight, 0.0, WHITE, BLACK)
+       checked            = GenImageChecked(screenWidth, screenHeight,
+                                32, 32, RED, BLUE)
+       whiteNoise         = GenImageWhiteNoise(screenWidth, screenHeight, 0.5)
+       perlinNoise        = GenImagePerlinNoise(screenWidth, screenHeight, 50, 50, 4.0)
+       cellular           = GenImageCellular(screenWidth, screenHeight, 32)
+        
+       textures[NUM_TEXTURES] =  0 
+                          
+       textures[1] = LoadTextureFromImage(verticalGradient)
+       textures[2] = LoadTextureFromImage(horizontalGradient)
+       textures[3] = LoadTextureFromImage(radialGradient)
+       textures[4] = LoadTextureFromImage(checked)
+       textures[5] = LoadTextureFromImage(whiteNoise)
+       textures[6] = LoadTextureFromImage(perlinNoise)
+       textures[7] = LoadTextureFromImage(cellular)
+
+       UnloadImage(verticalGradient)
+       UnloadImage(horizontalGradient)
+       UnloadImage(radialGradient)
+       UnloadImage(checked)
+       UnloadImage(whiteNoise)
+       UnloadImage(perlinNoise)
+       UnloadImage(cellular)
+
+       currentTexture = 1  
+
+       SetTargetFPS(10)
+        
+       while !WindowShouldClose()
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON) || IsKeyPressed(KEY_RIGHT)
+                       currentTexture++
+                       if currentTexture > NUM_TEXTURES  currentTexture = 1 ok
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawTexture(textures[currentTexture], 0, 0, WHITE)
+
+                       DrawRectangle(30, 400, 325, 30, Fade(SKYBLUE, 0.5))
+                       DrawRectangleLines(30, 400, 325, 30, Fade(WHITE, 0.5))
+                       DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL TEXTURES",
+                                40, 410, 10, WHITE)
+
+                       switch(currentTexture)
+                               on 1  DrawText("VERTICAL GRADIENT", 560, 10, 20, RAYWHITE)  
+                               on 2  DrawText("HORIZONTAL GRADIENT", 540, 10, 20, RAYWHITE)
+                               on 3  DrawText("RADIAL GRADIENT", 580, 10, 20, LIGHTGRAY)   
+                               on 4  DrawText("CHECKED", 680, 10, 20, RAYWHITE)            
+                               on 5  DrawText("WHITE NOISE", 640, 10, 20, RED)             
+                               on 6  DrawText("PERLIN NOISE", 630, 10, 20, RAYWHITE)       
+                               on 7  DrawText("CELLULAR", 670, 10, 20, RAYWHITE)           
+                       off 
+
+               EndDrawing()
+
+       end
+
+       for i = 1 to  NUM_TEXTURES
+               UnloadTexture( textures[i] )
+       next 
+
+       CloseWindow()
+
+
+Screen Shot:
+       
+.. image:: raylib_imagegeneration.png
+       :alt: RayLib Example
+
+       
+.. index:: 
+       pair: Using RingRayLib; Texture Source
+
+Texture Source
+==============
+
+.. code-block:: ring   
+       
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 800
+
+       InitWindow(screenWidth, screenHeight,
+               "raylib [textures] examples - texture source and destination rectangles")
+
+       // NOTE: Textures MUST be loaded after Window initialization 
+       // (OpenGL context is required)
+
+       scarfy = LoadTexture("RingLogo.png")        // Texture loading
+
+       frameWidth = scarfy.width
+       frameHeight = scarfy.height
+
+       // Source rectangle (part of the texture to use for drawing)
+       sourceRec = Rectangle( 0.0, 0.0, frameWidth, frameHeight )
+
+       // Destination rectangle (screen rectangle where drawing part of texture)
+       destRec = Rectangle( screenWidth/2, screenHeight/2, frameWidth*2, frameHeight*2 )
+
+       // Origin of the texture (rotation/scale point)
+       // it's relative to destination rectangle size
+       origin = Vector2( frameWidth, frameHeight )
+
+       rotation = 0
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               rotation = rotation+1
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawTexturePro(scarfy, sourceRec, destRec,
+                                        origin, rotation, WHITE)
+
+                       DrawLine(destRec.x, 0, destRec.x, screenHeight, GRAY)
+                       DrawLine(0, destRec.y, screenWidth, destRec.y, GRAY)
+
+                       DrawText("(c) Scarfy sprite by Eiden Marsal",
+                                screenWidth - 200, screenHeight - 20, 10, GRAY)
+
+               EndDrawing()
+
+       end
+
+       UnloadTexture(scarfy)        // Texture unloading
+
+       CloseWindow()
+               
+
+Screen Shot:
+       
+.. image:: raylib_texturesource.png
+       :alt: RayLib Example    
+
+
+.. index:: 
+       pair: Using RingRayLib; Geometric Shapes
+
+Geometric Shapes
+================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       FOVY_PERSPECTIVE   =  45.0
+       WIDTH_ORTHOGRAPHIC =  10.0
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [models] example - geometric shapes")
+
+       camera = Camera3D(  0.0, 10.0, 10.0,
+                                       0.0, 0.0, 0.0,
+                                       0.0, 1.0, 0.0, 
+                                       FOVY_PERSPECTIVE, CAMERA_PERSPECTIVE 
+                               )
+
+       SetTargetFPS(60)       
+
+       while !WindowShouldClose()  
+
+               if IsKeyPressed(KEY_SPACE)
+               
+                       if camera.type = CAMERA_PERSPECTIVE
+                       
+                               camera.fovy = WIDTH_ORTHOGRAPHIC
+                               camera.type = CAMERA_ORTHOGRAPHIC
+                       
+                       else
+                       
+                               camera.fovy = FOVY_PERSPECTIVE
+                               camera.type = CAMERA_PERSPECTIVE
+                       ok
+               ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               DrawCube(Vector3(-4.0, 0.0,  2.0), 2.0, 5.0, 2.0, RED)
+               DrawCubeWires(Vector3(-4.0, 0.0,  2.0), 2.0, 5.0, 2.0, GOLD)
+               DrawCubeWires(Vector3(-4.0, 0.0, -2.0), 3.0, 6.0, 2.0, MAROON)
+
+               DrawSphere(Vector3(-1.0, 0.0, -2.0), 1.0, GREEN)
+               DrawSphereWires(Vector3( 1.0, 0.0,  2.0), 2.0, 16, 16, LIME)
+
+               DrawCylinder(Vector3(4.0, 0.0, -2.0), 1.0, 2.0, 3.0, 4, SKYBLUE)
+               DrawCylinderWires(Vector3(4.0, 0.0, -2.0), 1.0, 2.0, 3.0, 4, DARKBLUE)
+               DrawCylinderWires(Vector3(4.5, -1.0, 2.0), 1.0, 1.0, 2.0, 6, BROWN)
+
+               DrawCylinder(Vector3(1.0, 0.0, -4.0), 0.0, 1.5, 3.0, 8, GOLD)
+               DrawCylinderWires(Vector3(1.0, 0.0, -4.0), 0.0, 1.5, 3.0, 8, PINK)
+
+               DrawGrid(10, 1.0)
+
+               EndMode3D()
+
+               DrawText("Press Spacebar to switch camera type", 10,
+                                GetScreenHeight() - 30, 20, DARKGRAY)
+
+               if camera.type = CAMERA_ORTHOGRAPHIC
+                       DrawText("ORTHOGRAPHIC", 10, 40, 20, BLACK)
+               else 
+                       if camera.type = CAMERA_PERSPECTIVE 
+                               DrawText("PERSPECTIVE", 10, 40, 20, BLACK)
+                       ok
+               ok
+
+               DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+Screen Shot:
+       
+.. image:: raylib_geometricshapes.png
+       :alt: RayLib Example    
+
+.. index:: 
+       pair: Using RingRayLib; Cubic Map
+
+Cubic Map
+=========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [models] example - cubesmap loading and drawing")
+
+       camera = Camera3D( 16.0, 14.0, 16.0,
+                                        0.0, 0.0, 0.0,
+                                        0.0, 1.0, 0.0, 
+                                        45.0, 0 )
+
+       image    = LoadImage("cubicmap.png")        
+       cubicmap = LoadTextureFromImage(image)      
+
+       mesh     = GenMeshCubicmap(image, Vector3( 1.0, 1.0, 1.0 ))
+       model    = LoadModelFromMesh(mesh)
+
+       texture  = LoadTexture("cubicmap_atlas.png") 
+
+       setmodelmaterialtexture(model,0,MAP_DIFFUSE,texture)
+
+       mapPosition = Vector3( -16.0, 0.0, -8.0 )   
+
+       UnloadImage(image)                     
+       SetCameraMode(camera, CAMERA_ORBITAL)  
+       SetTargetFPS(60)                       
+       
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+               
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+                       BeginMode3D(camera)
+                               DrawModel(model, mapPosition, 1.0, WHITE)
+                       EndMode3D()
+
+                       DrawTextureEx(cubicmap, Vector2( screenWidth -
+                                        cubicmap.width*4 - 20, 20 ),
+                                                       0.0, 4.0, WHITE)
+                       DrawRectangleLines(screenWidth - cubicmap.width*4 -
+                                        20, 20, cubicmap.width*4,
+                                       cubicmap.height*4, GREEN)
+
+                       DrawText("cubicmap image used to", 658,  90, 10, GRAY)
+                       DrawText("generate map 3d model",  658, 104, 10, GRAY)
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       UnloadTexture(cubicmap) 
+       UnloadTexture(texture)  
+       UnloadModel(model)      
+
+       CloseWindow()
+       
+Screen Shot:
+       
+.. image:: raylib_cubicmap.png
+       :alt: RayLib Example    
+       
+Functions
+=========
+
+.. code-block:: none
+
+       void InitWindow(int width, int height, const char *title)
+       bool WindowShouldClose(void)
+       void CloseWindow(void)
+       bool IsWindowReady(void)
+       bool IsWindowMinimized(void)
+       bool IsWindowResized(void)
+       bool IsWindowHidden(void)
+       void ToggleFullscreen(void)
+       void UnhideWindow(void)
+       void HideWindow(void)
+       void SetWindowIcon(Image image)
+       void SetWindowTitle(const char *title)
+       void SetWindowPosition(int x, int y)
+       void SetWindowMonitor(int monitor)
+       void SetWindowMinSize(int width, int height)
+       void SetWindowSize(int width, int height)
+       void *GetWindowHandle(void)
+       int GetScreenWidth(void)
+       int GetScreenHeight(void)
+       int GetMonitorCount(void)
+       int GetMonitorWidth(int monitor)
+       int GetMonitorHeight(int monitor)
+       int GetMonitorPhysicalWidth(int monitor)
+       int GetMonitorPhysicalHeight(int monitor)
+       const char *GetMonitorName(int monitor)
+       const char *GetClipboardText(void)
+       void SetClipboardText(const char *text)
+       void ShowCursor(void)
+       void HideCursor(void)
+       bool IsCursorHidden(void)
+       void EnableCursor(void)
+       void DisableCursor(void)
+       void ClearBackground(Color color)
+       void BeginDrawing(void)
+       void EndDrawing(void)
+       void BeginMode2D(Camera2D camera)
+       void EndMode2D(void)
+       void BeginMode3D(Camera3D camera)
+       void EndMode3D(void)
+       void BeginTextureMode(RenderTexture2D target)
+       void EndTextureMode(void)
+       Ray GetMouseRay(Vector2 mousePosition, Camera3D camera)
+       Vector2 GetWorldToScreen(Vector3 position, Camera3D camera)
+       Matrix GetCameraMatrix(Camera3D camera)
+       void SetTargetFPS(int fps)
+       int GetFPS(void)
+       float GetFrameTime(void)
+       double GetTime(void)
+       int ColorToInt(Color color)
+       Vector4 ColorNormalize(Color color)
+       Vector3 ColorToHSV(Color color)
+       Color ColorFromHSV(Vector3 hsv)
+       Color GetColor(int hexValue)
+       Color Fade(Color color, float alpha)
+       void SetConfigFlags(unsigned char flags)
+       void SetTraceLogLevel(int logType)
+       void SetTraceLogExit(int logType)
+       void SetTraceLogCallback(TraceLogCallback callback)
+       void TraceLog(int logType, const char *text)
+       void TakeScreenshot(const char *fileName)
+       int GetRandomValue(int min, int max)
+       bool FileExists(const char *fileName)
+       bool IsFileExtension(const char *fileName, const char *ext)
+       const char *GetExtension(const char *fileName)
+       const char *GetFileName(const char *filePath)
+       const char *GetFileNameWithoutExt(const char *filePath)
+       const char *GetDirectoryPath(const char *fileName)
+       const char *GetWorkingDirectory(void)
+       char **GetDirectoryFiles(const char *dirPath, int *count)
+       void ClearDirectoryFiles(void)
+       bool ChangeDirectory(const char *dir)
+       bool IsFileDropped(void)
+       char **GetDroppedFiles(int *count)
+       void ClearDroppedFiles(void)
+       long GetFileModTime(const char *fileName)
+       void StorageSaveValue(int position, int value)
+       int StorageLoadValue(int position)
+       void OpenURL(const char *url)
+       bool IsKeyPressed(int key)
+       bool IsKeyDown(int key)
+       bool IsKeyReleased(int key)
+       bool IsKeyUp(int key)
+       int GetKeyPressed(void)
+       void SetExitKey(int key)
+       bool IsGamepadAvailable(int gamepad)
+       bool IsGamepadName(int gamepad, const char *name)
+       const char *GetGamepadName(int gamepad)
+       bool IsGamepadButtonPressed(int gamepad, int button)
+       bool IsGamepadButtonDown(int gamepad, int button)
+       bool IsGamepadButtonReleased(int gamepad, int button)
+       bool IsGamepadButtonUp(int gamepad, int button)
+       int GetGamepadButtonPressed(void)
+       int GetGamepadAxisCount(int gamepad)
+       float GetGamepadAxisMovement(int gamepad, int axis)
+       bool IsMouseButtonPressed(int button)
+       bool IsMouseButtonDown(int button)
+       bool IsMouseButtonReleased(int button)
+       bool IsMouseButtonUp(int button)
+       int GetMouseX(void)
+       int GetMouseY(void)
+       Vector2 GetMousePosition(void)
+       void SetMousePosition(int x, int y)
+       void SetMouseOffset(int offsetX, int offsetY)
+       void SetMouseScale(float scaleX, float scaleY)
+       int GetMouseWheelMove(void)
+       int GetTouchX(void)
+       int GetTouchY(void)
+       Vector2 GetTouchPosition(int index)
+       void SetGesturesEnabled(unsigned int gestureFlags)
+       bool IsGestureDetected(int gesture)
+       int GetGestureDetected(void)
+       int GetTouchPointsCount(void)
+       float GetGestureHoldDuration(void)
+       Vector2 GetGestureDragVector(void)
+       float GetGestureDragAngle(void)
+       Vector2 GetGesturePinchVector(void)
+       float GetGesturePinchAngle(void)
+       void SetCameraMode(Camera3D camera, int mode)
+       void UpdateCamera(Camera3D *camera)
+       void SetCameraPanControl(int panKey)
+       void SetCameraAltControl(int altKey)
+       void SetCameraSmoothZoomControl(int szKey)
+       void SetCameraMoveControls(int frontKey, int backKey, int rightKey, int leftKey,
+                int upKey, int downKey)
+       void DrawPixel(int posX, int posY, Color color)
+       void DrawPixelV(Vector2 position, Color color)
+       void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color)
+       void DrawLineV(Vector2 startPos, Vector2 endPos, Color color)
+       void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color)
+       void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color)
+       void DrawLineStrip(Vector2 *points, int numPoints, Color color)
+       void DrawCircle(int centerX, int centerY, float radius, Color color)
+       void DrawCircleSector(Vector2 center, float radius, int startAngle, int endAngle,
+                int segments, Color color)
+       void DrawCircleSectorLines(Vector2 center, float radius, int startAngle, 
+               int endAngle, int segments, Color color)
+       void DrawCircleGradient(int centerX, int centerY, float radius, 
+               Color color1, Color color2)
+       void DrawCircleV(Vector2 center, float radius, Color color)
+       void DrawCircleLines(int centerX, int centerY, float radius, Color color)
+       void DrawRing(Vector2 center, float innerRadius, float outerRadius,
+                int startAngle, int endAngle, int segments, Color color)
+       void DrawRingLines(Vector2 center, float innerRadius, float outerRadius,
+                int startAngle, int endAngle, int segments, Color color)
+       void DrawRectangle(int posX, int posY, int width, int height, Color color)
+       void DrawRectangleV(Vector2 position, Vector2 size, Color color)
+       void DrawRectangleRec(Rectangle rec, Color color)
+       void DrawRectanglePro(Rectangle rec, Vector2 origin, 
+               float rotation, Color color)
+       void DrawRectangleGradientV(int posX, int posY, int width, 
+               int height, Color color1, Color color2)
+       void DrawRectangleGradientH(int posX, int posY, int width, 
+               int height, Color color1, Color color2)
+       void DrawRectangleGradientEx(Rectangle rec, Color col1, 
+               Color col2, Color col3, Color col4)
+       void DrawRectangleLines(int posX, int posY, int width, 
+               int height, Color color)
+       void DrawRectangleLinesEx(Rectangle rec, int lineThick, Color color)
+       void DrawRectangleRounded(Rectangle rec, float roundness, 
+               int segments, Color color)
+       void DrawRectangleRoundedLines(Rectangle rec, float roundness, 
+               int segments, int lineThick, Color color)
+       void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
+       void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
+       void DrawTriangleFan(Vector2 *points, int numPoints, Color color)
+       void DrawPoly(Vector2 center, int sides, float radius, 
+               float rotation, Color color)
+       void SetShapesTexture(Texture2D texture, Rectangle source)
+       bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2)
+       bool CheckCollisionCircles(Vector2 center1, float radius1, 
+               Vector2 center2, float radius2)
+       bool CheckCollisionCircleRec(Vector2 center, float radius, 
+               Rectangle rec)
+       Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2)
+       bool CheckCollisionPointRec(Vector2 point, Rectangle rec)
+       bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius)
+       bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, 
+               Vector2 p2, Vector2 p3)
+       Image LoadImage(const char *fileName)
+       Image LoadImageEx(Color *pixels, int width, int height)
+       Image LoadImagePro(void *data, int width, int height, int format)
+       Image LoadImageRaw(const char *fileName, int width, int height, 
+               int format, int headerSize)
+       void ExportImage(Image image, const char *fileName)
+       void ExportImageAsCode(Image image, const char *fileName)
+       Texture2D LoadTexture(const char *fileName)
+       Texture2D LoadTextureFromImage(Image image)
+       TextureCubemap LoadTextureCubemap(Image image, int layoutType)
+       RenderTexture2D LoadRenderTexture(int width, int height)
+       void UnloadImage(Image image)
+       void UnloadTexture(Texture2D texture)
+       void UnloadRenderTexture(RenderTexture2D target)
+       Color *GetImageData(Image image)
+       Vector4 *GetImageDataNormalized(Image image)
+       int GetPixelDataSize(int width, int height, int format)
+       Image GetTextureData(Texture2D texture)
+       Image GetScreenData(void)
+       void UpdateTexture(Texture2D texture, const void *pixels)
+       Image ImageCopy(Image image)
+       void ImageToPOT(Image *image, Color fillColor)
+       void ImageFormat(Image *image, int newFormat)
+       void ImageAlphaMask(Image *image, Image alphaMask)
+       void ImageAlphaClear(Image *image, Color color, float threshold)
+       void ImageAlphaCrop(Image *image, float threshold)
+       void ImageAlphaPremultiply(Image *image)
+       void ImageCrop(Image *image, Rectangle crop)
+       void ImageResize(Image *image, int newWidth, int newHeight)
+       void ImageResizeNN(Image *image, int newWidth,int newHeight)
+       void ImageResizeCanvas(Image *image, int newWidth, int newHeight, 
+               int offsetX, int offsetY, Color color)
+       void ImageMipmaps(Image *image)
+       void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp)
+       Color *ImageExtractPalette(Image image, int maxPaletteSize, int *extractCount)
+       Image ImageText(const char *text, int fontSize, Color color)
+       Image ImageTextEx(Font font, const char *text, float fontSize, 
+               float spacing, Color tint)
+       void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec)
+       void ImageDrawRectangle(Image *dst, Rectangle rec, Color color)
+       void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color)
+       void ImageDrawText(Image *dst, Vector2 position, const char *text, 
+               int fontSize, Color color)
+       void ImageDrawTextEx(Image *dst, Vector2 position, Font font, 
+               const char *text, float fontSize, float spacing, Color color)
+       void ImageFlipVertical(Image *image)
+       void ImageFlipHorizontal(Image *image)
+       void ImageRotateCW(Image *image)
+       void ImageRotateCCW(Image *image)
+       void ImageColorTint(Image *image, Color color)
+       void ImageColorInvert(Image *image)
+       void ImageColorGrayscale(Image *image)
+       void ImageColorContrast(Image *image, float contrast)
+       void ImageColorBrightness(Image *image, int brightness)
+       void ImageColorReplace(Image *image, Color color, Color replace)
+       Image GenImageColor(int width, int height, Color color)
+       Image GenImageGradientV(int width, int height, Color top, Color bottom)
+       Image GenImageGradientH(int width, int height, Color left, Color right)
+       Image GenImageGradientRadial(int width, int height, float density, 
+               Color inner, Color outer)
+       Image GenImageChecked(int width, int height, int checksX, int checksY, 
+               Color col1, Color col2)
+       Image GenImageWhiteNoise(int width, int height, float factor)
+       Image GenImagePerlinNoise(int width, int height, int offsetX, 
+               int offsetY, float scale)
+       Image GenImageCellular(int width, int height, int tileSize)
+       void GenTextureMipmaps(Texture2D *texture)
+       void SetTextureFilter(Texture2D texture, int filterMode)
+       void SetTextureWrap(Texture2D texture, int wrapMode)
+       void DrawTexture(Texture2D texture, int posX, int posY, Color tint)
+       void DrawTextureV(Texture2D texture, Vector2 position, Color tint)
+       void DrawTextureEx(Texture2D texture, Vector2 position, 
+               float rotation, float scale, Color tint)
+       void DrawTextureRec(Texture2D texture, Rectangle sourceRec, 
+               Vector2 position, Color tint)
+       void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, 
+               Rectangle quad, Color tint)
+       void DrawTexturePro(Texture2D texture, Rectangle sourceRec, 
+               Rectangle destRec, Vector2 origin, float rotation, Color tint)
+       void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, 
+               Rectangle destRec, Vector2 origin, float rotation, Color tint)
+       Font GetFontDefault(void)
+       Font LoadFont(const char *fileName)
+       Font LoadFontEx(const char *fileName, int fontSize, 
+               int *fontChars, int charsCount)
+       Font LoadFontFromImage(Image image, Color key, int firstChar)
+       CharInfo *LoadFontData(const char *fileName, int fontSize, 
+               int *fontChars, int charsCount, int type)
+       Image GenImageFontAtlas(CharInfo *chars, int charsCount, 
+               int fontSize, int padding, int packMethod)
+       void UnloadFont(Font font)
+       void DrawFPS(int posX, int posY)
+       void DrawText(const char *text, int posX, int posY, int fontSize, Color color)
+       void DrawTextEx(Font font, const char *text, Vector2 position, 
+               float fontSize, float spacing, Color tint)
+       void DrawTextRec(Font font, const char *text, Rectangle rec, 
+               float fontSize, float spacing, bool wordWrap, Color tint)
+       void DrawTextRecEx(Font font, const char *text, Rectangle rec, 
+               float fontSize, float spacing, bool wordWrap, Color tint,
+               int selectStart, int selectLength, Color selectText, Color selectBack)
+       int MeasureText(const char *text, int fontSize)
+       Vector2 MeasureTextEx(Font font, const char *text, 
+               float fontSize, float spacing)
+       int GetGlyphIndex(Font font, int character)
+       int GetNextCodepoint(const char *text, int *count)
+       bool TextIsEqual(const char *text1, const char *text2)
+       unsigned int TextLength(const char *text)
+       unsigned int TextCountCodepoints(const char *text)
+       const char *TextFormat(const char *text)
+       const char *TextSubtext(const char *text, int position, int length)
+       const char *TextReplace(char *text, const char *replace, const char *by)
+       const char *TextInsert(const char *text, const char *insert, int position)
+       const char *TextJoin(const char **textList, int count, const char *delimiter)
+       const char **TextSplit(const char *text, char delimiter, int *count)
+       void TextAppend(char *text, const char *append, int *position)
+       int TextFindIndex(const char *text, const char *find)
+       const char *TextToUpper(const char *text)
+       const char *TextToLower(const char *text)
+       const char *TextToPascal(const char *text)
+       int TextToInteger(const char *text)
+       void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color)
+       void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, 
+       float rotationAngle, Color color)
+       void DrawCube(Vector3 position, float width, float height, float length, Color color)
+       void DrawCubeV(Vector3 position, Vector3 size, Color color)
+       void DrawCubeWires(Vector3 position, float width, float height, 
+               float length, Color color)
+       void DrawCubeWiresV(Vector3 position, Vector3 size, Color color)
+       void DrawCubeTexture(Texture2D texture, Vector3 position, 
+               float width, float height, float length, Color color)
+       void DrawSphere(Vector3 centerPos, float radius, Color color)
+       void DrawSphereEx(Vector3 centerPos, float radius, int rings, 
+               int slices, Color color)
+       void DrawSphereWires(Vector3 centerPos, float radius, int rings, 
+               int slices, Color color)
+       void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, 
+               float height, int slices, Color color)
+       void DrawCylinderWires(Vector3 position, float radiusTop, 
+               float radiusBottom, float height, int slices, Color color)
+       void DrawPlane(Vector3 centerPos, Vector2 size, Color color)
+       void DrawRay(Ray ray, Color color)
+       void DrawGrid(int slices, float spacing)
+       void DrawGizmo(Vector3 position)
+       Model LoadModel(const char *fileName)
+       Model LoadModelFromMesh(Mesh mesh)
+       void UnloadModel(Model model)
+       Mesh *LoadMeshes(const char *fileName, int *meshCount)
+       void ExportMesh(Mesh mesh, const char *fileName)
+       void UnloadMesh(Mesh *mesh)
+       Material *LoadMaterials(const char *fileName, int *materialCount)
+       Material LoadMaterialDefault(void)
+       void UnloadMaterial(Material material)
+       void SetMaterialTexture(Material *material, int mapType, Texture2D texture)
+       void SetModelMeshMaterial(Model *model, int meshId, int materialId)
+       ModelAnimation *LoadModelAnimations(const char *fileName, int *animsCount)
+       void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
+       void UnloadModelAnimation(ModelAnimation anim)
+       bool IsModelAnimationValid(Model model, ModelAnimation anim)
+       Mesh GenMeshPoly(int sides, float radius)
+       Mesh GenMeshPlane(float width, float length, int resX, int resZ)
+       Mesh GenMeshCube(float width, float height, float length)
+       Mesh GenMeshSphere(float radius, int rings, int slices)
+       Mesh GenMeshHemiSphere(float radius, int rings, int slices)
+       Mesh GenMeshCylinder(float radius, float height, int slices)
+       Mesh GenMeshTorus(float radius, float size, int radSeg, int sides)
+       Mesh GenMeshKnot(float radius, float size, int radSeg, int sides)
+       Mesh GenMeshHeightmap(Image heightmap, Vector3 size)
+       Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize)
+       BoundingBox MeshBoundingBox(Mesh mesh)
+       void MeshTangents(Mesh *mesh)
+       void MeshBinormals(Mesh *mesh)
+       void DrawModel(Model model, Vector3 position, float scale, Color tint)
+       void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, 
+               float rotationAngle, Vector3 scale, Color tint)
+       void DrawModelWires(Model model, Vector3 position, float scale, Color tint)
+       void DrawModelWiresEx(Model model, Vector3 position, 
+               Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint)
+       void DrawBoundingBox(BoundingBox box, Color color)
+       void DrawBillboard(Camera3D camera, Texture2D texture, 
+               Vector3 center, float size, Color tint)
+       void DrawBillboardRec(Camera3D camera, Texture2D texture, 
+               Rectangle sourceRec, Vector3 center, float size, Color tint)
+       bool CheckCollisionSpheres(Vector3 centerA, float radiusA, 
+               Vector3 centerB, float radiusB)
+       bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2)
+       bool CheckCollisionBoxSphere(BoundingBox box, Vector3 centerSphere, float radiusSphere)
+       bool CheckCollisionRaySphere(Ray ray, Vector3 spherePosition, float sphereRadius)
+       bool CheckCollisionRaySphereEx(Ray ray, Vector3 spherePosition, 
+               float sphereRadius, Vector3 *collisionPoint)
+       bool CheckCollisionRayBox(Ray ray, BoundingBox box)
+       RayHitInfo GetCollisionRayModel(Ray ray, Model *model)
+       RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3)
+       RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight)
+       char *LoadText(const char *fileName)
+       Shader LoadShader(const char *vsFileName, const char *fsFileName)
+       Shader LoadShaderCode(char *vsCode, char *fsCode)
+       void UnloadShader(Shader shader)
+       Shader GetShaderDefault(void)
+       Texture2D GetTextureDefault(void)
+       int GetShaderLocation(Shader shader, const char *uniformName)
+       void SetShaderValue(Shader shader, int uniformLoc, 
+               const void *value, int uniformType)
+       void SetShaderValueV(Shader shader, int uniformLoc, 
+               const void *value, int uniformType, int count)
+       void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
+       void SetShaderValueTexture(Shader shader, int uniformLoc, Texture2D texture)
+       void SetMatrixProjection(Matrix proj)
+       void SetMatrixModelview(Matrix view)
+       Matrix GetMatrixModelview(void)
+       Texture2D GenTextureCubemap(Shader shader, Texture2D skyHDR, int size)
+       Texture2D GenTextureIrradiance(Shader shader, Texture2D cubemap, int size)
+       Texture2D GenTexturePrefilter(Shader shader, Texture2D cubemap, int size)
+       Texture2D GenTextureBRDF(Shader shader, int size)
+       void BeginShaderMode(Shader shader)
+       void EndShaderMode(void)
+       void BeginBlendMode(int mode)
+       void EndBlendMode(void)
+       void BeginScissorMode(int x, int y, int width, int height)
+       void EndScissorMode(void)
+       void InitVrSimulator(void)
+       void CloseVrSimulator(void)
+       void UpdateVrTracking(Camera3D *camera)
+       void SetVrConfiguration(VrDeviceInfo info, Shader distortion)
+       bool IsVrSimulatorReady(void)
+       void ToggleVrMode(void)
+       void BeginVrDrawing(void)
+       void EndVrDrawing(void)
+       void InitAudioDevice(void)
+       void CloseAudioDevice(void)
+       bool IsAudioDeviceReady(void)
+       void SetMasterVolume(float volume)
+       Wave LoadWave(const char *fileName)
+       Wave LoadWaveEx(void *data, int sampleCount, int sampleRate, 
+               int sampleSize, int channels)
+       Sound LoadSound(const char *fileName)
+       Sound LoadSoundFromWave(Wave wave)
+       void UpdateSound(Sound sound, const void *data, int samplesCount)
+       void UnloadWave(Wave wave)
+       void UnloadSound(Sound sound)
+       void ExportWave(Wave wave, const char *fileName)
+       void ExportWaveAsCode(Wave wave, const char *fileName)
+       void PlaySound(Sound sound)
+       void PauseSound(Sound sound)
+       void ResumeSound(Sound sound)
+       void StopSound(Sound sound)
+       bool IsSoundPlaying(Sound sound)
+       void SetSoundVolume(Sound sound, float volume)
+       void SetSoundPitch(Sound sound, float pitch)
+       void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels)
+       Wave WaveCopy(Wave wave)
+       void WaveCrop(Wave *wave, int initSample, int finalSample)
+       float *GetWaveData(Wave wave)
+       Music LoadMusicStream(const char *fileName)
+       void UnloadMusicStream(Music music)
+       void PlayMusicStream(Music music)
+       void UpdateMusicStream(Music music)
+       void StopMusicStream(Music music)
+       void PauseMusicStream(Music music)
+       void ResumeMusicStream(Music music)
+       bool IsMusicPlaying(Music music)
+       void SetMusicVolume(Music music, float volume)
+       void SetMusicPitch(Music music, float pitch)
+       void SetMusicLoopCount(Music music, int count)
+       float GetMusicTimeLength(Music music)
+       float GetMusicTimePlayed(Music music)
+       AudioStream InitAudioStream(unsigned int sampleRate, 
+               unsigned int sampleSize, unsigned int channels)
+       void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)
+       void CloseAudioStream(AudioStream stream)
+       bool IsAudioBufferProcessed(AudioStream stream)
+       void PlayAudioStream(AudioStream stream)
+       void PauseAudioStream(AudioStream stream)
+       void ResumeAudioStream(AudioStream stream)
+       bool IsAudioStreamPlaying(AudioStream stream)
+       void StopAudioStream(AudioStream stream)
+       void SetAudioStreamVolume(AudioStream stream, float volume)
+       void SetAudioStreamPitch(AudioStream stream, float pitch)
+       void GuiEnable(void)
+       void GuiDisable(void)
+       void GuiLock(void)
+       void GuiUnlock(void)
+       void GuiState(int state)
+       void GuiFont(Font font)
+       void GuiFade(float alpha)
+       void GuiSetStyle(int control, int property, int value)
+       int GuiGetStyle(int control, int property)
+       bool GuiWindowBox(Rectangle bounds, const char *text)
+       void GuiGroupBox(Rectangle bounds, const char *text)
+       void GuiLine(Rectangle bounds, const char *text)
+       void GuiPanel(Rectangle bounds)
+       Rectangle GuiScrollPanel(Rectangle bounds, Rectangle content, Vector2 *scroll)
+       void GuiLabel(Rectangle bounds, const char *text)
+       bool GuiButton(Rectangle bounds, const char *text)
+       bool GuiLabelButton(Rectangle bounds, const char *text)
+       bool GuiImageButton(Rectangle bounds, Texture2D texture)
+       bool GuiImageButtonEx(Rectangle bounds, Texture2D texture, 
+               Rectangle texSource, const char *text)
+       bool GuiToggle(Rectangle bounds, const char *text, bool active)
+       int GuiToggleGroup(Rectangle bounds, const char *text, int active)
+       bool GuiCheckBox(Rectangle bounds, const char *text, bool checked)
+       int GuiComboBox(Rectangle bounds, const char *text, int active)=
+       bool GuiDropdownBox(Rectangle bounds, const char *text, 
+               int *active, bool editMode)
+       bool GuiSpinner(Rectangle bounds, int *value, int minValue, 
+               int maxValue, bool editMode)
+       bool GuiValueBox(Rectangle bounds, int *value, int minValue, 
+               int maxValue, bool editMode)
+       bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode)
+       bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode)
+       float GuiSlider(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       float GuiSliderBar(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       float GuiProgressBar(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       void GuiStatusBar(Rectangle bounds, const char *text)
+       void GuiDummyRec(Rectangle bounds, const char *text)
+       int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue)
+       Vector2 GuiGrid(Rectangle bounds, float spacing, int subdivs)
+       bool GuiListView(Rectangle bounds, const char *text, int *active, 
+               int *scrollIndex, bool editMode)
+       bool GuiListViewEx(Rectangle bounds, const char **text, int count, 
+               int *enabled, int *active, int *focus, int *scrollIndex, bool editMode)
+       int GuiMessageBox(Rectangle bounds, const char *windowTitle, 
+               const char *message, const char *buttons)
+       int GuiTextInputBox(Rectangle bounds, const char *windowTitle, 
+               const char *message, char *text, const char *buttons)
+       Color GuiColorPicker(Rectangle bounds, Color color)
+       void GuiLoadStyle(const char *fileName)
+       void GuiLoadStyleProps(const int *props, int count)
+       void GuiLoadStyleDefault(void)
+       void GuiUpdateStyleComplete(void)
+       const char *GuiIconText(int iconId, const char *text)
diff --git a/docs/en/target/ringrepl.png b/docs/en/target/ringrepl.png
new file mode 100644 (file)
index 0000000..162c174
Binary files /dev/null and b/docs/en/target/ringrepl.png differ
diff --git a/docs/en/target/ringzip.txt b/docs/en/target/ringzip.txt
new file mode 100644 (file)
index 0000000..4b2e5d7
--- /dev/null
@@ -0,0 +1,181 @@
+.. index:: 
+       single: RingZip; Introduction
+
+=============
+Using RingZip
+=============
+
+In this chapter we will learn about using RingZip
+
+.. index:: 
+       pair: RingZip; Create Zip File
+
+Create Zip File
+===============
+
+Example : Create myfile.zip contains 4 files 
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'w')
+       zip_addfile(oZip,"test.c")
+       zip_addfile(oZip,"zip.c")
+       zip_addfile(oZip,"zip.h")
+       zip_addfile(oZip,"miniz.h")
+       zip_close(oZip)
+
+.. index:: 
+       pair: RingZip; Extract Zip File
+
+Extract Zip File
+================
+
+Example : Extract myfile.zip to myfolder folder.
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       zip_extract_allfiles("myfile.zip","myfolder")
+
+.. index:: 
+       pair: RingZip; Print files in Zip file
+
+Print Files in Zip file
+=======================
+
+Example : Print file names in the myfile.zip
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'r')
+       for x=1 to zip_filescount(oZip)
+              see zip_getfilenamebyindex(oZip,x) + nl
+       next
+       zip_close(oZip)
+
+.. index:: 
+       pair: RingZip; Using RingZip Classes
+
+Using RingZip Classes
+=====================
+
+The RingZip library comes with two classes. The Zip class and the ZipEntry class.
+
+Example (1):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               setFileName("myfile.zip")
+               open("w")
+               newEntry() {
+                       open("test.c")
+                       writefile("test.c")
+                       close()
+               }
+               close()
+       }
+
+Example (2):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("w")
+               AddFile("test.c")
+               AddFile("zip.c")
+               AddFile("zip.h")
+               AddFile("miniz.h")
+               Close()
+       }
+
+
+Example (3):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new zip {
+               SetFileName("myfile.zip")
+               ExtractAllFiles("myfolder")
+       }
+
+
+Example (4):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("r")
+               see FilesCount()
+               Close()
+       }
+
+
+Example (5):
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("r")
+               for x = 1 to filescount() 
+                       See GetFileNameByIndex(x) + nl
+               next
+               Close()
+       }
+
+.. index:: 
+       pair: RingZip; Zip Class Reference
+
+Zip Class Reference
+===================
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+SetFileName(cName)             Set the Zip file name
+GetFileName()                  Return the Zip file name
+Open(cMode)                    Open File, cMode = "a", "w" or "r"
+Close()                        Close the Zip File
+AddFile(cFileName)             Add file to the Zip file
+ExtractAllFiles(cFolder)       Extract all files from the Zip file
+FilesCount()                   Return files count in the Zip file
+GetFileNameByIndex(nIndex)     Return file name in the Zip file by file index
+NewEntry()                     Create new ZipEntry object
+===========================    ======================================================================
+
+
+.. index:: 
+       pair: RingZip; ZipEntry Class Reference
+
+ZipEntry Class Reference
+========================
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Open(cFileName)                Open new Entry
+WriteFile(cFileName)           Write File to the Entry
+WriteString(cString)           Write String to the Entry
+Close()                                Close the Entry
+===========================    ======================================================================
+
+
diff --git a/docs/en/target/rnote15events.png b/docs/en/target/rnote15events.png
new file mode 100644 (file)
index 0000000..a14997a
Binary files /dev/null and b/docs/en/target/rnote15events.png differ
diff --git a/docs/en/target/rnote15output.png b/docs/en/target/rnote15output.png
new file mode 100644 (file)
index 0000000..6cf97e7
Binary files /dev/null and b/docs/en/target/rnote15output.png differ
diff --git a/docs/en/target/rnote15shot1.png b/docs/en/target/rnote15shot1.png
new file mode 100644 (file)
index 0000000..f8f03f1
Binary files /dev/null and b/docs/en/target/rnote15shot1.png differ
diff --git a/docs/en/target/rnote15shot2.png b/docs/en/target/rnote15shot2.png
new file mode 100644 (file)
index 0000000..e00e642
Binary files /dev/null and b/docs/en/target/rnote15shot2.png differ
diff --git a/docs/en/target/rnote15shot3.png b/docs/en/target/rnote15shot3.png
new file mode 100644 (file)
index 0000000..b3a96ca
Binary files /dev/null and b/docs/en/target/rnote15shot3.png differ
diff --git a/docs/en/target/rnote19.jpg b/docs/en/target/rnote19.jpg
new file mode 100644 (file)
index 0000000..d61b78c
Binary files /dev/null and b/docs/en/target/rnote19.jpg differ
diff --git a/docs/en/target/rnotedistribute.png b/docs/en/target/rnotedistribute.png
new file mode 100644 (file)
index 0000000..d58bae5
Binary files /dev/null and b/docs/en/target/rnotedistribute.png differ
diff --git a/docs/en/target/rnotedistributemenu.png b/docs/en/target/rnotedistributemenu.png
new file mode 100644 (file)
index 0000000..5ed2e10
Binary files /dev/null and b/docs/en/target/rnotedistributemenu.png differ
diff --git a/docs/en/target/rnotefd.png b/docs/en/target/rnotefd.png
new file mode 100644 (file)
index 0000000..a4c229a
Binary files /dev/null and b/docs/en/target/rnotefd.png differ
diff --git a/docs/en/target/rnotelinenumber.png b/docs/en/target/rnotelinenumber.png
new file mode 100644 (file)
index 0000000..2fc38df
Binary files /dev/null and b/docs/en/target/rnotelinenumber.png differ
diff --git a/docs/en/target/rnotemenu_browser.png b/docs/en/target/rnotemenu_browser.png
new file mode 100644 (file)
index 0000000..de23aed
Binary files /dev/null and b/docs/en/target/rnotemenu_browser.png differ
diff --git a/docs/en/target/rnotemenu_edit.png b/docs/en/target/rnotemenu_edit.png
new file mode 100644 (file)
index 0000000..25d6d08
Binary files /dev/null and b/docs/en/target/rnotemenu_edit.png differ
diff --git a/docs/en/target/rnotemenu_file.png b/docs/en/target/rnotemenu_file.png
new file mode 100644 (file)
index 0000000..cbfb86c
Binary files /dev/null and b/docs/en/target/rnotemenu_file.png differ
diff --git a/docs/en/target/rnotemenu_help.png b/docs/en/target/rnotemenu_help.png
new file mode 100644 (file)
index 0000000..522f987
Binary files /dev/null and b/docs/en/target/rnotemenu_help.png differ
diff --git a/docs/en/target/rnotemenu_mode.png b/docs/en/target/rnotemenu_mode.png
new file mode 100644 (file)
index 0000000..525815a
Binary files /dev/null and b/docs/en/target/rnotemenu_mode.png differ
diff --git a/docs/en/target/rnotemenu_program.png b/docs/en/target/rnotemenu_program.png
new file mode 100644 (file)
index 0000000..55d2b56
Binary files /dev/null and b/docs/en/target/rnotemenu_program.png differ
diff --git a/docs/en/target/rnotemenu_tools.png b/docs/en/target/rnotemenu_tools.png
new file mode 100644 (file)
index 0000000..f06d303
Binary files /dev/null and b/docs/en/target/rnotemenu_tools.png differ
diff --git a/docs/en/target/rnotemenu_view.png b/docs/en/target/rnotemenu_view.png
new file mode 100644 (file)
index 0000000..d60f854
Binary files /dev/null and b/docs/en/target/rnotemenu_view.png differ
diff --git a/docs/en/target/rnotemodernstyle.png b/docs/en/target/rnotemodernstyle.png
new file mode 100644 (file)
index 0000000..356b31a
Binary files /dev/null and b/docs/en/target/rnotemodernstyle.png differ
diff --git a/docs/en/target/rnotemodernstyle2.png b/docs/en/target/rnotemodernstyle2.png
new file mode 100644 (file)
index 0000000..aa90019
Binary files /dev/null and b/docs/en/target/rnotemodernstyle2.png differ
diff --git a/docs/en/target/rnotestylemenu.png b/docs/en/target/rnotestylemenu.png
new file mode 100644 (file)
index 0000000..e8b78f7
Binary files /dev/null and b/docs/en/target/rnotestylemenu.png differ
diff --git a/docs/en/target/rnotetoolsterminal.png b/docs/en/target/rnotetoolsterminal.png
new file mode 100644 (file)
index 0000000..46a6c9a
Binary files /dev/null and b/docs/en/target/rnotetoolsterminal.png differ
diff --git a/docs/en/target/rnotetoolsterminal2.png b/docs/en/target/rnotetoolsterminal2.png
new file mode 100644 (file)
index 0000000..19a01c0
Binary files /dev/null and b/docs/en/target/rnotetoolsterminal2.png differ
diff --git a/docs/en/target/runwebapp1.png b/docs/en/target/runwebapp1.png
new file mode 100644 (file)
index 0000000..3d708ed
Binary files /dev/null and b/docs/en/target/runwebapp1.png differ
diff --git a/docs/en/target/runwebapp2.png b/docs/en/target/runwebapp2.png
new file mode 100644 (file)
index 0000000..d55801d
Binary files /dev/null and b/docs/en/target/runwebapp2.png differ
diff --git a/docs/en/target/scope.txt b/docs/en/target/scope.txt
new file mode 100644 (file)
index 0000000..e3acd30
--- /dev/null
@@ -0,0 +1,1006 @@
+.. index:: 
+       single: Scope Rules; Introduction
+
+========================================
+Scope Rules for Variables and Attributes
+========================================
+
+In this chapter we will learn about scope rules and how Ring find variables.
+
+Also we will learn about conflicts and how to solve/avoid them.
+
+The next information are important once you start developing large applications using Ring
+
+These application may uses 
+
+* Global variables (Try to avoid them)
+
+* Classes (Object-Oriented)
+
+* braces { } to access objects
+
+* Declarative Programming
+
+* Natural Programming
+
+.. index:: 
+       pair: Scope Rules; Three Scopes
+
+Three Scopes 
+============
+
+In Ring we have three scopes :-
+
+(1) Public/Global Scope - Each variable you define in the statements part (before functions and classes)
+
+(2) Object Scope - When you are inside an object (Inside class method or using { } to access the object )
+
+(3) Local Scope - Related to functions and methods
+
+.. index:: 
+       pair: Scope Rules; Defining Variables and Variables Access
+
+Defining Variables and Variables Access
+=======================================
+
+(1) Ring uses lexical scoping, i.e. the scope of the variable is based on where we defined the variable.
+
+(2) Inside braces {  } when you access an object, You will change the current active object scope to this object scope but you still can access the global scope and the local scope.
+
+(3) After the 'Class' keyword and the class name, when you write variable names to be defined as attributes, You still can access the global scope.
+
+In this region (class region - after the class name and before methods) we have
+
+       * Global Scope ----> The Global Scope
+       * Object Scope ----> The Object Scope
+       * Local Scope  ----> The Object Scope
+
+.. note:: Since the local scope in the class region point also to the object scope in this region, we can use nested braces and still have access to the object scope of the class through the local scope.
+
+.. tip :: You can create windows and controls as attibutes by defining them in this region.
+       
+.. tip :: In the class region if you created objects and used braces {} to access them then using self.attribute inside braces will use the class (not the object that you access) because you have access to the class through the local scope.
+
+(4) Function Parameters are automatically defined in the local scope.
+
+.. index:: 
+       pair: Scope Rules; How Ring find the Variable?
+
+How Ring find the variable?
+===========================
+
+1 - Search First in the Local Scope 
+
+if not found !
+
+2 - Search in the Object Scope 
+
+if not found !
+
+3 - Search in the public scope
+
+if not found ----> Runtime Error
+
+if found  ----> Check if we can do optimization to avoid 
+searching next time (Cache / Pointers for performance).
+
+.. index:: 
+       pair: Scope Rules; Using Object.Attribute
+
+Using Object.Attribute
+======================
+
+When we use object.attribute the search will be in the object attributes only.
+
+I.e. no search will be done in the local scope or in the global scope for the object attribute.
+
+.. note:: Using self.attribute will search for the first self before searching for attributes.
+
+
+.. index:: 
+       pair: Scope Rules; The Self Object
+
+The Self Object
+===============
+
+The self object is a reference to the current object that we can use from the class methods.
+
+When we are inside class method and use Self we mean the object that will be created from this class.
+
+Inside the class methods if we used Braces { } this will change the current object scope and self will
+be changed also inside braces to reference the object that we access using Braces.
+
+Inside the Class Region (after the class name and before any method) we have access to the object through
+the object scope and the local scope also. In this region using Self will always be a reference to the class object.
+if we used Braces to change the object scope then used Self inside Braces, Also self will be a reference to the class object (not the object that
+we already access using braces) because in the class region we have :-
+
+* Global Scope ---> Global Scope
+* Object Scope ---> Object Scope
+* Local Scope  ---> Object Scope
+
+And using Braces changes the object scope only (not the local scope) and when Ring search for variables
+it will search in the Local Scope first so it will find self in the class that we are inside.
+
+.. index:: 
+       pair: Scope Rules; Conflict between Global Variables and Class Attributes
+
+How Ring Define Variables and Attributes
+========================================
+
+Ring will use the variable name in the Assignment operation
+
+1 - Search using the variable name
+
+2 - If not found ---> Avoid the runtime error and define the variable in the current scope
+
+3 - If found ---> Use the variable and don't define anything in the current scope
+
+* In the global region (before any function or class) the current scope is the global scope.
+
+* In the class region (after the class name and before any method) the current scope is the object attributes.
+
+* In Functions and methods the current scope is the local scope.
+
+
+Conflict between Global Variables and Class Attributes
+======================================================
+
+Look at this example:
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               name
+               address 
+               phone
+
+In the previous example we have a global variable called 'name'
+inside the class person.
+
+when we use the variable 'name', Ring will start the search operation and 
+will try to find it.
+
+if found ---> Use it
+
+if not found ---> Define new attribute
+
+But the variable name is a global variable, so it will be found and used!
+
+We will not have the attribute name! added to the object. 
+
+Solution (1) - Use the Main Function 
+
+.. code-block:: ring
+
+       func main
+               name = "test"
+               o1 = new person
+               see o1
+
+       class person
+               name
+               address 
+               phone
+
+Solution (2) - Use special mark for global variable names like $
+
+.. code-block:: ring
+
+       $name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               name
+               address 
+               phone
+
+Solution (3) - Use the AddAttribute() Method
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               AddAttribute(self,"name")
+               address 
+               phone
+
+Solution (4) - Use self before the attribute name
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               self.name
+               address 
+               phone
+
+
+So what is the best solution to this conflict?
+
+1 - Use the $ Mark for global variables 
+
+2 - Optional : Try to avoid global variables and use the Main function 
+
+In practice i do both of them.
+
+The other solution 
+
+* Use self before the attribute name or use AddAttribute()
+
+.. index:: 
+       pair: Scope Rules; Conflict between Class Attributes and Local Variables
+
+Conflict between Class Attributes and Local Variables
+=====================================================
+
+This conflict may happen when we access the object using braces
+
+Example:
+
+.. code-block:: ring
+       func main
+               name = "nice"
+               o1 = new person {name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+In the previous example we have the local variable name.
+
+The value of this variable will be set to "mahmoud" instead of the object attribute.
+
+Solution (1) : Just use Self 
+
+.. code-block:: ring
+
+       func main
+               name = "nice"
+               o1 = new person {self.name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+Solution (2) : Change the Local variable name 
+
+.. code-block:: ring
+
+       func main
+               cName = "nice"
+               o1 = new person {name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+Solution (3) : Change Braces and use the Dot operator
+
+.. code-block:: ring
+
+       func main
+               name = "nice"
+               o1 = new person 
+               o1.name ="mahmoud" 
+               o1.address ="Egypt"  
+               o1.phone = 000 
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+
+.. index:: 
+       pair: Scope Rules; Using Braces to access objects inside Class Methods
+
+Using Braces to access objects inside Class Methods
+===================================================
+
+Remember that we have Three scopes (Local Scope, Object Scope and Global Scope) and when we
+are inside a class method, we expect that we have access to the object attributes and methods and
+this is true until we use braces to access another object attributes and methods because in this case
+our object scope will be switched to another object.
+
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl # works fine
+                       myobj = new otherclass {
+                               see name + nl
+                               see x + nl + y + nl # error !
+                       }
+
+       class otherclass
+               name = "test"
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       test
+
+       Line 8 Error (R24) : Using uninitialized variable : x
+       In method test() in file methodbraceerror.ring
+       called from line 5  in file methodbraceerror.ring
+
+Now what we will do to solve the previous problem?
+
+Solution (1) : Write the code that access the class attributes outside braces.
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl # works fine
+                       myobj = new otherclass {
+                               see name + nl
+                       }
+                       see x + nl + y + nl # Outside braces - works fine
+
+
+       class otherclass
+               name = "test"
+
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       test
+       10
+       20
+
+
+Solution (2) : Don't Use Braces
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl  
+                       myobj = new otherclass 
+                       see myobj.name
+                       see x + nl + y + nl                     
+
+       class otherclass
+               name = "test"
+
+
+Solution (3) : Copy the self object 
+
+We may use this solution if we want to use braces and get access to the class attributes (Just Reading).
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       oSelf = self
+                       see x + nl + y + nl  
+                       myobj = new otherclass {
+                               see name + nl
+                               see oself.x + nl + oself.y + nl  
+                       }
+
+       class otherclass
+               name = "test"
+
+Output:
+
+.. code-block:: none
+
+       10
+       20
+       test
+       10
+       20
+
+Now look at this line
+
+.. code-block:: ring
+
+       oself = self
+
+The problem with the previous line is that we will have a new copy from the object
+Because in Ring the assignment operator copy lists and objects by value (not by reference).
+
+When we access the new object attributes (reading) we don't have problems 
+
+But if we modified the object attributes (Then we will modify the copy!).
+
+.. note:: We can use braces again with the copy
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       oSelf = self
+                       see x + nl + y + nl  
+                       myobj = new otherclass {
+                               see name + nl
+                               oSelf {
+                                       see x + nl + y + nl
+                               }
+                       }
+
+       class otherclass
+               name = "test"
+
+In a GUI application, we may create a class contains the window objects as attributes to be able 
+to access the controls from different methods. Remember the previous information when you try to access
+objects using braces inside methods because in this case you can't access the object attributes directly
+and if you copied the self object you will work on a copy and the new controls that you create will be 
+related to the copy and you can't access them.
+
+
+.. index:: 
+       pair: Scope Rules; Accessing the class attributes from braces inside class methods
+
+
+Accessing the class attributes from braces inside class methods
+===============================================================
+
+We access the class attributes directly from the class methods, also we have the choice to use the Self
+reference before the attribute/method name. Using Braces {} inside class method change the active object
+scope and prevent us from getting direct access to the class attributes. Also using Self will not help because
+the Self reference will be changed to the object that we access using Braces.
+
+In this case if you want to read an attribute you have to copy the Self object before using Braces and
+if you want to modify an attribute you have to the copy from local variable to the object attribute after using
+Braces. 
+
+This case happens when you want to read/modify attribute insead braces. 
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # Attribute
+
+               # some code here
+
+               Func OpenDatabase
+                       # some code here
+                       new QSqlDatabase() {
+                               oCon = addDatabase("QSQLITE") {
+                                       setDatabaseName("weighthistory.db")
+                                       open()
+                               }
+                       }       
+                       self.oCon = oCon 
+                       # some code here        
+
+In the previous example we want to create the connection object and save it inside the oCon attribute.
+
+The object is an output from the addDatabase() method that we use after accessing the QSQLDatabase() object.
+
+Inside braces we can't use the Self reference to use the object created from the MyApp class, Because
+the Self reference here will be to the object that we access using Braces.
+
+We solved the problem in the previous example by creating a local variable called oCon then after Braces
+we copied that variable to the oCon attribute.
+
+The next code is another solution.
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # Attribute
+
+               # some code here
+
+               Func OpenDatabase
+                       # some code here
+                       oCon = new QSqlDatabase()
+                       oCon = oCon.addDatabase("QSQLITE") {
+                               setDatabaseName("weighthistory.db")
+                               Open()  
+                       }
+                       # some code here        
+
+
+The next code is a better solution.
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # Attribute
+
+               # some code here
+
+               Func OpenDatabase
+                       # some code here
+                       new QSqlDatabase() {
+                               this.oCon = addDatabase("QSQLITE") {
+                                       setDatabaseName("weighthistory.db")
+                                       Open()  
+                               }
+                       }
+                       # some code here        
+
+.. note:: We used this.attribute to access the class attribute (oCon) while we are inside Braces.
+
+
+.. index:: 
+       pair: Scope Rules; Creating a Class for each Window in GUI applications
+
+Creating a Class for each Window in GUI applications
+====================================================
+
+A good way for creating classes for windows is to define the window directly after the class name
+
+In this area you can use nested braces without problems to define the window and the controls, and
+they will be attributes that you can access from methods.
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp 
+       {
+               $ObjectName = "oFirstWindow"
+               oFirstWindow = new FirstWindow
+
+               $ObjectName = "oSecondWindow"
+               oSecondWindow = new SecondWindow
+
+               exec()
+       }
+
+       Class FirstWindow
+
+               win = new qWidget() {
+                       setgeometry(0,50,300,200)
+                       setWindowTitle("First Window")
+                       label1 = new qLabel(win)
+                       {
+                               setgeometry(10,10,300,30)
+                               setText("0")
+                       }
+                       btn1 = new qPushButton(win)
+                       {
+                               move(100,100)
+                               setText("Increment")
+                               setClickEvent($ObjectName+".increment()")
+                       }
+                       show()
+               }       
+
+               Func Increment
+                       label1 {
+                               setText( "" + ( 0 + text() + 1 ) )
+                       }
+
+
+       Class SecondWindow
+
+               win = new qWidget() {
+                       setgeometry(400,50,300,200)
+                       setWindowTitle("Second Window")
+                       label1 = new qLabel(win)
+                       {
+                               setgeometry(10,10,300,30)
+                               setText("0")
+                       }
+                       btn1 = new qPushButton(win)
+                       {
+                               move(100,100)
+                               setText("Decrement")
+                               setClickEvent($ObjectName+".decrement()")
+                       }
+                       show()
+               }       
+
+               Func Decrement
+                       label1 {
+                               setText( "" + ( 0 + text() - 1 ) )
+                       }
+
+.. index:: 
+       pair: Scope Rules; Conflict between self inside braces and self in the class region
+
+Conflict between self inside braces and self in the class region
+================================================================
+
+In the class region (after the class name and before any methods) we define the attributes.
+
+In this region we have access to the global scope and the local scope will point to the object scope.
+
+Three Scopes
+
+* Global Scope ---> Gloabl Scope
+* Object Scope ---> Object Scope
+* Local Scope  ---> Object Scope
+
+Look at this example
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       name = "Gal" 
+               }
+               aFriends + new Friend { 
+                       name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+Output:
+
+.. code-block:: none
+
+       name: NULL
+       name: NULL
+
+The problem in the previous example is that the Class account contains an attribute called "name"
+and the Friend class contains an attribue called "name" also.
+
+If you tried using self.name inside braces you will get the same result!
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       self.name = "Gal" 
+               }
+               aFriends + new Friend { 
+                       self.name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+So why using self.name inside braces doesn't solve this conflict?
+
+Because after the class region we have
+
+* global scope ---> global scope
+* object scope ---> object scope (Account Class)
+* local  scope ---> local scope (Account Class)
+
+When we use braces we change the object scope, so we have
+
+* global scope ---> global scope
+* object scope ---> object scope (Friend Class)
+* local  scope ---> local scope (Account Class)
+
+Ring search in the local scope first, so using self.name will use the Account class.
+
+There are many solution
+
+Solution (1) : Access the object through the list
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend
+               aFriends[len(aFriends)] { 
+                       aFriends[len(aFriends)].name = "Gal" 
+               }
+               aFriends + new Friend 
+               aFriends[len(aFriends)] { 
+                       aFriends[len(aFriends)].name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+Solution (2) : Create Method in the friend class to set the name attribute.
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       setname("Gal")
+               }
+               aFriends + new Friend { 
+                       setname("Bert")
+               }
+       
+       Class Friend
+               name
+               func setname cName
+                       name = cName
+
+Solution (3) : Create a method in the account class to set the attribute
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               friend("Gal")
+               friend("Bert")
+
+               func friend cName
+                       aFriends + new Friend { 
+                               name = cName
+                       }
+       
+       Class Friend
+               name
+
+Solution (4) : Declarative Programming
+
+.. code-block:: ring
+
+       New Account {
+               name = "mahmoud"
+               friend {
+                       name = "Gal"
+               }
+               friend {
+                       name = "Bert"
+               }
+               see aFriends
+       }
+
+       Class Account
+               name 
+               aFriends = []
+               friend
+               func getfriend
+                       aFriends + new Friend
+                       return aFriends[len(aFriends)]
+       
+       Class Friend
+               name
+
+Output:
+
+.. code-block:: none
+
+       name: Gal
+       name: Bert
+
+.. index:: 
+       pair: Scope Rules; Using braces to escape from the current object scope
+
+
+Using braces to escape from the current object scope
+====================================================
+
+Since braces change the current object scope to another object. we can use it to do some work without
+modifying the class attributes and using the same variable names.
+
+.. code-block:: ring
+
+       new point {x=10 y=20 z=30 start() }
+       class point x y z
+               func start
+                       see self # print the x y z values (10,20,30)
+                       new Local {
+                               x = 100
+                               y = 200
+                               z = 300
+                       }
+                       see self # print the x y z values (10,20,30)    
+                       see x + nl # will print 100
+                       see y + nl # will print 200
+                       see z + nl # will print 300
+                       Self {  # NO Advantage - Search is done in local scope first
+                               see x + nl # will print 100
+                               see y + nl # will print 200
+                               see z + nl # will print 300
+                       }
+                       see self.x + nl # will print 10
+                       see self.y + nl # will print 20
+                       see self.z + nl # will print 30
+
+       class Local
+       
+Output:
+
+.. code-block:: none
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       100
+       200
+       300
+       100
+       200
+       300
+       10
+       20
+       30
+
+
+.. index:: 
+       pair: Scope Rules; The For Loops uses the local scope
+
+The For Loops uses the local scope
+==================================
+
+Starting from Ring 1.8, when the For Loop defines new identifier (variable) it will define it in the local scope.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       ? x             # Print 10
+       test1()
+       ? x             # Print 10
+       test2()
+       ? x             # Print 10
+
+       func test1
+               for x = 1 to 5
+               next
+               ? x     # Print 6
+
+       func test2
+               list = 1:5
+               for x in list
+               next
+               ? x     # Print NULL (The "For In" loop will kill the reference after the loop)
+
+Output:
+
+.. code-block:: ring
+
+       10
+       6
+       10
+       NULL
+       10      
+       
+.. index:: 
+       pair: Scope Rules; Summary of Scope Rules
+
+
+Summary of Scope Rules
+======================
+
+At first remember that 
+
+1 - Each programming language comes with it's scope rules based on the language goals
+
+2 - Programming in the small is different than Programming in the Large
+
+3 - Some programming language are designed for developing small programs while others are designed for large programs
+
+4 - In programming, If we have access to more than one scope - Then problems may come if we don't manage things correctly
+
+5 - It's always more secure to reduce the number of visible scopes
+
+6 - Some programming languages force you to manage the scope in some way, while others not!
+
+In Ring
+
+1 - Special and *very simple* scope rules that are designed for Flexibility first then Security
+
+2 - Ring is designed to support programming in the small and programming in the large.
+
+3 - The language provide the different programming paradigms that you may select from based on the project size. Errors comes only if you selected a bad paradigm for the target project or you are using the paradigm in a way that is not correct or at least not common.
+
+4 - In Ring you have the choice, you can use global variables or avoid them. you can give them a special $ mark or leave them. you can use object-oriented or stay with procedures. you can use the class region (after the class name and before any method) just for attributes or use it for code too.
+
+5 - Just read the next scope rules and think about them then use them in your favorite way.
+
+Scope Rules:
+
+1 - At any place in our program code we have only at maximum Three Scopes (Local Scope, Object Scope and Global Scope).
+
+2 - When Ring find a variable it will search in the local scope first then in the object scope then in the global scope.
+
+3 - At any time inside procedures or methods you can use braces { } to access an object and change the current object scope.
+
+4 - In the class region (After the class name and before any method) this is a special region where both of the object scope and the local scope point to the object scope. I.e. No local variables where each variable you define in this region will become an attribute.
+
+5 - Before defining any variable (in any scope and in the class region too) a search process will be done to use the variable if it's found.
+
+6 - Functions and Methods parameters are defined automatically as local variables to these functions or methods.
+
+7 - Using Object.Attribute will search in the object attributes only.
+
+8 - Using Self.Attribute will lead to a search for Self first then search in Self Attributes.
+
+9 - The Self reference inside class region (after the class name and before any method) always point to the object scope created from the class.
+
+10- The Self reference inside methods will be changed when we uses Braces to be a reference to the object that we access.
+
+11- Writing variable names directly in the class region (after the class name and before any method) means using them or define then (in order).
+
+12- Using self.attribute in the class region reduce search to the object scope (avoid conflict with global scope).
+
+From these rules you can understand all types of conflicts and why you may have them and how to avoid them
+
+Simple advices to avoid any conflict and use the scope rules in a better way
+
+1 - Try to avoid global variables
+
+2 - Use the Main Function - This will help you to avoid global variables
+
+3 - If you are going to use many global variables use the $ mark before the variable name
+
+4 - In the class region if you don't respect the advice number three ($) then use self.attribute when you define your attributes
+
+5 - You can use object.attribute and object.method() instead of object { attribute } and object { method() } if you don't like changing the object scope.
+
+6 - If you will use nested braces in a class - think about using the class region if possible because in this region you will have access to the object that you access using { } + access to the class attributes
+
+7 - If you are inside a class method and used nested braces you will change the object scope with each brace and you will loss the access to the class attributes directly but you have access to the local scope before and after using brace { } , if you will read/modify the class attribute from braces then use This.Attribute because using 'This' means (The object created from this class) while using 'Self' means (The object in the current object scope).
+
+
+After understanding all of the previous points, You will master this topic.
\ No newline at end of file
diff --git a/docs/en/target/scope2.txt b/docs/en/target/scope2.txt
new file mode 100644 (file)
index 0000000..fc2b908
--- /dev/null
@@ -0,0 +1,204 @@
+.. index::
+       single: Scope Rules for Functions and Methods; Introduction
+
+=====================================
+Scope Rules for Functions and Methods
+=====================================
+
+In this chapter we will learn about the scope rules for functions and methods.
+
+You need to know the next information once you started using Ring for large applications.
+
+These applications may contains and use 
+
+* Many Packages and Classes written in Ring
+* Many Functions written in Ring
+* Standard Ring Functions (Written in C language)
+* Functions and Classes written in C/C++ languages
+
+.. index::
+       pair: Scope Rules for Functions and Methods; How Ring find a functions and methods?
+
+How Ring find the Functions and Methods?
+========================================
+
+When you call a method or function, Ring will start a search process to find this function
+
+If found --> Call the function and store the function pointer in the cache so Ring can use it again with doing another search.
+
+If not found ---> Runtime error message (That you can avoid using Try/Catch)
+
+How the search process is done?
+
+Search for functions/methods follow the next order
+
+1 - Search in methods (if we are inside class method or object using braces {})
+
+2 - Search in functions written by the programmer using Ring Code 
+
+3 - Search in functions written in C/C++ like standard Ring functions 
+
+This enable us to write clean code inside classes methods and avoid any conflict with functions.
+
+If we want to call a function with the same name as a method in the class we will need a wrapper function or we will access a temp. object using { } then call that function there.
+
+We can replace C/C++ Functions with Ring Functions. 
+
+We can replace Ring Functions with Ring Methods.
+
+
+.. note:: Using self.method() is not necessary in any use case.
+
+.. tip:: We can use this.method() to escape from the current active scope that we access using braces {} and call a method in the class that we are inside.
+
+.. index::
+       pair: Scope Rules for Functions and Methods; Example about Sharing Names between Functions and Methods
+
+Example about Sharing Names between Functions and Methods
+=========================================================
+
+Look at the next example
+
+.. code-block:: ring
+
+       func main
+               o1 = new myclass { test() test2() }
+               test2()
+
+       func f1
+               see "f1 function" + nl
+
+       func f2 
+               see "f2 function" + nl
+
+       func f3 
+               see "f3 function" + nl
+
+       func test2
+               myline()
+               see "test2 function" + nl
+               new myclass {
+                       f1()
+                       f2()
+                       f3()
+                       self.f3()
+               }       
+               myobj = new myclass
+               myobj.f3()
+               myline()
+
+       func myline
+               see copy("=",40) + nl
+
+       Class myclass
+
+               func test
+                       myline()
+                       see "test method" + nl
+                       f1()
+                       f2()
+                       f3()
+                       myline()
+
+               func f3
+                       see "f3 method" + nl
+
+               func test2
+                       myline()
+                       see "test2 method" + nl
+                       self {
+                               f1()
+                               f2()
+                               f3()
+                       }
+                       myline()
+
+
+
+Output:
+
+.. code-block:: none
+
+       ========================================
+       test method
+       f1 function
+       f2 function
+       f3 method
+       ========================================
+       ========================================
+       test2 method
+       f1 function
+       f2 function
+       f3 method
+       ========================================
+       ========================================
+       test2 function
+       f1 function
+       f2 function
+       f3 method
+       f3 method
+       f3 method
+       ========================================
+
+.. index::
+       pair: Scope Rules for Functions and Methods; Calling a function sharing the name with a method in the current class
+
+Calling a function sharing the name with a method in the current class
+======================================================================
+
+In the previous example we have a function called f3() and we have a method called f3() 
+
+How we can call the f3() function from the test() method ?
+
+Solution (1) : Change the current object scope to another object scope
+
+In this solution we will have an empty class called local that we will use to change the current object scope.
+
+.. code-block:: ring
+
+       func main
+               o1 = new myclass { test()}
+
+       func f1
+               see "f1 function" + nl
+
+       func f2 
+               see "f2 function" + nl
+
+       func f3 
+               see "f3 function" + nl
+
+       func myline
+               see copy("=",40) + nl
+
+       Class myclass
+
+               func test
+                       myline()
+                       see "test method" + nl
+                       f1()
+                       f2()
+                       f3()               # call f3() method   
+                       new local { f3() } # call f3() function 
+                       myline()
+
+               func f3
+                       see "f3 method" + nl
+
+       class local
+
+Output:
+
+.. code-block:: none
+
+       ========================================
+       test method
+       f1 function
+       f2 function
+       f3 method
+       f3 function
+       ========================================
+
+
+
+
diff --git a/docs/en/target/secfunc.txt b/docs/en/target/secfunc.txt
new file mode 100644 (file)
index 0000000..a32ec78
--- /dev/null
@@ -0,0 +1,409 @@
+.. index:: 
+       single: Security and Internet Functions; Introduction
+
+===============================
+Security and Internet Functions
+===============================
+
+This chapter contains the security and internet functions provided by the Ring programming language
+for Hashing, Encryption & Decryption.
+
+Before using the next function load the openssllib.ring library
+
+.. code-block:: ring
+
+       load "openssllib.ring"
+       # Use OpenSSL functions
+
+* MD5()
+* SHA1()
+* SHA256()
+* SHA512()
+* SHA384()
+* SHA224()
+* Encrypt()
+* Decrypt()
+* Randbytes()
+
+Before using the next function load the internetlib.ring library
+
+.. code-block:: ring
+
+       load "internetlib.ring"
+       # Use the Internet functions
+
+* Download()
+* SendEmail()
+
+.. index:: 
+       pair: Security and Internet Functions; MD5()
+
+MD5() Function
+==============
+
+We can calculate the MD5 hash using the MD5() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       MD5(cString) ---> String contains the MD5 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "md5('happy') = " + md5("happy") + nl +
+           "md5('Hello') = " + md5("Hello") + nl
+
+Output:
+
+.. code-block:: ring
+
+       md5('happy') = 56ab24c15b72a457069c5ea42fcfc640
+       md5('Hello') = 8b1a9953c4611296a827abf8c47804d7
+
+.. index:: 
+       pair: Security and Internet Functions; SHA1()
+
+SHA1() Function
+===============
+
+We can calculate the SHA1 hash using the SHA1() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA1(cString) ---> String contains the SHA1 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha1('hello') : " + sha1("hello") + nl +
+           "sha1('apple') : " + sha1("apple") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha1('hello') : aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
+       sha1('apple') : d0be2dc421be4fcd0172e5afceea3970e2f3d940
+
+.. index:: 
+       pair: Security and Internet Functions; SHA256()
+
+SHA256() Function
+=================
+
+We can calculate the SHA256 hash using the SHA256() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA256(cString) ---> String contains the SHA256 hash of the string cString 
+
+
+Example:
+
+.. code-block:: ring
+
+       see "sha256('hello') : " + sha256("hello") + nl +
+           "sha256('apple') : " + sha256("apple") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha256('hello') : 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
+       sha256('apple') : 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
+
+.. index:: 
+       pair: Security and Internet Functions; SHA512()
+
+SHA512() Function
+=================
+
+We can calculate the SHA512 hash using the SHA512() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA512(cString) ---> String contains the SHA512 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha512('hello') : " + sha512("hello") + nl +
+           "sha512('apple') : " + sha512("apple") + nl +
+           "sha512('hello world') : " + sha512("hello world") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha512('hello') : 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673c
+       a72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
+       sha512('apple') : 844d8779103b94c18f4aa4cc0c3b4474058580a991fba85d3ca698a0bc9e52
+       c5940feb7a65a3a290e17e6b23ee943ecc4f73e7490327245b4fe5d5efb590feb2
+       sha512('hello world') : 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca8
+       6d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f
+
+.. index:: 
+       pair: Security and Internet Functions; SHA384()
+
+SHA384() Function
+=================
+
+
+We can calculate the SHA384 hash using the SHA384() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA384(cString) ---> String contains the SHA384 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha384('hello') : " + sha384("hello") + nl +
+           "sha384('apple') : " + sha384("apple") + nl +
+           "sha384('hello world') : " + sha384("hello world") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha384('hello') : 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa
+       90125a3c79f90397bdf5f6a13de828684f
+       sha384('apple') : 3d8786fcb588c93348756c6429717dc6c374a14f7029362281a3b21dc10250
+       ddf0d0578052749822eb08bc0dc1e68b0f
+       sha384('hello world') : fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcb
+       b83578b3e417cb71ce646efd0819dd8c088de1bd
+
+.. index:: 
+       pair: Security and Internet Functions; SHA224()
+
+SHA224() Function
+=================
+
+We can calculate the SHA224 hash using the SHA224() Function
+
+Syntax:
+
+.. code-block:: ring
+
+       SHA224(cString) ---> String contains the SHA224 hash of the string cString 
+
+Example:
+
+.. code-block:: ring
+
+       see "sha224('hello') : " + sha224("hello") + nl + 
+           "sha224('apple') : " + sha224("apple") + nl +
+           "sha224('hello world') : " + sha224("hello world") + nl
+
+Output:
+
+.. code-block:: ring
+
+       sha224('hello') : ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193
+       sha224('apple') : b7bbfdf1a1012999b3c466fdeb906a629caa5e3e022428d1eb702281
+       sha224('hello world') : 2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b
+
+.. index:: 
+       pair: Security and Internet Functions; Encrypt()
+
+Encrypt() Function
+==================
+
+We can use the Encrypt() function to encrypts the data using the Blowfish algorithm.
+
+Syntax:
+
+.. code-block:: ring
+
+       Encrypt(cString, cKey, cIV) ---> Encrypted string
+
+.. index:: 
+       pair: Security and Internet Functions; Decrypt()
+
+Decrypt() Function
+==================
+
+We can use the Decrypt() function to decrypt the data encrypted using the Encrypt() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Decrypt(cCipher, cKey, cIV) ---> Decrypted string
+
+.. index:: 
+       pair: Security and Internet Functions; Example
+
+Encryption and Decryption Example
+=================================
+
+The next example demonstrates how to use the Encrypt() and Decrypt() functions.
+
+These functions use the Blowfish algorithm.
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+       list = 0:15  cKey=""    for x in list cKey += char(x) next
+       list = 1:8   cIV = ""   for x in list cIV += char(x) next
+       cStr = Encrypt(cStr,cKey,cIV) 
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+We can write the same example using normal for loop
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+
+       cKey=""                         # 16 bytes
+       for x = 0 to 15
+               cKey += char(x) 
+       next
+
+       cIV = ""   
+       for x = 1 to 8
+               cIV += char(x) 
+       next
+
+
+       cStr = Encrypt(cStr,cKey,cIV)
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+Also we can write the password and the IV directly using strings
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+
+       # Note: Don't use simple password in real applications!
+       cKey = "1234567890@#$%^&"               
+       cIV  = "87654321"                       
+
+       cStr = Encrypt(cStr,cKey,cIV)
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+
+.. index:: 
+       pair: Security and Internet Functions; File Hash
+
+File Hash
+=========
+
+The next example demonstrates how to calculate the hash functions for files
+
+.. code-block:: ring
+
+       cStr = read("myapp.exe")
+       see "Size : " + len(cStr) + nl +
+           "md5 : " + md5(cStr) + nl +
+           "sha1 : " + sha1(cStr) + nl +
+           "sha256 : " + sha256(cStr) + nl +
+           "sha224 : " + sha224(cStr) + nl +
+           "sha384 : " + sha384(cStr) + nl +
+           "sha512 : " + sha512(cStr) + nl
+
+Output:
+
+.. code-block:: ring
+
+       Size : 58079876
+       md5 : 762eee15d8d2fd73b71ea52538b28667
+       sha1 : 9212c0c7258bad89a62bd239e1358a9276a9d070
+       sha256 : 7d6724e69b6c553da749ba31b6185dddc965129b64d9e9bf3de88f67df3b1cdc
+       sha224 : 5a9c8a7d662bce4f880ba94f90a79362b672528b9efd5abc718c7a3d
+       sha384 : 18e23f973abedbeb3981c423f12aeadecf96f9c6fb28aeabe3be4c484f8540afcc3861b
+       b370ce2b59cf3c99c130b856b
+       sha512 : da3d5e997d06f8b2a7a9964b77f7d82eedb76b245c611082c1639f83f51d83880bcd08f
+       cd53dcab1167bdca0b82fec5071971ac17c76479d76985ced4ab0d18e
+
+.. index:: 
+       pair: Security and Internet Functions; RandBytes()
+
+Randbytes() Function
+====================
+
+We can generate a string of pseudo-random bytes using the Randbytes() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       Randbytes(nSize) ---> String contains random bytes (bytes count = nSize)
+
+Example:
+
+.. code-block:: ring
+
+       salt =  randbytes(32) 
+       password = "SecretPassWord@$%123"
+       see salt + nl
+       see sha256("test" + salt) + nl
+
+.. index:: 
+       pair: Security and Internet Functions; Download()
+
+Download() Function
+===================
+
+Syntax:
+
+.. code-block:: ring
+
+       Download(cURL) ---> String contains the server response
+
+Example:
+
+.. code-block:: ring
+
+       cStr= download("http://doublesvsoop.sourceforge.net/")
+       see cStr
+       write("download.txt",cStr)
+
+.. index:: 
+       pair: Security and Internet Functions; SendEmail()
+
+SendEmail() Function
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       SendEmail(cSMTPServer,cEmail,cPassword,cSender,cReceiver,cCC,cTitle,cContent)
+
+Example:
+
+.. code-block:: ring
+
+       See "Send email..." + nl
+       sendemail("smtp://smtp.gmail.com:587",
+               "email@gmail.com",
+               "password",
+               "email@gmail.com",
+               "somebody@yahoo.com",
+               "somebodyelse@yahoo.com",
+               "Sending email from Ring",
+               "Hello
+                How are you?
+                Are you fine?
+                Thank you!
+                Greetings,
+                Mahmoud")
+       see "Done.." + nl
\ No newline at end of file
diff --git a/docs/en/target/shotringnotepad.png b/docs/en/target/shotringnotepad.png
new file mode 100644 (file)
index 0000000..2850426
Binary files /dev/null and b/docs/en/target/shotringnotepad.png differ
diff --git a/docs/en/target/shotrotatetext.png b/docs/en/target/shotrotatetext.png
new file mode 100644 (file)
index 0000000..f0227a4
Binary files /dev/null and b/docs/en/target/shotrotatetext.png differ
diff --git a/docs/en/target/sixteenpuzzle.jpg b/docs/en/target/sixteenpuzzle.jpg
new file mode 100644 (file)
index 0000000..a8b6671
Binary files /dev/null and b/docs/en/target/sixteenpuzzle.jpg differ
diff --git a/docs/en/target/snake.png b/docs/en/target/snake.png
new file mode 100644 (file)
index 0000000..49fa863
Binary files /dev/null and b/docs/en/target/snake.png differ
diff --git a/docs/en/target/snakesgame.png b/docs/en/target/snakesgame.png
new file mode 100644 (file)
index 0000000..2819f37
Binary files /dev/null and b/docs/en/target/snakesgame.png differ
diff --git a/docs/en/target/sokoban.jpg b/docs/en/target/sokoban.jpg
new file mode 100644 (file)
index 0000000..78df9c9
Binary files /dev/null and b/docs/en/target/sokoban.jpg differ
diff --git a/docs/en/target/sourcecode.txt b/docs/en/target/sourcecode.txt
new file mode 100644 (file)
index 0000000..4a2894c
--- /dev/null
@@ -0,0 +1,781 @@
+.. index:: 
+       single: Building From Source Code; Introduction
+
+=========================
+Building From Source Code
+=========================
+
+The Ring programming language is a free open source product (MIT License).
+
+You can build Ring using CMake or using Scripts (Batch Files or Shell Scripts).
+
+The next steps explains building using scripts.
+
+.. index:: 
+       pair: Building From Source Code; Building using Microsoft Windows
+
+Building using Microsoft Windows
+================================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       cd ring/src
+       buildvc.bat
+       buildvcw.bat
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       buildring2exe.bat
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       gencode.bat
+       buildvc.bat
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       buildvc.bat
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       gencode.bat
+       buildvc.bat
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       gencode.bat
+       buildvc.bat
+
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       buildringpm.bat
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       buildvc.bat
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       buildvc.bat
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       buildvc.bat
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.bat
+       buildvc.bat
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       buildvc.bat
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       buildvc.bat
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       gencode.bat
+       buildvc.bat
+
+Generate RingLibuv Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv
+       gencode.bat
+       buildvc.bat
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       gencode.bat
+       buildvc.bat
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.bat
+       buildvc.bat
+
+Generate RingPostgreSQL Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.bat
+       buildvc.bat
+
+Install Qt 5.12 : https://download.qt.io/archive/qt/5.12/5.12.6/
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       gencodeqt512.bat
+       buildqt512.bat
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       install.bat
+
+Add Ring/bin to System path
+
+.. code-block:: ring
+
+       Hit "windows key".
+       Type "Edit the System environment variables"
+       Select "Advanced" tab.
+       Click on "Enviroment Variables..."
+       Double click on "Path"
+       Add at the end the new path separated by semicolon. 
+           ;C:\Ring\Bin
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+.. index:: 
+       pair: Building From Source Code; Building using Ubuntu Linux
+
+Building using Ubuntu Linux
+===========================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Install Libraries
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdep.sh 
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       sudo ./buildgcc.sh
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildgcc.sh
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildgcc.sh
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildgcc.sh
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildgcc.sh
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildgcc.sh
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildgcc.sh
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildgcc.sh
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingLibuv Source Code and Build
+
+We will build Libuv first
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv/libuv
+       sudo apt-get install libtool m4 automake
+       sh autogen.sh
+       ./configure
+       make
+       make check
+       sudo make install
+
+Then we will build RingLibuv
+
+.. code-block:: ring
+       
+       cd ..
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.sh
+       buildgcc.sh
+
+Generate RingPostgreSQL Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencode.sh
+       ./buildgcc.sh
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+.. index:: 
+       pair: Building From Source Code; Building using Fedora Linux
+
+Building using Fedora Linux
+===========================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Install Libraries
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdepfedora.sh 
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       sudo ./buildgcc.sh
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildgcc.sh
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildgcc.sh
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildgcc.sh
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildgccfedora.sh
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildgcc.sh
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildgcc.sh
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildgcc.sh
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildgcc.sh
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingLibuv Source Code and Build
+
+We will build Libuv first
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv/libuv
+       sudo dnf install libtool m4 autoconf automake
+       sh autogen.sh
+       ./configure
+       make
+       make check
+       sudo make install
+
+Then we will build RingLibuv
+
+.. code-block:: ring
+       
+       cd ..
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.sh
+       buildgcc.sh
+
+Generate RingPostgreSQL Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildgcc.sh
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencode.sh
+       ./buildgccfedora.sh
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+
+
+.. index:: 
+       pair: Building From Source Code; Building using MacOS X
+
+Building using MacOS X
+======================
+
+Get the source code
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Install homebrew (follow the directions on homebrew's homepage).
+Install Libraries
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdepmac.sh 
+
+Build Ring (Compiler/VM)
+
+.. code-block:: ring
+
+       ./buildclang.sh
+
+Build Ring2EXE
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+Generate RingConsoleColors Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildclang.sh
+
+Build RingInternet
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildclang.sh
+
+Generate RingLibCurl Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingZip Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildclang.sh
+
+Build RingPM
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+Build RingODBC
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildclang.sh
+
+Build RingMySQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildclang.sh
+
+Build RingSQLite
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildclang.sh
+
+Build RingPostgreSQL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildclang.sh
+
+Build RingOpenSSL
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildclang.sh
+
+Build RingMurmurHash
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildclang.sh
+
+Generate RingAllegro Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingLibuv Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingFreeGLUT Source Code and Build 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingOpenGL Source Code and Build 
+
+The ringopengl folder contains many sub folders for different OpenGL versions
+Starting from OpenGL 1.1 to OpenGL 4.6
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingPostgreSQL Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildclang.sh
+
+Generate RingQt Source Code and Build
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencodemac.sh
+       ./buildclang.sh
+
+To be able to call ring from any folder
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Run Ring Notepad
+
+.. code-block:: ring
+
+       cd applications/rnote
+       sudo ring rnote.ring
+
+.. index:: 
+       pair: Building From Source Code; Building using CMake
+
+Building using CMake
+====================
+
+Install libraries (MySQL Client, OpenSSL, LibCurl, Allegro 5 and Qt 5.5)
+
+.. code-block:: ring
+
+       cmake .
+       make
diff --git a/docs/en/target/sqlite.txt b/docs/en/target/sqlite.txt
new file mode 100644 (file)
index 0000000..df4b1f2
--- /dev/null
@@ -0,0 +1,139 @@
+.. index:: 
+       single: SQLite; Introduction
+
+================
+SQLite Functions
+================
+
+In this chapter we will learn about using the SQLite database in the Ring programming language.
+
+Before using the next function load the sqlitelib.ring library
+
+.. code-block:: ring
+
+       load "sqlitelib.ring"
+       # Use SQLite functions
+
+.. index:: 
+       pair: SQLite; sqlite_init()
+
+sqlite_init() function
+======================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_init() ---> SQLite Object
+
+.. index:: 
+       pair: SQLite; sqlite_open()
+
+sqlite_open() function
+======================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_open(SQLite Object,cFileName)
+
+.. index:: 
+       pair: SQLite; sqlite_execute()
+
+sqlite_execute() function
+=========================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_execute(SQLite Object,cSQLStatement)
+
+.. index:: 
+       pair: SQLite; sqlite_close()
+
+sqlite_close() function
+=======================
+
+Syntax:
+
+.. code-block:: ring
+
+       sqlite_close(SQLite Object)
+
+Example
+=======
+
+The next code create a SQLite database, add new records then display the data.
+
+.. code-block:: ring
+
+       load "sqlitelib.ring"
+
+       oSQLite = sqlite_init()
+
+       sqlite_open(oSQLite,"mytest.db") 
+
+       sql = "
+                CREATE TABLE COMPANY (
+                ID INT PRIMARY KEY     NOT NULL,
+                NAME           TEXT    NOT NULL,
+                AGE            INT     NOT NULL,
+                ADDRESS        CHAR(50),
+                SALARY         REAL );
+       "
+       sqlite_execute(oSQLite,sql) 
+
+       sql = "
+               INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) 
+               VALUES  (1, 'Mahmoud' , 29, 'Jeddah', 20000.00 ),
+                       (2, 'Ahmed'   , 27, 'Jeddah', 15000.00 ),
+                       (3, 'Mohammed', 31, 'Egypt' , 20000.00 ),
+                       (4, 'Ibrahim' , 24, 'Egypt ', 65000.00 );
+       "
+
+       sqlite_execute(oSQLite,sql)
+
+       aResult =  sqlite_execute(oSQLite,"select * from COMPANY") 
+       for x in aResult
+               for t in x
+                       ? t[2] + nl
+               next
+       next
+       ? copy("*",50) 
+       for x in aResult
+               ? x[:name] 
+       next
+       sqlite_close(oSQLite) 
+
+Output:
+
+.. code-block:: ring
+
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000.0
+       2
+       Ahmed
+       27
+       Jeddah
+       15000.0
+       3
+       Mohammed
+       31
+       Egypt
+       20000.0
+       4
+       Ibrahim
+       24
+       Egypt
+       65000.0
+       **************************************************      
+       Mahmoud
+       Ahmed
+       Mohammed
+       Ibrahim
+
diff --git a/docs/en/target/starsfighter.png b/docs/en/target/starsfighter.png
new file mode 100644 (file)
index 0000000..90812e9
Binary files /dev/null and b/docs/en/target/starsfighter.png differ
diff --git a/docs/en/target/stdlib.txt b/docs/en/target/stdlib.txt
new file mode 100644 (file)
index 0000000..7980da8
--- /dev/null
@@ -0,0 +1,1578 @@
+.. index:: 
+       single: Stdlib Functions; Introduction
+
+================
+Stdlib Functions
+================
+
+In this chapter we are going to learn about functions in the stdlib.ring
+
+Before using the functions in the library, We must load the library first
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+Instead of using stdlib.ring we can use stdlibcore.ring
+
+Using stdlibcore.ring we can use the StdLib functions (Without Classes)
+
+This is useful when developing standalone console applications
+
+Because using stdlib.ring (functions & classes) will load libraries like RingLibCurl, RingOpenSSL, etc.
+
+.. index:: 
+       pair: Stdlib Functions; puts()
+
+Puts() function
+===============
+
+print the value then print new line (nl)
+
+Syntax:
+
+.. code-block:: ring
+
+       puts(expr)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Hello, World!")
+
+.. index:: 
+       pair: Stdlib Functions; print()
+
+Print() function
+=================
+
+print string - support \\n,\\t and \\r
+
+Also we can use #{variable_name} to insert variables values.
+
+Syntax:
+
+.. code-block:: ring
+
+       print(string) ---> String
+
+Example:
+
+.. code-block:: ring
+
+       print("\nHello, World\n\nHow are you? \t\t I'm fine!\n")
+       x=10 y=20
+       print("\nx value = #{x} , y value = #{y} \n")
+
+
+.. index:: 
+       pair: Stdlib Functions; Print2Str() Function
+
+Print2Str() Function
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       print2Str(string) ---> String
+
+
+Example:
+
+.. code-block:: ring
+
+       world = "World!"
+       mystring = print2str("Hello, #{world} \nIn Year \n#{2000+17} \n")
+
+       see mystring + nl
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       In Year
+       2017
+
+
+.. index:: 
+       pair: Stdlib Functions; getstring()
+
+GetString() function
+====================
+
+Get input from the keyboard - return value as string
+
+.. code-block:: ring
+
+       getstring() ---> string
+
+
+.. index:: 
+       pair: Stdlib Functions; getnumber()
+
+GetNumber() function
+====================
+
+Get input from the keyboard - return value as number
+
+.. code-block:: ring
+
+       getnumber() ---> number
+
+.. index:: 
+       pair: Stdlib Functions; apppath()
+
+AppPath() function
+==================
+
+Get the path of the application folder
+
+Syntax:
+
+.. code-block:: ring
+
+       AppPath() ---> The path as String
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Application Path
+       Puts("Test AppPath()")
+       See AppPath() + nl
+
+.. index:: 
+       pair: Stdlib Functions; JustFilePath()
+
+JustFilePath() function
+=======================
+
+Get the path of the file, remove the file name.
+
+Syntax:
+
+.. code-block:: ring
+
+       JustFilePath(cFile) ---> The path as String
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see  justfilePath("b:\ring\applications\rnote\rnote.ring")
+
+Output:
+
+.. code-block:: ring
+
+       b:\ring\applications\rnote\
+
+
+.. index:: 
+       pair: Stdlib Functions; JustFileName()
+
+JustFileName() function
+=======================
+
+Get the file, remove the file path.
+
+Syntax:
+
+.. code-block:: ring
+
+       JustFileName(cFile) ---> The file name as String
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see justfileName("b:\ring\applications\rnote\rnote.ring") 
+
+Output:
+
+.. code-block:: ring
+
+       rnote.ring
+
+
+.. index:: 
+       pair: Stdlib Functions; value()
+
+Value() function
+================
+
+create a copy from a list or object
+
+Syntax:
+
+.. code-block:: ring
+
+       value(List) ---> new list 
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       aList = 1:10
+       del(value(aList),1) # delete first item
+       see aList           # print numbers from 1 to 10
+
+.. index:: 
+       pair: Stdlib Functions; times()
+
+Times() function
+================
+
+Execute a Function nCount times
+
+Syntax:
+
+.. code-block:: ring
+
+       Times(nCount,function)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Times()")
+       Times ( 3 , func { see "Hello, World!" + nl } )
+
+.. index:: 
+       pair: Stdlib Functions; map()
+
+Map() function
+==============
+
+Execute a Function on each list item
+
+Syntax:
+
+.. code-block:: ring
+
+        Map(alist,function) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Map()")
+       See Map( 1:10, func x { return x*x } )
+
+.. index:: 
+       pair: Stdlib Functions; filter()
+
+Filter() function
+=================
+
+Execute a Function on each list item to filter items
+
+Syntax:
+
+.. code-block:: ring
+
+       Filter(alist,function) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Filter()")
+       See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
+
+.. index:: 
+       pair: Stdlib Functions; split()
+
+Split() function
+================
+
+Convert string words to list items
+
+Syntax:
+
+.. code-block:: ring
+
+       Split(cstring,delimiter) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Split()")
+       See Split("one two three four five"," ")
+
+
+.. index:: 
+       pair: Stdlib Functions; splitmany()
+
+SplitMany() function
+====================
+
+Convert string words to list items. Allow many delimiters.
+
+Syntax:
+
+.. code-block:: ring
+
+       SplitMany(cstring,delimiters as string or list) --> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test SplitMany()")
+       See SplitMany("one,two,three,four and five"," ,")
+
+
+.. index:: 
+       pair: Stdlib Functions; newlist()
+
+NewList() function
+==================
+
+Create a two dimensional list
+
+
+Syntax:
+
+.. code-block:: ring
+
+       NewList(nRows,nColumns) ---> new list 
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Newlist()")
+       a1 = 3
+       a2 = 5
+       chrArray = newlist(a1,a2)
+       numArray = newlist(a1,a2)
+       chrArray[1][1] = "Hello"
+       numArray[1][1]  = 987.2
+       See chrArray[1][1] + nl
+       See numArray[1][1] + nl
+
+.. index:: 
+       pair: Stdlib Functions; capitalized()
+
+Capitalized() function
+======================
+
+Return a copy of a string with the first letter capitalized
+
+Syntax:
+
+.. code-block:: ring
+
+       Capitalized(string) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Capitalized()")
+       See capitalized("welcome to the Ring Programming Language")
+
+.. index:: 
+       pair: Stdlib Functions; isspecial()
+
+IsSpecial() function
+====================
+
+Check whether a character is special or not
+
+
+Syntax:
+
+.. code-block:: ring
+
+       IsSpecial(char) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isspecial()")
+       See "Isspecial  = " + isSpecial("%") + nl
+
+.. index:: 
+       pair: Stdlib Functions; isvowel()
+
+IsVowel() function
+==================
+
+Check whether a character is vowel or not
+
+Syntax:
+
+.. code-block:: ring
+
+       IsVowel(char) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isvowel()")
+       See "Isvowel = " + isVowel("c") + nl
+
+
+.. index:: 
+       pair: Stdlib Functions; linecount()
+
+LineCount() function
+====================
+
+Return the lines count in a text file.
+
+Syntax:
+
+.. code-block:: ring
+
+       LineCount(cFileName) ---> Lines Count as number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Linecount()")
+       See "the number of lines = " + lineCount("test.ring")
+
+.. index:: 
+       pair: Stdlib Functions; factorial()
+
+Factorial() function
+====================
+
+Return the factorial of a number
+
+Syntax:
+
+.. code-block:: ring
+
+       Factorial(number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Factorial()")
+       see "6 factorial is : " + Factorial(6)
+
+.. index:: 
+       pair: Stdlib Functions; fibonacci()
+
+Fibonacci() function
+====================
+
+Return the fibonacci number
+
+Syntax:
+
+.. code-block:: ring
+
+       Fibonacci(number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Fibonacci()")
+       see "6 Fibonacci is : " + Fibonacci(6)
+
+.. index:: 
+       pair: Stdlib Functions; isprime()
+
+IsPrime() function
+==================
+
+Check whether a number is prime or not
+
+Syntax:
+
+.. code-block:: ring
+
+       isprime(number) ---> Number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isprime()")
+       if isPrime(16) see "16 is a prime number"
+       else see "16 is not a prime number" ok
+
+.. index:: 
+       pair: Stdlib Functions; sign()
+
+Sign() function
+===============
+
+Returns an integer value indicating the sign of a number.
+
+Syntax:
+
+.. code-block:: ring
+
+       Sign(number) ---> number ( -1 = negative , 0 , 1 (positive) )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sign()")
+       see "sign of 12 is = " + sign(12) + nl
+
+.. index:: 
+       pair: Stdlib Functions; list2file()
+
+List2File() function
+====================
+
+Write list items to text file (each item in new line).
+
+Syntax:
+
+.. code-block:: ring
+
+       List2File(aList,cFileName)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Test List2File
+       Puts("Test List2File()")
+       list2file(1:100,"myfile.txt")
+
+
+.. index:: 
+       pair: Stdlib Functions; file2list()
+
+File2List() function
+====================
+
+Read text file and convert lines to list items
+
+Syntax:
+
+.. code-block:: ring
+
+       File2List(cFileName) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Test File2List
+       Puts("Test File2List()")
+       see len(file2list("myfile.txt"))
+
+.. index:: 
+       pair: Stdlib Functions; startswith()
+
+StartsWith() function
+=====================
+
+Returns true if the given string starts with the specified substring.
+
+Leading white spaces are ignored.
+
+Syntax:
+
+.. code-block:: ring
+
+       StartsWith(string, substring) ---> True/False
+
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Startswith()")
+       see Startswith("CalmoSoft", "Calmo") + nl
+
+.. index:: 
+       pair: Stdlib Functions; endswith()
+
+EndsWith() function
+===================
+
+Returns true if the given string ends with the specified substring.
+
+Trailing white spaces are ignored.
+
+Syntax:
+
+.. code-block:: ring
+
+       Endswith(string, substring) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Endswith()")
+       see endsWith("CalmoSoft", "Soft") + nl
+
+.. index:: 
+       pair: Stdlib Functions; gcd()
+
+GCD() function
+==============
+
+Finding of the greatest common divisor of two integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       Gcd(number,number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Gcd()")
+       see gcd (24, 32) + nl
+
+
+.. index:: 
+       pair: Stdlib Functions; lcm()
+
+LCM() function
+==============
+
+Compute the least common multiple of two integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       lcm(number,number) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Lcm()")
+       see Lcm(24,36) + nl
+
+.. index:: 
+       pair: Stdlib Functions; sumlist()
+
+SumList() function
+==================
+
+Compute the sum of a list of integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       sumlist(list) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sumlist()")
+       aList = [1,2,3,4,5]
+       see Sumlist(aList) + nl
+
+.. index:: 
+       pair: Stdlib Functions; prodlist()
+
+ProdList() function
+===================
+
+Compute the product of a list of integers.
+
+Syntax:
+
+.. code-block:: ring
+
+       prodlist(list) ---> number
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Prodlist()")
+       aList = [1,2,3,4,5]
+       see Prodlist(aList) + nl
+
+.. index:: 
+       pair: Stdlib Functions; evenorodd()
+
+EvenOrOdd() function
+====================
+
+Test whether an integer is even or odd.
+
+Result of test (1=odd 2=even).
+
+Syntax:
+
+.. code-block:: ring
+
+       evenorodd(number) ---> 1 (odd) or 2 (even)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Evenorodd()")
+       nr = 17
+       see Evenorodd(nr) + nl
+
+.. index:: 
+       pair: Stdlib Functions; factors()
+
+Factors() function
+==================
+
+Compute the factors of a positive integer.
+
+Syntax:
+
+.. code-block:: ring
+
+       factors(number) ---> list
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Factors()")
+       n = 45
+       aList = factors(n)
+       see "Factors of " + n + " = "
+       for i = 1 to len(aList)
+           see "" + aList[i] + " "
+       next
+
+
+.. index:: 
+       pair: Stdlib Functions; ispalindrome()
+
+IsPalindrome() function
+=======================
+
+Check if a sequence of characters is a palindrome or not. 
+
+Syntax:
+
+.. code-block:: ring
+
+       IsPalindrome(String) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test IsPalindrome()")
+       cString = "radar"
+       see IsPalindrome(cString)
+
+
+.. index:: 
+       pair: Stdlib Functions; isleapyear()
+
+IsLeapYear() function
+=====================
+
+Check whether a given year is a leap year in the Gregorian calendar. 
+
+Syntax:
+
+.. code-block:: ring
+
+       Isleapyear(number) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isleapyear()")
+       year = 2016
+       if Isleapyear(year) see "" + year + " is a leap year."
+       else see "" + year + " is not a leap year." ok
+
+
+.. index:: 
+       pair: Stdlib Functions; binarydigits()
+
+BinaryDigits() function
+=======================
+
+Compute the sequence of binary digits for a given non-negative integer. 
+
+Syntax:
+
+.. code-block:: ring
+
+       binarydigits(number) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Binarydigits()")
+       b = 35
+       see "Binary digits of " + b + " = " + Binarydigits(b)
+
+.. index:: 
+       pair: Stdlib Functions; matrixmulti()
+
+MatrixMulti() function
+======================
+
+Multiply two matrices together. 
+
+Syntax:
+
+.. code-block:: ring
+
+       Matrixmulti(List,List) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Multiply two matrices together.
+       Puts("Test Matrixmulti()")
+       A = [[1,2,3], [4,5,6], [7,8,9]]
+       B = [[1,0,0], [0,1,0], [0,0,1]]
+       see Matrixmulti(A, B)
+
+
+.. index:: 
+       pair: Stdlib Functions; matrixtrans()
+
+MatrixTrans() function
+======================
+
+Transpose an arbitrarily sized rectangular Matrix. 
+
+Syntax:
+
+.. code-block:: ring
+
+       Matrixtrans(List) ---> List
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Transpose an arbitrarily sized rectangular Matrix.
+       Puts("Test Matrixtrans()")
+       matrix = [[78,19,30,12,36], [49,10,65,42,50], [30,93,24,78,10], [39,68,27,64,29]]
+       see Matrixtrans(matrix)
+
+.. index:: 
+       pair: Stdlib Functions; dayofweek()
+
+DayOfWeek() function
+====================
+
+Return the day of the week of given date. (yyyy-mm-dd)
+
+Syntax:
+
+.. code-block:: ring
+
+       dayofweek(string) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Return the day of the week of given date.
+       Puts("Test Dayofweek()")
+       date = "2016-04-24"
+       see "Data : " + date + " - Day : " + Dayofweek(date) + nl
+
+.. index:: 
+       pair: Stdlib Functions; permutation()
+
+Permutation() function
+======================
+
+Generates all permutations of n different numerals.
+
+Syntax:
+
+.. code-block:: ring
+
+       permutation(list)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Generates all permutations of n different numerals
+       Puts("Test Permutation()")
+       list = [1, 2, 3, 4]
+       for perm = 1 to 24
+               for i = 1 to len(list)
+                       see list[i] + " "
+               next
+               see nl
+               Permutation(list)
+       next
+
+.. index:: 
+       pair: Stdlib Functions; readline()
+
+ReadLine() function
+===================
+
+Read line from file
+
+Syntax:
+
+.. code-block:: ring
+
+       readline(fp) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Read a file line by line.
+       Puts("Test Readline()")
+       fp = fopen("test.ring","r")
+       while not feof(fp)
+       See Readline(fp) end
+       fclose(fp)
+
+.. index:: 
+       pair: Stdlib Functions; substring()
+
+SubString() function
+====================
+
+Return a position of a substring starting from a given position in a string.
+
+Syntax:
+
+.. code-block:: ring
+
+       Substring(str,substr,npos) ---> string
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Return a position of a substring starting from a given position in a string.
+       Puts("Test Substring()")
+       a = "abcxyzqweabc"
+       b = "abc"
+       i = 4
+       see substring(a,b,i)
+
+.. index:: 
+       pair: Stdlib Functions; changestring()
+
+ChangeString() function
+=======================
+
+Change substring from given position to a given position with another substring.
+
+Syntax:
+
+.. code-block:: ring
+
+       Changestring(cString, nPos1, nPos2, cSubstr) ---> cString
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Change substring from given position for given position with a substring.
+       Puts("Test Changestring()")
+       see Changestring("Rmasdg",2,5,"in")     # Ring
+
+.. index:: 
+       pair: Stdlib Functions; sleep()
+
+Sleep() function
+================
+
+Sleep for the given amount of time.
+
+Syntax:
+
+.. code-block:: ring
+
+       sleep(nSeconds) 
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sleep()")
+       see "Wait 3 Seconds!"
+       Sleep(3)
+       see nl
+
+.. index:: 
+       pair: Stdlib Functions; ismainsourcefile()
+
+IsMainSourceFile() function
+===========================
+
+Check if the current file is the main source file
+
+Syntax:
+
+.. code-block:: ring
+
+       IsMainSourceFile() ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       if ismainsourcefile()
+               # code 
+       ok
+
+.. index:: 
+       pair: Stdlib Functions; direxists()
+
+DirExists() function
+====================
+
+Check if directory exists
+
+Syntax:
+
+.. code-block:: ring
+
+       DirExists(String) ---> True/False
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       see "Check dir : b:\ring " 
+       puts( DirExists("b:\ring") )
+       see "Check dir : C:\ring " 
+       Puts( DirExists("C:\ring") )
+
+.. index:: 
+       pair: Stdlib Functions; makedir()
+
+MakeDir() function
+==================
+
+Make Directory
+
+Syntax:
+
+.. code-block:: ring
+
+       MakeDir(String)
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # Create Directory
+       puts("create Directory : myfolder")
+       makedir("myfolder")
+
+
+.. index:: 
+       pair: Stdlib Functions; FSize()
+
+Fsize() function
+================
+
+The function return the file size in bytes.
+
+Syntax:
+
+.. code-block:: ring
+
+       FSize(File Handle) ---> Number (File Size in Bytes)
+
+.. index:: 
+       pair: Stdlib Functions; TrimAll()
+
+TrimAll() function
+==================
+
+Remove all spaces and tabs characters from a string
+
+Syntax:
+
+.. code-block:: ring
+
+       TrimAll(cString) ---> cString # Without Spaces and Tabs
+
+.. index:: 
+       pair: Stdlib Functions; TrimLeft()
+
+TrimLeft() function
+===================
+
+Remove all spaces and tabs characters from the left side of a string
+
+Syntax:
+
+.. code-block:: ring
+
+       TrimLeft(cString) ---> cString # Without Spaces and Tabs from the left side
+
+.. index:: 
+       pair: Stdlib Functions; TrimRight()
+
+TrimRight() function
+====================
+
+Remove all spaces and tabs characters from the right side of a string
+
+Syntax:
+
+.. code-block:: ring
+
+       TrimRight(cString) ---> cString # Without Spaces and Tabs from the right side
+
+.. index:: 
+       pair: Stdlib Functions; EpochTime()
+
+EpochTime() function
+====================
+
+Return the Epoch Time
+
+Syntax:
+
+.. code-block:: ring
+
+       EpochTime(cDate,cTime) ---> nEpochTime
+
+Example:
+
+.. code-block:: ring
+
+       see EpochTime( Date(), Time() )
+
+.. index:: 
+       pair: Stdlib Functions; SystemCmd() Function
+
+SystemCmd() Function
+====================
+
+We can execute system commands using the SystemCmd() function that outputs to a variable
+
+Syntax:
+
+.. code-block:: ring
+
+       SystemCmd(cCommand)
+
+Example:
+
+.. code-block:: ring
+
+       cYou  = SystemCmd("whoami")        # User Name logged in is output a variable
+       cThem = SystemCmd("dir c:\Users")  # Directory List is output to a variable
+
+
+.. index:: 
+       pair: Stdlib Functions; ListAllFiles() Function
+
+ListAllFiles() Function
+=======================
+
+Using this function we can quickly do a process on a group of files in a folder and it's sub folders.
+
+Syntax:
+
+.. code-block:: ring
+
+       ListAllFiles(cFolder,cExtension) ---> List of Files
+
+Example:
+
+.. code-block:: ring
+
+       aList = ListAllFiles("c:/ring/ringlibs","ring") # *.ring only
+       aList = sort(aList)
+       see aList
+
+Example:
+
+.. code-block:: ring
+
+       see listallfiles("b:/ring/ringlibs/weblib","") # All Files
+
+.. index:: 
+       pair: Stdlib Functions; SystemSilent() Function
+
+SystemSilent() Function
+=======================
+
+We can execute system commands using the SystemSilent() function to avoid displaying the output!
+
+Syntax:
+
+.. code-block:: ring
+
+       SystemSilent(cCommand)
+
+.. index:: 
+       pair: Stdlib Functions; OSCreateOpenFolder() Function
+
+OSCreateOpenFolder() Function
+=============================
+
+Create folder then change the current folder to this new folder
+
+Syntax:
+
+.. code-block:: ring
+
+       OSCreateOpenFolder(cCommand)
+
+
+.. index:: 
+       pair: Stdlib Functions; OSCopyFolder() Function
+
+OSCopyFolder() Function
+=======================
+
+Copy folder to the current folder 
+
+Parameters : The path to the parent folder and the folder name to copy
+
+Syntax:
+
+.. code-block:: ring
+
+       OSCopyFolder(cParentFolder,cFolderName)
+
+Example
+
+To copy the folder b:\\ring\\ringlibs\\stdlib to the current folder
+
+.. code-block:: ring
+
+       OSCopyFolder("b:\ring\ringlibs\","stdlib")
+
+
+.. index:: 
+       pair: Stdlib Functions; OSDeleteFolder() Function
+
+OSDeleteFolder() Function
+=========================
+
+Delete Folder in the current Directory
+
+Syntax:
+
+.. code-block:: ring
+
+       OSDeleteFolder(cFolderName)
+
+.. index:: 
+       pair: Stdlib Functions; OSCopyFile() Function
+
+OSCopyFile() Function
+=====================
+
+Copy File to the current directory
+
+Syntax:
+
+.. code-block:: ring
+
+       OSCopyFile(cFileName)
+
+.. index:: 
+       pair: Stdlib Functions; OSDeleteFile() Function
+
+OSDeleteFile() Function
+=======================
+
+Delete File
+
+Syntax:
+
+.. code-block:: ring
+
+       OSDeleteFile(cFileName)
+
+.. index:: 
+       pair: Stdlib Functions; OSRenameFile() Function
+
+OSRenameFile() Function
+=======================
+
+Rename File
+
+Syntax:
+
+.. code-block:: ring
+
+       OSRenameFile(cOldFileName,cNewFileName)
+
+
+.. index:: 
+       pair: Stdlib Functions; List2Code() Function 
+
+List2Code() Function 
+====================
+
+This function convert a Ring list during the runtime to Ring source code that we can save to source files.
+
+The list may contains strings, numbers or sub lists.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList = 1:10
+       ? list2Code(aList)
+
+Output:
+
+.. code-block:: ring
+
+       [
+               1,2,3,4,5,6,7,8,9,10
+       ]
+
+
+.. index:: 
+       pair: Stdlib Functions; Str2ASCIIList()
+
+Str2ASCIIList()
+===============
+
+Convert a string of bytes to a list of numbers where each item represent
+the ASCII code of one byte in the string.
+
+Syntax:
+
+.. code-block:: ring
+
+       Str2ASCIIList(String) ---> List of numbers
+
+.. index:: 
+       pair: Stdlib Functions; ASCIIList2Str()
+
+ASCIIList2Str()
+===============
+
+Convert a list of numbers where each item represent
+the ASCII code of one byte to a string of bytes.
+
+Syntax:
+
+.. code-block:: ring
+
+       ASCIIList2Str(List of numbers) ---> String
+
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       cStr = "MmMm"
+
+       aList = Str2ASCIILIST(cStr)
+       ? aList 
+
+       cStr2 = ASCIIList2Str(aList)
+       ? cStr2
+       ? len(cStr2)
+
+Output:
+
+.. code-block:: none
+
+       77
+       109
+       77
+       109
+
+       MmMm
+       4
+
+
+.. index:: 
+       pair: Stdlib Functions; IsListContainsItems()
+
+IsListContainsItems()
+=====================
+
+Syntax:
+
+.. code-block:: ring
+
+       IsListContainsItems(aParent,aChild) ----> True/False
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList1 = "a":"z"
+       aList2 = [:h,:l,:p,:u]
+       ? IsListContainsItems(aList1,aList2)
+
+.. index:: 
+       pair: Stdlib Functions; IsBetween()
+
+IsBetween()
+===========
+
+Syntax:
+
+.. code-block:: ring
+
+       IsBetween(nNumber,nMin,nMax) ----> True/False
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? isBetween(1,3,4)
+       ? isBetween(1,-3,4)
+       ? isBetween(4,1,6)
+       ? isBetween(4,3,4)
+
+.. index:: 
+       pair: Stdlib Functions; TimeInfo()
+
+TimeInfo()
+==========
+
+Syntax:
+
+.. code-block:: ring
+
+       TimeInfo(cInformation) ----> String 
+
+The cInformation value could be
+
+.. code-block:: ring
+
+       :time 
+       :hour_24
+       :hour_12
+       :minutes
+       :seconds
+       :date 
+       :day_long
+       :day_short
+       :month
+       :year
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? timeInfo(:date)
+       ? timeInfo(:time)
+       ? timeInfo(:hour_12)
\ No newline at end of file
diff --git a/docs/en/target/stdlibclasses.txt b/docs/en/target/stdlibclasses.txt
new file mode 100644 (file)
index 0000000..f2bf124
--- /dev/null
@@ -0,0 +1,1498 @@
+.. index:: 
+       single: Stdlib Classes; Introduction
+
+==============
+Stdlib Classes
+==============
+
+In this chapter we are going to learn about the classes in the stdlib.ring
+
+* StdBase Class
+* String Class
+* List Class
+* Stack Class
+* Queue Class
+* HashTable Class
+* Tree Class
+* Math Class
+* DateTime Class
+* File Class
+* System Class
+* Debug Class
+* DataType Class
+* Conversion Class
+* ODBC CLass
+* MySQL Class
+* SQLite Class
+* PostgreSQL Class
+* Security Class
+* Internet Class
+
+.. index:: 
+       pair: Stdlib Classes; StdBase Class
+
+StdBase Class
+=============
+
+Attributes:
+
+* vValue : Object Value
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Init(x)                                Set vValue Attribute to x value
+Print()                                Print vValue
+PrintLn()                      Print vValue then New Line
+Size()                         return number represent the size of vValue
+Value()                                return vValue
+Set(x)                         Call Init(x)
+===========================    ======================================================================
+
+
+.. index:: 
+       pair: Stdlib Classes; String Class
+
+String Class
+============
+
+Parent Class : StdBase Class
+
+Methods:
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Init(String|Number|List) 
+Lower()                        New String - Lower case characters
+Upper()                        New String - Upper case characters
+Left(x)                        New String - contains x characters from the left
+Right(x)                       New String - contains x characters from the right
+Lines()                        Number - Lines count
+Trim()                         New String - Remove Spaces
+Copy(x)                        New String - repeat string x times
+strcmp(cString)                Compare string with cString  
+tolist()                       List (String Lines to String Items)
+tofile(cFileName)              Write string to file
+mid(nPos1,nPos2)               New String - from nPos1 to nPos2
+getfrom(nPos1)                 New String - from nPos1 to the end of the string
+replace(cStr1,cStr2,lCase)     New String - Replace cStr1 with cStr2 , lCase (True=Match Case)
+split()                                List - Each Word as list item
+startswith(substring)          Return true if the start starts with a substring 
+endswith(substring)            Return true if the start ends with a substring
+===========================    ======================================================================
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       See "Testing the String Class" + nl
+       oString = new string("Hello, World!")
+       oString.println()
+       oString.upper().println()
+       oString.lower().println()
+       oString.left(5).println()
+       oString.right(6).println()
+       oString = new string("Hi" + nl + "Hello" )
+       See oString.lines() + nl
+       oString = new string("    Welcome    ")
+       oString.println()
+       oString.trim().println()
+       oString = new string("Hello! ")
+       oString.copy(3).println()
+       see oString.strcmp("Hello! ") + nl
+       see oString.strcmp("Hello ") + nl
+       see oString.strcmp("Hello!! ") + nl
+       oString = new string(["one","two","three"])
+       oString.print()
+       see oString.lines() + nl
+       oString = new String(1234)
+       oString.println()
+       oString = new String("one"+nl+"two"+nl+"three")
+       aList = oString.tolist()
+       see "List Items" + nl See aList
+       oString = new String( "Welcome to the Ring programming language")
+       See "the - position : " + oString.pos("the") + nl
+       oString = oString.getfrom(oString.pos("Ring"))
+       oString.println()
+       oString.mid(1,4).println()
+       oString = oString.replace("Ring","***Ring***",true)
+       oString.println()
+       oString = oString.replace("ring","***Ring***",false)
+       oString.println()
+       oString1 = new string("First")
+       oString2 = new string("Second")
+       oString = oString1 + oString2
+       oString.println()
+       oString = oString1 * 3
+       oString.println()
+       for t in ostring see t next
+       oString.tofile("test.txt")
+       oString = new string("one two three")
+       see nl
+       see ostring.split()
+       oString {
+               set("Hello") println()
+               set("How are you?") println()
+       }
+
+Output:
+
+.. code-block:: ring
+
+       Testing the String Class
+       Hello, World!
+       HELLO, WORLD!
+       hello, world!
+       Hello
+       World!
+       2
+               Welcome
+       Welcome
+       Hello! Hello! Hello!
+       0
+       1
+       -1
+       one
+       two
+       three
+       4
+       1234
+       List Items
+       one
+       two
+       three
+       the - position : 12
+       Ring programming language
+       Ring
+       ***Ring*** programming language
+       ******Ring****** programming language
+       FirstSecond
+       FirstFirstFirst
+       FirstFirstFirst
+       one
+       two
+       three
+       Hello
+       How are you?
+
+.. index:: 
+       pair: Stdlib Classes; List Class
+       
+List Class
+==========
+
+Parent Class : StdBase Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(String|List)                      
+Add(Value)                                     Add item to the list
+Delete(nIndex)                         Delete item from the list 
+Item(nIndex)                           Get item from the list
+First()                                                Get the first item in the list
+Last()                                         Get the last item in the list
+Set(nIndex,Value)                      Set item value
+FindInColumn(nCol,Value)       Find item in a column 
+Sort()                                         Sort items - return new list
+Reverse()                                      Reverse items - return new list
+Insert(nIndex,Value)           Inset Item after nIndex
+===========================    ======================================================================
+
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oList = new list ( [1,2,3] )
+       oList.Add(4)
+       oList.print()
+       see oList.item(1) + nl
+       oList.delete(4)
+       oList.print()
+       see oList.first() + nl
+       see oList.last() + nl
+       oList { set(1,"one") set(2,"two") set(3,"three") print() }
+       see oList.find("two") + nl
+       oList.sort().print()
+       oList.reverse().print()
+       oList.insert(2,"nice")
+       oList.print()
+       oList = new list ( [ [1,"one"],[2,"two"],[3,"three"] ] )
+       see copy("*",10) + nl
+       oList.print()
+       see "Search two : " + oList.findincolumn(2,"two") + nl
+       see "Search 1 : " + oList.findincolumn(1,1) + nl
+       oList = new list ( [ "Egypt" , "USA" , "KSA" ] )
+       for x in oList
+               see x + nl
+       next
+       oList =  new list ( [1,2,3,4] )
+       oList + [5,6,7] 
+       oList.print()
+       oList = new list ( ["one","two"] )
+       oList2 = new list ( ["three","four"] )
+       oList + oList2
+       oList.print()
+
+       
+output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       1
+       1
+       2
+       3
+       1
+       3
+       one
+       two
+       three
+       2
+       one
+       three
+       two
+       three
+       two
+       one
+       one
+       two
+       nice
+       three
+       **********
+       1
+       one
+       2
+       two
+       3
+       three
+       Search two : 2
+       Search 1 : 1
+       Egypt
+       USA
+       KSA
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       one
+       two
+       three
+       four
+
+.. index:: 
+       pair: Stdlib Classes; Stack Class
+       
+Stack Class
+===========
+
+Parent Class : List Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(String|Number|List)
+Push(Value)                                    Push item to the stack
+Pop()                                          Pop item from the stack
+Print()                                                Print the stack items
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oStack = new Stack
+       oStack.push(1)
+       oStack.push(2)
+       oStack.push(3)
+       see oStack.pop() + nl
+       see oStack.pop() + nl
+       see oStack.pop() + nl   
+       oStack.push(4)
+       see oStack.pop() + nl
+       oStack { push("one") push("two") push("three") }
+       oStack.print()  
+       
+output:
+
+.. code-block:: ring
+
+       3
+       2
+       1
+       4
+       three
+       two
+       one
+       
+.. index:: 
+       pair: Stdlib Classes; Queue Class
+       
+Queue Class
+===========
+
+Parent Class : List Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(String|Number|List)
+Remove()                                       Remove item from the Queue.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oQueue = new Queue
+       oQueue.add(1)
+       oQueue.add(2)
+       oQueue.add(3)
+       see oQueue.remove() + nl
+       see oQueue.remove() + nl
+       see oQueue.remove() + nl
+       oQueue.add(4)
+       see oQueue.remove() + nl
+       oQueue { add("one") add("two") add("three") }
+       oQueue.print()
+       
+output:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       one
+       two
+       three
+
+.. index:: 
+       pair: Stdlib Classes; HashTable Class
+
+HashTable Class
+===============
+
+Parent Class : List Class
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(List)
+Add(cKey,Value)                                Add item to the HashTable
+Set(cKey,Value)                                Set item value using the Key
+GetValue(cKey)                         Get item value using the Key
+Contains(cKey)                         Check if the HashTable contains item using the Key
+Index(cKey)                                    Get the item index using the Key
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ohashtable = new hashtable
+       See "Test the hashtable Class Methods" + nl
+       ohashtable { 
+               Add("Egypt","Cairo")
+               Add("KSA","Riyadh")
+               see self["Egypt"] + nl
+               see self["KSA"] + nl
+               see contains("Egypt") + nl
+               see contains("USA") + nl
+               see index("KSA")  + NL
+               print()
+               delete(index("KSA"))
+               see copy("*",60) + nl
+               print()
+       }
+       
+output:
+
+.. code-block:: ring
+
+       Test the hashtable Class Methods
+       Cairo
+       Riyadh
+       1
+       0
+       2
+       Egypt
+       Cairo
+       KSA
+       Riyadh
+       ************************************************************
+       Egypt
+       Cairo
+
+
+.. index:: 
+       pair: Stdlib Classes; Tree Class
+
+Tree Class
+==========
+
+Data:
+
+===========================    ======================================================================
+Attribute                                              Description
+===========================    ======================================================================
+Data                                           Node Value
+Children                                       Children List
+===========================    ======================================================================
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+set(value)                                     Set the node value.
+value()                                                Get the node value.
+Add(value)                                     Add new child.
+parent()                                       Get the parent node.
+print()                                                Print the tree nodes.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       otree = new tree
+       See "Test the tree Class Methods" + nl
+       otree {
+               set("The first step")   # set the root node value
+               see value() + nl
+               Add("one")
+               Add("two")
+               Add("three") {
+                       Add("3.1")
+                       Add("3.2")
+                       Add("3.3")
+                       see children
+               }
+               see children
+               oTree.children[2] {
+                       Add("2.1") Add("2.2") Add("2.3") {
+                               Add("2.3.1") Add("2.3.2") Add("test")
+                       }
+               }
+               oTree.children[2].children[3].children[3].set("2.3.3")
+       }
+       see copy("*",60) + nl
+       oTree.print()
+       
+output:
+
+.. code-block:: ring
+
+       Test the tree Class Methods
+       The first step
+       data: 3.1
+       parent: List...
+       children: List...
+       data: 3.2
+       parent: List...
+       children: List...
+       data: 3.3
+       parent: List...
+       children: List...
+       data: one
+       parent: List...
+       children: List...
+       data: two
+       parent: List...
+       children: List...
+       data: three
+       parent: List...
+       children: List...
+       ************************************************************
+       one
+       two
+       2.1
+       2.2
+       2.3
+       2.3.1
+       2.3.2
+       2.3.3
+       three
+       3.1
+       3.2
+       3.3
+
+.. index:: 
+       pair: Stdlib Classes; Math Class
+
+Math Class
+==========
+
+Methods:
+
+===============                =============================================================================
+Method                         Description
+===============                =============================================================================
+sin(x)                 Returns the sine of an angle of x radians
+cos(x)                 Returns the cosine of an angle of x radians
+tan(x)                 Returns the tangent of an angle of x radians
+asin(x)                        Returns the principal value of the arc sine of x, expressed in radians
+acos(x)                        Returns the principal value of the arc cosine of x, expressed in radians
+atan(x)                        Returns the principal value of the arc tangent of x, expressed in radians
+atan2(y,x)             Returns the principal arc tangent of y/x, in the interval [-pi,+pi] radians
+sinh(x)                        Returns the hyperbolic sine of x radians
+cosh(x)                        Returns the hyperbolic cosine of x radians
+tanh(x)                        Returns the hyperbolic tangent of x radians
+exp(x)                 Returns the value of e raised to the xth power
+log(x)                 Returns the natural logarithm of x
+log10(x)               Returns the common logarithm (base-10 logarithm) of x
+ceil(x)                        Returns the smallest integer value greater than or equal to x   
+floor(x)               Returns the largest integer value less than or equal to x
+fabs(x)                        Returns the absolute value of x.
+pow(x,y)               Returns x raised to the power of y 
+sqrt(x)                        Returns the square root of x
+random(x)              Returns a random number in the range [0,x]
+unsigned(n,n,c)                Perform operation using unsigned numbers 
+decimals(n)            Determine the decimals digits after the point in float/double numbers
+===============        =============================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oMath = new Math
+
+       See "Test the Math Class Methods" + nl
+       See "Sin(0) = " + oMath.sin(0) + nl
+       See "Sin(90) radians = " + oMath.sin(90) + nl
+       See "Sin(90) degree = " + oMath.sin(90*3.14/180) + nl
+
+       See "Cos(0) = " + oMath.cos(0) + nl
+       See "Cos(90) radians = " + oMath.cos(90) + nl
+       See "Cos(90) degree = " +oMath. cos(90*3.14/180) + nl
+
+       See "Tan(0) = " + oMath.tan(0) + nl
+       See "Tan(90) radians = " + oMath.tan(90) + nl
+       See "Tan(90) degree = " + oMath.tan(90*3.14/180) + nl
+
+       See "asin(0) = " + oMath.asin(0) + nl
+       See "acos(0) = " + oMath.acos(0) + nl
+       See "atan(0) = " + oMath.atan(0) + nl
+       See "atan2(1,1) = " +oMath. atan2(1,1) + nl
+
+       See "sinh(0) = " + oMath.sinh(0) + nl
+       See "sinh(1) = " + oMath.sinh(1) + nl
+       See "cosh(0) = " + oMath.cosh(0) + nl
+       See "cosh(1) = " + oMath.cosh(1) + nl
+       See "tanh(0) = " + oMath.tanh(0) + nl
+       See "tanh(1) = " + oMath.tanh(1) + nl
+
+       See "exp(0) = " + oMath.exp(0) + nl
+       See "exp(1) = " + oMath.exp(1) + nl
+       See "log(1) = " + oMath.log(1) + nl
+       See "log(2) = " + oMath.log(2) + nl
+       See "log10(1) = " + oMath.log10(1) + nl
+       See "log10(2) = " + oMath.log10(2) + nl
+       See "log10(10) = " + oMath.log10(10) + nl
+
+       See "Ceil(1.12) = " + oMath.Ceil(1.12) + nl
+       See "Ceil(1.72) = " + oMath.Ceil(1.72) + nl
+
+       See "Floor(1.12) = " + oMath.floor(1.12) + nl
+       See "Floor(1.72) = " + oMath.floor(1.72) + nl
+
+       See "fabs(1.12) = " + oMath.fabs(1.12) + nl
+       See "fabs(1.72) = " + oMath.fabs(1.72) + nl
+
+       See "pow(2,3) = " + oMath.pow(2,3) + nl
+
+       see "sqrt(16) = " + oMath.sqrt(16) + nl
+
+       for x = 1 to 20
+                       see "Random number Max (100) : " + oMath.random(100) + nl
+       next
+
+       x = 1.1234567890123
+       for d = 0 to 14
+               oMath.decimals(d)
+               see x + nl
+       next
+
+       cKey = "hello"
+
+       h = 0
+       for x in cKey
+               h = oMath.unsigned(h,ascii(x),"+")
+               h = oMath.unsigned(h,oMath.unsigned(h,10,"<<"),"+")
+               r = oMath.unsigned(h,6,">>")
+               h = oMath.unsigned(h, r,"^")
+       next
+       h = oMath.unsigned(h,oMath.unsigned(h,3,"<<"),"+")
+       h = oMath.unsigned(h,oMath.unsigned(h,11,">>"),"^")
+       h = oMath.unsigned(h,oMath.unsigned(h,15,"<<"),"+")
+
+       see "Hash : " + h
+
+       
+       
+output:
+
+.. code-block:: ring
+
+       Test the Math Class Methods
+       Sin(0) = 0
+       Sin(90) radians = 0.89
+       Sin(90) degree = 1.00
+       Cos(0) = 1
+       Cos(90) radians = -0.45
+       Cos(90) degree = 0.00
+       Tan(0) = 0
+       Tan(90) radians = -2.00
+       Tan(90) degree = 1255.77
+       asin(0) = 0
+       acos(0) = 1.57
+       atan(0) = 0
+       atan2(1,1) = 0.79
+       sinh(0) = 0
+       sinh(1) = 1.18
+       cosh(0) = 1
+       cosh(1) = 1.54
+       tanh(0) = 0
+       tanh(1) = 0.76
+       exp(0) = 1
+       exp(1) = 2.72
+       log(1) = 0
+       log(2) = 0.69
+       log10(1) = 0
+       log10(2) = 0.30
+       log10(10) = 1
+       Ceil(1.12) = 2
+       Ceil(1.72) = 2
+       Floor(1.12) = 1
+       Floor(1.72) = 1
+       fabs(1.12) = 1.12
+       fabs(1.72) = 1.72
+       pow(2,3) = 8
+       sqrt(16) = 4
+       Random number Max (100) : 87
+       Random number Max (100) : 49
+       Random number Max (100) : 99
+       Random number Max (100) : 58
+       Random number Max (100) : 15
+       Random number Max (100) : 46
+       Random number Max (100) : 37
+       Random number Max (100) : 64
+       Random number Max (100) : 73
+       Random number Max (100) : 35
+       Random number Max (100) : 89
+       Random number Max (100) : 80
+       Random number Max (100) : 20
+       Random number Max (100) : 33
+       Random number Max (100) : 44
+       Random number Max (100) : 89
+       Random number Max (100) : 82
+       Random number Max (100) : 94
+       Random number Max (100) : 83
+       Random number Max (100) : 68
+       1
+       1.1
+       1.12
+       1.123
+       1.1235
+       1.12346
+       1.123457
+       1.1234568
+       1.12345679
+       1.123456789
+       1.1234567890
+       1.12345678901
+       1.123456789012
+       1.1234567890123
+       1.12345678901230
+       Hash : 3372029979.00000000000000
+
+.. index:: 
+       pair: Stdlib Classes; DateTime Class
+
+DateTime Class
+==============
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+clock()                                                The number of clock ticks from program start.
+time()                                         Get the system time.
+date()                                         Get the date.
+timelist()                                     List contains the date and the time information.
+adddays(cDate,nDays)           Return Date from cDate and after nDays
+diffdays(cDate1,cDate2)                Return the Number of days (cDate1 - cDate2)
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDateTime = new datetime
+
+       See "Test the datetime Class Methods" + nl
+
+       See "Calculate performance" + nl
+       t1 = oDateTime.clock()
+       for x = 1 to 1000000 next
+       see oDateTime.clock() - t1 + nl
+
+       See "Time : " + oDateTime.time() + nl
+
+       See "Date : " + oDateTime.date() + nl 
+
+       See oDateTime.TimeList()
+
+       See "Month Name : " + oDateTime.TimeList()[4]      
+
+       cDate = oDateTime.date()
+       see cDate + nl                  
+       cDate = oDateTime.adddays(cDate,10)
+       see cDate + nl 
+
+       cDate1 = oDateTime.date()
+       see cDate1 + nl                                          
+       cDate2 = oDateTime.adddays(cDate1,10)
+       see cDate2 + nl                                          
+       see "DiffDays = " + oDateTime.diffdays(cDate1,cDate2) + nl         
+       see "DiffDays = " + oDateTime.diffdays(cDate2,cDate1) + nl       
+
+
+output:
+
+.. code-block:: ring
+
+       Test the datetime Class Methods
+       Calculate performance
+       85
+       Time : 02:53:35
+       Date : 31/08/2016
+       Wed
+       Wednesday
+       Aug
+       August
+       08/31/16 02:53:35
+       31
+       02
+       02
+       244
+       08
+       53
+       AM
+       35
+       35
+       3
+       08/31/16
+       02:53:35
+       16
+       2016
+       Arab Standard Time
+       %
+       Month Name : August31/08/2016
+       10/09/2016
+       31/08/2016
+       10/09/2016
+       DiffDays = -10
+       DiffDays = 10
+
+       
+.. index:: 
+       pair: Stdlib Classes; File Class
+
+File Class
+==========
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+read(cFileName)                                Read the file content
+write(cFileName,cStr)          Write string to file
+dir(cFolderPath)                       Get the folder contents (files & sub folders)
+rename(cOld,cNew)                      Rename files using the Rename() function
+remove(cFileName)                      Delete a file using the Remove() function
+open(cFileName,cMode)          Open a file using the Fopen() function
+close()                                                Close file
+flush()                                                Flushes the output buffer of a stream
+reopen(cFileName,cMode)                Open another file using the same file handle
+tempfile()                                     Creates a temp. file (binary).
+seek(noffset,nwhence)          Set the file position of the stream
+tell()                                         Know the current file position of a stream
+rewind()                                       Set the file position to the beginning of the file 
+getpos()                                       Get handle to the current file position
+setpos(poshandle)                      Set the current file position
+clearerr()                                     Clear the EOF error and the error indicators of a stream
+eof()                                          Test the end-of-file indicator
+error()                                                Test the error indicator
+perror(cErrorMessage)          Print error message to the stderr
+getc()                                         Get the next character from the stream
+gets(nsize)                                    Read new line from the stream
+putc(cchar)                                    Write a character to the stream
+puts(cStr)                                     Write a string to the stream
+ungetc(cchar)                          Push a character to the stream
+fread(nsize)                           Read data from a stream
+fwrite(cString)                                Write data to a stream
+exists(cFileName)                      Check if a file exists
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ofile = new file
+
+       See "Test the file Class Methods" + nl
+       see ofile.read(filename())
+
+       see nl
+       ofile.open(filename(),"r")
+       see ofile.gets(100) + nl
+       ofile.close()
+
+.. index:: 
+       pair: Stdlib Classes; System Class
+
+System Class
+============
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+system()                                       Execute system commands
+sysget()                                       Get environment variables 
+ismsdos()                                      Check if the operating system is MSDOS or not
+iswindows()                                    Check if the operating system is Windows or not
+iswindows64()                          Check if the operating system is Windows 64bit or not 
+isunix()                                       Check if the operating system is Unix or not 
+ismacosx()                                     Check if the operating system is macOS or not
+islinux()                                      Check if the operating system is Linux or not 
+isfreebsd()                                    Check if the operating system is FreeBSD or not
+isandroid()                                    Check if the operating system is Android or not 
+windowsnl()                                    Get the windows new line string 
+sysargv()                                      Get the command line arguments passed to the ring script
+filename()                                     Get the active source file
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oSystem = new System
+
+       See "Test the System Class Methods" + nl
+       
+       oSystem.system("dir")
+       see oSystem.sysget("path") + nl
+       see oSystem.ismsdos() + nl
+       see oSystem.iswindows() + nl
+       see oSystem.iswindows64() + nl
+       see oSystem.isunix() + nl
+       see oSystem.ismacosx() + nl
+       see oSystem.islinux() + nl
+       see oSystem.isfreebsd() + nl
+       see oSystem.isandroid() + nl
+       see oSystem.windowsnl() + nl
+       see oSystem.sysargv() + nl
+       see oSystem.filename() + nl
+
+.. index:: 
+       pair: Stdlib Classes; Debug Class
+
+Debug Class
+===========
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+eval(cCode)                                    Execute code during the runtime from string.
+raise(cError)                          Raise an exception.
+assert(cCondition)                     Test condition before executing the code.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDebug = new Debug
+       See "Test the Debug Class Methods" + nl
+       oDebug.eval("see 'Hello'+nl")
+       try
+               x = 10
+               oDebug.assert(x=11)
+       catch see "assert" + nl done
+       raise("Error!")
+       
+
+.. index:: 
+       pair: Stdlib Classes; DataType Class
+
+DataType Class
+==============
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+isstring(vValue)                       We can know if the value is a string or not.
+isnumber(vValue)                       We can know if the value is a number or not.
+islist(vValue)                         We can know if the value is a list or not.
+type(vValue)                           Know the type of a value 
+isnull(vValue)                         Check the value to know if it’s null or not.
+isalnum(vValue)                                1 if the value is digit/letter or 0 if not
+isalpha(vValue)                                1 if the value is a letter or 0 if not
+iscntrl(vValue)                                1 if the value is a control character (no printing position) 
+isdigit(vValue)                                1 if the value is a digit or 0 if not
+isgraph(vValue)                                1 if the value can be printed (Except space) or 0 if not
+islower(vValue)                                1 if the value is lowercase letter or 0 if not
+isprint(vValue)                                1 if the value occupies a printing position or 0 if not
+ispunct(vValue)                                1 if the value is a punctuation character or 0 if not
+isspace(vValue)                                1 if the value is a white-space or 0 if not
+isupper(vValue)                                1 if the value is an uppercase alphabetic letter or 0 if not
+isxdigit(vValue)                       1 if the value is a hexdecimal digit character or 0 if not
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDataType = new DataType
+       See "Test the DataType Class Methods" + nl
+       see oDataType.isstring("test") + nl
+       see oDataType.isnumber(1) + nl
+       see oDataType.islist(1:3) + nl
+       see oDataType.type("test") + nl
+       see oDataType.isnull(null) + nl
+       see oDataType.isalnum("Hello") + nl +     # print 1
+       oDataType.isalnum("123456") + nl +    # print 1
+       oDataType.isalnum("ABCabc123") + nl + # print 1
+       oDataType.isalnum("How are you")  + nl     # print 0 because of spaces
+       see oDataType.isalpha("Hello") + nl +     # print 1
+       oDataType.isalpha("123456") + nl +    # print 0
+       oDataType.isalpha("ABCabc123") + nl + # print 0
+       oDataType.isalpha("How are you")  + nl    # print 0
+       See oDataType.iscntrl("hello") + nl +     # print 0
+       oDataType.iscntrl(nl)                 # print 1
+       see oDataType.isdigit("0123456789") + nl +        # print 1
+       oDataType.isdigit("0123a") + nl
+       see oDataType.isgraph("abcdef") + nl +    # print 1
+       oDataType.isgraph("abc def")   + nl        # print 0
+       see oDataType.islower("abcDEF") + nl +    # print 0
+       oDataType.islower("ghi") + nl          # print 1
+       see oDataType.isprint("Hello") + nl +             # print 1
+       oDataType.isprint("Nice to see you") + nl +   # print 1
+       oDataType.isprint(nl)    + nl                      # print 0
+       see oDataType.isprint("Hello") + nl              # print 1
+       see oDataType.isupper("welcome") + nl +    # print 0
+       oDataType.isupper("WELCOME")  + nl         # print 1
+       see oDataType.isxdigit("0123456789abcdef") + nl +  # print 1
+       oDataType.isxdigit("123z")                     # print 0
+
+
+Output:
+
+.. code-block:: ring
+
+       Test the DataType Class Methods
+       1
+       1
+       1
+       STRING
+       1
+       1
+       1
+       1
+       0
+       1
+       0
+       0
+       0
+       0
+       11
+       0
+       1
+       0
+       0
+       1
+       1
+       1
+       0
+       1
+       0
+       1
+       1
+       0       
+
+.. index:: 
+       pair: Stdlib Classes; Conversion Class
+
+Conversion Class
+================
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+number(vValue)                         Convert strings to numbers.
+string(vValue)                         Convert numbers to strings.
+ascii(vValue)                          Get the ASCII code for a letter.
+char(vValue)                           Convert the ASCII code to character.
+hex(vValue)                                    Convert decimal to hexadecimal.
+dec(vValue)                                    Convert hexadecimal to decimal.
+str2hex(vValue)                                Convert string characters to hexadecimal characters.
+hex2str(vValue)                                Convert hexadecimal characters to string.
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oConversion = new conversion
+       See "Test the conversion Class Methods" + nl
+       See oConversion.number("3") + 5  + nl
+       See oConversion.string(3) + "5" + nl
+       See oConversion.Ascii("m") + nl 
+       See oConversion.char(77) + nl   
+       see oConversion.hex(162) + nl
+       see oConversion.dec("a2") + nl
+       cHex = oConversion.str2hex("Hello")
+       see cHex + nl
+       see oConversion.hex2str(cHex) + nl
+
+Output:
+
+.. code-block:: ring
+
+       Test the conversion Class Methods
+       8
+       35
+       109
+       M
+       a2
+       162
+       48656c6c6f
+       Hello
+
+.. index:: 
+       pair: Stdlib Classes; ODBC Class
+
+ODBC Class
+==========
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+drivers()                                      Get a list of ODBC drivers.
+datasources()                                  Get a list of ODBC data sources.
+close()                                        Free resources.
+connect(cConString)                    Connect to the database.
+disconnect()                           Close the connection.
+execute(cSQL)                          Execute SQL Statements
+colcount()                                     Get columns count in the query result
+fetch()                                                Fetch a row from the query result
+getdata(nCol)                          Get column value from the fetched row
+tables()                                       Get a list of tables inside the database
+columns(cTableName)                    Get a list of columns inside the table
+autocommit(lStatus)                    Enable or disable the auto commit feature
+commit()                                       Commit updates to the database
+rollback()                                     Rollback updates to the database
+===========================    ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oodbc = new odbc
+       See "Test the odbc Class Methods" + nl
+       oODBC { 
+               see drivers()
+               see datasources()
+               See "Connect to database" + nl
+               see connect("DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+               See "Select data" + nl
+               see execute("select * from person") + nl
+               nMax = colcount()
+               See "Columns Count : " + nMax + nl
+               while fetch()
+                       See "Row data:" + nl
+                       for x = 1 to nMax
+                               see getdata(x) + " - "
+                       next
+               end
+               See "Close database..." + nl
+               disconnect()
+               close()
+       }
+       
+.. index:: 
+       pair: Stdlib Classes; MySQL Class
+
+MySQL Class
+===========
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+info()                                                                 Return string contains the MySQL Client version.
+error()                                                                Get the error message from the MySQL Client.
+connect(cServer,cUser,cPass,cDatabase) Connect to the MySQL database server.
+close()                                                                Close the connection to the MySQL database.
+query(cQuery)                                                  Execute SQL queries.
+insert_id()                                                            Get the inserted row id.
+result()                                                               Get the query result (data without column names).
+next_result()                                                  Move to the next query result.
+columns()                                                              Get a list of columns names.
+result2()                                                              Get all of the column names then the query result in one list.
+escape_string(cStr)                                            Before storing binary data and special characters in the database.
+autocommit(lStatus)                                            Enable or disable the auto commit feature.
+commit()                                                               Commit updates to the database.
+rollback()                                                             Rollback updates to the database.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       
+       omysql = new mysql
+       See "Test the MySQL Class Methods" + nl
+       omysql { 
+               see info() + nl
+               connect("localhost", "root", "root","mahdb")
+               see "Execute Query" + nl
+               query("SELECT * FROM Employee")
+               see "Print Result" + nl
+               see result2()
+               see "Close database" + nl
+               close()
+       }
+       
+Output:
+
+.. code-block:: ring
+       
+       Test the MySQL Class Methods
+       5.5.30
+       Execute Query
+       Print Result
+       Id
+       Name
+       Salary
+       1
+       Mahmoud
+       15000
+       2
+       Samir
+       16000
+       3
+       Fayed
+       17000
+       Close database
+
+.. index:: 
+       pair: Stdlib Classes; SQLite Class
+
+SQLite Class
+============
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+open(cDatabase)                                                        Open Database.
+close()                                                                Close Database.
+errormessage()                                                 Get Error Message.
+execute(cSQL)                                                  Execute Query.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       osqlite = new sqlite
+       See "Test the sqlite Class Methods" + nl
+       osqlite {
+               open("test.db")
+               sql = "CREATE TABLE COMPANY("  +
+                               "ID INT PRIMARY KEY     NOT NULL," +
+                        "NAME           TEXT    NOT NULL," +
+                        "AGE            INT     NOT NULL," +
+                        "ADDRESS        CHAR(50)," +
+                        "SALARY         REAL );"
+
+               execute(sql)
+
+               sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+               execute(sql)
+
+               aResult =  execute("select * from COMPANY")
+               for x in aResult
+                       for t in x
+                               see t[2] + nl
+                       next
+               next
+               see copy("*",50)  + nl
+               for x in aResult
+                       see x["name"] + nl
+               next
+               close()
+       }
+
+Output:
+
+.. code-block:: ring
+
+       Test the sqlite Class Methods
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000.0
+       2
+       Ahmed
+       27
+       Jeddah
+       15000.0
+       3
+       Mohammed
+       31
+       Egypt
+       20000.0
+       4
+       Ibrahim
+       24
+       Egypt
+       65000.0
+       **************************************************
+       Mahmoud
+       Ahmed
+       Mohammed
+       Ibrahim
+
+
+.. index:: 
+       pair: Stdlib Classes; PostgreSQL Class
+
+PostgreSQL Class
+================
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+init(cConString)                                               Open Database.
+close()                                                                Close Database.
+execute(cSQL)                                                  Execute Query.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       oPostgreSQL = new PostgreSQL("user=postgres password=sa dbname = mahdb")
+
+       See "Test the PostgreSQL Class Methods" + nl
+
+       oPostgreSQL {
+
+               sql = "CREATE TABLE COMPANY_TEST("  +
+                               "ID INT PRIMARY KEY     NOT NULL," +
+                        "NAME           TEXT    NOT NULL," +
+                        "AGE            INT     NOT NULL," +
+                        "ADDRESS        CHAR(50)," +
+                        "SALARY         REAL );"
+
+               execute(sql)
+
+               sql = "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+               execute(sql)
+
+               ?  execute("select * from COMPANY_TEST")
+
+               ? copy("*",50)  
+
+               close()
+       }
+
+Output:
+
+.. code-block:: none
+
+       Test the PostgreSQL Class Methods
+       id
+       name
+       age
+       address
+       salary
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000
+       2
+       Ahmed
+       27
+       Jeddah
+       15000
+       3
+       Mohammed
+       31
+       Egypt
+       20000
+       4
+       Ibrahim
+       24
+       Egypt
+       65000
+
+       **************************************************
+
+
+.. index:: 
+       pair: Stdlib Classes; Security Class
+
+Security Class
+==============
+
+
+Methods:
+
+====================================== ======================================================================
+Method                                                                 Description/Output
+====================================== ======================================================================
+md5(cString)                                           Calculate the MD5 hash.
+sha1(cString)                                          Calculate the SHA1 hash.
+sha256(cString)                                                Calculate the SHA256 hash.
+sha512(cString)                                                Calculate the SHA512 hash.
+sha384(cString)                                                Calculate the SHA384 hash.
+sha224(cString)                                                Calculate the SHA224 hash.
+encrypt(cString,cKey,cIV)                              Encrypts the data using the Blowfish algorithm.
+decrypt(cString,cKey,cIV)                              Decrypt the data encrypted using the Encrypt() method.
+randbytes(nSize)                                       Generate a string of pseudo-random bytes.
+====================================== ======================================================================
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oSecurity = new security
+       See "Test the security Class Methods" + nl
+       oSecurity { 
+               see md5("hello") + nl + 
+               sha1("hello") + nl + sha256("hello") + nl +
+               sha512("hello") + nl + sha384("hello") + nl + 
+               sha256("hello") + nl 
+               list = 0:15  cKey=""   for x in list cKey += char(x) next
+               list = 1:8   cIV = ""   for x in list cIV += char(x) next
+               cCipher = encrypt("hello",cKey,cIV)
+               see cCipher + nl + decrypt(cCipher,cKey,cIV) + nl
+       }
+
+       
+.. index:: 
+       pair: Stdlib Classes; Internet Class
+
+Internet Class
+==============
+
+Methods:
+
+* download(cURL)
+* sendemail(cSMTPServer,cEmail,cPassword,cSender,cReceiver,cCC,cTitle,cContent)
+
+example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ointernet = new internet
+       See "Test the internet Class Methods" + nl
+       ointernet { 
+               see download("www.ring-lang.sf.net")
+       }
diff --git a/docs/en/target/stopwatch.png b/docs/en/target/stopwatch.png
new file mode 100644 (file)
index 0000000..bb98d69
Binary files /dev/null and b/docs/en/target/stopwatch.png differ
diff --git a/docs/en/target/string2constant.png b/docs/en/target/string2constant.png
new file mode 100644 (file)
index 0000000..3d3c56f
Binary files /dev/null and b/docs/en/target/string2constant.png differ
diff --git a/docs/en/target/strings.txt b/docs/en/target/strings.txt
new file mode 100644 (file)
index 0000000..cc01946
--- /dev/null
@@ -0,0 +1,477 @@
+.. index:: 
+       single: Strings; Introduction
+
+=======
+Strings
+=======
+
+In this chapter we are going to learn about strings creation and manipulation.
+
+.. index:: 
+       pair: Strings; String Literals
+
+String Literals
+===============
+
+Syntax:
+
+.. code-block:: ring
+
+       cStr = "This is a string"
+       cStr2 = 'Another string'
+       cStr3 = :JustAnotherString
+       cStr4 = `Yet "another" 'string' ! `
+
+.. index:: 
+       pair: Strings; Get String Length
+
+Get String Length
+=================
+
+We can get the string length (letters count inside a string) using the len() function
+
+Syntax:
+
+.. code-block:: ring
+
+       len(string) ---> string length
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "How are you?"
+       see cStr + nl
+       see "String size : " + len(cStr) + nl
+
+.. index:: 
+       pair: Strings; Convert Letters Case
+
+Convert Letters Case
+====================
+
+Syntax:
+
+.. code-block:: ring
+
+       lower(string) ---> convert string letters to lower case
+       upper(string) ---> convert string letters to UPPER case
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome To The Ring Programming Language"
+       see cStr + nl + upper(cStr) + nl + lower(cStr)          
+
+.. index:: 
+       pair: Strings; Access String Letters
+
+Access String Letters
+=====================
+
+We can access a letter inside a string by the letter index
+
+Syntax:        
+
+.. code-block:: ring
+
+       string[index] ---> get string letter
+       string[index] = letter  # set string letter
+
+Example:
+
+.. code-block:: ring
+
+       # print user name letter by letter (each letter in new line)
+
+       See "Hello, Enter your name : " give cName
+       for x = 1 to len(cName)
+               see nl + cName[x]
+       next
+
+We can use for in to get string letters.
+
+
+Example:
+
+.. code-block:: ring
+
+       # print user name letter by letter (each letter in new line)
+
+       See "Hello, Enter your name : " give cName
+       for x in cName
+               see nl + x
+       next
+
+We can modify the string letters
+
+Example:
+
+.. code-block:: ring
+
+       # convert the first letter to UPPER case
+
+       See "Enter your name : " give cName
+       cName[1] = upper(cName[1])
+       see "Hello " + cName
+
+.. index:: 
+       pair: Strings; Left()
+
+Left() Function
+===============
+
+We can get a specified number of characters from a string using the Left() function.
+
+The starting position is 1.
+
+Syntax:
+
+.. code-block:: ring
+
+       Left(string,count)
+
+Example:
+
+.. code-block:: ring
+
+       see left("Hello World!",5) # print Hello
+
+.. index:: 
+       pair: Strings; Right()
+
+Right() Function
+================
+
+We can get a specified number of characters from a string using the Right() function.
+
+The starting position is the last character on the right.
+
+Syntax:
+
+.. code-block:: ring
+
+       Right(string,count)
+
+Example:
+
+.. code-block:: ring
+
+       see Right("Hello World!",6) # print World!
+
+.. index:: 
+       pair: Strings; Trim()
+
+Trim() Function
+===============
+
+We can remove all leading and trailing spaces from a string using the Trim() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       trim(string)
+
+Example:
+
+.. code-block:: ring
+
+       cMsg = "     Welcome      "
+       see trim(cMsg)                  # print Welcome
+
+.. index:: 
+       pair: Strings; Copy()
+
+Copy() Function
+===============
+
+We can duplicate a string more than one time using the copy() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       copy(string,nCount) ---> string replicated nCount times
+
+Example
+
+.. code-block:: ring
+
+       see copy("***hello***",3) # print ***hello******hello******hello***
+
+.. index:: 
+       pair: Strings; Lines()
+
+Lines() Function
+================
+
+We can count the number of lines inside a string using the Lines() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       lines(string) ---> Number of lines inside the string
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Hello
+       How are you?
+       are you fine?"
+       see lines(cStr)         # print 3
+
+.. index:: 
+       pair: Strings; Substr()
+
+Substr() Function
+=================
+
+We can work on sub strings inside a string using the substr() function.
+Using Substr() we can 
+
+* Find substring
+
+* Get substring from position to end
+
+* Get Number of characters from position
+
+* Transform Substring To Another Substring 
+
+.. index:: 
+       pair: Strings; Find SubString
+
+Find substring
+==============
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,substring)  ---> the starting position of substring in string
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       see substr(cStr,"Ring")         # print 16
+
+.. index:: 
+       pair: Strings; Get Substring from position to end
+
+Get substring from position to end
+==================================
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,position)  ---> Get substring starting from position to end
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       nPos = substr(cStr,"Ring")      # nPos = 16
+       see substr(cStr,nPos)           # print Ring programming language
+
+.. index:: 
+       pair: Strings; Get Number of Characters from position
+
+Get Number of Characters From Position
+======================================
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,position,count)  ---> Get characters starting from position
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       nPos = substr(cStr,"Ring")      # nPos = 16
+       see substr(cStr,nPos,4)         # print Ring 
+
+.. index:: 
+       pair: Strings; Transform Substring To Another Substring
+
+Transform Substring To Another Substring
+========================================
+
+Syntax:
+
+.. code-block:: ring
+
+       substr(string,substring,newsubstring)  ---> Transformed string (Match case)
+       substr(string,substring,newsubstring,1)  ---> Transformed string (Ignore case)
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the New programming language"
+       see substr(cStr,"New","Ring") + nl  # print Welcome to the Ring programming language 
+       see substr(cStr,"new","Ring",1)+ nl # print Welcome to the Ring programming language 
+
+.. index:: 
+       pair: Strings; strcmp()
+
+strcmp() Function
+=================
+
+We can compare between two strings using the strcmp() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       strcmp(cString1,cString2) ---> value = 0 if cString1 = cString2
+                                      value < 0 if cString1 < cString2
+                                      value > 0 if cString1 > cString2
+
+Example:
+
+.. code-block:: ring
+
+       see strcmp("hello","hello") + nl +
+           strcmp("abc","bcd") + nl + 
+           strcmp("bcd","abc") + nl
+
+Output:
+
+.. code-block:: ring
+
+       0
+       -1
+       1
+
+.. index:: 
+       pair: Strings; str2list() and list2str()
+
+str2list() and list2str() Functions
+===================================
+
+We can convert string lines to list items using the str2list() function.
+Also we can convert the list to a string using list2str() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       str2list(string) ---> list contains the string lines 
+       list2str(list)   ---> string contains the list items
+
+Example:
+
+.. code-block:: ring
+
+       /* output:
+       ** Items : 4
+       ** Item : Hello
+       ** Item : How are you ?
+       ** Item : are you fine ?
+       ** Item : ok
+       ** list2Str result = Hello
+       ** How are you ?
+       ** are you fine ?
+       ** ok
+       ** Done
+       */
+
+       mystr = "Hello
+       How are you ?
+       are you fine ?
+       ok"
+
+       mylist = str2list(mystr)
+       see "Items : " + len(mylist) + nl
+
+       for x in mylist
+               see "Item : " + x + nl
+       next
+
+       newstr = list2str(mylist)
+       see "list2Str result = " + newstr
+
+       if mystr = newstr
+               see nl + "Done"
+       else
+               see nl + "Error!"
+       ok
+               
+
+.. index:: 
+       pair: Strings; Merge binary characters
+
+Merge binary characters
+=======================
+
+From Ring 1.0 we can create binary strings and do operations on these strings.
+
+Starting from Ring 1.8, we can get individual characters from these strings and merge them together using
+the '+' operator.
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome"
+       ? cstr[1] + cstr[2] + cStr[5]
+       v = cstr[1] + cstr[2] + cStr[5]
+       ? v
+       ? len(v)
+       c1 = cStr[1]
+       ? c1
+       aList = [1,2,3]
+       cStr = ""
+       for item in aList 
+               cStr += int2bytes(item)
+       next 
+       ? "All String"
+       ? len(cStr)
+       ? "First Part"
+       n1 = cStr[1] + cStr[2] + cStr[3] + cStr[4]
+       ? len(n1)
+       ? "Second Part"
+       n2 = cStr[5] + cStr[6] + cStr[7] + cStr[8]
+       ? len(n2)
+       ? "Third Part"
+       n3 = cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(n3)
+       ? "All String"
+       cString = cStr[1] + cStr[2] + cStr[3] + cStr[4] + 
+                 cStr[5] + cStr[6] + cStr[7] + cStr[8] + 
+                 cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(cString)
+       ? ascii(cStr[1])
+       ? len(cStr[2])
+
+Output:
+
+.. code-block:: ring
+
+       Weo
+       Weo
+       3
+       W
+       All String
+       12
+       First Part
+       4
+       Second Part
+       4       \ 2
+       Third Part
+       4
+       All String
+       12
+       1
+       1
+       
\ No newline at end of file
diff --git a/docs/en/target/sudoku.jpg b/docs/en/target/sudoku.jpg
new file mode 100644 (file)
index 0000000..7cc8bd6
Binary files /dev/null and b/docs/en/target/sudoku.jpg differ
diff --git a/docs/en/target/sumpuzzle.png b/docs/en/target/sumpuzzle.png
new file mode 100644 (file)
index 0000000..4aed63c
Binary files /dev/null and b/docs/en/target/sumpuzzle.png differ
diff --git a/docs/en/target/superman.png b/docs/en/target/superman.png
new file mode 100644 (file)
index 0000000..bb3b513
Binary files /dev/null and b/docs/en/target/superman.png differ
diff --git a/docs/en/target/syntaxflexibility.txt b/docs/en/target/syntaxflexibility.txt
new file mode 100644 (file)
index 0000000..4a8490b
--- /dev/null
@@ -0,0 +1,677 @@
+.. index:: 
+       single: Syntax Flexibility; Introduction
+
+==================
+Syntax Flexibility
+==================
+
+In this chapter we will learn about some options that are provided automatically by the Ring
+compiler for syntax flexibility.
+
+.. index:: 
+       pair: Syntax Flexibility; Change Language Keywords
+
+Change Language Keywords
+========================
+
+We can change any keyword using the ChangeRingKeyword command.
+
+.. note:: Remember to restore the keyword again if the team will mix between styles in the same project.
+
+.. tip:: The ChangeRingKeyword command is executed in the scanner stage by the compiler (before parsing).
+
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingKeyword  <oldkeyword>  <newkeyword>
+
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword see print
+       
+       print "welcome" + nl
+
+       ChangeRingKeyword print see
+
+       see "Welcome" + nl
+
+Example:
+
+.. code-block:: ring
+
+       ChangeRingKeyword  func function
+       ChangeRingKeyword  see  print
+       ChangeRingKeyword  ok   endif
+       ChangeRingKeyword  next endfor
+       ChangeRingKeyword  end  endwhile
+
+       x = 10
+       while x > 0
+               print "x = " + x + nl
+               for t = 1 to 10
+                       if t = 3
+                               print "number three" + nl
+                       endif
+               endfor  
+
+       x--
+       endwhile
+
+       test() 
+
+       function test
+               print "message from test" + nl
+
+       ChangeRingKeyword  function func
+       ChangeRingKeyword  print see
+       ChangeRingKeyword  endif ok
+       ChangeRingKeyword  endfor next
+       ChangeRingKeyword  endwhile end
+
+
+.. index:: 
+       pair: Syntax Flexibility; Change Language Operators
+
+Change Language Operators
+=========================
+
+We can change any operator using the ChangeRingOperator command.
+
+.. note:: Remember to restore the operator again if the team will mix between styles in the same project.
+
+.. tip:: The ChangeRingOperartor command is executed in the scanner stage by the compiler (before parsing).
+
+
+Syntax:
+
+.. code-block:: ring
+       
+       ChangeRingOperator  <oldkeyword>  <newkeyword>
+
+Example:
+
+The next program hide the + operator by changing it to _+
+
+.. code-block:: ring
+
+       changeringoperator + _+
+       changeringkeyword SEE PRINT
+
+       try
+               print 5 + 10
+       catch
+               print nl print "error" print nl
+       done
+
+       changeringoperator _+ +
+
+The next program change the + operator to "plus".
+
+.. code-block:: ring
+
+       changeringoperator + plus 
+       changeringkeyword SEE PRINT
+
+       Print 5 plus 5  
+
+       changeringoperator plus +
+       changeringkeyword PRINT SEE 
+
+
+.. index:: 
+       pair: Syntax Flexibility; Using "()" around the function parameters
+
+
+.. index:: 
+       pair: Syntax Flexibility; Load Syntax Files
+
+
+Load Syntax Files
+=================
+
+You may store a group of ChangeRingKeyword and ChangeRingOperator commands in a file to use later
+in many source files. You can't use the Load command to call these files because
+
+* ChangeRingKeyword and ChangeRingOperator commands are executed in the scanner phase by the compiler (before parsing).
+* The load command is executed in the parsing phase (after the scanner phase).
+
+Solution: Use the LoadSyntax Command which is executed in the scanner phase.
+
+Syntax:
+
+.. code-block:: ring
+
+       LoadSyntax      "syntaxfile.ring"
+
+Example:
+
+File : StyleBasicOn.ring
+
+.. code-block:: ring
+
+       ChangeRingKeyword       see     print
+       ChangeRingKeyword       ok      endif
+       ChangeRingKeyword       next    endfor
+       ChangeRingKeyword       end     endwhile
+
+File : StyleBasicOff.ring
+
+.. code-block:: ring
+
+       ChangeRingKeyword  print        see
+       ChangeRingKeyword  endif        ok
+       ChangeRingKeyword  endfor       next
+       ChangeRingKeyword  endwhile     end
+
+File : UseStyleBasic.ring
+
+.. code-block:: ring
+
+       LoadSyntax "stylebasicon.ring"
+
+       x = 10
+       while x > 0
+               print "x = " + x + nl
+               for t = 1 to 10
+                       if t = 3
+                               print "number three" + nl
+                       endif
+               endfor  
+               x--
+       endwhile
+
+       LoadSyntax "stylebasicoff.ring"
+
+       see "done" + nl
+
+.. note:: files called by the LoadSyntax command must contains ChangeRingKeyword and ChangeRingOperator commands only. 
+
+.. tip:: files called by the LoadSyntax command doesn't support functions, packages and classes. just imperative commands only.
+
+.. note:: Using this feature you can create many styles that you can use in the same project and you can support Ring translation to other languages like Arabic, French and so on.
+
+.. tip:: The effect of LoadSyntax command is related to the current source code file only.
+       
+Using "()" around the function parameters
+=========================================
+
+We can use () around the function parameters (optional).
+
+Example:
+
+.. code-block:: ring
+
+       hello()
+       sum(3,4)
+
+       func hello()
+               see "Hello" + nl
+
+       func sum(x,y)
+               see x+y+nl
+       
+Output:
+
+.. code-block:: ring
+
+       Hello
+       7
+
+Example:
+
+.. code-block:: ring
+
+       myfunc = func x,y { see x + y + nl }
+
+       call myfunc (3,4)
+
+       myfunc2 = func (x,y) { see x+y+nl }
+
+       call myfunc(3,4)
+
+Output:
+
+.. code-block:: ring
+
+       7
+       7
+
+.. index:: 
+       pair: Syntax Flexibility; Using Semi-colon after and between statements
+
+Using Semi-colon after and between statements
+=============================================
+
+In Ring we can use semi-colon after and between statements (optional).
+
+Example:
+
+.. code-block:: ring
+
+       # Using semi-colon is optional
+
+       see "Hello" + nl ; see "How are you?" + nl  ; see "Welcome to Ring" + nl ;
+       one() ; two() ; three() ;
+       func one ; see "one" + nl ;
+       func two ; see "two" + nl ;
+       func three ; see "three" + nl ;
+
+
+Output:
+
+.. code-block:: ring
+
+
+       Hello
+       How are you?
+       Welcome to Ring
+       one
+       two
+       three
+
+.. index:: 
+       pair: Syntax Flexibility; Using $ and @ in the start of the variable name
+
+Using $ and @ in the start of the variable name
+===============================================
+
+You can use any unicode character in the variable name also we can use $ and @ in the name.
+
+This feature may help, for example we can start global variables with $ and the object attributes
+with @. 
+
+In other languages like Ruby this is the rule, In the Ring language this is just an option without
+any force from the Compiler.
+
+example:
+
+.. code-block:: ring
+
+       $global_variable = 5
+
+       new test { hello() }    
+
+       class test
+
+               @instance_variable = 10
+
+               func hello
+
+                       local_variable = 15
+
+                       see "Global   : " + $global_variable + nl + 
+                           "Instance : " + @instance_variable + nl +
+                           "Local    : " + local_variable + nl
+
+Output:
+
+
+.. code-block:: ring
+
+       Global   : 5
+       Instance : 10
+       Local    : 15
+
+.. index:: 
+       pair: Syntax Flexibility; Using the 'elseif' keyword as 'but' in if statement
+
+Using the 'elseif' keyword as 'but' in if statement
+===================================================
+
+if you don't like the 'but' keyword in if statement
+Then you can use the 'elseif' keyword.
+
+Example:
+
+.. code-block:: ring
+
+       give x
+       if x = 1 see "one"
+       elseif x=2 see "two"
+       elseif x=3 see "three"
+       elseif x=4 see "four"
+       else see "other"
+       ok
+       see nl
+
+.. index:: 
+       pair: Syntax Flexibility; Using the 'else' keyword as 'other' in switch statement
+
+Using the 'else' keyword as 'other' in switch statement
+=======================================================
+
+if you don't like the 'other' keyword in switch statement
+Then you can use the 'else' keyword.
+
+Also you can replace 'else' with 'other' in if statement.
+
+i.e. 'other' keyword is the same as 'else' keyword.
+
+Example:
+
+.. code-block:: ring
+
+       x = 1
+       switch x
+               on 10 
+                       see "10" + nl
+               else 
+                       see "not 10" + nl
+       end
+
+Output:
+
+.. code-block:: ring
+
+       not 10
+
+.. index:: 
+       pair: Syntax Flexibility; Using the 'end' keyword in different control structures
+
+Using the 'end' keyword in different control structures
+=======================================================
+
+We can use the 'end' keyword to close different control structures
+
+* If statement
+* For loop
+* Switch 
+* While
+* Try-Catch
+
+Example:
+
+.. code-block:: ring
+
+       see "if statement.." + nl
+       x = 1
+       if x = 1 
+               see "one" + nl
+       elseif x=2 
+               see "two" + nl
+       elseif x=3 
+               see "three" + nl
+       end
+       see "for loop.." + nl
+       for t = 1 to 10
+               see t 
+       end
+       see nl
+       see "switch..." + nl
+       x = 1
+
+       switch x
+               on 1 see "one" + nl
+               on 2 see "two" + nl
+       end
+
+       see "try catch..." + nl
+       try
+               x = 1 / 0
+       catch
+               see "catching error" + nl
+       end
+
+Output:
+
+.. code-block:: ring
+
+       if statement..
+       one
+       for loop..
+       12345678910
+       switch...
+       one
+       try catch...
+       catching error
+
+.. index:: 
+       pair: Syntax Flexibility; Using braces to start and end different control structures
+
+Using braces to start and end different control structures
+==========================================================
+
+
+We can use braces { } to start and end different control structures
+
+* If statement
+* For loop
+* Switch 
+* While
+* Try-Catch
+
+Example:
+
+.. code-block:: ring
+
+       see "if statement.." + nl
+       x = 1
+       if x = 1 {
+               see "one" + nl
+       elseif x=2 
+               see "two" + nl
+       elseif x=3 
+               see "three" + nl
+       }
+       see "for loop.." + nl
+       for t = 1 to 10 {
+               see t 
+       }
+       see nl
+       see "switch..." + nl
+       x = 1
+
+       switch x {
+               on 1 see "one" + nl
+               on 2 see "two" + nl
+       }
+
+       see "try catch..." + nl
+       try {
+               x = 1 / 0
+       catch
+               see "catching error" + nl
+       }
+
+Output:
+
+.. code-block:: ring
+
+       if statement..
+       one
+       for loop..
+       12345678910
+       switch...
+       one
+       try catch...
+       catching error
+
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'put' and 'get' as 'see' and 'give'
+
+Using 'put' and 'get' as 'see' and 'give'
+=========================================
+
+We can replace the 'see' keyword with the 'put' keyword.
+
+Also we can replacew the 'give' keyword with the 'get' keyword.
+
+Example:
+
+.. code-block:: ring
+
+       put "Hello World" + nl
+       put "Enter Your Name ? " Get Name
+       Put "Hello " + Name
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'case' as 'on' in switch statements
+
+Using 'case' as 'on' in switch statements
+=========================================
+
+We can replace the 'on' keyword with 'case' keyword in the switch statement.
+
+Example (1) :
+
+.. code-block:: ring
+
+       for x=1 to 10 
+               switch x 
+               case 1 put "one" + nl
+               case 2 put "two" + nl
+               case 3 put "thre" + nl
+               else put "else" + nl
+               end
+       end
+
+Example (2) :
+
+.. code-block:: ring
+
+       for x=1 to 10 {
+               switch x {
+               case 1 put "one" + nl
+               case 2 put "two" + nl
+               case 3 put "thre" + nl
+               else put "else" + nl
+               }
+       }
+
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'def' as 'func' in functions/methods definition
+
+Using 'def' as 'func' in functions/methods definition
+=====================================================
+
+We can use the 'def' keyword as the 'func' keyword to define functions and methods.
+
+Example:
+
+.. code-block:: ring
+
+       one() two()
+
+       def one put "one" + nl
+       def two put "two" + nl
+
+.. index:: 
+       pair: Syntax Flexibility; Using braces { } in Packages/Classes/Functions
+
+Using braces { } in Packages/Classes/Functions
+==============================================
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+       {
+               class myclass 
+               {
+                       func myfunc 
+                       {
+                               print("Hello, World!\n")
+                       }
+               }
+       }
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'end' keyword after Packages/Classes/Functions
+
+Using 'end' keyword after Packages/Classes/Functions
+====================================================
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+               class myclass 
+                       def myfunc 
+                               put "Hello, World!"
+                       end
+               end
+       end
+
+.. index:: 
+       pair: Syntax Flexibility; Using 'endpackage'/'endclass'/'endfunc' keywords after Packages/Classes/Functions
+
+Using 'endpackage'/'endclass'/'endfunc' keywords after Packages/Classes/Functions
+=================================================================================
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass { myfunc() }
+
+       package mypackage
+               class myclass
+                       func myfunc                     
+                               see "welcome"  + nl
+                       endfunc
+               endclass
+       endpackage
+
+.. index:: 
+       pair: Syntax Flexibility; Ignore new lines after keywords
+
+Ignore new lines after keywords
+===============================
+
+Starting from Ring 1.8 the compiler will ignore new lines after keywords that expect tokens after it
+
+Example:
+
+.. code-block:: ring
+
+       see 
+       "
+               Hello, World!
+       "
+       test()
+
+       func 
+       #======================#
+               Test
+       #======================#
+
+               ?
+               "
+       
+               Hello from the Test function
+
+               "
+
+Output:
+
+.. code-block:: none
+
+
+               Hello, World!
+
+
+               Hello from the Test function
\ No newline at end of file
diff --git a/docs/en/target/systemfunc.txt b/docs/en/target/systemfunc.txt
new file mode 100644 (file)
index 0000000..924b1ae
--- /dev/null
@@ -0,0 +1,482 @@
+.. index:: 
+       single: System Functions; Introduction
+
+================
+System Functions
+================
+
+In this chapter we are going to learn about the system functions
+
+* System()
+
+* SysGet()
+
+* IsMSDOS()
+
+* IsWindows()
+
+* IsWindows64()
+
+* IsUnix()
+
+* IsMacOSX()
+
+* IsLinux()
+
+* IsFreeBSD()
+
+* IsAndroid()
+
+* Windowsnl()
+
+* Get Command Line Arguments
+
+* Get Active Source File Name
+
+* CurrentDir()
+
+* ExeFileName()
+
+* ChDir()
+
+* ExeFolder()
+
+* Version()
+
+* Shutdown()
+
+.. index:: 
+       pair: System Functions; System() Function
+
+System() Function
+=================
+
+We can execute system commands using the system() function
+
+Syntax:
+
+.. code-block:: ring
+
+       System(cCommand)
+
+Example:
+
+.. code-block:: ring
+
+       System("myapp.exe")     # Run myapp.exe
+       System("ls")            # print list of files
+
+.. index:: 
+       pair: System Functions; SysGet() Function
+
+SysGet() Function
+=================
+
+We can get environment variables using the Get() function
+
+Syntax:
+
+.. code-block:: ring
+
+       SysGet(cVariable)
+
+Example:
+
+.. code-block:: ring
+
+       see sysget("path")              # print system path information
+
+
+.. index:: 
+       pair: System Functions; IsMSDOS() Function
+
+IsMSDOS() Function
+==================
+
+We can check if the operating system is MSDOS or not using the IsMSDOS() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsMSDOS() ---> Returns 1 if the operating system is MS-DOS, Returns 0 if it's not
+                      
+
+.. index:: 
+       pair: System Functions; IsWindows() Function
+
+IsWindows() Function
+====================
+
+We can check if the operating system is Windows or not using the IsWindows() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsWindows() ---> Returns 1 if the operating system is Windows, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsWindows64() Function
+
+IsWindows64() Function
+======================
+
+We can check if the operating system is Windows 64bit or not using the IsWindows64() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsWindows64() ---> Returns 1 if the operating system is Windows64, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsUnix() Function
+
+IsUnix() Function
+=================
+
+We can check if the operating system is Unix or not using the IsUnix() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsUnix() ---> Returns 1 if the operating system is Unix, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsMacOSX() Function
+
+IsMacOSX() Function
+===================
+
+We can check if the operating system is macOS or not using the IsMacOSX() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsMacOSX() ---> Returns 1 if the operating system is Mac OS X, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsLinux() Function
+
+IsLinux() Function
+==================
+
+We can check if the operating system is Linux or not using the IsLinux() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsLinux() ---> Returns 1 if the operating system is Linux, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsFreeBSD() Function
+
+IsFreeBSD() Function
+====================
+
+We can check if the operating system is FreeBSD or not using the IsFreeBSD() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsFreeBSD() ---> Returns 1 if the operating system is FreeBSD, Returns 0 if it's not
+
+
+.. index:: 
+       pair: System Functions; IsAndroid() Function
+
+IsAndroid() Function
+====================
+
+We can check if the operating system is Android or not using the IsAndroid() function
+
+Syntax:
+
+.. code-block:: ring
+
+       IsAndroid() ---> Returns 1 if the operating system is Android, Returns 0 if it's not
+
+.. index:: 
+       pair: System Functions; Example
+
+Example
+=======
+
+.. code-block:: ring
+
+       see "IsMSDOS()     --> " + ismsdos()     + nl
+       see "IsWindows()   --> " + iswindows()   + nl
+       see "IsWindows64() --> " + iswindows64() + nl
+       see "IsUnix()      --> " + isunix()      + nl
+       see "IsMacOSX()    --> " + ismacosx()    + nl
+       see "IsLinux()     --> " + islinux()     + nl
+       see "IsFreeBSD()   --> " + isfreebsd()   + nl
+       see "IsAndroid()   --> " + isandroid()   + nl
+
+Output:
+
+.. code-block:: ring
+
+       IsMSDOS()     --> 0
+       IsWindows()   --> 1
+       IsWindows64() --> 0
+       IsUnix()      --> 0
+       IsMacOSX()    --> 0
+       IsLinux()     --> 0
+       IsFreeBSD()   --> 0
+       IsAndroid()   --> 0
+
+.. index:: 
+       pair: System Functions; Windowsnl() Function
+
+Windowsnl() Function
+====================
+
+We can get the windows new line string using the Windowsnl() function.
+
+Syntax:
+
+.. code-block:: ring
+
+       WindowsNL() ---> Returns a string contains CR+LF = CHAR(13) + CHAR(10)
+
+Example:
+
+.. code-block:: ring
+
+       cStr = read("input.txt")
+
+       if iswindows()
+               cStr = substr(cStr,windowsnl(),nl)
+       ok
+
+       aList = str2list(cStr)
+       # to do - list items processing using "for in"
+       cStr = list2str(aList)
+
+       if iswindows()
+               cStr = substr(cStr,nl,windowsnl())
+       ok
+
+       write("ouput.txt",cStr)
+
+.. index:: 
+       pair: System Functions; Get Command Line Arguments
+
+Get Command Line Arguments
+==========================
+
+We can get the command line arguments passed to the ring script using the sysargv variable.
+
+The sysargv variable is a list contains the command line parameters.
+
+Example
+
+.. code-block:: ring
+
+       see copy("=",30) + nl
+       see "Command Line Parameters" + nl
+       see "Size : " + len(sysargv) + nl
+       see sysargv
+       see copy("=",30) + nl
+       if len(sysargv) < 4 return ok
+       nStart = sysargv[3]
+       nEnd = sysargv[4]
+       for x = nStart to nEnd
+               see x + nl
+       next
+
+Output
+
+.. code-block:: ring
+
+       b:\mahmoud\apps\ring>ring tests\syspara.ring 1 10
+       ==============================
+       Command Line Parameters
+       Size : 4
+       ring
+       tests\syspara.ring
+       1
+       10
+       ==============================
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: System Functions; Get Active Source File Name
+
+Get Active Source File Name
+===========================
+
+We can get the active source file name (*.ring) using the filename() function
+
+Syntax:
+
+.. code-block:: ring
+
+       filename() ---> String contains the active source file name.
+
+Example:
+
+.. code-block:: ring
+
+       see "Active Source File Name : " + filename() + nl
+
+Output:
+
+.. code-block:: ring
+
+       Active Source File Name : tests\filename.ring
+
+
+Example:
+
+.. code-block:: ring
+
+       if sysargv[2] = filename()
+               see "I'm the main program file!" + nl
+               # we can run tests here!
+       else
+               see "I'm a sub file in a program" + nl
+       ok
+
+
+.. index:: 
+       pair: System Functions; PrevFileName() Function
+
+PrevFileName() Function
+=======================
+
+Using the PrevFileName() function we can get the previous active source file name.
+
+The previous file would be the file of the caller function, Or the file of the function
+that we called before calling PrevFileName().
+
+Syntax:
+
+.. code-block:: ring
+
+       prevfilename() ---> String contains the previous source file name.
+
+Example:
+
+The next function in stdlib.ring uses the PrevFileName() to know if the file of the
+caller function is the main source file of the program or not.
+
+.. code-block:: ring
+
+       Func IsMainSourceFile
+               if PrevFileName() = sysargv[2]
+                       return true
+               ok
+               return false
+
+.. index:: 
+       pair: System Functions; CurrentDir() Function
+
+CurrentDir() Function
+=====================
+
+Return the path of the current directory
+
+Syntax:
+
+.. code-block:: ring
+
+       CurrenDir() ---> String contains the path of the currect directory 
+
+.. index:: 
+       pair: System Functions; ExeFileName() Function
+
+ExeFileName() Function
+======================
+
+Return the Ring executable file name
+
+Syntax:
+
+.. code-block:: ring
+
+       exefilename() ---> String contains the Ring executable file name
+
+.. index:: 
+       pair: System Functions; ChDir() Function
+
+ChDir() Function
+================
+
+Change the current directory
+
+Syntax:
+
+.. code-block:: ring
+
+       ChDir(cNewPath)
+
+.. index:: 
+       pair: System Functions; ExeFolder() Function
+
+ExeFolder() Function
+====================
+
+Return the Ring executable file path
+
+Syntax:
+
+.. code-block:: ring
+
+       exefolder() ---> String contains the Ring executable path
+
+.. index:: 
+       pair: System Functions; Version() Function
+
+Version() Function
+==================
+
+Return the Ring version
+
+Syntax:
+
+.. code-block:: ring
+
+       version() ---> String contains the Ring version
+
+Output:
+
+.. code-block:: ring
+
+       1.12
+
+
+.. index:: 
+       pair: System Functions; Shutdown() Function
+
+Shutdown() Function
+===================
+
+Close the application
+
+Syntax:
+
+.. code-block:: ring
+
+       shutdown(nStatus) ---> Close the application
+
diff --git a/docs/en/target/tesseragame.png b/docs/en/target/tesseragame.png
new file mode 100644 (file)
index 0000000..e8b26ba
Binary files /dev/null and b/docs/en/target/tesseragame.png differ
diff --git a/docs/en/target/tests_shot.png b/docs/en/target/tests_shot.png
new file mode 100644 (file)
index 0000000..b92822a
Binary files /dev/null and b/docs/en/target/tests_shot.png differ
diff --git a/docs/en/target/thering.jpg b/docs/en/target/thering.jpg
new file mode 100644 (file)
index 0000000..416d572
Binary files /dev/null and b/docs/en/target/thering.jpg differ
diff --git a/docs/en/target/tictactoe.jpg b/docs/en/target/tictactoe.jpg
new file mode 100644 (file)
index 0000000..8904478
Binary files /dev/null and b/docs/en/target/tictactoe.jpg differ
diff --git a/docs/en/target/tictactoe3d.png b/docs/en/target/tictactoe3d.png
new file mode 100644 (file)
index 0000000..bb53799
Binary files /dev/null and b/docs/en/target/tictactoe3d.png differ
diff --git a/docs/en/target/ttsapp.png b/docs/en/target/ttsapp.png
new file mode 100644 (file)
index 0000000..d2b639f
Binary files /dev/null and b/docs/en/target/ttsapp.png differ
diff --git a/docs/en/target/typehints.txt b/docs/en/target/typehints.txt
new file mode 100644 (file)
index 0000000..25e6bb8
--- /dev/null
@@ -0,0 +1,145 @@
+.. index:: 
+       single: The Type Hints Library; Introduction to the Type Hints Library
+
+======================================
+Introduction to the Type Hints Library
+======================================
+
+In this chapter we will learn about the Type Hints Library
+
+
+.. index:: 
+       pair: The Type Hints Library; Why Type Hints?
+
+Why Type Hints?
+===============
+
+Using this library we can add the type information to the source code which will be 
+very useful for tools like
+
+* Code Editors 
+* Static-Analysis
+
+.. note:: Ring is a dynamic language, No type checking will be done by the compiler.
+
+.. index:: 
+       pair: The Type Hints Library; Example
+
+Example
+=======
+
+The next example will use the Type Hints library
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       see sum(3,4) + nl ;
+       see sayHello("Mahmoud");
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+.. index:: 
+       pair: The Type Hints Library; User Types
+
+User Types
+==========
+
+The Type Hints library is very powerful and will support user types (Classes) automatically
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       import mypackage 
+
+       test()  { main([:one,:two,:three]) }
+
+       myclass func test() {
+               see "Testing User Types!" + nl
+               return new myclass
+       }
+
+       package mypackage {
+               public class myclass {
+                       public static void func main(list args) {
+                               see "welcome" + nl
+                               see args
+                       }
+               }
+       }
+
+.. index:: 
+       pair: The Type Hints Library; Using Types inside Code
+
+Using Types inside Code
+=======================
+
+Also you can use the types inside the code (not only the function prototype)
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       int     sum = sum(3,4)
+       string  msg = sayHello("Mahmoud")
+
+       see "Sum = " + sum + nl + msg + nl
+
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+.. index:: 
+       pair: The Type Hints Library; Rules
+
+Rules
+=====
+
+* To use the types in the function prototype you must use '(' and ')' around parameters
+* To use the types in the function code, You must set the variable value (Assignment).
+
+The next types are defined by the library
+
+.. code-block:: ring
+
+       # Low Level Types
+       char             
+       unsigned         
+       signed           
+       int              
+       short            
+       long             
+       float            
+       double           
+       void             
+
+       # High Level Types 
+       string           
+       list             
+       number           
+       object           
+
+       # Other
+       public           
+       static           
+       abstract         
+       protected        
+       override         
+
+
diff --git a/docs/en/target/urlappmacshot3.png b/docs/en/target/urlappmacshot3.png
new file mode 100644 (file)
index 0000000..bdb5fb6
Binary files /dev/null and b/docs/en/target/urlappmacshot3.png differ
diff --git a/docs/en/target/urlappmacshot4.png b/docs/en/target/urlappmacshot4.png
new file mode 100644 (file)
index 0000000..fee1e5d
Binary files /dev/null and b/docs/en/target/urlappmacshot4.png differ
diff --git a/docs/en/target/urlappmainshot.png b/docs/en/target/urlappmainshot.png
new file mode 100644 (file)
index 0000000..e825220
Binary files /dev/null and b/docs/en/target/urlappmainshot.png differ
diff --git a/docs/en/target/urlappshot1.png b/docs/en/target/urlappshot1.png
new file mode 100644 (file)
index 0000000..b8b92e7
Binary files /dev/null and b/docs/en/target/urlappshot1.png differ
diff --git a/docs/en/target/urlappshot2.png b/docs/en/target/urlappshot2.png
new file mode 100644 (file)
index 0000000..587fdcd
Binary files /dev/null and b/docs/en/target/urlappshot2.png differ
diff --git a/docs/en/target/urn_shot1.png b/docs/en/target/urn_shot1.png
new file mode 100644 (file)
index 0000000..31bb9d3
Binary files /dev/null and b/docs/en/target/urn_shot1.png differ
diff --git a/docs/en/target/urn_shot10.png b/docs/en/target/urn_shot10.png
new file mode 100644 (file)
index 0000000..ecf8757
Binary files /dev/null and b/docs/en/target/urn_shot10.png differ
diff --git a/docs/en/target/urn_shot11.png b/docs/en/target/urn_shot11.png
new file mode 100644 (file)
index 0000000..f0e5f2f
Binary files /dev/null and b/docs/en/target/urn_shot11.png differ
diff --git a/docs/en/target/urn_shot12.png b/docs/en/target/urn_shot12.png
new file mode 100644 (file)
index 0000000..67c0a7c
Binary files /dev/null and b/docs/en/target/urn_shot12.png differ
diff --git a/docs/en/target/urn_shot2.png b/docs/en/target/urn_shot2.png
new file mode 100644 (file)
index 0000000..b57da48
Binary files /dev/null and b/docs/en/target/urn_shot2.png differ
diff --git a/docs/en/target/urn_shot3.png b/docs/en/target/urn_shot3.png
new file mode 100644 (file)
index 0000000..252a2e1
Binary files /dev/null and b/docs/en/target/urn_shot3.png differ
diff --git a/docs/en/target/urn_shot4.png b/docs/en/target/urn_shot4.png
new file mode 100644 (file)
index 0000000..5b23411
Binary files /dev/null and b/docs/en/target/urn_shot4.png differ
diff --git a/docs/en/target/urn_shot5.png b/docs/en/target/urn_shot5.png
new file mode 100644 (file)
index 0000000..c52ca61
Binary files /dev/null and b/docs/en/target/urn_shot5.png differ
diff --git a/docs/en/target/urn_shot6.png b/docs/en/target/urn_shot6.png
new file mode 100644 (file)
index 0000000..9b7a147
Binary files /dev/null and b/docs/en/target/urn_shot6.png differ
diff --git a/docs/en/target/urn_shot7.png b/docs/en/target/urn_shot7.png
new file mode 100644 (file)
index 0000000..f945e3f
Binary files /dev/null and b/docs/en/target/urn_shot7.png differ
diff --git a/docs/en/target/urn_shot8.png b/docs/en/target/urn_shot8.png
new file mode 100644 (file)
index 0000000..3a24887
Binary files /dev/null and b/docs/en/target/urn_shot8.png differ
diff --git a/docs/en/target/urn_shot9.png b/docs/en/target/urn_shot9.png
new file mode 100644 (file)
index 0000000..9de14da
Binary files /dev/null and b/docs/en/target/urn_shot9.png differ
diff --git a/docs/en/target/usingopengl.txt b/docs/en/target/usingopengl.txt
new file mode 100644 (file)
index 0000000..c30f2de
--- /dev/null
@@ -0,0 +1,2550 @@
+.. index:: 
+       single: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Introduction
+
+===================================================
+Using RingOpenGL and RingFreeGLUT for 3D  Graphics
+===================================================
+
+
+In this chapter we will learn about using RingOpenGL
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Samples Source (Authors)
+
+Samples Source (Authors)
+========================
+
+The samples in this chapter are based on C Tutorials 
+
+from 
+
+(1) http://www.lighthouse3d.com/tutorials/glut-tutorial/
+
+(2) http://www.wikihow.com/Make-a-Cube-in-OpenGL
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; What is RingOpenGL?
+
+What is RingOpenGL?
+===================
+
+RingOpenGL contains the Ring binding to the OpenGL library
+
+You can learn about OpenGL from : https://www.opengl.org/
+
+RingOpenGL comes with support for the next versions 
+
+* OpenGL 1.1
+* OpenGL 1.2
+* OpenGL 1.3
+* OpenGL 1.4
+* OpenGL 1.5
+* OpenGL 2.0
+* OpenGL 2.1
+* OpenGL 3.0
+* OpenGL 3.2
+* OpenGL 3.3
+* OpenGL 4.0
+* OpenGL 4.1
+* OpenGL 4.2
+* OpenGL 4.3
+* OpenGL 4.4
+* OpenGL 4.5
+* OpenGL 4.6
+
+For example, if you want to use OpenGL 2.1 then load RingOpenGL 2.1 library
+
+.. code-block:: ring
+
+       load "opengl21lib.ring"
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; What is RingFreeGLUT?
+
+What is RingFreeGLUT?
+=====================
+
+RingFreeGLUT contains the Ring binding to the FreeGLUT library
+
+You can learn about FreeGLUT from : http://freeglut.sourceforge.net/
+
+To use the RingFreeGLUT library, Just load the library
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; The First Window using RingFreeGLUT
+
+The First Window using RingFreeGLUT
+===================================
+
+Example:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_SINGLE)
+               glutInitWindowSize(800, 600)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 1")
+               glutDisplayFunc(:displayCode)
+               glutMainLoop()
+
+       func displaycode
+
+Screen Shot
+
+.. image:: freeglutshot1.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Drawing using RingOpenGL
+
+
+Drawing using RingOpenGL
+========================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_SINGLE)
+               glutInitWindowSize(800, 600)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 2")
+               glutDisplayFunc(:displayCode)
+               glutMainLoop()
+
+       func displaycode
+               glClear(GL_COLOR_BUFFER_BIT)
+               glColor3f(0,255,0)
+               glBegin(GL_POLYGON)
+                       glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(0.5, 0.0, 0.0)
+                       glVertex3f(0.5, 0.5, 0.0)
+                       glVertex3f(0.0, 0.5, 0.0)
+               glEnd()
+               glColor3f(255,0,0)
+               glBegin(GL_POLYGON)
+                       glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(0.5, 0.0, 0.0)
+                       glVertex3f(-0.5,- 1, 0.0)
+                       glVertex3f(0.0, -1, 0.0)
+               glEnd()
+               glColor3f(0,0,255)
+               glBegin(GL_POLYGON)
+                      glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(-0.5, 0.0, 0.0)
+                       glVertex3f(-0.5,- 0.5, 0.0)
+                       glVertex3f(0.0, -0.5, 0.0)
+               glEnd()
+
+               glFlush()
+
+Screen Shot
+
+.. image:: freeglutshot2.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; The First Triangle
+
+
+The First Triangle
+==================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowSize(320,320)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 3")
+               glutDisplayFunc(:renderScene)
+               glutMainLoop()
+
+       func renderScene
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+       
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-0.5,-0.5,0.0)
+                       glVertex3f(0.5,0.0,0.0)
+                       glVertex3f(0.0,0.5,0.0)
+               glEnd()
+       
+               glutSwapBuffers()
+
+
+Screen Shot
+
+.. image:: freeglutshot3.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Window Resize Event
+
+Window Resize Event
+===================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 4")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+
+               glutMainLoop()
+
+       func renderScene
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2,-2,-5.0)
+                       glVertex3f(2,0.0,-5.0)
+                       glVertex3f(0.0,2,-5.0)
+               glEnd()
+
+               glutSwapBuffers()
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45,ratio,1,100)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Triangle Rotation
+
+Triangle Rotation
+=================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       angle = 0
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 5")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutMainLoop()
+
+       func renderScene
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      0.0, 0.0, 10.0,
+                                       0.0, 0.0,  0.0,
+                                       0.0, 1.0,  0.0)
+
+               glRotatef(angle, 0.0, 1.0, 0.0)
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2.0,-2.0, 0.0)
+                       glVertex3f( 2.0, 0.0, 0.0)
+                       glVertex3f( 0.0, 2.0, 0.0)
+               glEnd()
+
+               angle+=0.1
+
+               glutSwapBuffers();
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45,ratio,1,100)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+Screen Shot
+
+.. image:: freeglutshot4.png
+       :alt: RingFreeGLUT
+               
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Keyboard Events and Colors
+
+Keyboard Events and Colors
+==========================
+
+Example:
+
+.. code-block:: ring
+               
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       angle = 0
+
+       red=1.0  
+       blue=1.0 
+       green=1.0
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 6")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               // here are the new entries
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:processSpecialKeys)
+
+               glutMainLoop()
+
+       func renderScene
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      0.0, 0.0, 10.0,
+                                       0.0, 0.0,  0.0,
+                                       0.0, 1.0,  0.0)
+
+               glRotatef(angle, 0.0, 1.0, 0.0)
+
+
+               glColor3f(red,green,blue);
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2.0,-2.0, 0.0)
+                       glVertex3f( 2.0, 0.0, 0.0)
+                       glVertex3f( 0.0, 2.0, 0.0)
+               glEnd()
+
+               angle+=0.1
+
+               glutSwapBuffers();
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45,ratio,1,100)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func processNormalKeys
+               key = GLUTEventKey()
+               if key = 27
+                       shutdown()
+               ok
+
+       func processSpecialKeys
+
+               key = GLUTEventKey()
+
+               switch key  
+                       on GLUT_KEY_F1
+                                       red = 1.0
+                                       green = 0.0
+                                       blue = 0.0
+                       on GLUT_KEY_F2 
+                                       red = 0.0
+                                       green = 1.0
+                                       blue = 0.0
+                       on GLUT_KEY_F3
+                                       red = 0.0
+                                       green = 0.0
+                                       blue = 1.0
+               off
+
+Screen Shot
+
+.. image:: freeglutshot5.png
+       :alt: RingFreeGLUT
+               
+
+               
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; The Camera
+
+The Camera
+==========
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle=0.0
+       // actual vector representing the camera's direction
+       lx=0.0
+       lz=-1.0
+       // XZ position of the camera
+       x=0.0
+       z=5.0
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(1.0, 0.5 , 0.5)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0  / h 
+
+                       // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+                       // Reset Matrix
+               glLoadIdentity()
+
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0);
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func processNormalKeys
+               key = glutEventKey()
+
+               if key = 27
+                       shutdown()
+               ok
+
+
+
+       func renderScene
+
+               // Clear Color and Depth Buffers
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+                       // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+                       // Draw 36 SnowMen
+               for i = -3 to 2
+                       for  j=-3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0,0,j * 10.0)                 
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+
+
+       func processSpecialKeys 
+
+               key = glutEventKey()
+
+               fraction = 0.1
+
+               switch key 
+                       on GLUT_KEY_LEFT 
+                               angle -= 0.01
+                               lx = sin(angle)
+                               lz = -cos(angle)
+                       on GLUT_KEY_RIGHT 
+                               angle += 0.01
+                               lx = sin(angle)
+                               lz = -cos(angle)
+                       on GLUT_KEY_UP 
+                               x += lx * fraction
+                               z += lz * fraction
+                       on GLUT_KEY_DOWN 
+                               x -= lx * fraction
+                               z -= lz * fraction
+               off
+
+
+       func main
+
+               // init GLUT and create window
+
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 7")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:processSpecialKeys)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+Screen Shot
+
+.. image:: freeglutshot6.png
+       :alt: RingFreeGLUT
+
+Another Example:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0 z=5.0
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+
+       func changeSize 
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(1.0, 0.5 , 0.5)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func computeDir deltaAngle
+
+               angle += deltaAngle
+               lx = sin(angle)
+               lz = -cos(angle)
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               if deltaAngle
+                       computeDir(deltaAngle)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                                       x+lx, 1.0,  z+lz,
+                                       0.0, 1.0,  0.0)
+
+       // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 36 SnowMen
+
+               for i = -3 to 2
+                       for j=-3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0,0,j * 10.0)
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+       func pressKey 
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_LEFT 
+                                deltaAngle = -0.01 
+                       on GLUT_KEY_RIGHT 
+                                deltaAngle = 0.01 
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5 
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5  
+               off
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_LEFT  
+                               deltaAngle = 0.0
+                       on GLUT_KEY_RIGHT  
+                               deltaAngle = 0.0
+                       on GLUT_KEY_UP  
+                               deltaMove = 0
+                       on GLUT_KEY_DOWN  
+                               deltaMove = 0
+               off
+
+       func main 
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 8")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutSpecialFunc(:pressKey)
+
+               // here are the new entries
+               glutIgnoreKeyRepeat(1)
+               glutSpecialUpFunc(:releaseKey)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+        
+        
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Mouse Events
+
+Mouse Events
+============
+
+Example:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0.0
+       xOrigin = -1
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+               // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+               // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+               // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+               // Draw Nose
+               glColor3f(1.0, 0.5 , 0.5)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+               // Draw 36 SnowMen
+
+               for i = -3 to 2
+                       for  j=-3 to 2
+                                                glPushMatrix()
+                                                glTranslatef(i*10.0,0,j * 10.0)
+                                                drawSnowMan()
+                                                glPopMatrix()
+                        next
+               next
+               glutSwapBuffers()
+
+       func processNormalKeys
+
+               key  = glutEventKey()
+
+                       if key = 27
+                                shutdown()
+                       ok
+
+
+       func pressKey
+               key  = glutEventKey()
+
+                  switch key
+                                on GLUT_KEY_UP
+                                       deltaMove = 0.5 
+                                on GLUT_KEY_DOWN
+                                        deltaMove = -0.5 
+                  off
+
+
+       func releaseKey 
+               key  = glutEventKey()
+                       switch key
+                                on GLUT_KEY_UP 
+                                       deltaMove = 0
+                                on GLUT_KEY_DOWN 
+                                       deltaMove = 0
+                       off
+
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+                       // this will only be true when the left button is down
+                       if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+               
+               
+
+       func mouseButton
+
+               button  = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1            
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+                       fflush(stdout)
+               ok
+
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 9")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Menu Events
+
+Menu Events
+===========
+
+Example:
+
+.. code-block:: ring 
+               
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+
+
+       // for RingFreeGLUT - We must have different ID for each menu item
+       C_RED = 1
+       C_GREEN = 2
+       C_BLUE  = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       C_SHRINK = 7
+       C_NORMAL = 8
+
+       // Pop up menu identifiers
+       fillMenu= 0  
+       shrinkMenu= 0
+       mainMenu=0 
+       colorMenu=0
+
+       // color for the nose
+       red = 1.0  blue=0.5  green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+       // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 36 SnowMen
+
+               for  i = -3 to 2
+                       for  j = -3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               glutSetMenu(mainMenu)
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(shrinkMenu)
+                               shutdown()
+
+                       on 's'
+                               if not menuFlag
+                                 glutChangeToSubMenu(2,"Shrink",shrinkMenu)
+                               ok
+                       on 'c'
+                               if not menuFlag
+                                       glutChangeToSubMenu(2,"Color",colorMenu)
+                               ok
+               off
+               if key = 27
+                       shutdown()
+               ok
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               if  status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                                glPolygonMode(GL_FRONT, GL_FILL) 
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE) 
+               off
+
+
+       func processShrinkMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_SHRINK
+                               scale = 0.5
+                       on C_NORMAL
+                                scale = 1.0
+               off
+
+
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               shrinkMenu = glutCreateMenu(:processShrinkMenu)
+
+               glutAddMenuEntry("Shrink",C_SHRINK)
+               glutAddMenuEntry("NORMAL",C_NORMAL)
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED)
+               glutAddMenuEntry("Blue",C_BLUE)
+               glutAddMenuEntry("Green",C_GREEN)
+               glutAddMenuEntry("Orange",C_ORANGE)
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 10")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+Screen Shot
+
+.. image:: freeglutshot7.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Using Fonts
+
+Using Fonts
+===========
+
+Example:
+
+.. code-block:: ring 
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // Pop up menu identifiers
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // color for the nose
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       // default font
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 36 SnowMen
+               for i = -3 to 2
+                       for j = -3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*6+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 11")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+Screen Shot
+
+.. image:: freeglutshot8.png
+       :alt: RingFreeGLUT
+
+       
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Frames Per Second 
+
+Frames Per Second
+=================
+
+Example 
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // Pop up menu identifiers
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // color for the nose
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       // default font
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       // width and height of the window
+       h = 0
+       w = 0
+
+       // variables to compute frames per second
+       frame=0
+       time=0
+       timebase=0
+       s = ""
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+       func renderStrokeFontString x,y,z,font,string
+               glPushMatrix()
+               glTranslatef(x, y,z)
+               glScalef(0.002, 0.002, 0.002)
+               for c in string
+                       glutStrokeCharacter(font, Ascii(c));
+               next
+               glPopMatrix()
+
+
+       func restorePerspectiveProjection
+
+               glMatrixMode(GL_PROJECTION)
+               // restore previous projection matrix
+               glPopMatrix()
+
+               // get back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func setOrthographicProjection
+
+               // switch to projection mode
+               glMatrixMode(GL_PROJECTION)
+
+               // save previous matrix which contains the
+               //settings for the perspective projection
+               glPushMatrix()
+
+               // reset matrix
+               glLoadIdentity()
+
+               // set a 2D orthographic projection
+               gluOrtho2D(0, w, h, 0)
+
+               // switch back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 9 SnowMen
+               for i = -3 to -1
+                       for j = -3 to -1
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*3+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               // Code to compute frames per second
+               frame++
+
+               time=glutGet(GLUT_ELAPSED_TIME)
+               if time - timebase > 1000 
+                       s = "RingFreeGLUT - FPS: " + (frame*1000.0/(time-timebase))
+                       timebase = time
+                       frame = 0
+               ok
+
+               // Code to display a string (fps) with bitmap fonts
+               setOrthographicProjection()
+
+               glPushMatrix()
+               glLoadIdentity()
+               renderBitmapString(5,30,0,GLUT_BITMAP_HELVETICA_18,s)
+               glPopMatrix()
+
+               restorePerspectiveProjection()
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test - 9 SnowMan")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+
+Screen Shots:
+
+The First screen shot
+
+.. image:: ring15freeglut.png
+       :alt: RingFreeGLUT
+
+
+The Second screen shot
+
+.. image:: ring15freeglut2.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: Using RingOpenGL and RingFreeGLUT for 3D  Graphics; Make a Cube using RingOpenGL and RingFreeGLUT
+
+Make a Cube using RingOpenGL and RingFreeGLUT
+=============================================
+
+Example:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // ----------------------------------------------------------
+       // Global Variables
+       // ----------------------------------------------------------
+       rotate_y=0 
+       rotate_x=0
+        
+       // ----------------------------------------------------------
+       // display() Callback function
+       // ----------------------------------------------------------
+       func display
+        
+         //  Clear screen and Z-buffer
+         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
+        
+         // Reset transformations
+         glLoadIdentity()
+        
+         // Rotate when user changes rotate_x and rotate_y
+         glRotatef( rotate_x, 1.0, 0.0, 0.0 )
+         glRotatef( rotate_y, 0.0, 1.0, 0.0 )
+        
+         //Multi-colored side - FRONT
+         glBegin(GL_POLYGON)
+        
+         glColor3f( 1.0, 0.0, 0.0 )     glVertex3f(  0.5, -0.5, -0.5 )      # P1 is red
+         glColor3f( 0.0, 1.0, 0.0 )     glVertex3f(  0.5,  0.5, -0.5 )      # P2 is green
+         glColor3f( 0.0, 0.0, 1.0 )     glVertex3f( -0.5,  0.5, -0.5 )      # P3 is blue
+         glColor3f( 1.0, 0.0, 1.0 )     glVertex3f( -0.5, -0.5, -0.5 )      # P4 is purple
+        
+         glEnd()
+        
+         // White side - BACK
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  1.0, 1.0 )
+         glVertex3f(  0.5, -0.5, 0.5 )
+         glVertex3f(  0.5,  0.5, 0.5 )
+         glVertex3f( -0.5,  0.5, 0.5 )
+         glVertex3f( -0.5, -0.5, 0.5 )
+         glEnd()
+        
+         // Purple side - RIGHT
+         glBegin(GL_POLYGON)
+         glColor3f(  1.0,  0.0,  1.0 )
+         glVertex3f( 0.5, -0.5, -0.5 )
+         glVertex3f( 0.5,  0.5, -0.5 )
+         glVertex3f( 0.5,  0.5,  0.5 )
+         glVertex3f( 0.5, -0.5,  0.5 )
+         glEnd()
+        
+         // Green side - LEFT
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  1.0,  0.0 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         // Blue side - TOP
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  0.0,  1.0 )
+         glVertex3f(  0.5,  0.5,  0.5 )
+         glVertex3f(  0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glEnd()
+        
+         // Red side - BOTTOM
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  0.0,  0.0 )
+         glVertex3f(  0.5, -0.5, -0.5 )
+         glVertex3f(  0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         glFlush()
+         glutSwapBuffers()
+        
+        
+       // ----------------------------------------------------------
+       // specialKeys() Callback Function
+       // ----------------------------------------------------------
+       func specialKeys
+
+               key = glutEventKey()
+        
+         //  Right arrow - increase rotation by 5 degree
+               switch Key
+
+               on GLUT_KEY_RIGHT
+                       rotate_y += 5
+        
+               //  Left arrow - decrease rotation by 5 degree
+               on GLUT_KEY_LEFT
+                       rotate_y -= 5
+        
+               on GLUT_KEY_UP
+                       rotate_x += 5
+        
+               on GLUT_KEY_DOWN
+                       rotate_x -= 5
+        
+               off
+
+         //  Request display update
+         glutPostRedisplay()
+        
+
+        
+       // ----------------------------------------------------------
+       // main() function
+       // ----------------------------------------------------------
+       func main
+        
+         //  Initialize GLUT and process user parameters
+         glutInit()
+        
+         //  Request double buffered true color window with Z-buffer
+         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
+        
+         // Create window
+         glutCreateWindow("Awesome Cube")
+        
+         //  Enable Z-buffer depth test
+         glEnable(GL_DEPTH_TEST)
+        
+         // Callback functions
+         glutDisplayFunc(:display)
+         glutSpecialFunc(:specialKeys)
+        
+         //  Pass control to GLUT for events
+         glutMainLoop()
+        
+         //  Return to OS
+
+
+Screen Shot:
+
+.. image:: ring15opengl.png
+       :alt: RingOpenGL
+
diff --git a/docs/en/target/usingopengl2.txt b/docs/en/target/usingopengl2.txt
new file mode 100644 (file)
index 0000000..d4e3be9
--- /dev/null
@@ -0,0 +1,1114 @@
+.. index:: 
+       single: Using RingOpenGL and RingAllegro for 3D  Graphics; Introduction
+
+=================================================
+Using RingOpenGL and RingAllegro for 3D  Graphics
+=================================================
+
+
+In this chapter we will learn about using RingOpenGL and RingAllegro
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; 3D Cube and Texture
+
+3D Cube and Texture
+===================
+
+Source Code:
+
+.. code-block:: ring
+
+       # Load Libraries
+               load "gamelib.ring"             # RingAllegro Library
+               load "opengl21lib.ring"         # RingOpenGL  Library
+
+       #==============================================================
+       # To Support MacOS X
+               al_run_main()   
+               func al_game_start      # Called by al_run_main()
+                       main()          # Now we call our main function
+       #==============================================================
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Ring Cube"
+
+               bitmap texture
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("ring.bmp")
+                       texture = al_get_opengl_texture(bitmap)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+
+               func drawScene
+
+                       w = 800 h = 600
+                       ratio =  w / h
+
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+
+                       gluPerspective(45,ratio,1,100)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)                                                 
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(0.0,0.0,-5.0)
+
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+
+                       glBindTexture(GL_TEXTURE_2D, texture)
+
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+                       xrot += 0.3
+                       yrot += 0.2
+                       zrot += 0.4
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+Screen Shot:
+
+.. image:: ringcube3d.png
+       :alt: Ring Cube
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; Many Cubes
+
+Many Cubes
+==========
+
+Source Code:
+
+.. code-block:: ring
+
+       # Load Libraries
+               load "gamelib.ring"             # RingAllegro Library
+               load "opengl21lib.ring"         # RingOpenGL  Library
+
+       #==============================================================
+       # To Support MacOS X
+               al_run_main()   
+               func al_game_start      # Called by al_run_main()
+                       main()          # Now we call our main function
+       #==============================================================
+
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Many Cubes"
+
+               bitmap bitmap2 bitmap3
+               texture texture2 texture3
+
+               fps = 120
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               nPerspective = 100
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("sky1.jpg")
+                       texture = al_get_opengl_texture(bitmap)
+
+                       bitmap2 = al_load_bitmap("sky2.jpg")
+                       texture2 = al_get_opengl_texture(bitmap2)
+
+                       bitmap3 = al_load_bitmap("sky3.jpg")
+                       texture3 = al_get_opengl_texture(bitmap3)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_bitmap(bitmap2)
+                       al_destroy_bitmap(bitmap3)
+
+               func drawScene
+
+                       prepare()
+                       cubes()
+                       rotate()
+
+               func Prepare
+                       w = 800 h = 600
+                       ratio =  w / h
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+                       gluPerspective(-nPerspective,ratio,1,nPerspective)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)         
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               func Cubes
+                       cube(5,-3.4,-5,:sky1)
+                       cube(0,-3,-5,:sky1)
+                       cube(-5,-3,-5,:sky1)
+                       cube(5,0.5,-5,:sky2)
+                       cube(0,0.5,-5,:sky2)
+                       cube(-5,0.5,-5,:sky2)
+                       cube(5,4,-5,:sky3)
+                       cube(0,4,-5,:sky3)
+                       cube(-5,4,-5,:sky3)
+
+               func Rotate 
+                       xrot += 0.3 * 5
+                       yrot += 0.2 * 5
+                       zrot += 0.4 * 5
+                       nPerspective += 0.5
+
+
+               func cube(x,y,z,nTexture)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(x,y,z)
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+                       drawcube(nTexture)
+
+               func drawcube(cTexture) 
+
+                       switch cTexture
+                               on :sky1
+                                       glBindTexture(GL_TEXTURE_2D, texture)
+                               on :sky2
+                                       glBindTexture(GL_TEXTURE_2D, texture2)
+                               on :sky3
+                                       glBindTexture(GL_TEXTURE_2D, texture3)
+                       off
+
+
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                        
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+
+Screen Shot:
+
+.. image:: manycubes.png
+       :alt: Many Cubes
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; TicTacToe 3D Game
+
+TicTacToe 3D Game
+=================
+
+
+Source Code:
+
+.. code-block:: ring
+
+
+       # Load Libraries
+               load "gamelib.ring"             # RingAllegro Library
+               load "opengl21lib.ring"         # RingOpenGL  Library
+
+       #==============================================================
+       # To Support MacOS X
+               al_run_main()   
+               func al_game_start      # Called by al_run_main()
+                       main()          # Now we call our main function
+       #==============================================================
+
+       func main
+               new TicTacToe3D {
+                       start()
+               }
+
+       class TicTacToe3D from GameLogic
+
+               FPS = 60
+               TITLE = "TicTacToe 3D"
+
+               oBackground = new GameBackground
+               oGameSound = new GameSound
+               oGameCube = new GameCube
+               oGameOver = new GameOver
+               oGameInterface = new GameInterface 
+
+               func loadresources
+                       oGameOver.loadresources()
+                       oGameSound.loadresources()
+                       oBackGround.loadresources()
+                       oGameCube.loadresources()
+
+               func destroyResources
+                       oGameOver.destroyResources()
+                       oGameSound.destroyResources()
+                       oBackGround.destroyResources()
+                       oGameCube.destroyResources()
+
+               func drawScene
+                       oBackground.update()
+                       oGameInterface.update(self)
+
+               func MouseClickEvent
+                       oGameInterface.MouseClickEvent(self)
+
+       class GameInterface 
+
+               func Update oGame
+                       prepare()
+                       cubes(oGame)
+
+               func Prepare 
+                       w = 1024 h = 768
+                       ratio =  w / h
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+                       gluPerspective(-120,ratio,1,120)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)         
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+               func Cubes oGame
+                       oGame.oGameCube {
+                               aGameMap = oGame.aGameMap 
+                               cube( 5  , -3 , -5  , aGameMap[1][1] )
+                               cube( 0  , -3 , -5  , aGameMap[1][2] )
+                               cube( -5 , -3 , -5  , aGameMap[1][3] )
+                               cube( 5  , 1  , -5  , aGameMap[2][1] )
+                               cube( 0  , 1  , -5  , aGameMap[2][2] )
+                               cube( -5 , 1  , -5  , aGameMap[2][3] )
+                               cube( 5  , 5  , -5  , aGameMap[3][1] )
+                               cube( 0  , 5  , -5  , aGameMap[3][2] )
+                               cube( -5 , 5  , -5  , aGameMap[3][3] )
+                               rotate()
+                       }
+
+               func MouseClickEvent oGame
+                       oGame {
+                               aBtn = Point2Button(Mouse_X,Mouse_Y)
+                               nRow = aBtn[1]
+                               nCol = aBtn[2]
+                               if nRow != 0 and nCol != 0      
+                                       if aGameMap[nRow][nCol] = :n
+                                               aGameMap[nRow][nCol] = cActivePlayer
+                                               ChangeActivePlayer()
+                                               CheckGameOver()
+                                       ok                      
+                               ok
+                       }
+
+       Class GameLogic from GraphicsAppBase
+
+               aGameMap = [
+                       [ :n , :n , :n ] ,
+                       [ :n , :n , :n ] ,
+                       [ :n , :n , :n ]
+               ]
+
+               aGameButtons = [                        # x1,y1,x2,y2
+                       [176,88,375,261],               # [1,1]
+                       [423,88,591,261],               # [1,2]
+                       [645,88,876,261],               # [1,3]
+                       [176,282,375,428],              # [2,1]
+                       [423,282,591,428],              # [2,2]
+                       [645,282,876,428],              # [2,3]
+                       [176,454,375,678],              # [3,1]
+                       [423,454,591,678],              # [3,2]
+                       [645,454,876,678]               # [3,3]
+               ]
+
+               cActivePlayer = :x
+
+               func point2button x,y
+                       nRow = 0
+                       nCol = 0
+                       for t = 1 to len(aGameButtons) 
+                               rect = aGameButtons[t]
+                               if x >= rect[1] and x <= rect[3] and
+                                  y >= rect[2] and y <= rect[4] 
+                                               switch t
+                                                       on 1  nRow = 1  nCol = 1
+                                                       on 2  nRow = 1  nCol = 2
+                                                       on 3  nRow = 1  nCol = 3
+                                                       on 4  nRow = 2  nCol = 1
+                                                       on 5  nRow = 2  nCol = 2
+                                                       on 6  nRow = 2  nCol = 3
+                                                       on 7  nRow = 3  nCol = 1
+                                                       on 8  nRow = 3  nCol = 2
+                                                       on 9  nRow = 3  nCol = 3
+                                               off
+                                               exit 
+                               ok
+                       next 
+                       return [nRow,nCol]
+
+               func ChangeActivePlayer()
+                       if cActivePlayer = :x
+                               cActivePlayer = :o
+                       else 
+                               cActivePlayer = :x
+                       ok
+
+               func CheckGameOver
+                       aList = [
+                               aGameMap[1][1],
+                               aGameMap[1][2],
+                               aGameMap[1][3],
+                               aGameMap[2][1],
+                               aGameMap[2][2],
+                               aGameMap[2][3],
+                               aGameMap[3][1],
+                               aGameMap[3][2],
+                               aGameMap[3][3]
+                       ]
+                       for item in aList 
+                               switch item 
+                                       on :x   item = 1
+                                       on :o   item = 2
+                                       on :n   item = 0
+                               off
+                       next
+                       nStatus = CheckWinner(aList)
+                       if nStatus 
+                               oGameOver {
+                                       Switch nStatus
+                                               on 1 Player1Win(this)  
+                                               on 2 Player2Win(this)  
+                                               on 3 NoOneWin(this)   
+                                       off
+                               }
+                               refreshGame()
+                       ok
+
+               func refreshGame
+                       aGameMap = [
+                               [ :n , :n , :n ] ,
+                               [ :n , :n , :n ] ,
+                               [ :n , :n , :n ]
+                       ]
+                       cActivePlayer = :x
+
+               func CheckWinner lst
+                       //vertical check
+                       for v=1 to 9 step 3
+                               if lst[v]!=0 and lst[v+1]!=0 and lst[v+2]!=0
+                                       if lst[v]=lst[v+1] and lst[v+1]=lst[v+2]
+                                               return lst[v]
+                                       ok
+                               ok
+                       next
+                       //horzintal
+                       for h=1 to 3
+                               if lst[h]!=0 and lst[h+3]!=0 and lst[h+6]!=0
+                                       if lst[h]=lst[h+3] and lst[h+3]=lst[h+6]
+                                               return lst[h]
+                                       ok
+                               ok
+                       next
+                       //Cross
+                       if lst[1]!=0 and lst[5]!=0 and lst[9]!=0
+                               if lst[1]=lst[5] and lst[5]=lst[9] return lst[1] ok
+                       ok
+                       if lst[3]!=0 and lst[5]!=0 and lst[7]!=0
+                               if lst[3]=lst[5] and lst[5]=lst[7] return lst[3] ok
+                       ok
+                       //tie
+                       tie=true
+                       for i=1 to 9
+                               if lst[i]=0 tie=false exit ok
+                       next
+                       if tie=true return 3 ok return 0
+
+
+
+       class GameOver
+
+               font bitmap
+
+               func loadresources
+                       font = al_load_ttf_font("font/pirulen.ttf",54,0 )
+                       bitmap = al_load_bitmap("image/ballon.png")
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_font(font)
+
+               func Player1Win oGame
+                       showMsg(oGame,80,430,"Good job X you won!")
+                       
+               func Player2Win oGame
+                       showMsg(oGame,80,430,"Good job O you won!")
+               
+               func NoOneWin oGame
+                       showMsg(oGame,150,430,"Oh no it's a tie!")
+                       
+               func ShowMsg oGame,x,y,cMsg
+                       oGame {
+                               drawScene()
+                               al_flip_display()
+                               al_rest(0.3)
+                               newdisplay = al_create_display(SCREEN_W,SCREEN_H)
+                               al_set_window_title(newdisplay,TITLE)
+                               al_clear_to_color(al_map_rgb(255,255,255))
+                               al_draw_bitmap(this.bitmap,200,50,1)
+                               al_draw_text(this.font,
+                                        al_map_rgb(0,0,255), x,y,
+                                        ALLEGRO_ALIGN_LEFT,cMsg)
+                               al_flip_display()
+                               al_rest(2)
+                               al_destroy_display(newdisplay)
+                               al_set_target_backbuffer(display)
+                       }
+
+       class GameCube
+
+               bitmap bitmap2 bitmap3 
+               textureX textureO textureN
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+                       bitmap = al_load_bitmap("image/o.png")
+                       textureO = al_get_opengl_texture(bitmap)
+                       bitmap2 = al_load_bitmap("image/x.png")
+                       textureX = al_get_opengl_texture(bitmap2)
+                       bitmap3 = al_load_bitmap("image/empty.png")
+                       textureN = al_get_opengl_texture(bitmap3)
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_bitmap(bitmap2)
+                       al_destroy_bitmap(bitmap3)
+
+               func cube(x,y,z,nTexture)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(x,y,z)
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+                       setCubeTexture(nTexture)
+                       drawCube()
+
+               func setCubeTexture cTexture
+                       switch cTexture
+                               on :x
+                                       glBindTexture(GL_TEXTURE_2D, textureX)
+                               on :o
+                                       glBindTexture(GL_TEXTURE_2D, textureO)
+                               on :n
+                                       glBindTexture(GL_TEXTURE_2D, textureN)
+                       off
+
+               func Rotate 
+                       xrot += 0.3 * 5
+                       yrot += 0.2 * 5
+                       zrot += 0.4 * 5
+
+               func drawcube
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                        
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+
+       class GameBackground 
+
+               nBackX = 0
+               nBackY = 0
+               nBackDiffx = -1
+               nBackDiffy = -1
+               nBackMotion = 1
+               aBackMotionList = [
+                       [ -1, -1 ] ,            # Down - Right
+                       [ 0 , 1  ] ,            # Up
+                       [ -1, -1 ] ,            # Down - Right
+                       [ 0 , 1  ] ,            # Up
+                       [ 1 , -1 ] ,            # Down - Left
+                       [ 0 , 1  ] ,            # Up
+                       [ 1 , -1 ] ,            # Down - Left
+                       [ 0 , 1  ]                      # Up
+               ]
+
+               bitmap
+
+               func Update 
+                       draw()
+                       motion()
+
+               func draw
+                       al_draw_bitmap(bitmap,nBackX,nBackY,1)
+
+               func motion
+                       nBackX += nBackDiffx
+                       nBackY += nBackDiffy
+                       if (nBackY = -350) or (nBackY = 0)
+                               nBackMotion++
+                               if nBackMotion > len(aBackMotionList)
+                                       nBackMotion = 1
+                               ok
+                               nBackDiffx  = aBackMotionList[nBackMotion][1]
+                               nBackDiffy  = aBackMotionList[nBackMotion][2]
+                       ok
+
+               func loadResources
+                       bitmap = al_load_bitmap("image/back.jpg")
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+
+
+       class GameSound
+
+               sample sampleid
+
+               func loadresources
+                       sample = al_load_sample( "sound/music1.wav" )
+                       sampleid = al_new_allegro_sample_id()
+                       al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,sampleid)
+
+               func destroyResources
+                       al_destroy_allegro_sample_id(sampleid)
+                       al_destroy_sample(sample)
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  
+               redraw                  = true
+               FPS                     = 60 
+               SCREEN_W                = 1024
+               SCREEN_H                = 700
+               KEY_UP                  = 1
+               KEY_DOWN                = 2
+               KEY_LEFT                = 3
+               KEY_RIGHT               = 4
+               Key                     = [false,false,false,false]
+               Mouse_X                 = 0
+               Mouse_Y                 = 0
+               TITLE                   = "Graphics Application"
+               PRINT_MOUSE_XY  = False
+
+               func start
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+                       al_init()
+                       al_init_font_addon()
+                       al_init_ttf_addon()
+                       al_init_image_addon()
+                       al_install_audio()
+                       al_init_acodec_addon()
+                       al_reserve_samples(1)
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       CloseEvent()
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                                       if PRINT_MOUSE_XY
+                                               see "x = " + mouse_x + nl
+                                               see "y = " + mouse_y + nl
+                                       ok
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       MouseClickEvent()
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+               func MouseClickEvent
+                       exit                    # Exit from the Events Loop 
+
+               func CloseEvent
+                       exit                    # Exit from the Events Loop 
+
+
+Screen Shot:
+
+.. image:: tictactoe3d.png
+       :width: 450pt
+       :height: 350pt
+       :alt: TicTacToe 3D Game
+
+
+.. index:: 
+       pair: Using RingOpenGL and RingAllegro for 3D  Graphics; More 3D Samples
+
+More 3D Samples
+===============
+
+You will find the samples in ring/samples/3D folder
+
+The next screen shot for the Top-Down view - Many levels of cubes sample
+
+.. image:: more3dsamples.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera Sample
+
+.. image:: more3dsamples2.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera and background sample
+
+Developer : Azzeddine Remmal
+
+.. image:: cameraandbackground.png
+       :alt: Camera and background
+
+
diff --git a/docs/en/target/usingqdial.png b/docs/en/target/usingqdial.png
new file mode 100644 (file)
index 0000000..e91bca0
Binary files /dev/null and b/docs/en/target/usingqdial.png differ
diff --git a/docs/en/target/variables.txt b/docs/en/target/variables.txt
new file mode 100644 (file)
index 0000000..004b8b1
--- /dev/null
@@ -0,0 +1,110 @@
+.. index:: 
+       single: Variables; Introduction
+
+=========
+Variables
+=========
+
+To create a new variable, you just need to determine the variable name & value.
+The value will determine the variable type and you can change the value to
+switch between the types using the same variable name.
+
+Syntax:
+
+.. code-block:: ring
+       
+       <Variable Name> = <Value>
+
+.. tip:: 
+       
+       The operator '=' is used here as an Assignment operator and the same
+       operator can be used in conditions, but for testing equality of expressions.
+
+.. note:: 
+       
+       The Variable will contains the real value (not a reference).
+       This means that once you change the variable value, the old value will
+       be removed from memory (even if the variable contains a list or object).
+
+
+.. index:: 
+       pair: Variables; Dynamic Typing
+
+Dynamic Typing
+==============
+
+Ring is a dynamic programming language that uses `Dynamic Typing <http://en.wikipedia.org/wiki/Type_system>`_.
+
+.. code-block:: ring
+
+       x = "Hello"             # x is a string
+       see x + nl
+       x = 5                   # x is a number (int)
+       see x + nl
+       x = 1.2                 # x is a number (double)
+       see x + nl
+       x = [1,2,3,4]           # x is a list
+       see x                   # print list items
+       x = date()              # x is a string contains date
+       see x + nl
+       x = time()              # x is a string contains time
+       see x + nl
+       x = true                # x is a number (logical value = 1)
+       see x + nl
+       x = false               # x is a number (logical value = 0)
+       see x + nl
+
+.. index:: 
+       pair: Variables; Deep Copy
+
+Deep Copy
+=========
+
+We can use the assignment operator '=' to copy variables.
+We can do that to copy values like strings & numbers.
+Also, we can copy complete lists & objects.
+The assignment operator will do a complete duplication for us.
+This operation called `Deep Copy <http://en.wikipedia.org/wiki/Object_copy#Deep_copy>`_
+
+
+.. code-block:: ring
+
+       list = [1,2,3,"four","five"]
+       list2 = list
+       list = []
+       See list        # print the first list - no items to print
+       See "********" + nl
+       See list2       # print the second list - contains 5 items
+
+.. index:: 
+       pair: Variables; Weakly Typed
+
+Weakly Typed
+============
+
+Ring is a `weakly typed language <http://en.wikipedia.org/wiki/Strong_and_weak_typing>`_, this means that the language can automatically
+convert between data types (like string & numbers) when that conversion make sense.
+
+Rules:
+
+.. code-block:: ring
+
+       <NUMBER> + <STRING> --> <NUMBER>
+       <STRING> + <NUMBER> --> <STRING>
+
+.. note:: 
+
+       The same operator '+' can be used as an arithmetic operator
+       or for string concatenation.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10                  # x is a number
+       y = "20"                # y is a string
+       sum = x + y             # sum is a number (y will be converted to a number)
+       Msg = "Sum = " + sum    # Msg is a string (sum will be converted to a string)
+       see Msg + nl
+
+
diff --git a/docs/en/target/videomusicplayer.jpg b/docs/en/target/videomusicplayer.jpg
new file mode 100644 (file)
index 0000000..47cf0aa
Binary files /dev/null and b/docs/en/target/videomusicplayer.jpg differ
diff --git a/docs/en/target/visualsrc1.jpg b/docs/en/target/visualsrc1.jpg
new file mode 100644 (file)
index 0000000..33cad2a
Binary files /dev/null and b/docs/en/target/visualsrc1.jpg differ
diff --git a/docs/en/target/visualsrc2.jpg b/docs/en/target/visualsrc2.jpg
new file mode 100644 (file)
index 0000000..26c4484
Binary files /dev/null and b/docs/en/target/visualsrc2.jpg differ
diff --git a/docs/en/target/web.txt b/docs/en/target/web.txt
new file mode 100644 (file)
index 0000000..47b61a8
--- /dev/null
@@ -0,0 +1,2407 @@
+.. index:: 
+       single: Web Development (CGI Library); Introduction
+
+=============================
+Web Development (CGI Library)
+=============================
+
+In this chapter we will learn about developing Web applications using a CGI Library written in the Ring language.
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Configure the Apache web server
+
+Configure the Apache web server
+===============================
+
+We can use Ring with any web server that support CGI. 
+In this section we will learn about using Ring with the Apache HTTP Server.
+
+You can download Apache from : http://httpd.apache.org/
+
+Or you can get it included with other projects like 
+
+XAMPP : https://www.apachefriends.org/download.html
+
+Install then open the file: 
+
+.. code-block:: none
+
+       xampp\apache\conf\httpd.conf
+
+search for 
+
+.. code-block:: none
+
+       <Directory />
+
+Then after it add
+
+.. code-block:: none
+       
+       Options FollowSymLinks +ExecCGI
+
+So we have
+
+.. code-block:: none
+
+       <Directory />
+       Options FollowSymLinks +ExecCGI
+
+Search for the next line and be sure that it's not commented
+
+.. code-block:: none
+
+       LoadModule cgi_module modules/mod_cgi.so
+
+Search for : AddHandler cgi-script
+
+Then add ".ring" to the supported cgi extensions 
+
+Example
+
+.. code-block:: none
+
+       AddHandler cgi-script .cgi .ring
+
+Example
+
+.. code-block:: none
+
+       AddHandler cgi-script .cgi .pl .asp .ring
+
+Run/Start the server 
+
+Create your web applications in a directory supported by the web server.
+
+Example: 
+
+.. code-block:: none
+
+       Apache2.2\htdocs\mywebapplicationfolder
+
+Example: 
+
+.. code-block:: none
+
+       xampp\htdocs\mywebapplicationfolder
+
+Inside the source code file (*.ring), Add this line
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+.. note:: Change the previous line based on the path to ring.exe in your machine
+
+.. index:: 
+       pair: Web Development (CGI Library); Ring CGI Hello World Program
+
+Ring CGI Hello World Program
+============================
+
+The next program is the Hello World program 
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       See "content-type: text/html" +nl+nl+
+           "Hello World!" + nl
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Hello World Program using the Web Library 
+
+Hello World Program using the Web Library 
+=========================================
+
+We can use the web library to write CGI Web applications quickly
+
+Example (1) :
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       Load "weblib.ring"
+
+       Import System.Web
+
+       New Page 
+       {
+               Text("Hello World!")
+       }
+
+
+Example (2) :
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       Load "weblib.ring"
+
+       Import System.Web
+
+       WebPage() 
+       {
+               Text("Hello World!")
+       }
+
+.. tip:: the difference between ex. 1 and ex. 2 is using WebPage() function to
+        return the page object instead of creating the object using new statement.
+
+.. index:: 
+       pair: Web Development (CGI Library); Web Library Features
+
+Web Library Features
+====================
+
+The next features are provided by the Web library to quickly create web applications.
+
+* Generate HTML pages using functions
+* Generate HTML pages using objects
+* HTTP Get
+* HTTP Post
+* Files Upload
+* URL Encode
+* Templates
+* CRUD MVC Sample
+* Users Logic & Registration Sample
+
+.. index:: 
+       pair: Web Development (CGI Library); HTTP Get Example
+
+HTTP Get Example
+================
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page
+       {
+         Title = "Test HTTP Get"
+         divstart([ :style = StyleSizeFull() ] )
+         boxstart()
+               text( "Test HTTP GET" )
+               newline()
+         boxend()  
+         divstart([ :style = Styledivcenter("600px","550px") + 
+                             StyleGradient(21) ])
+         divstart([:style = stylefloatleft() + stylesize("100px","100%") + 
+                            stylecolor("black") + stylegradient(58)])
+         formstart("ex5.ring")
+               tablestart([ :style = stylesize("65%","90%") + 
+                                     stylemarginleft("35%") +
+                                     stylemargintop("30%") ])
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Name : "  )  
+                       cellend() 
+                       cellstart([])
+                         cTextboxStyle = StyleMarginLeft("5%") + 
+                                         StyleWidth("250px") + 
+                                         StyleColor("black") + 
+                                         StyleBackColor("white")
+                         textbox([ :name = "Name", :style = cTextboxStyle ] )   
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Address : " )   
+                       cellend()
+                       cellstart([])
+                         textbox([ :name = "Address", :style = cTextboxStyle] )  
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Phone : " )  
+                       cellend() 
+                       cellstart([])
+                         textbox([ :name = "Phone", :style = cTextboxStyle ]) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Age : "  )    
+                       cellend() 
+                       cellstart([])
+                         textbox([ :name = "Age", :style = cTextboxStyle ]) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "City: " )     
+                       cellend() 
+                       cellstart([])
+                         listbox([ :name = "City", :items = ["Cairo","Riyadh","Jeddah"],
+                                :style = stylemarginleft("5%") + stylewidth("400px") ] )
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Country : " )  
+                       cellend() 
+                       cellstart([])
+                         combobox([ :name = "Country",
+                                :items = ["Egypt","Saudi Arabia","USA"],
+                                :style = stylemarginleft("5%") + 
+                                         stylewidth("400px")+
+                                         stylecolor("black")+
+                                         stylebackcolor("white")+
+                                         stylefontsize("14px") ])
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Note : " )       
+                       cellend() 
+                       cellstart([])
+                         editbox([ :name = "Notes", 
+                               :style = stylemarginleft("5%") + 
+                                        stylesize("400px","100px")+
+                                        stylecolor("black")+
+                                        stylebackcolor("white") , 
+                               :value = "write comments here..." ] ) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                       cellend()
+                       cellstart([])
+                         submit([ :value = "Send" , :Style = stylemarginleft("5%") ])
+                       cellend()
+                 rowend()      
+               tableend()
+         formend()
+         divend()
+         divend()
+         divend()
+       }
+
+Screen Shot:
+
+.. image:: ex4.jpg
+       :alt: HTTP Get
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page
+       {
+        divstart([ :style = styledivcenter("800px","500px") ])
+         boxstart()
+               text ( "HTTP GET Response" )  newline()
+         boxend()
+         divstart([ :style = stylefloatleft()+stylewidth("10%")+
+                             stylecolor("black")+stylegradient(58) ])
+               newline()
+               text ( "Name : "   )
+               newline() newline()
+               text ( "Address : "  )
+               newline() newline()
+               text ( "Phone : "   )
+               newline() newline()
+               text ( "Age : "   )
+               newline() newline()
+               text ( "City : "   )
+               newline() newline()
+               text ( "Country : "   )
+               newline() newline()
+               text ( "Note : "   )
+               newline() newline()
+         divend()
+         divstart([ :style = stylefloatleft()+stylewidth("90%")+
+                             stylecolor("black")+stylegradient(47) ])
+               divstart([ :style = stylefloatleft() + stylewidth("1%") ])
+                 newline()
+               divend()
+               divstart([ :style = stylefloatleft() + stylewidth("95%") ])
+                 newline()
+                 text ( aPageVars["Name"] )
+                 newline() newline()
+                 text ( aPageVars["Address"] )
+                 newline() newline()
+                 text ( aPageVars["Phone"] )
+                 newline() newline()
+                 text (  aPageVars["Age"] )
+                 newline() newline()
+                 text ( aPageVars["City"] )
+                 newline() newline()
+                 text (aPageVars["Country"] )
+                 newline() newline()
+                 text ( aPageVars["Notes"] )
+                 newline() newline()
+               divend()
+         divend()
+        divend()
+       }
+
+Screen Shot:
+
+.. image:: ex5.jpg
+       :alt: HTTP Get
+
+.. index:: 
+       pair: Web Development (CGI Library); HTTP POST Example
+
+HTTP POST Example
+=================
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page 
+       {
+               boxstart()
+                       text( "Post Test")
+                       newline()
+               boxend()
+               divstart([ :style=StyleFloatLeft()+StyleWidth("100px") ])
+                       newline()
+                       text( "Number1 : " )    newline() newline()
+                       text( "Number2 : " )    newline() newline()
+               divend()
+               formpost("ex7.ring")
+                       divstart([ :style = styleFloatLeft()+StyleWidth("200px") ])
+                               newline()
+                               textbox([ :name = "Number1" ])  newline() newline()
+                               textbox([ :name = "Number2" ])  newline() newline()
+                               submit([ :value = "Send" ] )
+                       divend()
+               formend()
+       }               
+
+
+Screen Shot:
+
+.. image:: ex6.jpg
+       :alt: HTTP Post
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page 
+       {
+               boxstart()
+                       text( "Post Result" )
+                       newline()
+               boxend()
+               divstart([ :style = styleFloatLeft()+styleWidth("200px") ])
+                       newline()
+                       text( "Number1 : " + aPageVars["Number1"] )     
+                       newline() newline()
+                       text( "Number2 : " + aPageVars["Number2"] )     
+                       newline() newline()
+                       text( "Sum : " + (0 + aPageVars["Number1"] + aPageVars["Number2"] ) )
+                       newline()
+               divend()                
+       }       
+
+Screen Shot:
+
+.. image:: ex7.jpg
+       :alt: HTTP Post
+
+.. index:: 
+       pair: Web Development (CGI Library); Upload Files
+
+Upload Files
+============
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New page 
+       {
+               boxstart()
+                       text( "Upload File" )
+                       newline()
+               boxend()
+               for x = 1 to 3 newline() next
+               formupload("ex9.ring")          
+                       text( "Customer Name : " )
+                       textbox([ :name = "custname" ])         
+                       newline() newline()             
+                       divstart([ :style = styleFloatLeft() + styleWidth("90px") ])
+                               uploadfile("file")  newline() newline()
+                               uploadfile("file2") newline() newline()
+                               submit([ :value = "Send" ])
+                       divend()                
+               formend()
+       }
+
+Screen Shot:
+
+.. image:: ex8.jpg
+       :alt: Upload File
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       cUploadPath = "C:/Apache2.2/htdocs/ringapp/upload/"
+       cUploadFolder = "/ringapp/upload/"
+
+       New page 
+       {
+               boxstart()
+                       text( "Upload Result" )
+                       newline()
+               boxend()                        
+               newline() 
+               divstart([ :style=  styleFloatLeft() + styleWidth("100px") ])
+                       text( "Name : " + aPageVars["custname"] )
+                       newline()
+               divend()
+               if aPageVars["file"] != char(13)
+                       getuploadedfile(self,"file")
+               ok
+               if aPageVars["file2"] != char(13)
+                       getuploadedfile(self,"file2")
+               ok
+       }       
+
+       Func getuploadedfile oObj,cFile
+               # here we use object.property 
+               # instead of object { } to avoid executing braceend method
+               cFileName = cUploadPath + oObj.getfilename(aPageVars,cFile)
+               write(cFileName,aPageVars[cFile])
+               system("chmod a+x "+cFileName)
+               oObj.newline() 
+               oObj.text( "File "+cFileName+ " Uploaded ..." ) 
+               oObj.newline()
+               imageURL = cUploadFolder + oObj.getfilename(aPageVars,cFile)
+               oObj.link([ :url = imageURL, :title = "Download" ]) 
+               oObj.newline()
+               oObj.image( [ :url = imageURL , :alt = :image  ] )
+               oObj.newline()
+
+Screen Shot:
+
+.. image:: ex9.jpg
+       :alt: Upload File
+
+.. index:: 
+       pair: Web Development (CGI Library); Cookies
+
+Cookies
+=======
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New page 
+       {
+               boxstart()
+                       text( "Cookie Test" )
+                       newline()
+               boxend()
+               newline()
+               link([ :url = "ex11.ring", :title = "Use Cookies" ])    
+               cookie("custname","Mahmoud Fayed")
+               cookie("custage",28)    
+       }
+
+Screen Shot:
+
+.. image:: ex10.jpg
+       :alt: Cookies
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Cookies Values" )
+                       newline()
+               boxend()
+               link([ :url = "ex10.ring", :title = "back" ])                   
+               newline() 
+               divstart([:style="float:left;width:200px"])
+                       text( "Name : " + aPageVars["custname"] )
+                       newline()
+                       text( "Age : " + aPageVars["custage"] )
+                       newline()
+               divend()
+       }       
+
+Screen Shot:
+
+.. image:: ex11.jpg
+       :alt: Cookies
+
+.. index:: 
+       pair: Web Development (CGI Library); URL Encode
+
+URL Encode
+==========
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "URLEncode" )
+                       newline()
+               boxend()
+               link([ :url = "ex5.ring?Name="+URLEncode("-*{Mahmoud}*-")+
+                             "&Address=Egypt&Phone=123456&Age=28&Notes=Programmer", 
+                             :title = "Test URL Encode" ])
+       }
+
+Screen Shot:
+
+.. image:: ex12.jpg
+       :alt: URL Encode
+
+Screen Shot:
+
+.. image:: ex12r.jpg
+       :alt: URL Encode
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Templates
+
+Templates
+=========
+
+Using Templates we can write Ring code inside HTML files
+
+Syntax:
+
+.. code-block:: html
+
+       <%= Ring Expression %>
+       <%  Ring Statements %>
+
+The HTML Code
+
+.. code-block:: html
+
+       <h1>Listing Numbers</h1> 
+       <table>
+         <tr>
+           <th> <%= myheader.cColumn1 %> </th>
+           <th> <%= myheader.cColumn2 %> </th>
+           <th></th>
+           <th></th>
+           <th></th>
+         </tr>
+       <% for x in aNumbers %> 
+         <tr>
+           <td> <%= x.nValue  %> </td>
+           <td> <%= x.nSquare %> </td>
+         </tr>
+       <% next %>
+       </table>
+
+The Ring Code
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New NumbersController { start() }
+
+       Class NumbersController
+
+               MyHeader aNumbers               
+
+               Func Start
+
+                       MyHeader = New Header
+                       {
+                               cColumn1 = "Number" cColumn2 = "Square"
+                       }
+
+                       aNumbers = list(20)
+
+                       for x = 1 to len(aNumbers)
+                               aNumbers[x] = new number
+                               {
+                                       nValue  = x   nSquare = x*x
+                               }
+                       next      
+
+                       cTemp = Template("mynumbers.html",self)
+
+                       New Page 
+                       {                       
+                               boxstart()
+                                       text( "Test Templates" )                        
+                                       newline()
+                               boxend()
+                               html(cTemp)  
+                       } 
+
+       Class Header cColumn1 cColumn2
+       Class Number nValue   nSquare
+
+Screen Shot:
+
+.. image:: ex13.jpg
+       :alt: Templates
+
+.. index:: 
+       pair: Web Development (CGI Library); HTML Special Characters
+
+HTML Special Characters
+=======================
+
+The text() function display HTML special characters.
+
+If you want to write html code, use the html() function.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page
+       {
+               boxstart()
+                       text("HTML Special Characters")
+                       newline()
+               boxend()
+               text('
+                       <html>
+                               <body>
+                                       <p> "hello world" </p>
+                               </body>
+                       </html>
+               ')
+       }
+
+Screen Shot:
+
+.. image:: ex14.jpg
+       :alt: HTML Special Characters
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Hash Functions
+
+Hash Functions
+==============
+
+The Page User Interface
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Hash Test")
+                       newline()
+               boxend()
+               divstart([ :style = StyleFloatLeft() + StyleWidth("100px") ])
+                       newline()
+                       text( "Value : " )      
+                       newline() newline()
+               divend()
+               formpost("ex16.ring")
+                       divstart([ :style = StyleFloatLeft() + StyleWidth("300px") ])
+                               newline()
+                               textbox([ :name = "Value" ])    
+                               newline() newline()
+                               submit([ :value = "Send" ])
+                       divend()
+               formend()
+       }
+
+Screen Shot:
+
+.. image:: ex15.jpg
+       :alt: Hash Functions
+
+The Response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Hash Result" )
+                       newline()
+               boxend()
+               divstart([ :style = styleFloatLeft() + styleWidth("100%") ])
+                       newline()
+                       text( "Value : "  + aPageVars["Value"] )        
+                       newline()
+                       text( "MD5 : "    + MD5(aPageVars["Value"]) )   
+                       newline()
+                       text( "SHA1 : "   + SHA1(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA256 : " + SHA256(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA224 : " + SHA224(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA384 : " + SHA384(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA512 : " + SHA512(aPageVars["Value"]) )
+                       newline()
+               divend()
+       }       
+
+Screen Shot:
+
+.. image:: ex16.jpg
+       :alt: Hash Functions
+
+.. index:: 
+       pair: Web Development (CGI Library); Random Image
+
+Random Image
+============
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       cUploadPath = "C:/Apache2.2/htdocs/ringapp/upload/"
+
+       New Page 
+       {
+               boxstart()
+                       text( "Random Test")
+                       newline()
+               boxend()        
+               divstart([ :style = styleFloatLeft() + styleWidth("400px") ])
+                       newline()
+                       aList = dir(cUploadPath)
+                       if len(aList) > 0
+                               nIndex = random(len(aList)) 
+                               if nindex = 0 nIndex = 1 ok
+                               cItem = "upload/" + aList[nIndex][1]
+                               newline()
+                               image( [ :url = cItem , :alt = :image  ] )
+                       else
+                               text("No images!") newline()
+                       ok
+               divend()
+       }
+
+Screen Shot:
+
+.. image:: ex17.jpg
+       :alt: Random Image
+
+.. index:: 
+       pair: Web Development (CGI Library); HTML Lists
+
+HTML Lists
+==========
+
+The next example print a list contains numbers from 1 to 10
+
+Then print a list from Ring List.
+
+Finally we have a list of buttons and when we press on a button we get a message
+contains the clicked button number.
+
+To start the list we uses the ulstart() function.
+
+To end the list we uses the ulend() function.
+
+We uses listart() and liend() to determine the list item.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page 
+               {        
+                       ulstart([])
+                               for x = 1 to 10
+                                       listart([])
+                                               text(x)
+                                       liend()
+                               next
+                       ulend()  
+                       list2ul(["one","two","three","four","five"])
+                       ulstart([])
+                               for x = 1 to 10
+                                       listart([])
+                                               cFuncName = "btn"+x+"()"
+                                               button([ :onclick = cFuncName , :value = x])
+                                               script(scriptfuncalert(cFuncName,string(x)))
+                                       liend()
+                               next
+                       ulend()
+               }
+
+Screen Shot:
+
+.. image:: ex18.jpg
+       :alt: HTML Lists
+
+.. index:: 
+       pair: Web Development (CGI Library); HTML Tables
+
+HTML Tables
+===========
+
+In this example we will learn how to generate HTML tables using the
+tablestart(), tableend(), rowstart(), rowend() ,headerstart(), headerend(), cellstart()
+and cellend() functions.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page
+               {
+                       divstart([ :style = styledivcenter("400px","500px") ] )
+                               style(styletable() + styletablerows("t01"))
+                               tablestart([ :id = :t01 , :style = stylewidth("100%") ])
+                                       rowstart([]) 
+                                               headerstart([]) text("Number") headerend()
+                                               headerstart([]) text("square") headerend()
+                                       rowend() 
+                                       for x = 1 to 10
+                                               rowstart([])
+                                                       cellstart([]) text(x)   cellend()
+                                                       cellstart([]) text(x*x) cellend()
+                                               rowend()
+                                       next
+                               tableend()
+                       divend()
+               }
+
+Screen Shot:
+
+.. image:: ex19.jpg
+       :alt: HTML Tables
+
+
+.. index:: 
+       pair: Web Development (CGI Library); Gradient
+
+Gradient
+========
+
+In this example we will learn how to use the StyleGradient() function.
+
+The function takes the style number as input (range from 1 to 60).
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page
+               {
+                       boxstart()
+                               text("StyleGradient() Function")
+                       boxend()                         
+                       for x = 1 to 60                         
+                               divstart([ :id = x , :align = "center" , 
+                                          :style = stylefloatleft() +
+                                                   stylesize(string(100/60*6)+"%","50px") +
+                                                   stylegradient(x) ])
+                                       h3(x)
+                               divend()                                         
+                       next
+               }
+
+Screen Shot:
+
+.. image:: ex20.jpg
+       :alt: Gradient
+
+.. index:: 
+       pair: Web Development (CGI Library); Generating Pages using Objects
+
+Generating Pages using Objects
+==============================
+
+Instead of using functions/methods to generate HTML pages, we can use an object
+for each element in the page.
+
+This choice means more beautiful code but slower.
+
+The fastest method is to print HTML code directly, then using functions then using
+templates then using objects (slower).
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+
+         WebPage() 
+         {
+               Title = "Using objects to create the Web Page content"
+               h1 { text("welcome") }
+               link 
+               { 
+                 Title = "Google" 
+                 Link  = "http://www.google.com"
+               }  
+               div 
+               {
+                 id = "div1"
+                 style = stylegradient(30) + stylesize("50%","50%")
+                 text("Outer Div")
+                 div 
+                 {
+                       id = "div2"
+                       color = "white"
+                       backgroundcolor = "green"
+                       width = "50%"
+                       height = "50%"
+                       marginleft = "5%"
+                       margintop = "5%"
+                       text("Inner Div")
+                 }
+               }
+               div
+               {
+                 id = "div3"
+                 color = "black"
+                 backgroundcolor = "silver"
+                 width = "100%"
+                 height = "100%"
+                 text("Form")
+                 form
+                 {
+                       method = "POST"
+                       Action = "helloworld.ring"
+                       Table
+                       { 
+                         style = stylewidth("100%") + stylegradient(24)      
+                         TR 
+                         { 
+                               TD { WIDTH="10%" text("Name : " )  }
+                               TD { Input { type = "text" } }
+                         }
+                         TR
+                         {
+                               TD { WIDTH="10%" text("Email : " ) }
+                               TD { Input { type = "text" } }
+                         }
+                         TR 
+                         {
+                               TD { WIDTH="10%" text("Password : " ) }
+                               TD { Input { type = "password" } }
+                         }
+                         TR
+                         {
+                         
+                               TD { WIDTH="10%" text("Notes") }
+                               TD { TextArea { width="100%" rows = 10  cols = 10  
+                                               text("type text here...") } }
+                         }
+                         TR
+                         {
+                               TD { WIDTH="10%" text("Gender") }
+                               TD { 
+                                 select
+                                  {
+                                        width = "100%"
+                                        option { text("Male") } 
+                                        option { text("Female") } 
+                                  }
+                               }
+                         }
+                         TR
+                         {
+                               TD {   WIDTH="10%" text("Role") }
+                               TD 
+                               {
+                                 select
+                                 { 
+                                        multiple = "multiple"
+                                        width    = "100%"
+                                        option { text("student") } 
+                                        option { text("admin") } 
+                                  }
+                               }
+                         }
+                       }
+                       Input { type = "submit" value = "send" }
+                       Image { src="upload/profile1.jpg" alt="profile"}
+                       Input { type = "checkbox" value = "Old Member"} text("old member")
+                       Input { type = "range" min=1 max=100}
+                       Input { type = "number" min=1 max=100}
+                       Input { type = "radio" color="black" name="one" 
+                               value = "one"} text("one")
+                 }
+               }
+               div
+               {
+                 color = "white"
+                 backgroundcolor = "blue"
+                 width = "100%"      
+                 UL
+                 {
+                       LI { TEXT("ONE") }
+                       LI { TEXT("TWO") }
+                       LI { TEXT("THREE") }
+                 }
+               }
+               div 
+               {
+                 audio
+                 {
+                       src = "horse.ogg"
+                       type = "audio/ogg"
+                 }
+
+                 video
+                 {
+                        width = 320
+                        height = 240
+                        src = "movie.mp4"
+                        type = "video/mp4" 
+                 }
+
+                 Input
+                 {
+                       type = "color"
+                       value = "#ff0000"
+                       onchange = "clickColor(0, -1, -1, 5)"
+                 }
+               }
+         }
+
+Screen Shot:
+
+.. image:: ex21.jpg
+       :alt: Using Objects
+
+.. image:: ex21_2.jpg
+       :alt: Using Objects - part 2
+
+
+.. index:: 
+       pair: Web Development (CGI Library); HtmlPage Class
+
+HtmlPage Class
+==============
+
+Using this class we can create HTML documents without printing the output to the standard output
+
+So instead of using the WebLib in Web Applications only
+
+We can use it in Console/GUI/Mobile Applications too
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+
+       import System.Web
+
+       func main
+
+               mypage = new HtmlPage {
+                       h1 { text("Customers Report") }
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(4)
+                                 TR
+                                 {
+                                       TD { WIDTH="10%" text("Customers Count : " )  }
+                                       TD { text (100) }
+                                 }
+                       }
+       
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(26)
+                                 TR
+                                 {
+                                       style = stylewidth("100%") + stylegradient(24)
+                                       TD { text("Name " )  }
+                                       TD { text("Age" ) }
+                                       TD { text("Country" ) }
+                                       TD { text("Job" ) }     
+                                       TD { text("Company" ) }
+                                 }
+                                 for x =  1 to 100
+                                       TR
+                                       {
+                                               TD { text("Test" )  }
+                                               TD { text("30" ) }
+                                               TD { text("Egypt" ) }
+                                               TD { text("Sales" ) }   
+                                               TD { text("Future" ) }
+                                       }
+                                 next
+                       }
+
+               }
+
+               write("report.html",mypage.output())
+
+.. index:: 
+       pair: Web Development (CGI Library); Using Bootstrap Library using Functions
+
+Using Bootstrap Library using Functions
+=======================================
+
+The next example uses the Bootstrap JavaScript Library when generating the HTML page.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+         new BootstrapPage {
+               divstart([ :class = "container" ])
+                  divstart([ :class = "jumbotron"  ])
+                       h1("Bootstrap Page")
+                 divend() 
+                 divstart([ :class = :row ])  
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "Using a scripting language is very fun!" ])
+                       divend()
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "using a scripting language is very fun!" ])
+                       divend()
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "using a scripting language is very fun!" ])
+                       divend()
+                 divend()   
+               divend()
+         }
+
+
+Screen Shot:
+
+.. image:: ex22.jpg
+       :alt: Bootstrap
+
+.. index:: 
+       pair: Web Development (CGI Library); Using Bootstrap Library using Objects
+
+Using Bootstrap Library using Objects
+=======================================
+
+The next example uses the Bootstrap JavaScript Library when generating the HTML page.
+
+Instead of using functions to generate the HTML elements, we will use objects.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+         BootStrapWebPage()
+         {
+               div
+               {
+                 classname = :container
+                 div
+                 {
+                       classname = :jumbotron
+                       H1 {   text("Bootstrap Page")   }
+                 }
+                 div
+                 {
+                       classname = :row
+                       for x = 1 to 3
+                         div
+                         {
+                               classname = "col-sm-4"
+                               H3 { html("Welcome to the Ring programming language") }
+                               P  { html("Using a scripting language is very fun!") }
+                         }
+                       next 
+                 }
+                 div
+                 {
+                       classname = :row
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button
+                         {            
+                               classname = "btn btn-info btn-lg"
+                               datatoggle= "modal"
+                               datatarget = "#myModal"
+                               text("Open Large Modal")
+                         }          
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button {  classname = "btn btn-default btn-lg" text("default") }
+                         Button {  classname = "btn btn-primary btn-md" text("primary") }
+                         Button {  classname = "btn btn-sucess btn-sm"  text("sucess") }
+                         Button {  classname = "btn btn-info btn-xs"    text("info") }
+                         Button {  classname = "btn btn-warning"        text("warning") }
+                         Button {  classname = "btn btn-danger"         text("danger") }
+                         Button {  classname = "btn btn-link"           text("link") }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button {  classname = "btn btn-default btn-block" text("default") }
+                         Button {  classname = "btn btn-primary btn-block" text("primary") }
+                         Button {  classname = "btn btn-sucess btn-block"  text("sucess") }
+                         Button {  classname = "btn btn-info btn-block"    text("info") }
+                         Button {  classname = "btn btn-warning btn-block" text("warning") }
+                         Button {  classname = "btn btn-danger btn-block"  text("danger") }
+                         Button {  classname = "btn btn-link btn-block"    text("link") }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { classname = "btn-group" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { classname = "btn-group btn-group-lg" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { 
+                               classname = "btn-group-vertical btn-group-lg" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                 }  
+                 div { classname="modal fade" id="myModal" role="dialog"      
+                       div { classname = "modal-dialog modal-lg"
+                         div { classname="modal-content" 
+                               div { classname="modal-header"
+                                 button {  classname="close" datadismiss="modal"
+                                       html("&times")
+                                 }
+                                 h4 {  classname="modal-title"
+                                       text("Modal Header")
+                                 }
+                               }
+                               div { classname = "modal-body" 
+                                 p { text("This is a large model.") }
+                               }
+                               div { classname="modal-footer"
+                                 button { classname = "btn btn-default" datadismiss="modal"
+                                       text("close")
+                                 }
+                               }
+                         }
+                       }
+                 }
+               }  
+         }
+
+Screen Shot:
+
+.. image:: ex23.jpg
+       :alt: Bootstrap Page using Objects
+
+.. index:: 
+       pair: Web Development (CGI Library); CRUD Example using MVC
+
+CRUD Example using MVC
+======================
+
+The next example uses the weblib.ring & datalib.ring.
+
+The datalib.ring contains classes for creating database applications using MVC pattern.
+
+In this example we create an object from the SalaryController class then call the Routing 
+method.
+
+We define the website variable to contains the basic url of the page.
+
+When we create the SalaryModel class from the ModelBase class, the salary table
+will be opened and the columns data will be defined as attributes in the model class.
+
+The SalaryView class create an object from the SalaryLanguageEnglish class to be used
+for translation.
+
+The method AddFuncScript is used to call the form for adding/modifying record data.
+
+The method FormViewContent is used to determine the controls in the form when we add or
+modify a record.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Import System.Web
+
+       website = "ex24.ring"
+
+       New SalaryController { Routing() }
+
+       Class SalaryModel from ModelBase
+
+       Class SalaryController From ControllerBase
+
+       Class SalaryView From ViewBase
+
+         oLanguage = new SalaryLanguageEnglish
+
+         Func AddFuncScript oPage,oController
+               return   oPage.scriptfuncajax("myadd",oController.cMainURL+
+                        oController.cOperation+"=add","mysubpage")
+
+         Func FormViewContent oController,oTranslation,oPage
+               return [
+                               [ oTranslation.aColumnsTitles[2], "textbox", "name",
+                                 oController.oModel.Name, oPage.stylewidth("100%")    ],
+                               [ oTranslation.aColumnsTitles[3], "textbox", "salary",
+                                 oController.oModel.Salary, oPage.stylewidth("50%") ]
+                          ]
+
+       Class SalaryLanguageEnglish
+         cTitle = "Salary Table"
+         cBack = "back"
+         aColumnsTitles = ["ID","Name","Salary"]
+         cOptions = "Options"
+         cSearch = "Search"
+         comboitems = ["Select Option...","Edit","Delete"]
+         cAddRecord = "Add Record"
+         cEditRecord = "Edit Record"
+         cRecordDeleted = "Record Deleted!"
+         aMovePages = ["First","Prev","Next","Last"]
+         cPage = "Page"
+         cOf = "of"
+         cRecordsCount = "Records Count"
+         cSave = "Save"
+         temp = new page
+         cTextAlign = temp.StyleTextRight()
+         cNoRecords = "No records!"
+
+Screen Shot:
+
+.. image:: ex24.jpg
+       :alt: Salary Table
+       
+.. image:: ex24_2.jpg
+       :alt: Salary Table - Search
+
+.. index:: 
+       pair: Web Development (CGI Library); Users registration and Login
+
+Users registration and Login
+============================
+
+We have the users classes (Model, View & Controller) to deal with the users data
+like username & email.
+
+The next code is stored in ex25_users.ring
+
+.. code-block:: ring
+
+       Class UsersModel from ModelBase
+         cSearchColumn = "username"
+
+       Class UsersController From ControllerBase
+         aColumnsNames = ["id","username","email"]
+
+         Func UpdateRecord
+               oModel.id = aPageVars[cRecID]
+               oModel.updatecolumn("username", aPageVars[:username] )
+               oModel.updatecolumn("email", aPageVars[:email] )
+               oView.UpdateView(self)
+
+       Class UsersView from ViewBase
+
+         oLanguage = new UsersLanguageEnglish
+
+         Func AddFuncScript oPage,oController
+               return   oPage.scriptfunc("myadd",oPage.scriptredirection("ex26.ring"))
+
+         Func FormViewContent oController,oTranslation,oPage
+               return [
+                               [oTranslation.aColumnsTitles[2],"textbox","username",
+                               oController.oModel.UserName,oPage.stylewidth("100%")],
+                               [oTranslation.aColumnsTitles[3],"textbox","email",
+                               oController.oModel.Email,oPage.stylewidth("50%")]
+                          ]
+
+       Class UsersLanguageEnglish
+         cTitle = "Users Table"
+         cBack = "back"
+         aColumnsTitles = ["ID","User Name","Email"]
+         cOptions = "Options"
+         cSearch = "Search"
+         comboitems = ["Select Option...","Edit","Delete"]
+         cAddRecord = "Add Record"
+         cEditRecord = "Edit Record"
+         cRecordDeleted = "Record Deleted!"
+         aMovePages = ["First","Prev","Next","Last"]
+         cPage = "Page"
+         cOf = "of"
+         cRecordsCount = "Records Count"
+         cSave = "Save"
+         temp = new page
+         cTextAlign = temp.StyleTextRight()
+         cNoRecords = "No records!"
+
+In the file ex25.ring we load ex25_users.ring then create an object from UsersController class.
+
+Using the created object, we call the routing method.
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+       website = "ex25.ring"
+       New UsersController { Routing() }
+
+Screen Shot:
+
+.. image:: ex25.jpg
+       :alt: Users Table
+       
+See the next code for the registration page
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Import System.Web
+
+       website = "ex26.ring"
+
+       new page {
+         boxstart()
+               text( "Register")
+               newline()
+         boxend()
+         divstart([:style = stylegradient(6) + stylesize("100%","95%") ])
+         link([ :url = website, :title = "back" , :style = stylecolor("white")])   
+         newline()
+         divstart([ :style= styledivcenter("500","160") + stylegradient(52) ])   
+         formpost("ex27.ring")
+               tablestart([ :Style =    stylemarginleft("2%") + stylemargintop("2%") +
+                                        stylewidth("90%") ])
+                 rowstart([])
+                       cellstart([:style = stylewidth("20%") + styleheight(30)])
+                         text("User Name")
+                       cellend()
+                       cellstart([ :style = stylewidth("80%")  ])
+                         textbox([:name = "username", :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :Style = styleheight(30)])
+                         text("Password")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "password" , :type = "password"])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                         text("Email")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "email" , :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                       cellend()
+                       cellstart([ :style = styleheight(30)])
+                         submit([:value = "Register"  ])
+                       cellend()
+                 rowend()
+               tableend()
+         formend()
+         divend()
+         divend()
+       }
+
+Screen Shot:
+
+.. image:: ex26.jpg
+       :alt: Registration Page
+
+
+The Registration response
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       if oUser.findwith("username",aPageVars["username"])
+               new page {
+                       text("The user name is already registered")
+               }
+               return
+       ok
+       if oUser.findwith("email",aPageVars["email"])
+               new page {
+                       text("This email is already registered")
+               }
+               return
+       ok
+
+       aPageVars["salt"] = str2hex(RandBytes(32))
+       aPageVars["pwhash"] = sha256(aPagevars["password"]+aPageVars["salt"])
+       aPageVars["sessionid"] = str2hex(randbytes(32))
+       oUser.Insert()
+       new page {
+               cookie("sessionid",aPageVars["sessionid"])
+               text("New User Created!")
+               newline()
+               text("User Name : " + aPageVars["username"])
+               newline()
+       }
+       oUser.Disconnect()
+
+See the next code for the Login page
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+
+       Import System.Web
+
+       website = "ex28.ring"
+
+       new page {
+         boxstart()
+               text( "Login")
+               newline()
+         boxend()
+         divstart([:style = stylegradient(6) + stylesize("100%","95%") ])
+         link([ :url = website, :title = "back" , :style = stylecolor("white")])   
+         newline()
+         divstart([ :style= styledivcenter("500","130") + stylegradient(52) ])   
+         formpost("ex29.ring")
+               tablestart([ :Style =   stylemarginleft("2%") + stylemargintop("2%") +
+                                       stylewidth("90%") ])
+                 rowstart([])
+                       cellstart([:style = stylewidth("20%") + styleheight(30)])
+                         text("User Name")
+                       cellend()
+                       cellstart([ :style = stylewidth("80%") ])
+                         textbox([:name = "username", :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                         text("Password")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "password" , :type = "password"])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30) ])
+                       cellend()
+                       cellstart([])
+                         submit([:value = "Login"  ])
+                       cellend()
+                 rowend()
+               tableend()
+         formend()
+         divend()
+         divend()
+       }
+
+Screen Shot:
+
+.. image:: ex28.jpg
+       :alt: Login Page
+
+
+The response page
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       lResult = oUser.FindWith("username",aPageVars["username"])
+       new page {
+               if lResult
+                       if sha256(aPagevars["password"]+oUser.Salt) = oUser.pwhash
+                               text ("Correct Password!")
+                               aPageVars["sessionid"] = str2hex(randbytes(32))
+                               oUser.UpdateColumn("sessionid",aPageVars["sessionid"])
+                               cookie("sessionid",aPageVars["sessionid"])
+                       else
+                               text ("Bad password!")
+                       ok
+               else
+                       text("Bad User Name!")
+               ok
+       }
+       oUser.Disconnect()
+
+The next code for checking if the user needs to login or not
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       lResult = oUser.FindWith("sessionid",aPageVars["sessionid"])
+       new page {
+               if lResult
+                       text("User Name : " + oUser.username )
+               else
+                       text("Please Login First!")
+               ok                      
+       }
+       oUser.Disconnect()
+
+.. index:: 
+       pair: Web Development (CGI Library); Database, ModelBase & ControllerBase classes
+
+Database, ModelBase & ControllerBase classes
+============================================
+
+In this section we will see some code from datalib.ring
+
+The next code presents the Database, ModelBase & ControllerBase classes
+
+.. code-block:: ring
+
+       Import System.Web
+
+       Class Database
+
+         cServer = "localhost"
+         cUserName = "root"
+         cPassword = "root"
+         cDatabase = "mahdb"
+
+         Func Connect
+
+               con = mysql_init() 
+               mysql_connect(con, cServer, cUserName, cPassWord,cDatabase)
+
+         Func Disconnect
+
+               mysql_close(con)
+
+         Func Query cQuery
+
+               mysql_query(con,cQuery)
+
+         Func QueryResult
+
+               return mysql_result(con)
+
+         Func QueryResultWithColumns
+               # return columns names + query result
+               return mysql_result2(con)
+
+         Func QueryValue
+               aResult = mysql_result(con)
+               if islist(aResult) and len(aResult) >= 1
+                 aResult = aResult[1]
+                 if len(aResult) >= 1
+                       return aResult[1]
+                 ok
+               ok
+               return 0
+
+         Func EscapeString x
+               if isstring(x)
+                 return MySQL_Escape_String(con,x)
+               else
+                 return MySQL_Escape_String(con,string(x))
+               ok
+
+         Private
+               con = NULL
+
+       Class ModelBase from Database
+
+         cTableName = ""
+         cSearchColumn = "name"
+         aColumns = []
+         aQueryResult = []
+         ID = 0
+
+         # set table name from class name
+         classname = lower(classname(self))
+         if right(classname,5) = :model
+               cTablename = left(classname,len(classname)-5)
+         ok
+
+         Func Insert 
+
+               cValues = ""
+               for x in aColumns
+                 cValues += "'" + EscapeString(aPageVars[x]) + "',"
+               Next
+               cValues = left(cValues,len(cValues)-1)  # remove last comma    
+               cColumns = ""
+               for x in aColumns
+                 cColumns += x + ","
+               next
+               cColumns = left(cColumns,len(cColumns)-1)    
+               query("insert into " + cTableName + "("+cColumns+") values (" + 
+                        cValues + ")" )
+
+         Func Update nID
+
+               cStr = ""
+               for x in aColumns
+                 cStr += x + " = '" + EscapeString(aPageVars[x]) + "' , " 
+               # the space after comma is necessary
+               Next
+               cStr = left(cStr,len(cStr)-2)      
+               query("update " + cTableName + " set " + cStr + " where id = " + nID )
+
+         Func UpdateColumn cColumn,cValue
+               query("update " + cTableName + " set " + cColumn + " = '" + 
+               EscapeString(cValue) + "' where id = " + self.ID )
+
+
+         Func Count cValue
+
+               query("SELECT count(*) FROM " + cTableName +
+                        " where "+cSearchColumn+" like '" + EscapeString(cValue) + "%'")
+               return queryValue()
+
+         Func Read nStart,nRecordsPerPage
+
+               query("SELECT * FROM "+ cTableName+" limit " + EscapeString(nStart) + "," +
+               EscapeString(nRecordsPerPage) )
+               aQueryResult = queryResult()
+
+         Func Search cValue,nStart,nRecordsPerPage
+
+               query("SELECT * FROM "+ cTableName+" where "+cSearchColumn+" like '" +
+               EscapeString(cValue) + "%'" +
+                 " limit " + EscapeString(nStart) + "," + EscapeString(nRecordsPerPage) )
+               aQueryResult = queryResult()
+
+         Func Find nID
+
+               query("select * from " + cTableName + " where id = " + EscapeString(nID) )
+               aResult = queryResult()[1]
+               # move the result from the array to the object attributes
+               ID = nID
+               cCode = ""
+               for x = 2 to len(aResult)
+                 cCode += aColumns[x-1] + " = hex2str('" + str2hex(aResult[x]) + "')" + nl
+               next
+               eval(cCode)
+
+         Func FindWith cColumn,cValue
+
+               query("select * from " + cTableName + " where "+cColumn+" = '" + 
+               EscapeString(cValue) + "'" )
+               aResult = queryResult()
+               if len(aResult) > 0
+                 aResult = aResult[1]
+               else
+                 return 0
+               ok
+               # move the result from the array to the object attributes
+               ID = aResult[1]
+               cCode = ""
+               for x = 2 to len(aResult)
+                 cCode += aColumns[x-1] + " = hex2str('" + str2hex(aResult[x]) + "')" + nl
+               next
+               eval(cCode)
+               return 1
+
+         Func Delete ID
+
+               query("delete from " + cTableName + " where id = " + EscapeString(ID) )
+
+         Func Clear
+
+               cCode = ""
+               for x in aColumns
+                 cCode += x + ' = ""' + nl
+               next
+               eval(cCode)
+
+         Func LoadModel
+
+               # create the columns array
+               query("SELECT * FROM "+ cTableName + " limit 0,1")
+               aQueryResult = QueryResultWithColumns()[1]
+               for x = 2 to len(aQueryResult)
+                 aColumns + lower(trim(aQueryResult[x]))
+               next
+
+               # create attribute for each column
+               for x in aColumns
+                 addattribute(self,x)
+               next
+
+         Func Connect
+
+               Super.Connect()
+               if nLoadModel = 0
+                 nLoadModel = 1
+                 LoadModel()
+               ok
+
+         private
+
+               nLoadModel = 0
+
+
+       Class ControllerBase
+         
+         nRecordsPerPage = 5
+         nRecordsCount = 0
+         nPagesCount = 0
+         nActivePage = 0
+
+         # Dynamic creation of oView = new tablenameView and oModel = new tablename.Model
+         classname = lower(classname(self))
+         if right(classname,10)  = :controller
+               tablename = left(classname,len(classname)-10)
+               cCode = "oView = new " + tablename+"View" + nl
+               cCode += "oModel = new " + tablename+"Model" + nl
+               eval(cCode)
+               oModel.connect()
+         ok
+
+         cSearchName = "searchname"
+         cPart = "part"
+         cPageError = "The page number is not correct"
+         cLast = "last"
+         cOperation = "operation"
+         cRecID = "recid"
+
+         aColumnsNames = ["id"]
+         for t in oModel.aColumns
+               aColumnsNames + t
+         next
+
+         cMainURL = website + "?"
+
+         func Routing
+
+               switch      aPageVars[cOperation]
+               on NULL     showtable()
+               on :add     addrecord()
+               on :save    saverecord()
+               on :delete  deleterecord()
+               on :edit    editrecord()
+               on :update  updaterecord()
+               off
+
+         func ShowTable
+
+               nRecordsCount = oModel.Count( aPageVars[cSearchName] )
+
+               nPagesCount = ceil(nRecordsCount / nRecordsPerPage)
+
+               if aPageVars[cPart] = cLast
+                 aPageVars[cPart] = string(nPagesCount)
+               ok
+
+               nActivePage = number(aPageVars[cPart])
+               if nActivePage = 0 nActivePage = 1 ok    
+
+               if ( nActivePage > nPagesCount ) and nRecordsCount > 0
+                 ErrorMsg(cPageError)
+                 return
+               ok
+
+               nStart = (nActivePage-1)*nRecordsPerPage
+
+               if aPageVars[cSearchName] = NULL
+                 oModel.Read( nStart,nRecordsPerPage )
+               else
+                 oModel.Search( aPageVars[cSearchName],nStart,nRecordsPerPage )
+               ok
+
+               oView.GridView(self)
+
+         func AddRecord
+
+               oModel.clear()
+               oView.FormViewAdd(Self,:save,false) # false mean don't include record id
+
+         func SaveRecord
+
+               oModel.Insert()
+               oView.SaveView(self)
+
+         func EditRecord
+
+               oModel.Find( aPageVars[cRecID] )
+               oView.FormViewEdit(Self,:update,true) # true mean include record id
+
+         func UpdateRecord
+
+               oModel.update( aPageVars[cRecID] )
+               oView.UpdateView(self)
+
+         func DeleteRecord
+
+               oModel.Delete( aPageVars[cRecID] )
+               oView.DeleteView()
+
+         func braceend
+
+               oModel.Disconnect()
+
+.. index:: 
+       pair: Web Development (CGI Library); WebLib API
+
+WebLib API
+==========
+
+In this section we will see the web library functions, classes and methods.
+
+=====================  =============   =====================================================================
+Function               Parameters      Description
+=====================  =============   =====================================================================
+LoadVars               None            Save the request parameters and cookies to aPageVars List
+WebPage                        None            Create new object from the WebPage Class
+BootStrapWebPage       None            Create new object from the BootStrapWebPage Class
+HTMLSpecialChars       cString         Encode Special characters to HTML equivalent
+Template               cFile,oObject   Execute Ring Code in cFile after accessing oObject using {}
+Alert                  cMessage        Generate HTML Web Page that display cMessage using JavaScript Alert()
+HTML2PDF               cString         Generate and Display PDF File from HTML String (cString)
+=====================  =============   =====================================================================
+
+The Package System.Web contains the next classes
+
+=====================  ========================================================        
+       Class Name      Description
+=====================  ========================================================        
+Application            Contains methods for Encoding, Decoding, Cookies & More.
+Page                   Contains methods to generate HTML pages.
+ScriptFunctions                Contains methods to generate some JavaScript Functions.
+StyleFunctions         Contains methods to generate CSS.
+PageBuffer             Generate HTML Page in memory (don't print the output).
+HTML2PDF               Generate PDF File from HTML code.
+BootStrapPage          Using BootStrap Library.
+WebPage                        Generate page using objects for each element.
+HtmlPage               Like WebPage but doesn't print the output to stdout.
+BootStrapWebPage       Generate page using objects, using BootStrap Library.
+ObjsBase               Parent Class for page objects.
+NewObjectsFunctions    Methods to create new objects in the page or element.
+H1                     Wraps HTML H1.
+H2                     Wraps HTML H2.
+H3                     Wraps HTML H3.
+H4                     Wraps HTML H4.  
+H5                     Wraps HTML H5.
+H6                     Wraps HTML H6.  
+P                      Wraps HTML P.
+Link                   Wraps HTML link.
+NewLine                        Wraps HTML NewLine.
+Div                    Wraps HTML Div.
+Form                   Wraps HTML Form.
+Input                  Wraps HTML Input.       
+TextArea               Wraps HTML TextArea.
+Select                 Wraps HTML Select.
+Option                 Wraps HTML Option.
+Image                  Wraps HTML Image.
+UL                     Wraps HTML UL.
+LI                     Wraps HTML LI.
+Table                  Wraps HTML Table.
+TR                     Wraps HTML TR.
+TD                     Wraps HTML TD.
+TH                     Wraps HTML TH.
+Audio                  Wraps HTML Audio.
+Video                  Wraps HTML Video.
+Nav                    Wraps HTML Nav.
+Span                   Wraps HTML Span.
+Button                 Wraps HTML Button.
+=====================  ========================================================        
+
+.. index:: 
+       pair: Web Development (CGI Library); Application Class
+
+Application Class
+=================
+
+=====================  ======================================= =====================================================================
+Method                 Parameters                              Description
+=====================  ======================================= =====================================================================
+DecodeString           cString                                 Decode request parameters
+Decode                 cString                                 Decode multipart/form-data
+GetFileName            aArray,cVar                             Get File Name in aArray using cVar 
+SetCookie              name,value,expires,path,domain,secure   Set Cookie 
+Cookie                         name,value                              Set Cookie using name and value only
+GetCookies             None                                    Get Cookies
+URLEncode              cString                                 URL Encode 
+ScriptLibs             None                                    Add JavaScript Libraries like BootStrap
+Print                  None                                    Print Page Content
+Style                  cStyle                                  Add cStyle to page CSS content
+StartHTML              None                                    Add HTTP Header to page content         
+=====================  ======================================= =====================================================================
+
+The method DecodeString is used to get HTTP request parameters.
+
+The methods Decode and GetFileName are used for uploading files.
+
+The methods SetCookie, Cookie & GetCookies are used for adding and reading cookies.
+
+The methods StartHTML, ScriptsLibs, Style & Print are used for page structure and JS/CSS support.
+
+The method URLEncode is used to encode a URL to be used in HTML pages.
+
+.. index:: 
+       pair: Web Development (CGI Library); Page Class
+
+Page Class
+==========
+
+=====================  ======================================= =====================================================================
+Method                 Parameters                              Description
+=====================  ======================================= =====================================================================
+text                   x                                       add HTMLSpecialChars(x) to page content (accept strings and numbers)
+html                   cString                                 add html code to page content
+h1                     x                                       add x to page content between <h1> and </h1>
+h2                     x                                       add x to page content between <h2> and </h2>
+h3                     x                                       add x to page content between <h3> and </h3>
+h4                     x                                       add x to page content between <h4> and </h4>
+h5                     x                                       add x to page content between <h5> and </h5>
+h6                     x                                       add x to page content between <h6> and </h6>
+p                      aPara                                   HTML <p> </p>, uses aPara List as Hash to get attributes
+NewLine                        None                                    add <br /> to page content
+AddAttributes          aPara                                   Convert aPara list as hash to HTML element attributes
+Link                   aPara                                   HTML <a href> and </a>, uses aPara List as Hash to get attributes
+Image                  aPara                                   HTML <img>, uses aPara List as Hash to get attributes
+Button                 aPara                                   HTML <input type="button">, uses aPara List as Hash to get attributes
+ButtonLink             aPara                                   HTML <input type="button">, uses link attribute to navigate to link 
+Textbox                        aPara                                   HTML <input type="text">, uses aPara List as Hash to get attributes
+Editbox                        aPara                                   HTML <textarea> and </textarea>, uses aPara to get attributes
+Combobox               aPara                                   HTML <select>, uses items attribute as list for <option>
+Listbox                        aPara                                   HTML <select multiple='multiple'>, uses items attribute for <option>
+ulstart                        aPara                                   HTML <ul>
+ulend                  aPara                                   HTML </ul>
+listart                        aPara                                   HTML <li>
+liend                  aPara                                   HTML </li>
+List2UL                aList                                   Generate HTML <ul> including items from Ring List items
+DivStart               aPara                                   HTML <div>, uses aPara List as Hash to get attributes
+NavStart               aPara                                   HTML <nav>, uses aPara List as Hash to get attributes
+SpanStart              aPara                                   HTML <span>, uses aPara List as Hash to get attributes
+BoxStart               None                                    Generate Div with black background to be used as page header
+DivEnd                 None                                    HTML </div>
+NavEnd                 None                                    HTML </nav>
+SpanEnd                        None                                    HTML </span>
+BoxEnd                 None                                    HTML </div>, the same as divend()
+FormStart              cAction                                 HTML <form>, with cAction as the action attribute or an empty value
+FormPost               cAction                                 HTML <form method="post"> , with cAction as the action attribute
+FormEnd                        None                                    HTML </form>
+Submit                 aPara                                   HTML <input type="submit">
+Hidden                         cName,cValue                            HTML <input type="hidden">
+FormUpload             x                                       HTML Form, method="post" enctype="multipart/form-data" and x = action                           
+UploadFile             x                                       HTML <input type="file"> and name = x
+Video                  aPara                                   HTML <video>
+Audio                  aPara                                   HTML <audio>
+GetColor               aPara                                   Select Color
+Radio                  aPara                                   HTML <input type="radio">
+Checkbox               aPara                                   HTML <input type="checkbox">
+Spinner                        aPara                                   HTML <input type="number">
+Slider                         aPara                                   HTML <input type="range">
+TableStart             aPara                                   HTML <table>
+TableEnd               None                                    HTML </table>
+RowStart               aPara                                   HTML <tr>
+RowEnd                 None                                    HTML </tr>
+CellStart              aPara                                   HTML <td>
+CellEnd                        None                                    HTML </td>
+HeaderStart            aPara                                   HTML <th>
+HeaderEnd              None                                    HTML </th>
+=====================  ======================================= =====================================================================
+
+aPara in the page methods is a list contains attributes and values.
+Using aPara we can set values for the next attributes
+
+.. code-block:: ring 
+
+       classname id name align style dir value onclick oncontextmenu ondblclick
+       onmousedown onmouseenter onmouseleave onmousemove onmouseover onmouseout
+       onmouseup onkeydown onkeypress onkeyup onabort onbeforeunload onerror
+       onhashchange onload onpageshow onpagehide onresize onscroll onunload
+       onblur onchange onfocus onfocusin onfocusout oninput oninvalid onreset
+       onsearch onselect onsubmit ondrag ondragend ondragenter ondragleave
+       ondragover ondragstart ondrop oncopy oncut onpaste onafterprint 
+       onbeforeprint oncanplay oncanplaythrough ondurationchange onemptied
+       onended onloadeddata onloadedmetadata onloadstart onpause onplay
+       onplaying onprogress onratechange onseeked onseeking onstalled onsuspend
+       ontimeupdate onvolumechange onwaiting animationend animationiteration
+       animationstart transitionend onmessage onopen onmousewheel ononline
+       onoffline onpostate onshow onstorage ontoggle onwheel ontouchcancel
+       ontouchend ontouchmove ontouchstart color opacity background backgroundattachment
+       backgroundcolor backgroundimage backgroundposition backgroundrepeat backgroundclip
+       backgroundorigin backgroundsize border borderbottom borderbottomcolor 
+       borderbottomleftradius borderbottomrightradius borderbottomstyle borderbottomwidth 
+       bordercolor borderimage borderimageoutset borderimagerepeat borderimageslice 
+       borderimagesource borderimagewidth borderleft borderleftcolor borderleftstyle
+       borderleftwidth borderradius borderright  borderrightcolor borderrightstyle
+       borderrightwidth borderstyle bordertop bordertopcolor bordertopleftradius
+       bordertoprightradius bordertopstyle bordertopwidth borderwidth boxdecorationbreak
+       boxshadow bottom clear clip display float height left margin marginbottom marginleft
+       marginright margintop maxheight maxwidth minheight minwidth overflow overflowx
+       overflowy padding paddingbottom paddingleft paddingright paddingtop position
+       right top visibility width verticalalign zindex aligncontent alignitems alignself
+       flex flexbasis flexdirection flexflow flexgrow flexshrink flexwrap justifycontent
+       order hangingpunctuation hyphens letterspacing linebreak lineheight overflowwrap
+       tabsize textalign textalignlast textcombineupright textindent textjustify
+       texttransform whitespace wordbreak wordspacing wordwrap textdecoration 
+       textdecorationcolor textdecorationline textdecorationstyle textshadow 
+       textunderlineposition @fontface @fontfeaturevalues font fontfamily fontfeaturesettings
+       fontkerning fontlanguageoverride fontsize fontsizeadjust fontstretch fontstyle
+       fontsynthesis fontvariant fontvariantalternates fontvariantcaps fontvarianteastasian
+       fontvariantligatures fontvariantnumeric fontvariantposition fontweight direction
+       textorientation unicodebidi writingmode bordercollapse borderspacing captionside
+       emptycells tablelayout counterincrement counterreset liststyle liststyleimage
+       liststyleposition liststyletype @keyframes animation animationdelay animationdirection
+       animationduration animationfillmode animationiterationcount animationname
+       animationplaystate animationtimingfunction backfacevisibility perspective
+       perspectiveorigin transform transformorigin transformstyle transition
+       transitionproperty transitionduration transitiontimingfunction transitiondelay
+       boxsizing content cursor imemode navdown navindex navleft navright navup
+       outline outlinecolor outlineoffset outlinestyle outlinewidth resize textoverflow
+       breakafter breakbefore breakinside columncount columnfill columngap columnrule
+       columnrulecolor columnrulestyle columnrulewidth columnspan columnwidth columns
+       widows orphans pagebreakafter pagebreakbefore pagebreakinside marks quotes
+       filter imageorientation imagerendering imageresolution objectfit objectposition
+       mask masktype mark markafter markbefore phonemes rest restafter restbefore
+       voicebalance voiceduration voicepitch voicepitchrange voicerate voicestress
+       voicevolume marqueedirection marqueeplaycount marqueespeed marqueestyle datatoggle
+       dataride datatarget dataslideto dataslide datadismiss dataplacement datacontent
+       datatrigger dataspy dataoffset dataoffsettop
+
+.. index:: 
+       pair: Web Development (CGI Library); ScriptFunctions Class
+
+ScriptFunctions Class
+=====================
+
+This class contains methods for adding JavaScript code to the generated web page.
+
+The class methods are merged to the Page class, so we can use the next methods with
+page objects directly.
+
+==================     ==============================================          ============================================================
+Method                 Parameters                                              Description
+==================     ==============================================          ============================================================
+Script                 cCode                                                   Add cCode string between <script> and </script>
+ScriptRedirection      cURL                                                    set window.location to cURL
+ScriptFunc             cFuncName,cCode                                         Define function cFuncName that contains cCode
+ScriptFuncAlert                cFuncName,cMsg                                          Define function cFuncName that uses alert() to print cMsg
+ScriptFuncAjax         cFuncName,cLink,cDiv                                    Define function cFuncName that load cLink in cDiv
+ScriptFuncClean                cFuncName,cDiv                                          Define function cFuncName that clear the cDiv
+ScriptFuncSelect       cF,aL,cD,cR,cGR,cFC,nTO,cL1,cL2                         Used to Edit/Delete Grid Record
+ScriptScrollFixed      cDiv,nSize                                              Set cDiv as Fixed Div with Size = nSize
+==================     ==============================================          ============================================================
+
+.. index:: 
+       pair: Web Development (CGI Library); StyleFunctions Class
+
+StyleFunctions Class
+====================
+
+This class contains methods for adding CSS to the generated web page.
+
+Like ScriptFunctions Class, The StyleFunctions class methods are merged to the 
+Page class, so we can use the next methods with page objects directly.
+
+=====================  ====================    =====================================================
+Method                 Parameters              Description
+=====================  ====================    =====================================================
+StyleFloatLeft         None                    Return float: left ; 
+StyleFloatRight                None                    Return float: right ; 
+StyleSizeFull          None                    Return width: 100% ; height: 100% ;
+Stylecolor             x                       Return " color: " + x + " ; "
+Stylebackcolor         x                       Return " background-color: " + x + " ;"
+StyleTextCenter                None                    Return "text-align: center ;"
+StyleTextRight         None                    Return "text-align: right ;"
+StyleTextLeft          None                    Return "text-align: left ;"
+StyleSize              x,y                     Return " width: " + x + " ; height: " + y + " ;"
+StyleWidth             x                       Return " width: " + x + " ;"
+StyleHeight            x                       Return " height: " + x + " ;"
+StyleTop               x                       Return " top: " + x + " ;"
+StyleLeft              x                       Return " Left: " + x + " ;"
+StylePos               x,y                     Return " top: " + x + " ;" + " Left: " + y + " ;"
+StyleHorizontalCenter  None                    Return " margin-right:auto ; margin-left:auto; "
+StyleMarginTop         x                       Return " margin-top: " + x + " ;"
+StyleMarginRight       x                       Return " margin-right: " + x + " ;"
+StyleMarginLeft                x                       Return " margin-left: " + x + " ;"
+StyleDivCenter         nWidth,nHeight          Create Div in the center of the page
+StyleAbsolute          None                    Return " position:absolute ;"
+StyleFixed             None                    Return " position:fixed ;"
+StyleZIndex            x                       Return " z-index: " + x + " ;"
+StyleFontSize          x                       Return  " font-size: " + x + " ;"
+StyleGradient          x                       Generate Gradient (x values from 1 to 60)
+StyleTable             None                    Set table properties
+StyleTableRows         id                      Set different color to even and odd rows in the table
+StyleTableNoBorder     None                    Return " border-style: none;"
+=====================  ====================    =====================================================
+
+
+.. index:: 
+       pair: Web Development (CGI Library); WebPage Class
+
+WebPage Class
+=============
+
+We use braces to access the active WebPage object attributes 
+
+Each one of these attribute will return a new object to access again using braces.
+
+=====================  ========================================================        
+       Attribute       Description
+=====================  ========================================================        
+H1                     Wraps HTML H1.
+H2                     Wraps HTML H2.
+H3                     Wraps HTML H3.
+H4                     Wraps HTML H4.  
+H5                     Wraps HTML H5.
+H6                     Wraps HTML H6.  
+P                      Wraps HTML P.
+Link                   Wraps HTML link.
+NewLine                        Wraps HTML NewLine.
+Div                    Wraps HTML Div.
+Form                   Wraps HTML Form.
+Input                  Wraps HTML Input.       
+TextArea               Wraps HTML TextArea.
+Select                 Wraps HTML Select.
+Option                 Wraps HTML Option.
+Image                  Wraps HTML Image.
+UL                     Wraps HTML UL.
+LI                     Wraps HTML LI.
+Table                  Wraps HTML Table.
+TR                     Wraps HTML TR.
+TD                     Wraps HTML TD.
+TH                     Wraps HTML TH.
+Audio                  Wraps HTML Audio.
+Video                  Wraps HTML Video.
+Nav                    Wraps HTML Nav.
+Span                   Wraps HTML Span.
+Button                 Wraps HTML Button.
+=====================  ========================================================
+
+.. index:: 
+       pair: Web Development (CGI Library); HtmlPage Class
+
+HtmlPage Class
+==============
+
+The same as the WebPage class with the next changes
+
+(1) No output to the stdout 
+(2) Provide the Output Method to get the output
+
+Syntax:
+
+.. code-block:: ring
+
+       output() ---> The output as string
+
diff --git a/docs/en/target/weighthistory_app.png b/docs/en/target/weighthistory_app.png
new file mode 100644 (file)
index 0000000..f705925
Binary files /dev/null and b/docs/en/target/weighthistory_app.png differ
diff --git a/docs/en/target/whatisnew.txt b/docs/en/target/whatisnew.txt
new file mode 100644 (file)
index 0000000..0b90c96
--- /dev/null
@@ -0,0 +1,601 @@
+.. index:: 
+       single: What is new in Ring 1.1?; Introduction
+
+========================
+What is new in Ring 1.1?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.1 release.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.1  comes with many new features 
+
+* Better Natural Language Programming Support
+* Generate/Execute Ring Object Files (*.ringo)
+* Syntax Flexibility and different styles for I/O and Control Structures
+* New Functions and Changes
+* StdLib functions and classes written in Ring
+* RingLibSDL 
+* Demo Project - Game Engine for 2D Games
+* RingSQLite
+* Better Code Generator for Extensions 
+* Using Self.Attribute in the Class Region to define new attributes
+* Using This.Attribute in nested Braces inside the Class Methods
+* Better Documentation
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Better Natural Language Programming Support
+
+Better Natural Language Programming Support
+===========================================
+
+Ring is an innovative language because of it's compact syntax, smart implementation (small, transparent & visual)
+and it's ability to create declarative and natural domain specific languages in a fraction of time.
+
+This release add support for calling methods when an expression is evaluated
+
+check this example:
+
+.. code-block:: ring
+
+       # Natural Code
+       new program {
+               Accept 2 numbers then print the sum
+       }
+
+       # Natural Code Implementation
+       class program
+               # Keywords
+                       Accept=0 numbers=0 then=0 print=0 the=0 sum=0
+
+               # Execution
+               func braceexpreval x
+                       value = x
+               func getnumbers
+                       for x=1 to value
+                               see "Enter Number ("+x+") :" give nNumber
+                               aNumbers + nNumber
+                       next
+               func getsum
+                       nSUm = 0
+                       for x in aNumbers nSum+= x next
+                       see "The Sum : " + nSum
+               private
+                       value=0 aNumbers=[]
+               
+Output: 
+
+.. code-block:: ring
+
+       Enter Number (1) :3
+       Enter Number (2) :4
+       The Sum : 7
+
+for more information see the "Natural Language Programming" chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Generate/Execute Ring Object Files (*.ringo)
+
+Generate/Execute Ring Object Files (*.ringo)
+============================================
+
+This feature enable you to distribute your applications without distributing
+the source code. Also it makes application distribution a simple process where
+you get one Ring object file for the complete project (many source code files).
+Also using Ring object file remove the loading time required for compiling the application.
+
+Check the "command line options" chapter to know more about this feature.
+
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Syntax Flexibility
+
+Syntax Flexibility and different styles for I/O and Control Structures
+======================================================================
+
+Programmers are sensitive to the programming language syntax. Great programmers know how to work
+using many different styles but each programmer may have his/her favorite style.
+
+Each programming language comes with a style that you may like or not. Ring is just one of these
+languages, but as a response to many programmers asking for a better syntax we decided to provide
+more options.
+
+Also some of these features are very necessary for Natural Language Programming.
+
+Example : 
+
+We have two commands to change language keywords and operators.
+
+.. code-block:: ring
+
+       ChangeRingOperator + plus 
+       ChangeRingKeyword see print
+
+       Print 5 plus 5  
+
+       ChangeRingOperator plus +
+       ChangeRingKeyword print see
+
+We have new styles (Optional) for Input/Output.
+
+Example :
+
+.. code-block:: ring
+
+       Put "What is your name? "
+       Get cName
+       Put "Hello " + cName
+
+Example : 
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Print("What is your name? ")    # print message on screen
+       cName=GetString()               # get input from the user
+       print("Hello #{cName}")         # say hello!
+
+We have new styles (optional) for control structures.
+
+Example :
+
+.. code-block:: ring
+
+       While True
+
+               Put " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Get nOption
+
+               Switch nOption
+               Case 1 
+                       Put "Enter your name : " 
+                       Get name 
+                       Put "Hello " + name + nl
+               Case 2 
+                       Put "Sample : using while loop" + nl
+               Case 3 
+                       Bye
+               Else 
+                       Put "bad option..." + nl
+               End
+       End
+
+Example :
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       While True {
+
+               print(" 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                         ")
+
+               nOption = GetString()
+
+               switch nOption {
+               case 1 
+                       print("Enter your name : ")
+                       name = getstring()
+                       print("Hello #{name}\n")
+               case 2 
+                       print("Sample : using switch statement\n")
+               case 3 
+                       Bye
+               else 
+                       print("bad option...\n")
+               }
+
+       }
+
+Check the next chapters:-
+
+* Getting Started - Second Style
+* Getting Started - Third Style
+* Control Structures - Second Style - May looks like Lua and Ruby
+* Control Structures - Third Style - May looks like C (uses braces)
+* Syntax Flexibility
+
+.. note:: All of these styles are provided automatically by the compiler at the same time, It's better to select one style for the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; New Functions and Changes
+New Functions and Changes
+=========================
+
+Changed:
+
+* get() function : changed to sysget()
+* sort() function : can now work on list of objects
+* find() function : can now work on list of objects
+
+Added:
+
+* clockspersecond()
+* CurrentDir()
+* ExeFileName()
+* ChDir()
+* ExeFolder()
+* varptr()
+* space()
+* nullpointer()
+* object2pointer()
+* pointer2object()
+
+Check the next chapters 
+
+* System Functions
+* Object Oriented Programming (OOP) 
+* Low Level Functions
+
+.. index:: 
+       pair: What is new in Ring 1.1?; StdLib functions and classes written in Ring
+
+StdLib functions and classes written in Ring
+============================================
+
+Ring 1.1 comes with a library called StdLib, it's written in Ring by the help of Ring Team
+
+The library provide a useful group of new functions and classes
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Times()")
+       Times ( 3 , func { see "Hello, World!" + nl } )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Map()")
+       See Map( 1:10, func x { return x*x } )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Filter()")
+       See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       See "Testing the String Class" + nl
+       oString = new string("Hello, World!")
+       oString.println()
+       oString.upper().println()
+       oString.lower().println()
+       oString.left(5).println()
+       oString.right(6).println()
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oList = new list ( [1,2,3] )
+       oList.Add(4)
+       oList.print()
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oStack = new Stack
+       oStack.push(1)
+       oStack.push(2)
+       oStack.push(3)
+       see oStack.pop() + nl
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oQueue = new Queue
+       oQueue.add(1)
+       oQueue.add(2)
+       oQueue.add(3)
+       see oQueue.remove() + nl
+
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ohashtable = new hashtable
+       See "Test the hashtable Class Methods" + nl
+       ohashtable { 
+               Add("Egypt","Cairo")
+               Add("KSA","Riyadh")
+               see self["Egypt"] + nl
+               see self["KSA"] + nl
+               see contains("Egypt") + nl
+               see contains("USA") + nl
+               see index("KSA")  + NL
+               print()
+               delete(index("KSA"))
+               see copy("*",60) + nl
+               print()
+       }
+
+Example:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       otree = new tree
+       See "Test the tree Class Methods" + nl
+       otree {
+               set("The first step")   # set the root node value
+               see value() + nl
+               Add("one")
+               Add("two")
+               Add("three") {
+                       Add("3.1")
+                       Add("3.2")
+                       Add("3.3")
+                       see children
+               }
+               see children
+               oTree.children[2] {
+                       Add("2.1") Add("2.2") Add("2.3") {
+                               Add("2.3.1") Add("2.3.2") Add("test")
+                       }
+               }
+               oTree.children[2].children[3].children[3].set("2.3.3")
+       }
+       see copy("*",60) + nl
+       oTree.print()
+
+Check the next chapters:
+
+* StdLib Functions
+* StdLib Classes
+
+.. index:: 
+       pair: What is new in Ring 1.1?; RingLibSDL 
+
+RingLibSDL 
+==========
+
+Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library
+
+Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL
+
+Example:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       SDL_Delay(2000)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+
+See the RingLibSDL Chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Game Engine for 2D Games
+
+Demo Project - Game Engine for 2D Games
+=======================================
+
+In practice we would create a game engine in a language like C/C++ to get the best performance 
+then provide Ring classes to use the engine.
+
+But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases
+
+Also this would be a good demo project to learn about the language concepts where we build things
+using Object Oriented Programming (OOP) then access the power that we have using declarative programming
+using nested structures or using natural programming.
+
+In this project we selected the first way (declarative programming using nested structures)
+
+Example:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # Give Control to the Game Engine
+
+       func main               # Called by the Game Engine
+
+               oGame = New Game        # Create the Game Object
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # Color = black 
+                       }
+                       text {
+                               x = 10  y=150
+                               # Animation Part ======================================
+                               animate = true                          # Use Animation
+                               direction = GE_DIRECTION_INCVERTICAL    # Increase y
+                               point = 400             # Continue until y=400
+                               nStep = 3               # Each time y+= 3
+                               #======================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)    # Color = Blue  
+                       }
+                       Sound {                                 # Play Sound
+                               file = "sound/music1.wav"       # Sound File Name
+                       }               
+               }                                       # Start the Events Loop 
+
+See the "Demo Project - Game Engine for 2D Games" chapter.
+
+
+.. index:: 
+       pair: What is new in Ring 1.1?; RingSQLite
+
+RingSQLite
+==========
+
+Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL.
+
+Now Ring 1.1 provide native support for SQLite database too.
+
+Example:
+
+.. code-block:: ring
+
+       oSQLite = sqlite_init()
+
+       sqlite_open(oSQLite,"mytest.db") 
+
+       sql = "CREATE TABLE COMPANY("  +
+                "ID INT PRIMARY KEY     NOT NULL," +
+                "NAME           TEXT    NOT NULL," +
+                "AGE            INT     NOT NULL," +
+                "ADDRESS        CHAR(50)," +
+                "SALARY         REAL );"
+
+       sqlite_execute(oSQLite,sql) 
+
+       sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+       sqlite_execute(oSQLite,sql)
+
+       aResult =  sqlite_execute(oSQLite,"select * from COMPANY") 
+       for x in aResult
+               for t in x
+                       see t[2] + nl
+               next
+       next
+       see copy("*",50)  + nl
+       for x in aResult
+               see x["name"] + nl
+       next
+       sqlite_close(oSQLite) 
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Better Code Generator for Extensions 
+
+
+Better Code Generator for Extensions 
+====================================
+
+We are using the code generator (written in Ring) every day to add new libraries to Ring.
+
+The generator is used to create RingQt and RingAllegro 
+
+Also in Ring 1.1 it's used to create RingLibSDL.
+
+more features are added like 
+
+* Set/Get structure members (numbers & pointers)
+* Using constants 
+* Better Generated Code
+
+See the Code Generator chapter.
+
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Using Self.Attribute in the Class Region to define new attributes
+
+
+Using Self.Attribute in the Class Region to define new attributes
+=================================================================
+
+We can use Self.Attribute in the Class Region (after the class name and before any methods)
+to define new attributes.
+
+
+.. code-block:: ring
+
+       class Person
+               name            # Define name as attribute if it's not a global variable
+               address
+               phone
+
+       class person2
+               self.name       # Must Define the attribute
+               self.address
+               self.phone
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Using This.Attribute in nested Braces inside the Class Methods
+
+
+Using This.Attribute in nested Braces inside the Class Methods
+==============================================================
+
+We can use nested braces {} while we are inside methods to access another objects, In this case 
+the current object scope will be changed while we are inside the brace and Self will point to the object
+that we access using braces {}. In this case we can use This.Attribute and This.Method() to access the object
+that will be created from the current class.
+
+Check the Object Oriented Programming chapter for more information.
+
+Also Check the Weight History Application in GUI Development using RingQt chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.1?; Better Documentation
+
+Better Documentation
+====================
+
+Ring 1.1 documentation (800 pages) is better than Ring 1.0 documentation (340 pages)
+
+Many chapters are added for providing better information about the language like
+
+* Language Reference
+* Scope Rules
+* FAQ
+
+And more!
+
diff --git a/docs/en/target/whatisnew10.txt b/docs/en/target/whatisnew10.txt
new file mode 100644 (file)
index 0000000..9aee2ec
--- /dev/null
@@ -0,0 +1,211 @@
+.. index:: 
+       single: What is new in Ring 1.10?; Introduction
+
+=========================
+What is new in Ring 1.10?
+=========================
+
+In this chapter we will learn about the changes and new features in Ring 1.10 release.
+
+.. index:: 
+       pair: What is new in Ring 1.10?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.10 comes with the next features!
+
+* Chess Game
+* Minesweeper Game
+* Knight Tour Game
+* Game of Life Game
+* Pong Game
+* Snakes and Ladder Game
+* More Games
+* Ring Extension for Visual Studio Code
+* The Ring Package Manager (RingPM)
+* Better Tests
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Chess Game
+
+Chess Game
+==========
+
+Chess Game (2 Players)
+
+.. image:: chessgame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Chess Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Minesweeper Game
+
+Minesweeper Game
+================
+
+The objective of the game is to clear a rectangular board containing hidden "mines" or bombs without detonating any of them.
+
+.. image:: minesweeper.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Minesweeper Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Knight Tour Game
+
+Knight Tour Game
+================
+
+Move to every square on the chess board, using only the moves of a knight.
+
+Can you visit every square in just 63 moves? 
+
+.. image:: knighttour.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Knight Tour Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Game of Life Game
+
+Game of Life Game
+=================
+
+The game is a zero-player game, meaning that its evolution is determined by its initial state, 
+requiring no further input. 
+
+One interacts with the Game of Life by creating an initial configuration and observing how it evolves, 
+or, for advanced players, by creating patterns with particular properties.
+
+.. image:: gameoflife.jpg
+       :width: 400pt
+       :height: 300pt
+       :alt: Game of Life Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Pong Game
+
+Pong Game
+=========
+
+Simple "tennis like" game features two paddles and a ball.
+
+The goal is to defeat your opponent once the opponent misses a ball.
+
+.. image:: ponggame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Pong Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Snakes And Ladder Game
+
+Snakes And Ladder Game
+======================
+
+The Snakes and Ladder Game using Ring Game Engine for 2D Games
+
+.. image:: snakesgame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Snakes Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; More Games
+
+More Games
+==========
+
+The next games are added to the application folder
+
+* Lights Out Game
+* Dots and Boxes Game
+* Magic Four Game
+* Sum Puzzle Game
+
+The next screen shot for the Sum Puzzle Game
+
+.. image:: sumpuzzle.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Sum Puzzle Game
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Ring Extension for Visual Studio Code
+
+Ring Extension for Visual Studio Code
+=====================================
+
+This extension support the Ring programming language in Visual Studio Code
+
+.. image:: ringinvscode.png
+       :width: 500pt
+       :height: 300pt
+       :alt: Ring in Visual Studio Code
+
+.. index:: 
+       pair: What is new in Ring 1.10?; The Ring Package Manager (RingPM)
+
+The Ring Package Manager (RingPM)
+=================================
+
+Ring comes with a package manager (RingPM) that we can use to install, update and remove packages.
+
+The Package Manager uses Semantic Versioning to check compatibility between packages 
+
+The Package Manager comes with the next options
+
+.. code-block:: none
+
+       ===========================================================================
+       Usage   : ringpm [command]
+       Command : search  [keywords...]
+       Command : refresh : Update the Registry (Packages List)
+       Command : install [ <packagename> [from <UserName>] [branch <branchname>] ]
+       Command : list    [-u : Check updates]
+       Command : run     [packagename]
+       Command : update  <packagename>
+       Command : remove  <packagename>
+       Command : format  : Delete All Packages
+       Command : new     <packagename>
+       Command : package : Create package in the current folder
+       ===========================================================================
+
+.. index:: 
+       pair: What is new in Ring 1.10?; Better Tests
+
+Better Tests
+============
+
+New framework for Ring programming language tests that test the language.
+
+.. image:: tests_shot.png
+       :width: 500pt
+       :height: 300pt
+       :alt: Tests
+
+
+.. index:: 
+       pair: What is new in Ring 1.10?; More Improvements
+
+More Improvements
+=================
+
+(1)  Ring Compiler : Better support for (Operator Operator) to avoid checking the first operator when it's a literal.
+(2)  Ring Compiler : When we load a file that doesn't exist, display the caller file name in the error message.
+(3)  Ring Compiler : Support source code files with one line of comment without end of line.
+(4)  Ring Compiler : change nNoAssignment attribute in Parser Structure to nNewObject.
+(5)  Ring VM : Better support for the (Return) command inside braces that access new objects.
+(6)  Ring VM : Dir() Function - Don't add "." and ".." to the output
+(7)  Ring VM : Dir() Function - Correct output for the item type (file|directory) on Linux and macOS.
+(8)  Ring VM : ICO_LISTSTART - Clean pVM->aSetProperty when setting an object attribute.
+(9)  Ring VM : ICO_NEWOBJECT - Clean pVM->aSetProperty when setting an object attribute.
+(10) Ring VM : Better code for Setter and Getter methods support.
+(11) Ring2EXE: The libraries information are stored in separated files in ring/ring2exe/libs folder.
+(12) WebLib  : Separate the library to many source code files.
+(13) StdLib  : IsVowel() function - Better Code.
+(14) RingQt  : Count(), Left(), Mid() and Right() methods are added to QString class.
+(15) Better Read Me File 
diff --git a/docs/en/target/whatisnew11.txt b/docs/en/target/whatisnew11.txt
new file mode 100644 (file)
index 0000000..aa54591
--- /dev/null
@@ -0,0 +1,488 @@
+.. index:: 
+       single: What is new in Ring 1.11?; Introduction
+
+=========================
+What is new in Ring 1.11?
+=========================
+
+In this chapter we will learn about the changes and new features in Ring 1.11 release.
+
+.. index:: 
+       pair: What is new in Ring 1.11?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.11 comes with the next features!
+
+* More 3D Samples 
+* Checkers Game
+* Sokoban Game
+* Maze Game
+* Snake Game
+* Sudoku Game
+* Desktop Screen Shot Application
+* Text To Speech Application
+* RingRayLib Extension
+* ZeroLib Library
+* StdLib - More Functions
+* Better RingQt
+* Better Performance
+* Better Documentation
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.11?; More 3D Samples
+
+More 3D Samples
+===============
+
+Ring 1.11 comes with more 3D samples based on Qt3D 
+
+* Folder : ring/samples/other/UsingQt3D (Contains 18 samples)
+
+.. image:: qt3dex18.png
+       :alt: Qt3D Example 18
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Checkers Game
+
+Checkers Game
+=============
+
+It plays the - Must Jump - version of Checkers, The International Rules 
+
+It handles various invalid moves, invalid jumps, and must jumps. 
+
+The squares are colored to reflect errors.
+
+The Sqaures are colored to show source and destination of the move or jump.
+
+.. image:: checkersgame.png
+       :alt: Checkers Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Sokoban Game
+
+Sokoban Game
+============
+
+A quick implementation for the Sokoban Game
+
+Developed using Ring Game Engine for 2D Games in 2 hours (Less than 300 lines of code)
+
+.. image:: sokoban.jpg
+       :alt: Sokoban Game
+
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Maze Game
+
+Maze Game
+=========
+
+A quick implementation for the Maze Game
+
+Developed using Ring Game Engine for 2D Games (Around 100 lines of code)
+
+Also the game comes with a level designer (Developed in 10 minutes, 37 Lines of code)
+
+.. image:: maze.png
+       :alt: Maze Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Snake Game
+
+Snake Game
+==========
+
+A quick implementation for the Snake Game
+
+Developed using Ring Game Engine for 2D Games (Around 200 lines of code)
+
+.. image:: snake.png
+       :alt: Snake Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Sudoku Game
+
+Sudoku Game
+===========
+
+Fill a 9 x 9 grid with digits so that each column, each row, and each of the nine 3 x 3 subgrids that
+compose the grid contain all of the digits from 1 to 9.
+
+.. image:: sudoku.jpg
+       :alt: Sudoku Game
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Desktop Screen Shot Application
+
+Desktop Screen Shot Application
+===============================
+
+.. image:: dssapp.png
+       :alt: Desktop Screen Shot Application
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Text To Speech Application 
+
+Text To Speech Application
+==========================
+
+.. image:: ttsapp.png
+       :alt: Text To Speech Application
+
+
+.. index:: 
+       pair: What is new in Ring 1.11?; RingRayLib Extension
+
+RingRayLib Extension
+====================
+
+Ring 1.11 comes with new extension to support the RayLib game programming library
+
+Example:
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth     = 800
+       screenHeight    = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+               ClearBackground(RED)
+               DrawText("Congrats! You created your first window!", 190, 200, 20, WHITE)
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+Output:
+
+.. image:: raylib_ex1.png
+       :alt: RayLib Example
+
+Example:
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY)
+               DrawCircle(screenWidth/4, 120, 35, DARKBLUE)
+               DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED)
+               DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE)  
+               DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD)
+
+               DrawTriangle(Vector2(screenWidth/4*3, 80),
+                                Vector2(screenWidth/4*3 - 60, 150),
+                                Vector2(screenWidth/4*3 + 60, 150), VIOLET)
+
+               DrawPoly(Vector2(screenWidth/4*3, 320), 6, 80, 0, BROWN)
+
+               DrawCircleGradient(screenWidth/4, 220, 60, GREEN, SKYBLUE)
+
+               DrawLine(18, 42, screenWidth - 18, 42, BLACK)
+               DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE)
+               DrawTriangleLines(Vector2(screenWidth/4*3, 160),
+                                 Vector2(screenWidth/4*3 - 20, 230),
+                                 Vector2(screenWidth/4*3 + 20, 230), DARKBLUE)
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+Output:
+
+.. image:: ex1_basicshapes.png
+       :alt: RayLib Example
+
+.. index:: 
+       pair: What is new in Ring 1.11?; ZeroLib Library
+
+ZeroLib Library
+===============
+
+Ring 1.11 comes with the ZeroLib library that contains classes for Lists and Strings where the index starts from 0.
+
+Example:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using List - Index start from 0"
+       List = Z( [1,2,3] )
+       List.Add(4)
+       List.Add(5)
+       ? List[0]
+       ? List[1]
+       ? List[2]
+       ? List[3]
+       ? List[4]
+       nIndex = List.find(2)
+       ? "Find(2) = " + nIndex
+       List.delete(0)
+       ? "After deleting the first item : List[0]" 
+       ? "Now List[0] = " + List[0] 
+
+       ? "Using String - Index start from 0"
+       String = Z( "Welcome" )
+       ? String[0]
+       ? String[1]
+       ? String[2]
+       ? String[3]
+       ? String[4]
+       ? String[5]
+       ? String[6]
+
+Output:
+
+.. code-block:: ring 
+
+       Using List - Index start from 0
+       1
+       2
+       3
+       4
+       5
+       Find(2) = 1
+       After deleting the first item : List[0]
+       Now List[0] = 2
+       Using String - Index start from 0
+       W
+       e
+       l
+       c
+       o
+       m
+       e
+
+       
+.. index:: 
+       pair: What is new in Ring 1.11?; StdLib - More Functions
+
+StdLib - More Functions
+=======================
+
+The next functions are added to the StdLib
+
+* IsListContainsItems(aParent,aChild)
+* IsBetween(nNumber,nMin,nMax)
+* TimeInfo(cInformation)
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? "Using the IsListContainsItems() function" 
+       aList1 = "a":"z"
+       aList2 = [:h,:l,:p,:u]
+       ? IsListContainsItems(aList1,aList2)
+       ? "Using the IsBetween() function"
+       ? isBetween(1,3,4)
+       ? isBetween(4,1,6)
+       ? "Using the TimeInfo() function"
+       ? timeInfo(:date)
+       ? timeInfo(:year)
+       ? timeInfo(:time)
+       ? timeInfo(:hour_12)
+
+Output:
+
+.. code-block:: ring
+
+       Using the IsListContainsItems() function
+       1
+       Using the IsBetween() function
+       0
+       1
+       Using the TimeInfo() function
+       05/24/19
+       2019
+       15:30:33
+       03
+
+For more information about these functions, see the StdLib functions chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Better RingQt 
+
+Better RingQt
+=============
+
+* Building RingQt using Qt 5.12.3
+
+* RingQt for Android - project file is updated to include webview module when we have it
+
+* QString Class - New Methods
+
+       * compare()
+       * contains()
+       * indexOf()
+       * insert()
+       * isRightToLeft()
+       * remove()
+       * repeated()
+       * replace()
+       * startsWith()
+       * endsWith()
+       * toHtmlEscaped()
+       * clear()
+       * isnull()
+       * resize()
+       * fill()
+
+* QAxBase & QVariant - Better API 
+
+* The next classes are added to RingQt 
+
+       * QQuickView Class
+       * QPrintDialog Class
+       * QAxWidget2 Class
+       * QTextToSpeech Class 
+       * QGraphicsView Class
+       * QAbstractAspect Class
+       * QNode Class
+       * QEntity Class
+       * QTransform Class
+       * QAspectEngine Class
+       * QTorusMesh Class
+       * QConeMesh Class
+       * QCylinderMesh Class
+       * QCuboidMesh Class
+       * QPlaneMesh Class
+       * QSphereMesh Class
+       * QPhongMaterial Class
+       * QForwardRenderer Class
+       * Qt3DWindow Class
+       * QAbstractCameraController Class
+       * QFirstPersonCameraController Class
+       * QTextureMaterial Class
+       * QExtrudedTextMesh Class
+       * QText2DEntity Class
+       * QSkyBoxEntity Class
+       * QConeGeometry Class
+       * QOrbitCameraController Class
+       * QDiffuseSpecularMaterial Class
+       * QGoochMaterial Class
+       * QMetalroughMaterial Class
+       * MorphPhongMaterial Class
+       * QPervertexColorMaterial Class
+       * QInputAspect Class
+       * QFrameAction Class
+       * QLogicAspect Class
+       * QCamera Class
+       * QCameraLens Class
+       * QMesh Class
+       * QTechnique Class
+       * QMaterial Class
+       * QEffect Class
+       * QRenderPass Class
+       * QSceneLoader Class
+       * QPointLight Class
+       * QRenderAspect Class
+       * QTextureLoader Class
+       * QObjectPicker Class
+       * QCameraSelector Class
+       * QCullFace Class
+       * QDepthTest Class
+       * QViewPort Class
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Better Performance
+
+Better Performance
+==================
+
+Ring 1.11 is faster than Ring 1.10
+
+The performance gain is between 10% and 30% based on the application.
+
+.. index:: 
+       pair: What is new in Ring 1.11?; Better Documentation
+
+Better Documentation
+====================
+
+The next chapters are added to the documentation
+
+* Tutorial : Ring Extensions in C/C++
+* Using Qt3D 
+* Using ZeroLib 
+* Using RingRayLib
+
+.. index:: 
+       pair: What is new in Ring 1.11?; More Improvements
+
+More Improvements
+=================
+
+* New Samples 
+       * samples/other/ModuloTimesTableCircle folder
+       * samples/other/saveimage folder
+       * samples/other/UsingQML folder
+       * samples/other/myguicontrol.ring 
+       * samples/other/qcalendarwidget.ring
+       * samples/other/qcalendarwidget2.ring
+       * samples/other/sudoku-KL02.ring
+       * samples/other/sudoku-KL02-longproblem.ring
+       * samples/other/zerobasedlist.ring
+       * ringlibs/gameengine/lesson17.ring (Using Buttons)
+       * samples/other/SQLTutorial/SQL-Tutorial.ring
+       * samples/other/DrawFourier/AA-Draw-Fourier.ring
+       * samples/other/SmartPhoneEmulator/ejemploKey.ring
+       * samples/other/DiscreteFourierTransform/DiscreteFourierTransform.ring
+       * samples/other/phonedatabase/PhoneDatabase.ring
+* Gold Magic 800 - More levels (44 Levels)
+* Fifteen Puzzle Game 3D - Better Code (Animation Speed)
+* Flappy Bird 3000 - change the Bird direction to be looking down when we have game over
+* Ring Notepad - Keyboard shortcuts for the Dockable Windows Mode
+* Ring Notepad - When displaying functions list, don't avoid functions that contains the "_" character
+* Ring Notepad - Output Window - Send Data - Better Code
+* Ring Notepad - Find and Replace Window - Better Code
+* Ring Notepad - Edit Menu - Insert Text Window
+* Ring Notepad - Edit Menu - Lower Case and Upper Case options
+* Ring Notepad - Edit Menu - Capitalize option
+* Ring Notepad - Edit Menu - Comment Lines and Comment Block of lines
+* Ring Notepad - File Tabs - Context Menu (Close other files, Close Active file and Close All files)
+* RingPM - When updating a package - don't reinstall the dependency again
+* Ring Game Engine for 2D Games - Added : GE_FULLSCREEN, GE_SCREEN_W and GE_SCREEN_H
+* Ring Game Engine for 2D Games - Added : name property to game objects
+* Ring Game Engine for 2D Games - Added : find() method to game class (find an object by name)
+* Ring Game Engine for 2D Games - Support oGame[:ObjectName] to access an object
+* Natural Library - Better Performance
+* FoxRing - Added: frCTOD() function
+* Code generator for extensions - generate functions that use managed pointers to new structures
+* Ring VM - Error codes for Ring Object File errors
+* Ring VM - Eval() function - Better Code (Better Performance)
+* Ring VM - State Management - Better Code
+* Ring VM - the ">" operator and operator overloading - Better Code
+* Ring VM - Assignment and calling object methods - Better Code
+* Ring VM - OOP - Getter Methods - Better Performance
+* Ring API - Supporting RING_API_ISLIST() in C Extensions
+* Ring Compiler - Supporting new lines after numbers and literals when writing conditions
+* Ring Compiler - Supporting semi-colon (;) in the start of the line
+* Ring Compiler - Prevent using Loop and Exit commands from outside loops 
diff --git a/docs/en/target/whatisnew12.txt b/docs/en/target/whatisnew12.txt
new file mode 100644 (file)
index 0000000..5432611
--- /dev/null
@@ -0,0 +1,330 @@
+.. index:: 
+       single: What is new in Ring 1.12?; Introduction
+
+=========================
+What is new in Ring 1.12?
+=========================
+
+In this chapter we will learn about the changes and new features in Ring 1.12 release.
+
+.. index:: 
+       pair: What is new in Ring 1.12?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.12 comes with the next features!
+
+* Go Game
+* ASCII Table application
+* BMI Calculator application
+* Calendar application
+* Julian Day Calendar application
+* Tutorial: Number to Words
+* Load Again Command
+* ring_state_filetokens() function
+* Embedded Ring Object File 
+* Better RingRayLib
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Go Game
+
+Go Game
+=======
+
+An implementation for the Go Game
+
+.. image:: go.png
+       :alt: Go Game
+
+.. index:: 
+       pair: What is new in Ring 1.12?; ASCII Table application
+
+ASCII Table application
+=======================
+
+Simple application for displaying the ASCII table 
+
+.. image:: asciitable.png
+       :alt: ASCII Table
+
+.. index:: 
+       pair: What is new in Ring 1.12?; BMI Calculator application
+
+BMI Calculator application
+==========================
+
+Simple application for calculating the BMI 
+
+.. image:: BMI.png
+       :alt: BMI
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Calendar application
+
+Calendar application
+====================
+
+The Calendar for Year 2020
+
+.. image:: calendar.png
+       :alt: calendar
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Julian Day Calendar application
+
+Julian Day Calendar application
+===============================
+
+The Julian Day Calendar application
+
+.. image:: juliancalendar.png
+       :alt: juliandaycalendar
+
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Tutorial: Number to Words
+
+Tutorial: Number to Words
+=========================
+
+Folder : ring/samples/other/number2words
+
+.. image:: number2words.png
+       :alt: Number2Words
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Load Again Command
+
+Load Again Command
+==================
+
+Ring 1.12 comes with the Load Again command
+
+Using this command we can load the Ring source file which contains constants more than one time.
+
+This is useful when using Ring source files for translations through global constants.
+
+Example:
+
+The next function is part from a project which support Arabic and English languages
+
+The files english.ring and arabic.ring contains constants for translation
+
+One of these files is loaded in the start of the program
+
+Loading the same file again using the (Load) command is not possible
+
+Because the (Load) command load the same source file only for the first time and ignore next times.
+
+So we have to use the (Load Again) command.
+
+Where we can use these files again during the runtime as in the next code
+
+.. code-block:: ring
+
+       func setLang nLanguage
+               if C_ENV_DEFAULT_LANG = nLanguage
+                       return
+               ok
+               C_ENV_DEFAULT_LANG = nLanguage
+               # Change the language
+                       switch nLanguage 
+                               on C_TRANSLATION_ENGLISH
+                                       load again "translation/english.ring"
+                               on C_TRANSLATION_ARABIC 
+                                       load again "translation/arabic.ring"
+                       off
+
+.. index:: 
+       pair: What is new in Ring 1.12?; ring_state_filetokens() function
+
+ring_state_filetokens() function
+================================
+
+Using the ring_state_filetokens() function we can get all the tokens in the ring source code file.
+
+.. code-block:: ring
+
+       C_FILENAME      = "test_tokens.ring"
+       C_WIDTH         = 12
+
+       # write the file
+               write(C_FILENAME,'
+                               see "Hello, World!"
+                               ? 3*2+3
+                               Name = "Ring"
+                               ? Name
+       ')
+
+       # Token Type
+               C_KEYWORD       = 0
+               C_OPERATOR      = 1
+               C_LITERAL       = 2
+               C_NUMBER        = 3
+               C_IDENTIFIER    = 4
+               C_ENDLINE       = 5
+
+       # Keywords List
+       aKEYWORDS = ["IF","TO","OR","AND","NOT","FOR","NEW","FUNC", 
+       "FROM","NEXT","LOAD","ELSE","SEE","WHILE","OK","CLASS","RETURN","BUT", 
+       "END","GIVE","BYE","EXIT","TRY","CATCH","DONE","SWITCH","ON","OTHER","OFF", 
+       "IN","LOOP","PACKAGE","IMPORT","PRIVATE","STEP","DO","AGAIN","CALL","ELSEIF", 
+       "PUT","GET","CASE","DEF","ENDFUNC","ENDCLASS","ENDPACKAGE", 
+       "CHANGERINGKEYWORD","CHANGERINGOPERATOR","LOADSYNTAX"]
+
+       pState = ring_state_new()
+       aList = ring_state_filetokens(pState,C_FILENAME)
+       PrintTokens(aList)
+       ring_state_delete(pState)
+
+       func PrintTokens aList
+               for aToken in aList
+                       switch aToken[1]
+                       on C_KEYWORD 
+                               ? Width("Keyword",C_WIDTH) + ": "  + aKeywords[0+aToken[2]]
+                       on C_OPERATOR 
+                               ? Width("Operator",C_WIDTH)  + ": " + aToken[2]
+                       on C_LITERAL 
+                               ? Width("Literal",C_WIDTH)  + ": " + aToken[2]
+                       on C_NUMBER 
+                               ? Width("Number",C_WIDTH)  + ": " + aToken[2]
+                       on C_IDENTIFIER 
+                               ? Width("Identifier",C_WIDTH)  + ": " + aToken[2]
+                       on C_ENDLINE 
+                               ? "EndLine"
+                       other
+                               
+                       off
+               next
+
+       func Width cText,nWidth
+               return cText+copy(" ",nWidth-len(cText))
+
+Output:
+
+.. code-block:: none
+
+       EndLine
+       Keyword     : SEE
+       Literal     : Hello, World!
+       EndLine
+       Operator    : ?
+       Number      : 3
+       Operator    : *
+       Number      : 2
+       Operator    : +
+       Number      : 3
+       EndLine
+       Identifier  : name
+       Operator    : =
+       Literal     : Ring
+       EndLine
+       Operator    : ?
+       Identifier  : name
+       EndLine
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Generate Embedded Object File
+
+Generate Embedded Ring Object File
+==================================
+
+We can generate embedded object file (C source code) from the source code file (*.ring) 
+using -geo option
+
+Command:
+
+.. code-block:: ring
+
+       ring test.ring -geo
+
+This command will generate at least three files
+
+.. code-block:: ring
+
+       test.c
+       ringappcode.c
+       ringappcode.h
+
+More files could be generated based on the project size
+
+The generated files will pass the byte code to Ring VM to be executed
+
+.. index:: 
+       pair: What is new in Ring 1.12?; Better RingRayLib
+
+Better RingRayLib
+=================
+
+More Samples are added to RingRayLib
+
+       * Sound Loading Playing 
+       * Texture Source 
+       * Music Playing Streaming 
+       * Rectangle scaling 
+       * Colors Palette
+       * Following Eyes
+       * Collision Area
+       * Bezier Lines
+       * Images Generation
+       * Fiften Puzzle Game
+       * Cubic Map
+
+Screen Shot:
+       
+.. image:: raylib_cubicmap.png
+       :alt: RayLib Example    
+
+.. index:: 
+       pair: What is new in Ring 1.12?; More Improvements
+
+More Improvements
+=================
+
+* New Samples 
+       * ring/samples/other/Hex2UTF8.ring
+       * ring/samples/other/CalmoSoftPrimesTable.ring
+       * ring/samples/other/CalmoSoftTicTacToeGame.ring
+       * ring/samples/other/CalmoSoftSimpleGoGame.ring
+       * ring/samples/other/arabicmysql.ring 
+       * ring/samples/other/CalmoSoftExtraCube.ring
+       * ring/samples/other/DynamicCode/anonfunc.ring
+       * ring/samples/other/DynamicCode/deletethisfile.ring
+       * ring/samples/other/DynamicCode/modifythisfile.ring
+       * ring/samples/other/changesyntax/ArabicDemo.ring
+       * ring/samples/other/changesyntax/EnglishDemo.ring
+       * ring/samples/other/changesyntax/ChangeKeywordsArabic.ring
+       * ring/samples/other/changesyntax/ChangeKeywordsEnglish.ring
+       * ring/samples/other/changesyntax/pascal.ring
+       * ring/samples/other/hijridate.ring
+
+* Ring Notepad - Project Files - set minimum width based on desktop screen width
+* Ring Notepad - Output Window - Move the Cursor to the end of text
+* Ring Notepad - Output Window - Correct displaying for line breaks 
+* Form Designer - Better Style - Controls colors and size
+* VideoMusicPlayer is updated to work as expected after RingQt update
+* FlappyBird3000 - Fast response on Android 
+* Snake Game : Change the default window size (800x600)
+* Maze Game : Change the default window size (800x600) 
+* Maze Game : Move the camera with the player
+* Maze Game : Restarting the game will hide the (You Win) message
+* Game Engine : display error message when we can't create the game window
+* Ring Tests : Added File build.sh for building on Linux and macOS
+* RingQt : Updated to Qt 5.12.6
+* RingQt : Added QQMLEngine class
+* RingQt : Added files for building RingQt without Bluetooth support 
+* RingQt : The size of the events code is changed from 100 characters to 200 characters
+* RingQt : Correct links for Qt documentation in RingQt classes chapter
+* RingQt for Android : Better code for executing the ring object file (ringo)
+* Ring2EXE configuration files are updated for RingQt to correctly distribute RingQt apps
+* Code Generator : Convert function names to lower case when generating the functions for structures
+* OSCopyFolder() function is updated to copy the files in sub folders too
+* fgetpos() function is updated to work as expected
+* IsFunction() function is updated to be not case sensitive
+* Space() function is updated to clear the output string with spaces
+* Ring Compiler : Added file buildclang.bat for building on Windows using Clang compiler
+* Ring VM - Internal hash function is updated
+* Ring VM - Better Code for setting pVM->aSetProperty when creating new objects
+* Ring VM - Better Code for state managment
diff --git a/docs/en/target/whatisnew2.txt b/docs/en/target/whatisnew2.txt
new file mode 100644 (file)
index 0000000..a0eabd6
--- /dev/null
@@ -0,0 +1,347 @@
+.. index:: 
+       single: What is new in Ring 1.2?; Introduction
+
+========================
+What is new in Ring 1.2?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.2 release.
+
+.. index:: 
+       pair: What is new in Ring 1.2?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.2  comes with many new features 
+
+* New Functions
+* Better Functions
+* Better Ring Notepad
+* Better RingQt
+* Objects Library for RingQt
+* RingLibCurl
+* Better Call Command
+* Using NULL instead of NULLPointer()
+* Display Warnings Option
+* Better Quality
+
+.. index:: 
+       pair: What is new in Ring 1.2?; New Functions
+
+New Functions
+=============
+
+* PtrCmp() Function is a new function that compare between C pointers like the GUI objects.
+* PrevFileName() Function is added to return the previous active source file name.
+* RingVM_CFunctionsList() Function is added to return a list of functions written in C.
+* RingVM_FunctionsList() Function is added to return a list of functions written in Ring.
+* RingVM_ClassesList() Function is added to return a list of Classes.
+* RingVM_PackagesList() Function is added to return a list of Packages.
+* RingVM_MemoryList() Function is added to return a list of Memory Scopes and Variables.
+* RingVM_CallList() Function is added to return a list of the functions call list.
+* RingVM_FilesList() Function is added to return a list of the Ring Files.
+
+Example:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp.ring","r")
+       fp2 = fp
+       fp3 = fopen("ptrcmp.ring","r")
+
+       see ptrcmp(fp,fp2) + nl
+       see ptrcmp(fp,fp3) + nl
+
+       fclose(fp)
+       fclose(fp3)
+
+Output:
+
+.. code-block:: ring
+
+       1
+       0
+
+Also we can compare between them using the '=' operator
+
+Example:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp2.ring","r")
+       fp2 = fopen("ptrcmp2.ring","r")
+       fp3 = fp
+       see fp = fp2
+       see nl
+       see fp = fp3
+       fclose(fp)
+       fclose(fp2)
+
+Output:
+
+.. code-block:: ring
+
+       0
+       1
+
+
+Example:
+
+The next function in stdlib.ring uses the PrevFileName() to know if the file of the
+caller function is the main source file of the program or not.
+
+.. code-block:: ring
+
+       Func IsMainSourceFile
+               if PrevFileName() = sysargv[2]
+                       return true
+               ok
+               return false
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Functions
+
+Better Functions
+================
+
+The find() function is updated to support searching in lists using C pointers like GUI
+Objects.
+
+The type() function is updated to display the C pointers types (like the GUI Object Class
+Name).
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+The Ring Notepad will save the current line number of opened files to be restored when
+we switch between files.
+
+Also Ring Notepad will ask the user to save the file if the file content is changed when 
+the user switch between files.
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better RingQt
+
+Better RingQt
+=============
+
+RingQt classes are updated to include methods to get events (The code that will be executed
+when an event is fired). This is necessary to enable/disable events for some time or to
+get the events information.
+
+For example the next code disable an event then call a method then enable the event again.
+
+.. code-block:: ring
+
+       cEvent = oView.oListResult.getCurrentItemChangedEvent()
+       oView.oListResult.setCurrentItemChangedEvent("")
+       FindValueAction()       # Call Method while an event is disabled
+       oView.oListResult.setCurrentItemChangedEvent(cEvent)
+
+Also the QAllEvents class is updated where we can set the output from the event function
+to be true or false using a new method added to the class called setEventOutput.
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+                       win = new qWidget() {
+                                       setwindowtitle("Hello World")
+                                       setGeometry(100,100,370,250)
+                                       lineedit1 = new qlineedit(win) {
+                                               setGeometry(10,100,350,30)
+                                               setinputmask("9999;_") 
+                                               oFilter = new qallevents(lineedit1)
+                                               oFilter.setfocusoutEvent("pMove()")
+                                               installeventfilter(oFilter)
+                                       }
+                                       lineedit2 = new qlineedit(win) {
+                                                       setGeometry(10,150,350,30)
+                                       }
+                                       show()
+                       }
+                       exec()
+       }
+       
+       func pMove
+                  win.setWindowTitle("xxxx")
+                  oFilter.setEventOutput(False)
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Objects Library for RingQt
+
+Objects Library for RingQt
+==========================
+
+Ring 1.2 comes with the Objects library for RingQt applications. Instead of using global
+variables for windows objects and connecting events to objects using the object name, the
+Objects Library will manage the GUI objects and will provide a more natural API to quickly
+create one or many windows from the same class and the library provide a way to quickly set methods
+to be executed when an event is fired. Also the library provide a natural interface to
+quickly use the parent or the caller windows from the child or sub windows.
+
+The Objects Library is designed to be used with the MVC Design Pattern.
+
+The Objects Library is merged in RingQt so you can use it directly when you use RingQt
+
+Example :
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               open_window( :MainWindowController )
+               exec()
+       }
+
+       class MainWindowController from WindowsControllerParent
+               oView = new MainWindowView
+               func SubWindowAction
+                       Open_window( :SubWindowController )
+                       Last_Window().SetParentObject(self)
+
+       class MainWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Main Window")
+                       btnSub = new qPushButton(win) {
+                               setText("Sub Window")
+                               setClickEvent( Method( :SubWindowAction ) )
+                       }
+                       resize(400,400)
+               }
+
+       class SubWindowController from WindowsControllerParent
+               oView = new SubWindowView
+               func SetMainWindowTitleAction
+                       Parent().oView.win.SetWindowTitle("Message from the Sub Window")
+                       oView.win.SetWindowTitle("Click Event Done!")
+
+       class SubWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Sub Window")
+                       btnMsg = new qPushButton(win) {
+                               setText("Set Main Window Title")
+                               setClickEvent( Method( :SetMainWindowTitleAction ) )
+                       }
+                       btnClose = new qPushButton(win) {
+                               Move(200,0)
+                               setText("Close")
+                               setClickEvent( Method( :CloseAction ) )
+                       }
+                       resize(400,400)
+               }
+
+.. index:: 
+       pair: What is new in Ring 1.2?; RingLibCurl
+
+RingLibCurl
+===========
+
+The LibCurl library is used starting from Ring 1.0 for the Download() and SendEmail() 
+functions implementation. In Ring 1.2 more functions are added to provide a powerful
+library (RingLibCurl) around LibCurl.
+
+Example:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       cPostThis = "page=4&Number1=4&Number2=5"
+       curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3")
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Call Command
+
+Better Call Command
+===================
+
+The Call command is updated to support calling functions from object attributes also (not
+only variables).
+
+For example the next code from the Stars Fighter Game
+
+.. code-block:: ring
+
+       cFunc = oself.keypress
+       call cFunc(oGame,oSelf,Key_Space)
+
+Can be written in one line
+
+.. code-block:: ring
+
+       call oself.keypress(oGame,oSelf,Key_Space)
+
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Using NULL instead of NULLPointer()
+
+Using NULL instead of NULLPointer()
+===================================
+
+We can pass NULL to functions instead of using NULLPointer()
+
+For example the next code from RingLibSDL
+
+.. code-block:: ring
+
+       SDL_RenderCopy(SDL_ren,tex,NULLPointer(),rect)
+
+Can be written as in the next line
+
+.. code-block:: ring
+
+       SDL_RenderCopy(SDL_ren,tex,NULL,rect)
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Display Warnings Option
+
+Display Warnings Option
+=======================
+
+In Ring 1.2 the Ring compiler is updated to include the Display Warnings option (-w)
+
+Example:
+
+.. code-block:: ring
+       
+       load "stdlib.ring"
+       load "stdlib.ring"
+
+compiling the program using the Display Warnings option will display the file duplication
+warning, While without that option the error will pass silent.
+
+This is a warning (not an error) because in large projects you may use the same file
+more than one time. For example it's common to start each file with the next code. where
+the function IsMainSourceFile() is part from the stdlib.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       if IsMainSourceFile() 
+               // Testing
+       ok 
+
+.. index:: 
+       pair: What is new in Ring 1.2?; Better Quality
+
+Better Quality
+==============
+
+Ring 1.2 is more stable, We discovered and fixed more bugs during Ring usage everyday
+in practical projects. Some functions are optimized to be faster like the SubStr() function.
+Also the documentation is more better.
diff --git a/docs/en/target/whatisnew3.txt b/docs/en/target/whatisnew3.txt
new file mode 100644 (file)
index 0000000..e7aed02
--- /dev/null
@@ -0,0 +1,487 @@
+.. index:: 
+       single: What is new in Ring 1.3?; Introduction
+
+========================
+What is new in Ring 1.3?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.3 release.
+
+.. index:: 
+       pair: What is new in Ring 1.3?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.3  comes with many new features 
+
+* Better RingQt
+* Better Ring Notepad
+* Ring mode for Emacs Editor
+* Better StdLib
+* Better Loop/Exit Command
+* New Functions
+* Return Self by Reference
+* Using '<' and ':' operators as 'from' keyword
+* Embedding Ring in Ring without sharing the State
+* RingZip Library
+* Form Designer
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better RingQt
+
+Better RingQt
+=============
+
+(1) Another version of QPixMap class is added (QPixMap2) which takes (int width,int height)
+during object init. 
+
+Example:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       New qapp 
+       {
+               win1 =  new qwidget() 
+               {
+                       setwindowtitle("Drawing using QPixMap")
+                       setgeometry(100,100,500,500)
+                       label1 = new qlabel(win1) 
+                       {
+                               setgeometry(10,10,400,400)
+                               settext("")
+                       }
+                       imageStock = new qlabel(win1) 
+                       {               
+                               image = new qPixMap2(200,200)   
+                               color = new qcolor() {
+                                       setrgb(255,255,255,255)
+                               }
+                               pen = new qpen() {
+                                       setcolor(color)
+                                       setwidth(10)
+                               }
+                               new qpainter() {
+                                       begin(image)
+                                               setpen(pen)
+                                               drawline(0,0,200,200)
+                                               drawline(200,0,0,200)
+                                       endpaint()
+                               }
+                               setpixmap(image)   
+                       }   
+                       show()
+               }
+               exec()
+       }
+
+Screen Shot:
+
+.. image:: ringqtpixmap2.png
+       :alt: Using QPixMap2
+
+(2) The Objects Library is updated to include the next functions
+
+* Last_WindowID()
+* Open_WindowNoShow()
+* Open_WindowAndLink()
+
+Also the class name (WindowViewBase) is changed to (WindowsViewParent).
+
+In The next code for example the Open_WindowAndLink() will create an object
+from the SecondWindowController Class Then will add the Method
+SecondWindow() to the FirstWindowController Class
+Also will add the Method FirstWindow() to the SecondWindowController Class
+
+So the SendMessage() method in FirstWindowController class can use the
+SecondWindow() method to access the object.
+
+.. code-block:: ring
+
+       class firstwindowController from windowsControllerParent
+
+           oView = new firstwindowView
+
+           func OpenSecondWindow
+               Open_WindowAndLink(:SecondWindowController,self)
+
+           func SendMessage
+               if IsSecondWindow() 
+                   SecondWindow().setMessage("Message from the first window")
+               ok
+
+           func setMessage cMessage
+               oView.Label1.setText(cMessage)
+
+
+(3) The next classes are added to RingQt
+
+* QPixMap2
+* QScrollArea
+* QSplitter
+* QCompleter
+* QCompleter2
+* QCompleter3
+* QProcess
+* QMdiArea
+* QMdiSubWindow
+* QCursor
+* QListView
+* QDesktopServices
+
+(4) Many constants are defined in qt.rh (loaded by guilib.ring)
+
+(5) New Classes names - Index Start from 1
+
+We added new classes to RingQt - another version of classes where the class names doesn't start with the "q" letter
+Also updated methods so the index start from 1 when we deal with the GUI controls like
+
+* ComboBox
+* ListWidget
+* TableWidget
+* TreeWidget
+
+These classes are inside guilib.ring under the package name : System.GUI
+
+To use it
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       import System.GUI
+
+This doesn't have any effect on our previous code, It's just another choice for better code that is consistent with Ring rules.
+
+Also the form designer is updated to provide us the choice between using classes where (index start from 0) or (index start from 1)
+
+Example  (Uses the Form Designer)
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartController.ring 
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+(1) Using QPlainTextEdit instead of QTextEdit
+
+(2) Displaying the line number for each line in the source code file.
+
+Screen Shot:
+
+.. image:: rnotelinenumber.png
+       :alt: Ring Notepad - Line Number
+
+(3) Auto-Complete for Ring functions names, classes and words in the opened file.
+
+.. image:: autocomplete.png
+       :alt: Ring Notepad - Auto Complete
+
+(4) Functions and Methods List
+
+.. image:: functionslist.png
+       :alt: Ring Notepad - Functions List
+
+(5) Output Window
+
+.. image:: outputwin.png
+       :alt: Ring Notepad - Output Window
+
+(6) Classes List
+
+.. image:: classeslist.png
+       :alt: Ring Notepad - Classes List
+
+(7) Change the Current Style
+
+.. image:: rnotestylemenu.png
+       :alt: Ring Notepad - Style Menu
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Ring mode for Emacs Editor
+
+Ring mode for Emacs Editor
+==========================
+
+Ring 1.3 comes with Ring mode for Emacs Editor
+
+Screen Shot:
+
+.. image:: ringemacs.png
+       :alt: Ring mode for Emacs Editor
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better StdLib
+
+Better StdLib
+=============
+
+The StdLib is updated to include the next functions
+
+* SplitMany()
+* JustFilePath()
+* JustFileName()
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Better Loop|Exit Command
+
+Better Loop|Exit Command
+========================
+
+The Loop|Exit command is updated to accept Expressions after the command (not only numbers).
+
+The syntax:
+
+.. code-block:: ring
+
+       Loop|Exit [Number]
+
+Changed to
+
+.. code-block:: ring
+
+       Loop|Exit [Expression]
+
+Example
+
+.. code-block:: ring
+
+       XLoop = 2       # The outer loop 
+       YLoop = 1       # The first inner loop
+       for x = 1 to 10
+               for y = 1 to 10
+                       see "x=" + x + " y=" + y + nl
+                       if x = 3 and y = 5
+                               exit XLoop  
+                       ok
+               next
+       next
+
+.. index:: 
+       pair: What is new in Ring 1.3?; New Functions
+
+New Functions
+=============
+
+* PackageName() function
+* Swap() function
+
+Example:
+
+.. code-block:: ring
+
+       aList = [:one,:two,:four,:three]
+       see aList
+       see copy("*",50) + nl
+       swap(aList,3,4)
+       see aList
+
+Output
+
+.. code-block:: ring
+
+       one
+       two
+       four
+       three
+       **************************************************
+       one
+       two
+       three
+       four
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Return Self by Reference
+
+Return Self by Reference
+========================
+
+In this release, using Return Self in class methods will return the object by reference.
+
+Example:
+
+.. code-block:: ring
+
+       mylist = [new mytest() {
+               see self
+               x = 20
+               see self
+       }]
+
+       see mylist 
+
+       class mytest
+               x = 15
+               func init 
+                       return self     # Return by reference
+
+Output
+
+.. code-block:: ring
+
+       x: 15.000000
+       x: 20.000000
+       x: 20.000000
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Using '<' and ':' operators as 'from' keyword
+
+Using '<' and ':' operators as 'from' keyword
+=============================================
+
+In this release of the Ring language we can use the '<' and ':' operators as the 'from' keyword
+
+Syntax (1):
+
+.. code-block:: ring
+       
+       class Cat from Animal
+
+Syntax (2):
+       
+.. code-block:: ring
+       
+       class Cat < Animal
+
+Syntax (3):
+
+.. code-block:: ring
+       
+       class Cat : Animal
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Embedding Ring in Ring without sharing the State
+
+Embedding Ring in Ring without sharing the State
+================================================
+
+From Ring 1.0 we already have functions for embedding Ring in the C language. Also we
+can execute Ring code inside Ring programs using the eval() function. In this release
+we provide functions for embedding Ring in Ring programs without sharing the state.
+
+Advantages:
+
+(1) Quick integration for Ring programs and applications together without conflicts.
+
+(2) Execute and run Ring code in safe environments that we can trace.
+
+Example:
+
+.. code-block:: ring
+
+       pState = ring_state_init()
+       ring_state_runcode(pState,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState,"x = 10")
+
+       pState2 = ring_state_init()
+       ring_state_runcode(pState2,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState2,"x = 20")
+
+       ring_state_runcode(pState,"see x +nl")
+       ring_state_runcode(pState2,"see x +nl")
+
+       v1 = ring_state_findvar(pState,"x")
+       v2 = ring_state_findvar(pState2,"x")
+
+       see v1[3] + nl
+       see V2[3] + nl
+
+       ring_state_delete(pState)
+       ring_state_delete(pState2)
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       Hello, World!
+       10
+       20
+       10
+       20
+
+
+.. index:: 
+       pair: What is new in Ring 1.3?; RingZip Library
+
+RingZip Library
+===============
+
+Ring 1.3 comes with the RingZip library for creating, modifying and extracting *.zip files.
+
+Example (1):  Create myfile.zip contains 4 files 
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'w')
+       zip_addfile(oZip,"test.c")
+       zip_addfile(oZip,"zip.c")
+       zip_addfile(oZip,"zip.h")
+       zip_addfile(oZip,"miniz.h")
+       zip_close(oZip)
+
+Example (2): Extract myfile.zip to myfolder folder.
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       zip_extract_allfiles("myfile.zip","myfolder")
+
+Example (3): Print file names in the myfile.zip
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'r')
+       for x=1 to zip_filescount(oZip)
+              see zip_getfilenamebyindex(oZip,x) + nl
+       next
+       zip_close(oZip)
+
+Example (4) : Using Classes instead of Functions
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("w")
+               AddFile("test.c")
+               AddFile("zip.c")
+               AddFile("zip.h")
+               AddFile("miniz.h")
+               Close()
+       }
+
+.. index:: 
+       pair: What is new in Ring 1.3?; Form Designer
+
+Form Designer
+=============
+
+Ring 1.3 comes with the Form Designer to quickly design your GUI application windows/forms
+and generate the Ring source code.
+
+It's written in Ring (Around 8000 Lines of code) using Object-Oriented Programming and
+Meta-Programming.
+
+We can run the From Designer from Ring Notepad
+
+.. image:: rnotefd.png
+       :alt: Form Desigenr - Inside Ring Notepad
+
+Also we can run the Form Designer in another window.
+
+.. image:: formdesigner.png
+       :alt: Form Desigenr
diff --git a/docs/en/target/whatisnew4.txt b/docs/en/target/whatisnew4.txt
new file mode 100644 (file)
index 0000000..22c3275
--- /dev/null
@@ -0,0 +1,501 @@
+.. index:: 
+       single: What is new in Ring 1.4?; Introduction
+
+========================
+What is new in Ring 1.4?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.4 release.
+
+.. index:: 
+       pair: What is new in Ring 1.4?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.4  comes with many new features 
+
+* Change: Basic Extensions are separated from RingVM
+* The Natural Library
+* New Style is added to Ring Notepad
+* RingREPL
+* Convert between Numbers and Bytes
+* Better StdLib
+* Better WebLib
+* Better RingQt
+* Qt Class Convertor
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Change: Basic Extensions are separated from RingVM
+
+Change: Basic Extensions are separated from RingVM
+==================================================
+
+In Ring 1.4 the next libraries are separated from RingVM
+
+* RingODBC
+* RingMySQL
+* RingSQLite
+* RingOpenSSL
+* RingInternet
+
+To use these libraries, Use the Load command.
+
+.. code-block:: none
+
+       load "odbclib.ring"
+       # use ODBC Functions
+
+.. code-block:: none
+
+       load "mysqllib.ring"
+       # use MySQL Functions
+
+.. code-block:: none
+
+       load "sqlitelib.ring"
+       # use SQLite Functions
+
+.. code-block:: none
+
+       load "openssllib.ring"
+       # use OpenSSL Functions  ( Hash and Security functions)
+
+.. code-block:: none
+
+       load "internetlib.ring"
+       # use Internet Functions ( Download() and SendEmail() )
+
+If you will use all of these libraries, You can just use stdlib.ring
+And the stdlib.ring will load odbclib.ring, mysqllib.ring, sqlitelib.ring,
+opensslib.ring and internetlib.ring files.
+
+.. code-block:: none
+
+       load "stdlib.ring"
+
+.. index:: 
+       pair: What is new in Ring 1.4?; The Natural Library
+
+The Natural Library
+===================
+
+Ring 1.4 comes with the Natural Library to quickly define a language that contains
+a group of commands.
+
+We will write the natural code in a Text file, for example program.txt
+
+File: program.txt
+
+.. code-block:: none
+
+       Welcome to the Ring programming language!
+       What you are reading now is not comments, I swear!
+
+       After many years of programming I decided to think different about
+       programming and solve the problems in a better way. 
+
+       We are writing commands or code and the Ring language is reading
+       it to understand us! Sure, What you are seeing now is
+       just ***part of the code - Not the Complete Program***
+       You have to write little things before and after this 
+       part to be able to run it!
+
+       It is the natural part of our code where we can write in English, 
+       Arabic or any Natural Language Then we will tell the computer 
+       through the Ring language what must happens! in a way that we can scale 
+       for large frameworks and programs.
+
+       Just imagine what will happens to the world of programming once
+       we create many powerful frameworks using the Ring language that
+       uses this way (Natural Programming).
+
+       For example When we say Hello to the Machine, It can reply! and when we
+       say count from 1 to 5 it will understand us, Also if 
+       we said count from 5 to 1 it will
+       understand us too! You can see the Output window!
+
+       This Goal is not new, but the Ring language comes
+       with an innovative solution to this problem.    
+
+Output:
+
+.. code-block:: none
+
+       Hello, Sir!
+
+
+       The Numbers!
+
+       1
+
+       2
+
+       3
+
+       4
+
+       5
+
+       I will count Again!
+
+       5
+
+       4
+
+       3
+
+       2
+
+       1
+
+
+To execute the natural code, We have start.ring
+
+In start.ring we define the language and the commands.
+
+File: start.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               SetCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               RunFile("program.txt")
+       }
+
+
+We defined a language called MyLanguage, We have folder for the language commands.
+
+Each command will define a class that belong to the MyLanguage.Natural package.
+
+We will define two commands, Hello and Count.
+
+So we must have two files for defining the commands in the CurrentDir()+"/../command" folder
+
+File: hello.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeyword([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :hello, 
+               :Function = func {
+                       See  "Hello, Sir!" + nl + nl
+               }
+       ])
+
+File: count.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordNumberNumber([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :count, 
+               :Function = func {
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
+               }
+       ])
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; New Style to Ring Notepad
+
+New Style is added to Ring Notepad
+==================================
+
+In Ring Notepad - From View - Styles - Select the (Modern) Style
+
+Screen Shot:
+
+.. image:: rnotemodernstyle.png
+       :alt: Using Ring Notepad - Modern Style
+
+.. index:: 
+       pair: What is new in Ring 1.4?; RingREPL
+
+RingREPL
+========
+
+In the application folder, You will find RingREPL (Read-Eval-Print-Loop)
+
+Also you can run it from Ring Notepad (Menubar - Tools)
+
+Screen Shot:
+
+.. image:: ringrepl.png
+       :alt: Using RingREPL
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Convert between Numbers and Bytes
+
+Convert between Numbers and Bytes
+=================================
+
+Ring 1.4 comes with the next functions to convert between Numbers and Bytes.
+
+* Int2Bytes()
+* Float2Bytes()
+* Double2Bytes()
+* Bytes2Int()
+* Bytes2Float()
+* Bytes2Double()
+
+Example:
+
+.. code-block:: ring
+
+       see "Test Int2Bytes() and Bytes2Int() - Value : 77" + nl
+       r = Int2Bytes(77)
+       see "Int Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Int(r) + nl
+       see "Test Float2Bytes() and Bytes2Float() - Value 77.12" + nl
+       r = Float2Bytes(77.12)
+       see "Float Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Float(r) + nl
+       see "Test Double2Bytes() and Bytes2Double() - Value 9999977.12345" + nl
+       r = Double2Bytes(9999977.12345)
+       see "Double Size : " + len(r) + nl
+       see r + nl
+       decimals(5)
+       see Bytes2Double(r) + nl
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Better StdLib
+
+Better StdLib
+=============
+
+The StdLib is updated to include the next functions
+
+* FSize()
+
+The print() function is updated to accept local variables.
+
+.. code-block:: ring
+
+       load "stdlib.ring" 
+
+       func main 
+               print("Enter your name : ")     ;
+               Name = getString()              ;
+               print( "Hello : #{Name} ")      ;
+               return                          ;
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Better WebLib
+
+Better WebLib
+=============
+
+The web library is updated 
+
+* Provide better error message
+
+(1) Error (WebLib-1) : REQUEST_METHOD is empty ! - Run this script from the browser
+
+(2) Error (DataLib-1) : Can't connect to the database server!
+
+* Better Template() function - can accept NULL instead of object as the second paramter.
+
+.. code-block:: ring
+
+       html(template("main.rhtml",NULL))
+
+* The Form Class is updated to support the "target" attribute.
+
+.. code-block:: ring
+
+       BootStrapWebPage() 
+       {
+               Title = "The Ring Programming Language"
+               html(template("main.rhtml",NULL))
+               div {
+                       classname = :container
+                       div
+                       {
+                               id = "div3"
+                               color = "black"
+                               backgroundcolor = "white"
+                               width = "100%"
+                               form
+                               {
+                                       method = "POST"
+                                       Action = website  
+                                       Target = "codeoutput"
+                                       input { type="hidden" name="page" value=1 }
+                                       Table
+                                       { 
+                                               style = stylewidth("100%") +
+                                                       stylegradient(3)                        
+                                               TR
+                                               {
+                                       
+                                                       TD { align="center" 
+                                                               WIDTH="10%"
+                                                                text("Code :") 
+                                                       }
+                                                       TD {
+                                                               html(`
+                                                               <textarea name = "cCode" 
+                                                               rows="5" 
+                                                               style="width : 100%; ">
+                                                               See "Hello, World!" + nl
+                                                               </textarea>`)
+                                                       }
+                                               }
+                                       }
+                                       Input { type = "submit" 
+                                               classname="btn btn-primary btn-block" 
+                                                       value = "Execute" }
+                                       Table
+                                       { 
+                                               style = stylewidth("100%") +
+                                                       stylegradient(34)                       
+                                               TR
+                                               {
+                                       
+                                                       TD { align="center"
+                                                               WIDTH="10%" 
+                                                               text("Output :") 
+                                                       }
+                                                       TD {
+                                                       html(`
+                                                       <iframe name="codeoutput" 
+                                                       width="100%" 
+                                                       style="background-color:white;">
+                                                       </iframe>`)
+                                                       }
+                                               }
+                                       }
+
+                               }
+                       }
+
+               }
+               html(template("footer.rhtml",NULL))
+       }
+
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Better RingQt
+
+Better RingQt
+=============
+
+The next functions are added to RingQt
+
+* SetDialogIcon(cIconFile)
+* MsgInfo(cTitle,cMessage)
+* ConfirmMsg(cTitle,cMessage)
+* InputBox(cTitle,cMessage)
+* InputBoxInt(cTitle,cMessage)
+* InputBoxNum(cTitle,cMessage)
+* InputBoxPass(cTitle,cMessage)
+
+The next classes are added to RingQt
+
+* QToolButton
+* QSerialPort
+* QSerialPortInfo
+
+.. index:: 
+       pair: What is new in Ring 1.4?; Qt Class Convertor
+
+Qt Class Convertor
+==================
+
+Ring 1.4 comes with a simple tool that help in porting Qt classes to RingQt.
+
+You will find it in ring/samples/tools/QtClassConverter
+
+Online : https://github.com/ring-lang/ring/tree/master/samples/tools/QtClassConverter
+
+Screen Shot: 
+
+.. image:: qtclassconvertor.png
+       :alt: Qt Class convertor to RingQt
+
+.. index:: 
+       pair: What is new in Ring 1.4?; What is new in Ring 1.4.1?
+
+
+What is new in Ring 1.4.1?
+==========================
+
+Ring 1.4.1  comes with the next changes
+
+* Better Scripts for Building from Source Code
+* Better Colors for the Modern Style in Ring Notepad
+* Better StdLib
+* Better RingQt
+* New Sample : Sixteen Puzzle
+
+The scripts are updated for building from source code.
+
+Tested using Windows, Ubuntu Linux, Linux Mint and MacOS X.
+
+Screen Shot:
+
+.. image:: linuxmint.png
+       :alt: Using Ring - Linux Mint
+
+In Ring Notepad - the (Modern) Style colors are updated
+
+Screen Shot:
+
+.. image:: rnotemodernstyle2.png
+       :alt: Using Ring Notepad - Modern Style
+
+The StdLib is updated to include the next functions
+
+* TrimLeft()
+* TrimRight()
+* TrimAll()
+* EpochTime()
+
+The next functions are updated to display the dialogs on the top of other windows.
+
+* SetDialogIcon(cIconFile)
+* MsgInfo(cTitle,cMessage)
+* ConfirmMsg(cTitle,cMessage)
+* InputBox(cTitle,cMessage)
+* InputBoxInt(cTitle,cMessage)
+* InputBoxNum(cTitle,cMessage)
+* InputBoxPass(cTitle,cMessage)
+
+The Sixteen Puzzle is added to the Applications folder.
+
+Screen Shot:
+
+.. image:: sixteenpuzzle.jpg
+       :alt: Sixteen Puzzle
diff --git a/docs/en/target/whatisnew5.txt b/docs/en/target/whatisnew5.txt
new file mode 100644 (file)
index 0000000..8377d9a
--- /dev/null
@@ -0,0 +1,2123 @@
+.. index:: 
+       single: What is new in Ring 1.5?; Introduction
+
+========================
+What is new in Ring 1.5?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.5 release.
+
+.. index:: 
+       pair: What is new in Ring 1.5?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.5 comes with many new features!
+
+* Video-Music-Player Application
+* Windows StartUp Manager Application
+* Calculator Application
+* Better Ring Notepad
+* Better StdLib
+* Better WebLib
+* Better RingQt
+* Better Objects Library
+* RingFreeGLUT Extension
+* RingOpenGL Extension
+* Better Code Generator for Extensions
+* Better Documentation Generator for Extensions
+* Ring VM - Tracing Functions 
+* Trace Library and Interactive Debugger 
+* More Syntax Flexibility
+* Type Hints Library
+* Better Quality
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Video-Music-Player Application
+
+Video-Music-Player Application
+==============================
+
+The Video-Music-Player application is added to the Applications folder.
+
+Screen Shot:
+
+.. image:: videomusicplayer.jpg
+       :alt: Video Music Player
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Windows StartUp Manager Application
+
+Windows StartUp Manager Application
+===================================
+
+The Windows StartUp Manager 
+
+URL : https://github.com/ring-lang/WinStartupManager
+
+Screen Shot:
+
+.. image:: winstartupman.jpg
+       :alt: Windows Startup Manager
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Calculator Application
+
+Calculator Application
+======================
+
+The Calculator application is added to the Applications folder.
+
+Screen Shot:
+
+.. image:: calcapp.jpg
+       :alt: Calculator Application
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+(1) Ring Notepad is updated to include some new styles and the Main File ToolBar
+
+The idea of the Main File ToolBar is to determine the main file in the project
+When the project contains many source code files
+
+This way you can run the project ( Main File ) at any time while opening other files in the project
+without the need to switch to the Main File to run the project.
+
+
+To quickly use this feature
+
+(Open the project main file)
+
+Press Ctrl+Shift+M  to set the current source code file as the main file
+
+
+Open and modify other source code files in the project
+
+To run the project (Main File) at any time press Ctrl+Shift+F5 (GUI) or Ctrl+Shift+D (Console)
+
+Screen Shots:
+
+.. image:: rnote15shot1.png
+       :alt: Ring Notepad
+
+
+.. image:: rnote15shot2.png
+       :alt: Ring Notepad
+
+
+.. image:: rnote15shot3.png
+       :alt: Ring Notepad
+
+(2) The output window is updated to display the new lines correctly and contains the "Clear" button.
+
+Screen Shot: 
+
+.. image:: rnote15output.png
+       :alt: Output Window
+
+(3) The Ring Notepad is updated to quickly open and switch between large files while
+preparing the functions/classes lists in the background.
+
+Screen Shot: 
+
+.. image:: rnote15events.png
+       :alt: Ring Notepad - Large Files
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better StdLib
+
+Better StdLib
+=============
+
+New Functions
+
+* Print2Str()
+* ListAllFiles()
+* SystemCmd()
+
+(1) The Print2Str() is a new function added to the StdLib 
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       world = "World!"
+       mystring = print2str("Hello, #{world} \nIn Year \n#{2000+17} \n")
+
+       see mystring + nl
+
+Output:
+
+.. code-block:: ring
+
+       Hello, World!
+       In Year
+       2017
+
+(2) The ListAllFiles() is a new function added to the StdLib 
+
+Using this function we can quickly do a process on a group of files in a folder and it's sub folders.
+
+Example:
+
+.. code-block:: ring
+
+            load "stdlib.ring"
+            aList = ListAllFiles("c:/ring/ringlibs","ring") # *.ring only
+            aList = sort(aList)
+            see aList
+
+Example:
+
+.. code-block:: ring
+
+            load "stdlib.ring"
+            see listallfiles("b:/ring/ringlibs/weblib","") # All Files
+
+
+(3) The SystemCmd() is a new function added to the StdLib 
+
+The function will execute a system command like the System() function but 
+will return the output in a string.
+
+Example:
+
+.. code-block:: ring
+
+       cYou = SystemCmd("whoami")
+       See "SystemCmd: whoami ====="+ nl + cYou +nl
+
+Output:
+
+.. code-block:: ring
+
+       SystemCmd: whoami =====
+       desktop-umberto\umberto
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better WebLib
+
+Better WebLib
+=============
+
+The WebLib is updated to include the HTMLPage class
+
+Using this class we can create HTML documents without printing the output to the standard output
+
+So instead of using the WebLib in Web Applications only
+
+We can use it in Console/GUI/Mobile Applications too
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+
+       import System.Web
+
+       func main
+
+               mypage = new HtmlPage {
+                       h1 { text("Customers Report") }
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(4)
+                                 TR
+                                 {
+                                       TD { WIDTH="10%" text("Customers Count : " )  }
+                                       TD { text (100) }
+                                 }
+                       }
+       
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(26)
+                                 TR
+                                 {
+                                       style = stylewidth("100%") + stylegradient(24)
+                                       TD { text("Name " )  }
+                                       TD { text("Age" ) }
+                                       TD { text("Country" ) }
+                                       TD { text("Job" ) }     
+                                       TD { text("Company" ) }
+                                 }
+                                 for x =  1 to 100
+                                       TR
+                                       {
+                                               TD { text("Test" )  }
+                                               TD { text("30" ) }
+                                               TD { text("Egypt" ) }
+                                               TD { text("Sales" ) }   
+                                               TD { text("Future" ) }
+                                       }
+                                 next
+                       }
+
+               }
+
+               write("report.html",mypage.output())
+
+Using this feature we can create reports quickly using WebLib & GUILib together
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+       load "guilib.ring"
+
+       import System.Web
+       import System.GUI
+
+       new qApp {
+               open_window(:CustomersReportController)
+               exec()
+       }
+
+       class CustomersReportController
+
+               oView = new CustomersReportView
+
+               func Start
+                       CreateReport()
+
+               func CreateReport
+                       mypage = new HtmlPage {
+                               h1 { text("Customers Report") }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(4)
+                                       TR
+                                       {
+                                               TD { WIDTH="10%" 
+                                                       text("Customers Count : " )  }
+                                               TD { text (100) }
+                                       }
+                               }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(26)
+                                       TR
+                                       {
+                                               style = stylewidth("100%") +
+                                                       stylegradient(24)
+                                               TD { text("Name " )  }
+                                               TD { text("Age" ) }
+                                               TD { text("Country" ) }
+                                               TD { text("Job" ) }     
+                                               TD { text("Company" ) }
+                                       }
+                                       for x =  1 to 100
+                                               TR
+                                               {
+                                                       TD { text("Test" )  }
+                                                       TD { text("30" ) }
+                                                       TD { text("Egypt" ) }
+                                                       TD { text("Sales" ) }   
+                                                       TD { text("Future" ) }
+                                               }
+                                       next
+                               }
+                       }
+                       write("report.html",mypage.output())
+
+               func PrintEvent
+                       printer1 = new qPrinter(0) {
+                               setoutputformat(1)
+                               setoutputfilename("report.pdf")
+                       }
+                       oView {
+                               web.print(printer1)
+                               web.show()
+                       }
+                       system ("report.pdf")
+
+       class CustomersReportView
+
+                       win = new window() {
+                                       setwindowtitle("Report Window")
+                                       setgeometry(100,100,500,500)
+                                       web = new webview(win) {
+                                               setgeometry(100,100,1000,500)
+                                               loadpage(new qurl("file:///"+
+                                               currentdir()+"/report.html"))
+                                       }
+                                       new pushbutton(win) {
+                                                       setGeometry(100,20,100,30)
+                                                       settext("Print")
+                                                       setclickevent(Method(:PrintEvent))
+                                       }
+                                       showMaximized()
+                               }
+
+Screen Shot:
+
+.. image:: ring15reportshot.png
+       :alt: Customers Report
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better RingQt
+
+Better RingQt
+=============
+
+New classes added to RingQt :
+
+* QStringRef
+* QMutex
+* QMutexLocker
+* QBuffer
+* QBluetoothAddress
+* QBluetoothDeviceDiscoveryAgent
+* QBluetoothDeviceInfo
+* QBluetoothHostInfo
+* QBluetoothLocalDevice
+* QBluetoothServer
+* QBluetoothServiceDiscoveryAgent
+* QBluetoothServiceInfo
+* QBluetoothSocket
+* QBluetoothTransferManager
+* QBluetoothTransferReply
+* QBluetoothTransferRequest
+* QBluetoothUuid
+
+Example:
+
+.. code-block:: ring
+
+       ### Submits your car VIN - Vehicle Id Number - to the Web Site - vpic.nhtsa.dot.gov -
+       ### Parses XML data returned
+       ### Prints out the car info result
+
+       load "libcurl.ring"
+       load "guilib.ring"
+       load "stdlib.ring"
+
+       curl = curl_easy_init()
+
+       # request = "3G1JC5248YS251015?format=xml"  ### VIN - Chevrolet 
+         request = "3GYFK62847G247323?format=xml"  ### VIN - Cadillac
+
+       call_type   = "decodevinvalues/"
+       url         = "https://vpic.nhtsa.dot.gov/api/vehicles/"
+       url_request = url + call_type + request
+
+               See "URL Request: "+ url_request +nl
+
+       curl_easy_setopt(curl, curlopt_url, url_request)
+       response = curl_easy_perform_silent(curl);
+               
+               See nl +"Response Raw: "+ response +nl +nl
+
+       curl_easy_cleanup(curl)
+
+       xml = new qxmlstreamreader()
+       xml.adddata_2(response)
+
+       x = new qstringref()
+       while not xml.atend()
+                  if xml.error()
+                                  see xml.errorstring() see nl
+                                  exit loop
+                  ok
+
+                  x = xml.text()
+                  if not x.length() = 0
+                                  see "Length: " see x.length() +" --- "
+                                  see "Value: " see x.tostring() see nl
+                  ok
+
+                  xml.readnext()
+       end
+
+       get x
+
+       ###------------------------------------------
+       ### Results
+       #
+       # ==>Value: 115
+       # ==>Value: Results returned successfully
+       # ==>Value: VIN(s): 3G1JC5248YS251015
+       # ==>Value: 3G1JC5248YS251015
+       # ==>Value: Sedan/Saloon
+       # ==>Value: 4
+       # ==>Value: 2200.0
+       # ==>Value: 134.25223700841
+       # ==>Value: 2.2
+       # ==>Value: 4
+       # ==>Value: LN2
+       # ==>Value: CHEVROLET
+       # ==>Value: GENERAL MOTORS LLC
+       # ==>Value: Cavalier
+       # ==>Value: 2000
+       # ==>Value: Ramos Arzipe
+       # ==>Value: PASSENGER CAR
+       # ==>Value: 4
+       # ==>Value: In-Line
+       # ==>Value: 1st Row (Driver & Passenger)
+       # ==>Value: Sequential Fuel Injection (SFI)
+       # ==>Value: Mexico
+       # ==>Value: NA
+       # ==>Value: Manual
+       # ==>Value: Body Type: Sedan, 4-6 Window, Notchback (GM codes: 19, 69)
+       # ==>Value:  Name Plate: Chevrolet, Pontiac
+       # ==>Value: 0 - VIN decoded clean. Check Digit (9th position) is correct
+       # ==>Value: LAN
+       # ==>Value: 984
+       #
+       ###-----------------------------------------
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Objects Library
+
+Better Objects Library
+======================
+
+The function Open_WindowInPackages() is added to the Objects library.
+
+The Open_WindowInPackages() function is the same as Open_Window()
+but takes an extra list that determine the packages 
+to import before opening the window.
+
+Syntax:
+
+.. code-block:: ring
+
+       Open_WindowInPackages(cClassName,aPackagesList)
+
+Example:
+
+The next example from the Form Designer source code, Open the Window Flags window
+using the open_windowInPackages() function.
+
+We determine the class name "WindowFlagsController" and the packages name.
+
+The Window Flags window uses the FormDesigner and System.GUI packages.
+
+.. code-block:: ring
+
+       open_windowInPackages(:WindowFlagsController,[
+               "formdesigner",
+               "System.GUI"
+       ])
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; RingFreeGLUT Extension
+
+RingFreeGLUT Extension
+======================
+
+Ring 1.5 comes with RingFreeGLUT extension to support the FreeGLUT library
+
+Example:
+
+.. code-block:: ring
+
+       /*
+               This sample is based on C Tutorials 
+               from : http://www.lighthouse3d.com/tutorials/glut-tutorial/
+       */
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       // angle of rotation for the camera direction
+       angle = 0.0
+
+       // actual vector representing the camera's direction
+       lx=0.0 lz=-1.0
+
+       // XZ position of the camera
+       x=0.0  z=5.0
+
+       // the key states. These variables will be zero
+       //when no key is being presses
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // Constant definitions for Menus
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // Pop up menu identifiers
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // color for the nose
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // scale of snowman
+       scale = 1.0
+
+       // menu status
+       menuFlag = 0
+
+       // default font
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       // width and height of the window
+       h = 0
+       w = 0
+
+       // variables to compute frames per second
+       frame=0
+       time=0
+       timebase=0
+       s = ""
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // Prevent a divide by zero, when window is too short
+               // (you cant make a window of zero width).
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // Use the Projection Matrix
+               glMatrixMode(GL_PROJECTION)
+
+               // Reset Matrix
+               glLoadIdentity()
+
+               // Set the viewport to be the entire window
+               glViewport(0, 0, w, h)
+
+               // Set the correct perspective.
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Get Back to the Modelview
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // Draw Body
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // Draw Head
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // Draw Eyes
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // Draw Nose
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+       func renderStrokeFontString x,y,z,font,string
+               glPushMatrix()
+               glTranslatef(x, y,z)
+               glScalef(0.002, 0.002, 0.002)
+               for c in string
+                       glutStrokeCharacter(font, Ascii(c));
+               next
+               glPopMatrix()
+
+
+       func restorePerspectiveProjection
+
+               glMatrixMode(GL_PROJECTION)
+               // restore previous projection matrix
+               glPopMatrix()
+
+               // get back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func setOrthographicProjection
+
+               // switch to projection mode
+               glMatrixMode(GL_PROJECTION)
+
+               // save previous matrix which contains the
+               //settings for the perspective projection
+               glPushMatrix()
+
+               // reset matrix
+               glLoadIdentity()
+
+               // set a 2D orthographic projection
+               gluOrtho2D(0, w, h, 0)
+
+               // switch back to modelview mode
+               glMatrixMode(GL_MODELVIEW)
+
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // Clear Color and Depth Buffers
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // Reset transformations
+               glLoadIdentity()
+
+               // Set the camera
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // Draw ground
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // Draw 9 SnowMen
+               for i = -3 to -1
+                       for j = -3 to -1
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*3+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               // Code to compute frames per second
+               frame++
+
+               time=glutGet(GLUT_ELAPSED_TIME)
+               if time - timebase > 1000 
+                       s = "RingFreeGLUT - FPS: " + (frame*1000.0/(time-timebase))
+                       timebase = time
+                       frame = 0
+               ok
+
+               // Code to display a string (fps) with bitmap fonts
+               setOrthographicProjection()
+
+               glPushMatrix()
+               glLoadIdentity()
+               renderBitmapString(5,30,0,GLUT_BITMAP_HELVETICA_18,s)
+               glPopMatrix()
+
+               restorePerspectiveProjection()
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             KEYBOARD
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             MOUSE
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // this will only be true when the left button is down
+               if xOrigin >= 0
+
+                       // update deltaAngle
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // update camera's direction
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // only start motion if the left button is pressed
+               if button = GLUT_LEFT_BUTTON
+                       // when the button is released
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             MENUS
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // nothing to do in here
+               // all actions are for submenus
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+               // attach the menu to the right button
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // this will allow us to know if the menu is active
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             MAIN
+       // -----------------------------------
+
+       func main
+
+               // init GLUT and create window
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test - 9 SnowMan")
+
+               // register callbacks
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+               // here are the two new functions
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL init
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // init Menus
+               createPopupMenus()
+
+               // enter GLUT event processing cycle
+               glutMainLoop()
+
+
+Screen Shots:
+
+.. image:: ring15freeglut.png
+       :alt: RingFreeGLUT
+
+
+.. image:: ring15freeglut2.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: What is new in Ring 1.5?; RingOpenGL Extension
+
+RingOpenGL Extension
+====================
+
+Ring 1.5 comes with RingOpenGL and support for the next versions 
+
+* OpenGL 1.1
+* OpenGL 1.2
+* OpenGL 1.3
+* OpenGL 1.4
+* OpenGL 1.5
+* OpenGL 2.0
+* OpenGL 2.1
+* OpenGL 3.0
+* OpenGL 3.2
+* OpenGL 3.3
+* OpenGL 4.0
+* OpenGL 4.1
+* OpenGL 4.2
+* OpenGL 4.3
+* OpenGL 4.4
+* OpenGL 4.5
+* OpenGL 4.6
+
+Example:
+
+.. code-block:: ring
+
+       /*
+               This sample is based on C Tutorials 
+               from : 
+                       http://www.wikihow.com/Make-a-Cube-in-OpenGL
+       */
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // ----------------------------------------------------------
+       // Global Variables
+       // ----------------------------------------------------------
+       rotate_y=0 
+       rotate_x=0
+        
+       // ----------------------------------------------------------
+       // display() Callback function
+       // ----------------------------------------------------------
+       func display
+        
+         //  Clear screen and Z-buffer
+         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
+        
+         // Reset transformations
+         glLoadIdentity()
+        
+         // Rotate when user changes rotate_x and rotate_y
+         glRotatef( rotate_x, 1.0, 0.0, 0.0 )
+         glRotatef( rotate_y, 0.0, 1.0, 0.0 )
+        
+         //Multi-colored side - FRONT
+         glBegin(GL_POLYGON)
+        
+         glColor3f( 1.0, 0.0, 0.0 )     glVertex3f(  0.5, -0.5, -0.5 )      # P1 is red
+         glColor3f( 0.0, 1.0, 0.0 )     glVertex3f(  0.5,  0.5, -0.5 )      # P2 is green
+         glColor3f( 0.0, 0.0, 1.0 )     glVertex3f( -0.5,  0.5, -0.5 )      # P3 is blue
+         glColor3f( 1.0, 0.0, 1.0 )     glVertex3f( -0.5, -0.5, -0.5 )      # P4 is purple
+        
+         glEnd()
+        
+         // White side - BACK
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  1.0, 1.0 )
+         glVertex3f(  0.5, -0.5, 0.5 )
+         glVertex3f(  0.5,  0.5, 0.5 )
+         glVertex3f( -0.5,  0.5, 0.5 )
+         glVertex3f( -0.5, -0.5, 0.5 )
+         glEnd()
+        
+         // Purple side - RIGHT
+         glBegin(GL_POLYGON)
+         glColor3f(  1.0,  0.0,  1.0 )
+         glVertex3f( 0.5, -0.5, -0.5 )
+         glVertex3f( 0.5,  0.5, -0.5 )
+         glVertex3f( 0.5,  0.5,  0.5 )
+         glVertex3f( 0.5, -0.5,  0.5 )
+         glEnd()
+        
+         // Green side - LEFT
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  1.0,  0.0 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         // Blue side - TOP
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  0.0,  1.0 )
+         glVertex3f(  0.5,  0.5,  0.5 )
+         glVertex3f(  0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glEnd()
+        
+         // Red side - BOTTOM
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  0.0,  0.0 )
+         glVertex3f(  0.5, -0.5, -0.5 )
+         glVertex3f(  0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         glFlush()
+         glutSwapBuffers()
+        
+        
+       // ----------------------------------------------------------
+       // specialKeys() Callback Function
+       // ----------------------------------------------------------
+       func specialKeys
+
+               key = glutEventKey()
+        
+         //  Right arrow - increase rotation by 5 degree
+               switch Key
+
+               on GLUT_KEY_RIGHT
+                       rotate_y += 5
+        
+               //  Left arrow - decrease rotation by 5 degree
+               on GLUT_KEY_LEFT
+                       rotate_y -= 5
+        
+               on GLUT_KEY_UP
+                       rotate_x += 5
+        
+               on GLUT_KEY_DOWN
+                       rotate_x -= 5
+        
+               off
+
+         //  Request display update
+         glutPostRedisplay()
+        
+
+        
+       // ----------------------------------------------------------
+       // main() function
+       // ----------------------------------------------------------
+       func main
+        
+         //  Initialize GLUT and process user parameters
+         glutInit()
+        
+         //  Request double buffered true color window with Z-buffer
+         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
+        
+         // Create window
+         glutCreateWindow("Awesome Cube")
+        
+         //  Enable Z-buffer depth test
+         glEnable(GL_DEPTH_TEST)
+        
+         // Callback functions
+         glutDisplayFunc(:display)
+         glutSpecialFunc(:specialKeys)
+        
+         //  Pass control to GLUT for events
+         glutMainLoop()
+        
+         //  Return to OS
+
+
+Screen Shot:
+
+.. image:: ring15opengl.png
+       :alt: RingOpenGL
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Code Generator for Extensions
+
+Better Code Generator for Extensions
+====================================
+
+The Code Generator is updated to support <constant> type, So we can have
+constants other than numbers, for example : Strings and Pointers. 
+
+When we have pointers we can determine the pointer type.
+To use this feature, before <constant> and </constant> we can use
+
+.. code-block:: ring
+
+       $nDefaultConstantType = C_CONSTANT_TYPE_POINTER
+       $cDefaultConstantPointerType = "void *"
+
+The next example from the RingFreeGLUT extension
+
+.. code-block:: ring
+
+       <runcode>
+               $nDefaultConstantType = C_CONSTANT_TYPE_POINTER 
+               $cDefaultConstantPointerType = "void"
+       </runcode>
+       <constant>
+               GLUT_STROKE_ROMAN  
+               GLUT_STROKE_MONO_ROMAN
+               GLUT_BITMAP_9_BY_15   
+               GLUT_BITMAP_8_BY_13   
+               GLUT_BITMAP_TIMES_ROMAN_10
+               GLUT_BITMAP_TIMES_ROMAN_24 
+               GLUT_BITMAP_HELVETICA_10   
+               GLUT_BITMAP_HELVETICA_12   
+               GLUT_BITMAP_HELVETICA_18   
+       </constant>
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Documentation Generator for Extensions
+
+Better Documentation Generator for Extensions
+=============================================
+
+The documentation generator for extensions is updated to generate a list of constants
+in the generated documentation
+
+The previous versions provides the functions prototype only, Now we have the list of
+constants too. 
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Ring VM - Tracing Functions 
+
+Ring VM - Tracing Functions 
+===========================
+
+In Ring 1.5 the next functions are added to Ring VM
+
+* RingVM_SetTrace(cCode)
+* RingVM_TraceData() --> aDataList
+* RingVM_TraceEvent() --> nTraceEvent
+* RingVM_TraceFunc() --> cCode
+* RingVM_ScopesCount() --> nScopes
+* RingVM_EvalInScope(nScope,cCode) 
+* RingVM_PassError()
+* RingVM_HideErrorMsg(lStatus)
+* RingVM_CallFunc(cFuncName)
+
+Example:
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       ringvm_settrace("mytrace()")
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+       mytest()
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       func mytrace
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+Output:
+
+.. code-block:: none
+
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 3
+       File Name   : test1.ring
+       Function Name : ringvm_settrace
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 5
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Hello, world!
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 6
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Welcome
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 7
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       How are you?
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 12
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       Message from mytest
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 14
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 43
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 44
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       Message from mymethod
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 11
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Trace Library and Interactive Debugger
+
+Trace Library and Interactive Debugger
+======================================
+
+Ring 1.5 comes with the Trace Library and the Interactive Debugger
+
+Using this library we can trace events, execute programs line by line, open the 
+Interactive Debugger when an error happens or at breakpoints.
+
+Example:
+
+The next example uses a Breakpoint to open the Interactive Debugger!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+
+Screen Shots:
+
+We have the Interactive Debugger at the Breakpoint!
+
+.. image:: debugshot1.png
+       :alt: Interactive Debugger
+
+We can print the variables values
+
+.. image:: debugshot2.png
+       :alt: Interactive Debugger
+
+We can change the variables values then continue execution
+
+.. image:: debugshot3.png
+       :alt: Interactive Debugger
+
+We can run the Interactive Debugger in the Output Window
+
+.. image:: debugshot4.png
+       :alt: Interactive Debugger
+
+.. index:: 
+       pair: What is new in Ring 1.5?; More Syntax Flexibility
+
+More Syntax Flexibility
+=======================
+
+* Using braces { } in Packages/Classes/Functions
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+       {
+               class myclass 
+               {
+                       func myfunc 
+                       {
+                               print("Hello, World!\n")
+                       }
+               }
+       }
+
+* Using 'end' keyword after Packages/Classes/Functions
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+               class myclass 
+                       def myfunc 
+                               put "Hello, World!"
+                       end
+               end
+       end
+
+* Using 'endpackage'/'endclass'/'endfunc' keywords after Packages/Classes/Functions
+
+Example:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass { myfunc() }
+
+       package mypackage
+               class myclass
+                       func myfunc                     
+                               see "welcome"  + nl
+                       endfunc
+               endclass
+       endpackage
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Type Hints Library
+
+Type Hints Library
+==================
+
+Ring 1.5 comes with the Type Hints library
+
+Using this library we can add the type information to the source code which will be 
+very useful for tools like
+
+* Code Editors 
+* Static-Analysis
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       see sum(3,4) + nl ;
+       see sayHello("Mahmoud");
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+The library is very powerful and support the User types (Classes) automatically!
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       import mypackage 
+
+       test()  { main([:one,:two,:three]) }
+
+       myclass func test() {
+               see "Testing User Types!" + nl
+               return new myclass
+       }
+
+       package mypackage {
+               public class myclass {
+                       public static void func main(list args) {
+                               see "welcome" + nl
+                               see args
+                       }
+               }
+       }
+
+Also You can use the types inside the code (not only the function prototype)
+
+Example:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       int     sum = sum(3,4)
+       string  msg = sayHello("Mahmoud")
+
+       see "Sum = " + sum + nl + msg + nl
+
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+Rules:
+
+* To use the types in the function prototype, You must use '(' and ')' around parameters
+* To use the types in the function code, You must set the variable value (Assignment).
+
+.. note:: Ring is a dynamic language, No type checking will be done by the compiler.
+
+.. index:: 
+       pair: What is new in Ring 1.5?; Better Quality
+
+Better Quality
+==============
+
+Based on Ring usage every day in practical projects
+
+Ring 1.5 is more stable and more productive!
+
+We are adding features based on clear vision and practical needs.
+
+Also the documentation is better.
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.1?
+
+What is new in Ring 1.5.1?
+==========================
+
+* Better Documentation
+* StdLib - Factorial() function update
+* RingVM - Better code for clearing the stack in the Class Region.
+* Sample : 3D Cube (OpenGL) + Texture Image using GameLib (RingAllegro)
+
+Source Code:
+
+.. code-block:: ring
+
+       load "gamelib.ring"
+       load "opengl21lib.ring"
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Ring Cube"
+
+               bitmap texture
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("ring.bmp")
+                       texture = al_get_opengl_texture(bitmap)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+
+               func drawScene
+
+                       w = 800 h = 600
+                       ratio =  w / h
+
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+
+                       gluPerspective(45,ratio,1,100)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)                                                 
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+                       glLoadIdentity();                                                                       
+                       glTranslatef(0.0,0.0,-5.0);
+
+                       glRotatef(xrot,1.0,0.0,0.0);
+                       glRotatef(yrot,0.0,1.0,0.0);
+                       glRotatef(zrot,0.0,0.0,1.0);
+
+                       glBindTexture(GL_TEXTURE_2D, texture)
+
+                       glBegin(GL_QUADS)
+                               // Front Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // Back Face
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // Top Face
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // Bottom Face
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               // Right face
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               // Left Face
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+                       xrot += 0.3
+                       yrot += 0.2
+                       zrot += 0.4
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+Screen Shot:
+
+.. image:: ringcube3d.png
+       :alt: Ring Cube
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.2?
+
+What is new in Ring 1.5.2?
+==========================
+
+* Documentation - Chapter "Applications developed in little hours" is updated
+* Ring Notepad  - Display programs output in the output window on all platforms
+* Form Designer - Help Menu - Open CHM/PDF files without displaying the console window
+* Form Designer - Better response to Resize/Move Events when moving the Mouse quickly
+* Form Designer - New/Open/Save As, will open the Controller class in Ring Notepad 
+* Form Designer - Added "Close Form" option to the file menu
+* Ring Notepad  - Run, will save the current file (Also the opened Form) automatically
+* GetQuotesHistory Application - Updated to work on MacOS X and Qt 5.2
+* Calculator Application - Updated to include more features!
+* RingVM - Classification for Environment Errors (Check Chapter : Language Reference)
+* RingQt - New methods added to QAllEvents for faster Events execution
+* RingQt - Fusion Black Style - Better colors for disabled controls
+* Scripts - For building Ring on Fedora Linux (Check Chapter : Building From Source Code)
+
+Screen Shot:
+
+.. image:: fedora.png
+       :alt: Ring on Fedora 1
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.3?
+
+What is new in Ring 1.5.3?
+==========================
+
+* Form Designer : Close Action will notify Ring Notepad to be able to open the Form again
+* Form Designer : Save Action will open the controller class in Ring Notepad
+* Form Designer : Keep current control selected when selecting many controls using CTRL Key
+* Form Designer : Nice form back color when used in Ring Notepad (Style: Modern Black)
+* RingOpenSSL : Updated to support newer versions like OpenSSL 1.1 
+* Building Scripts : Updated to work on Fedora 26 (64bit)
+* OpenGL : New Sample - Many Cubes (samples/3D/manycubes)
+
+Screen Shot:
+
+.. image:: manycubes.png
+       :alt: Many Cubes
+
+* RingQt : Add QDateTime Class 
+* RingQt : New methods added to QMenu and QCursor Classes
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qwidget() {
+                       setwindowtitle("Context Menu")
+                       resize(400,400)
+                       myfilter = new qAllEvents(win) {
+                               setContextmenuEvent("mymenu()")
+                       }
+                       installeventfilter(myfilter)
+                       show()
+               }
+               exec()
+       }
+
+
+       func mymenu 
+
+               new qMenu(win) {
+                       oAction = new qAction(win) {
+                               settext("new")
+                               SetCLickevent("See :New")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("open")
+                               SetCLickevent("See :Open")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("save")
+                               SetCLickevent("See :Save")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("close")
+                               SetCLickevent("See :Close")
+                       }
+                       addaction(oAction)
+                       oCursor  = new qCursor()
+                       exec(oCursor.pos())
+               }
+       
+
+* Compiler : Support using _ in numbers
+
+Example:
+
+.. code-block:: ring
+
+       x = 1_000_000
+       see type(x)+nl
+       see x+1+nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
+       100000001
+
+* Compiler : Support using f after numbers
+
+Example:
+
+.. code-block:: ring
+
+       x = 19.99f
+       see type(x) + nl
+
+Output:
+
+.. code-block:: ring
+
+       NUMBER
+
+* Google API Shortener Application
+
+Screen Shots:
+
+.. image:: urlappshot1.png
+       :alt: URLShortener - shot 1
+
+* TicTacToe 3D Game
+
+Screen Shot:
+
+.. image:: tictactoe3d.png
+       :alt: TicTacToe 3D Game
+
+
+.. index:: 
+       pair: What is new in Ring 1.5?; What is new in Ring 1.5.4?
+
+What is new in Ring 1.5.4?
+==========================
+
+* CalmoSoft Fifteen Puzzle Game 3D
+* Ring Notepad - New Styles 
+* Ring Notepad - Better Toolbar Style
+* Ring Notepad - View Modes 
+* Ring Notepad - QPlainTextEdit - don't set back color for the scroll bars
+* Ring Notepad - Style Fusion (White) - use Silver color for comments 
+* Ring Notepad - Tab and Shift-Tab - Indent multiple lines
+* Form Designer - Better Toolbar Style
+* Form Designer - Nice backcolor for Window Flags and Menubar Designer
+* Form Designer - Default back color for controls
+* RingQt - Added grab() and windowHandle() methods to QWidget class
+* RingQt - Added new methods to QPixmap Class
+* RingQt - Added Classes :-
+       * QScreen
+       * QWindow
+       * QGuiApplication
+       * QTextBrowser
+* Code Generator for Extensions - Nonew Option - Support Parent Class
+* Ring VM - Internal Implementation - Pass state to Strings and Lists objects
+* Ring VM - Garbage Collector - Memory Pool for Small Objects
+* Ring VM - Better code for Saving/Restoring the State
diff --git a/docs/en/target/whatisnew6.txt b/docs/en/target/whatisnew6.txt
new file mode 100644 (file)
index 0000000..8b42fad
--- /dev/null
@@ -0,0 +1,479 @@
+.. index:: 
+       single: What is new in Ring 1.6?; Introduction
+
+========================
+What is new in Ring 1.6?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.6 release.
+
+.. index:: 
+       pair: What is new in Ring 1.6?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.6 comes with many new features!
+
+* Employee Application
+* New Tool: Ring2EXE 
+* Better Ring For Android
+* New Tool : Folder2qrc
+* Better Scripts for building Ring
+* RingConsoleColors Extension
+* RingMurmurHash Extension
+* Better Ring Notepad
+* Better RingQt
+* Better StdLib
+* Better RingVM
+* Better RingREPL
+* Using Tab instead of char(9)
+* Using CR as Carriage return
+* Using the ! operator as not
+* Using && and || operators
+* Using ? to print expression then new line
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Employee Application
+
+Employee Application
+====================
+
+The Employee application is added to ring/applications
+
+Developer: Ahmed Hassouna 
+
+.. image:: empapp.png
+       :alt: Employee Sample
+
+.. index:: 
+       pair: What is new in Ring 1.6?; New Tool: Ring2EXE
+
+New Tool: Ring2EXE
+==================
+
+In Ring 1.6 we have a nice tool called Ring2EXE (Written in Ring itself)
+
+Using Ring2EXE we can distribute applications quickly for Windows, Linux, macOS and Mobile devices
+
+Read the chapter "Distributing Ring Applications using Ring2EXE" for more information!
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better Ring For Android
+
+Better Ring For Android
+=======================
+
+Ring For Android (using RingQt) is updated to use the Ring Object File ( *.ringo ) instead of using
+many source code files ( *.ring )
+
+The next screen shot is an example of building the cards game for Android
+
+We are using cards.ringo instead of cards.ring
+
+If you have large project (many *.ring files) it will use only one *.ringo file.
+
+.. image:: cardsqt.png
+       :alt: Better Ring for Android
+
+
+To prepare Qt project to distribute RingQt application for Mobile use Ring2EXE
+
+Example 
+
+.. code-block:: ring
+
+       ring2exe cards.ring -dist -mobileqt
+
+Example (2)
+
+.. code-block:: ring
+
+       ring2exe formdesigner.ring -dist -mobileqt
+
+.. image:: formdesignerandroid.png
+       :alt: Form Designer - Android
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; New Tool: Folder2qrc
+
+New Tool: Folder2qrc
+====================
+
+When we have large RingQt project that contains a lot of images and files, We need to add these files 
+to the resource file ( *.qrc ) when distributing applications for Mobile devices. 
+
+Instead of adding these files one by one, Ring 1.6 comes with a simple tool that save our time, It's
+called Folder2qrc.
+
+Example:
+
+.. code-block:: none
+
+       folder2qrc formdesigner.ring
+
+We determine the main source file while we are in the application folder, and Folder2qrc will check all
+of the files in the current folder and sub folders, Then add them to the resource file after the
+mainfile.ringo (In our example this will be formdesigner.ringo)
+
+The output file will be : project.qrc
+
+You can open it and remove the files that you don't need in the resources!
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better Scripts for building Ring
+
+Better Scripts for building Ring
+================================
+
+Ring 1.6 comes with better scripts for building Ring from source code.
+
+The updates are tested on 32bit and 64bit systems on Windows, Linux (Ubuntu,Fedora) and macOS.
+
+The scripts for Windows are updated to find the Visual C/C++ compiler based on your Visual Studio version.
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; RingConsoleColors Extension
+
+RingConsoleColors Extension
+===========================
+
+Using the RingConsoleColors extension we can easily change the colors used in our console applications
+
+.. image:: consolecolors.png
+       :alt: RingConsoleColors
+
+For more information check the RingConsoleColors chapter in the documentation.
+
+.. index:: 
+       pair: What is new in Ring 1.6?; RingMurmurHash Extension
+
+RingMurmurHash Extension
+========================
+
+Ring 1.6 comes with the RingMurmurHash extension!
+
+Developer: Hassan Ahmed
+
+Example:
+
+.. code-block:: ring
+
+       load "murmurhashlib.ring"
+
+       key = "Ring Language"
+
+       see murmurhash3_x86_32(key, 0, 0) + nl // Output: 1894444853
+       see murmurhash3_x86_32(key, 0, 1) + nl // Output: 70eaef35
+
+For more information check the RingMurmurHash chapter in the documentation.
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+Ring Notepad comes with the next updates
+
+(1) Automatic setting for the Main File when we Run the application (using the Main file buttons).
+
+(2) Main File - Automatic save before running.
+
+(3) When we run GUI application - don't change the focus to the text box used for the input in the Output Window.
+
+(4) A button and option to run web applications
+
+.. image:: runwebapp1.png
+       :alt: Ring Notepad - Run Web Application - shot 1
+
+For Windows users, Ring 1.6 comes with Apache Web server!
+
+We can run any web application from any folder directly without doing any configuration.
+
+.. image:: runwebapp2.png
+       :alt: Ring Notepad - Run Web Application - shot 2
+
+(5) Tools - Operating System - Terminal (Command Prompt) & Files Manager (Explorer).
+
+.. image:: rnotetoolsterminal.png
+       :alt: Ring Notepad - Tools - Terminal - shot 1
+
+So we can quickly open the Command Prompt or the Explorer at the application folder.
+
+.. image:: rnotetoolsterminal2.png
+       :alt: Ring Notepad - Tools - Terminal - shot 2
+
+(6) Support *.sh & *.bat extensions.
+
+(7) New Menu: Distribute 
+
+.. image:: rnotedistribute.png
+       :alt: Ring Notepad - Distribute
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better RingQt
+
+Better RingQt
+=============
+
+RingQt comes with the next updates
+
+(1) QAllEvents - getkeytext() Method
+
+(2) QSQLQuery - exec_2() Method
+
+(3) QDockWidget Events
+
+(4) AppFile() Function
+
+(5) IsMobile() Function
+
+(6) QRegion Class
+
+(7) QCoreApplication class
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better StdLib
+
+Better StdLib
+=============
+
+StdLib comes with the next updates
+
+(1) Factors() function is updated (Return the output instead of printing it)
+
+(2) Palindrome() function is updated (Return the output instead of printing it)
+
+(3) Using stdlibcore.ring we can use the StdLib functions (Without Classes)
+
+    Also this is useful when developing standalone console applications
+
+    Because using stdlib.ring (functions & classes) will load libraries like RingLibCurl, RingOpenSSL, etc.
+
+
+(4) New Functions
+
+* SystemSilent(cCommand) Function : Execute system commands without displaying the output.
+
+* OSCreateOpenFolder(cFolder) : Create folder then change the current folder to this new folder 
+
+* OSCopyFolder(cParentFolder,cFolderNameToCopy) : Copy folder to the current directory
+
+* OSDeleteFolder(cFolder) : Delete Folder
+
+* OSCopyFile(cFileName) : Copy File to the current directory
+
+* OSDeleteFile(cFileName) : Delete File
+
+* OSRenameFile(cOldFileName,cNewFileName) : Rename file 
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better RingVM
+
+Better RingVM
+=============
+
+RingVM comes with the next updates
+
+(1) Support using many getter methods in Expressions
+
+(2) Support using this & self in setter/getter/normal methods without calling setter/getter methods.
+
+(3) TempName() function is updated (Better Code)
+
+(4) ExeFileName() function is updated (Better Code)
+
+(5) Private Attributes - Support re-usage in the class region (After the keyword private)
+
+(6) Ring API : ring_scanner_runobjstring()
+
+(7) ring_state_setvar() function
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Better RingREPL
+
+Better RingREPL
+===============
+
+RingREPL comes with the next updates
+
+(1) RingREPL will get command line parameters to determine the style.
+
+(2) Setting RingREPL Style based on Ring Notepad Style.
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using Tab instead of char(9)
+
+Using Tab instead of char(9)
+============================
+
+The variable Tab is defined to be used instead of char(9)
+
+Example (1):
+
+.. code-block:: ring
+
+       see :one + nl + tab + :two + nl + tab + tab + :three
+
+Output:
+
+.. code-block:: none
+
+       one
+               two
+                       three
+
+You can change the variable to another value
+
+Example (2):
+
+.. code-block:: ring
+
+       tab = "  "
+       see :one + nl + tab + :two + nl + tab + tab + :three
+
+Output:
+
+.. code-block:: none
+
+       one
+         two
+           three
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using CR as Carriage return
+
+Using CR as Carriage return
+===========================
+
+The next example count from 1 to 10 in the same line during 10 seconds
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       for x = 1 to 10 see x sleep(1) see cr next
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using the ! operator as not
+
+Using the ! operator as not
+===========================
+
+We have = and != in the Ring language
+
+But for the logical operators we have and, or & not
+
+Now we can use the ! operator as not
+
+Example:
+
+.. code-block:: ring
+
+       if ! false
+               see "True!" + nl
+       ok
+
+Output
+
+.. code-block:: none
+
+       True!
+
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using && and || operators
+
+Using && and || operators
+=========================
+
+In Ring we have the next keywords for the logical operations
+
+* and
+* or
+* not
+
+Now we have also the next operators
+
+* &&
+* ||
+* !
+
+Example:
+
+.. code-block:: ring
+
+       if one() and two()
+               see "Test1 - Fail" + nl
+       else
+               see "Test1 - Pass" + nl
+       ok
+
+       if two() or one()
+               see "Test2 - Pass" + nl
+       else
+               see "Test2 - Fail" + nl
+       ok
+
+       if one() && two()
+               see "Test3 - Fail" + nl
+       else
+               see "Test3 - Pass" + nl
+       ok
+
+       if two() || one()
+               see "Test4 - Pass" + nl
+       else
+               see "Test4 - Fail" + nl
+       ok
+
+       func one return True
+
+       func two return False
+
+Output:
+
+.. code-block:: none
+
+       Test1 - Pass
+       Test2 - Pass
+       Test3 - Pass
+       Test4 - Pass
+
+.. index:: 
+       pair: What is new in Ring 1.6?; Using ? to print expression then new line
+
+Using ? to print expression then new line
+=========================================
+
+It's common to print new line after printing an expression, We can use the ? operator to do that!
+
+Example:
+
+.. code-block:: ring
+
+       ? "Hello, World!"
+       for x = 1 to 10
+               ? x
+       next
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
diff --git a/docs/en/target/whatisnew7.txt b/docs/en/target/whatisnew7.txt
new file mode 100644 (file)
index 0000000..e0b4181
--- /dev/null
@@ -0,0 +1,458 @@
+.. index:: 
+       single: What is new in Ring 1.7?; Introduction
+
+========================
+What is new in Ring 1.7?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.7 release.
+
+.. index:: 
+       pair: What is new in Ring 1.7?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.7 comes with many new features!
+
+* New Command: Load Package
+* ringvm_see() and ringvm_give() functions
+* ring_state_new() and ring_state_mainfile() functions
+* Better Trace Library
+* Better Ring Notepad
+* Better RingQt
+* Better Ring2EXE
+* Better RingZip
+* Better Documentation
+* Better Ring VM
+* RingLibuv Extension
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; New Command: Load Package
+
+New Command: Load Package
+=========================
+
+Using the 'load' command we can use many ring source files in the same project
+
+But all of these files will share the same global scope 
+
+Now we have the "Load Package" command too
+
+Using "Load Package" we can load a library (*.ring file) in new global scope
+
+This is very useful to create libraries that avoid conflicts in global variables
+
+Example:
+
+File: loadpackage.ring
+
+.. code-block:: ring
+
+       x = 100
+       ? "Hello, World!"
+       load package "testloadpackage.ring"
+
+       ? x
+       test()
+
+File: testloadpackage.ring
+
+.. code-block:: ring
+
+       ? "Hello from testloadpackage.ring"
+
+       x = 1000
+
+       test()
+
+       func test
+               ? x
+
+Output:
+
+.. code-block:: none
+
+       Hello, World!
+       Hello from testloadpackage.ring
+       1000
+       100
+       1000
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; ringvm_see() and ringvm_give() functions
+
+ringvm_see() and ringvm_give() functions
+========================================
+
+Using the ringvm_see() function we can redefine the behavior of the See command
+
+Also we can use ring_see() to have the original behavior
+
+Example:
+
+.. code-block:: ring
+
+       see "Hello world" + nl
+       see 123 + nl
+       see ["one","two","three"]
+       see new point {x=10 y=20 z=30} 
+
+       func ringvm_see t
+               ring_see("We want to print: ")
+               ring_See(t)
+
+       class point x y z
+
+Output:
+
+.. code-block:: none
+
+       We want to print: Hello world
+       We want to print: 123
+       We want to print: one
+       two
+       three
+       We want to print: x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+Using the ringvm_give() function we can redefine the behavior of the Give command
+
+Also we can use ring_give() to have the original behavior
+
+Example:
+
+.. code-block:: ring
+
+       see "Name: " give name
+       see "Hello " + name
+
+       func ringvm_give
+               see "Mahmoud" + nl
+               return "Mahmoud"
+
+Output:
+
+.. code-block:: ring
+
+       Name: Mahmoud
+       Hello Mahmoud
+
+.. index:: 
+       pair: What is new in Ring 1.7?; ring_state_new() and ring_state_mainfile() functions
+
+ring_state_new() and ring_state_mainfile() functions
+====================================================
+
+Using ring_state_new() and ring_state_mainfile() we can run Ring programs from Ring programs
+
+But unlike ring_state_main(), Here we can control when to delete the Ring state!
+
+This is important when we run GUI programs from GUI programs
+
+Because they will share the GUI Library (RingQt), And In this case the caller will call
+
+qApp.Exec()
+
+So the sub program, will not stop and will return to the Main program
+
+Here deleting the State of the sub programs will lead to a problem when we run the sub program events
+
+So keeping the state is important for sub GUI programs hosted in GUI programs.
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Trace Library
+
+Better Trace Library
+====================
+
+The Trace library is updated, In the Debugger at break points we have now the "callstack" command
+
+This command will print the functions call stack.
+
+Example:
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       func main
+               ? "Hello from main!"
+               test1()
+
+       func test1 
+               ? "Hello from test1!"
+               test2()
+
+       func test2 
+               ? "Hello from test2!"
+               test3()
+
+       func test3 
+               ? "Hello from test3!"
+               breakpoint()
+
+
+.. image:: callstack.png
+       :alt: Call Stack
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Ring Notepad
+
+Better Ring Notepad
+===================
+
+Ring Notepad comes with the next updates
+
+(1) Support *.cf extension
+(2) Using Hash function (SHA256) for better "Save Changes?" message
+(3) Ring Notepad - X Button - Ask for saving changes?
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better RingQt
+
+Better RingQt
+=============
+
+The next classes are added to RingQt
+
+(1)  QStackedWidget
+(2)  QCalendarWidget
+(3)  QOpenGLFunctions
+(4)  QOpenGLContext
+(5)  QSurfaceFormat
+(6)  QOpenGLWidget
+(7)  QOpenGLVersionProfile
+(8)  QOpenGLFunctions_3_2_Core
+(9)  QVector2D
+(10) QVector3D
+(11) QVector4D
+(12) QQuaternion
+(13) QMatrix4x4
+(14) QOpenGLPaintDevice
+(15) QPaintDevice
+(16) QOpenGLTimerQuery
+(17) QOpenGLDebugLogger
+(18) QOpenGLFramebufferObject
+(19) QOpenGLVertexArrayObject
+(20) QOpenGLBuffer
+(21) QOpenGLShaderProgram
+(22) QOpenGLShader
+(23) QOpenGLTexture
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Ring2EXE
+
+Better Ring2EXE
+===============
+
+Ring2EXE is updated to works as expected when we don't have a C/C++ compiler
+
+Where we can distribute applications and get (exe file and ringo file) in this case.
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better RingZip
+
+Better RingZip
+==============
+
+The library is updated to support extracting files contains sub folders!
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Documentation
+
+Better Documentation
+====================
+
+(1) RingQt Classes Chapter - The classes are sorted.
+
+
+.. index:: 
+       pair: What is new in Ring 1.7?; Better Ring VM
+
+Better Ring VM
+==============
+
+(1) Better Error Message
+(2) List2Str() function support lists contains numbers
+(3) Correct support for numbers contains _ as separator
+(4) Creating lists without variables (statement --> Expression --> List)
+(5) IsNULL() - Not case sensitive - treat Null and null like NULL
+(6) Support adding the Self object to an attribute in this object
+(7) Using ':' operator then keyword will create lower case literal 
+(8) Printing objects - respect decimals() function
+(9) When literal is not closed - determine the start of the literal
+(10) Better message when printing objects contains lists
+(11) VarPtr() - Support getting a pointer to variables in the local scope
+(12) replace performance instructions with normal instructions when creating new threads
+
+.. index:: 
+       pair: What is new in Ring 1.7?; RingLibuv Extension
+
+RingLibuv Extension
+===================
+
+Ring 1.7 comes with the RingLibuv extension
+
+Libuv is a multi-platform support library with a focus on asynchronous I/O.
+
+Example (Events Loop):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       counter = 0
+       idler = NULL 
+
+       func main
+               idler = new_uv_idle_t()
+               uv_idle_init(uv_default_loop(), idler)
+               uv_idle_start(idler, "wait()")
+               ? "Idling..."
+               uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+               uv_loop_close(uv_default_loop());
+               destroy_uv_idle_t(idler)
+
+       func wait
+               counter++
+               if counter >= 100000
+                       uv_idle_stop(idler)
+               ok
+
+Output:
+
+.. code-block:: none
+
+       Idling...
+
+Example (Server):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Server Side - Using Classes"
+
+       open_object(:MyServer)
+
+       class MyServer from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               server  = NULL
+               client  = NULL
+               myloop  = NULL
+               
+               func start
+                       myloop = uv_default_loop()
+                       server = new_uv_tcp_t()
+                       uv_tcp_init(myloop, server)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_bind(server, addr, 0)
+                       r = uv_listen(server, DEFAULT_BACKLOG, Method(:newconnection) )
+                       if r 
+                               ? "Listen error " + uv_strerror(r)
+                               return 1
+                       ok
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(server)
+                       destroy_uv_sockaddr_in(addr)
+               
+               func newconnection
+                       ? "New Connection"
+                       aPara   = uv_Eventpara(server,:connect)
+                       nStatus = aPara[2]
+                       if nStatus < 0
+                               ? "New connection error : " + nStatus 
+                               return 
+                       ok
+                       client = new_uv_tcp_t()
+                       uv_tcp_init(myloop, client)
+                       if uv_accept(server, client) = 0 
+                                       uv_read_start(client, uv_myalloccallback(), 
+                                                               Method(:echo_read))
+                       ok
+               
+               func echo_read 
+                       aPara = uv_Eventpara(client,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                               req = new_uv_write_t()
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                               uv_write(req, client, wrbuf, 1, Method(:echo_write))
+                               ? uv_buf2str(wrbuf)
+                               message = "message from the server to the client"
+                               buf = new_uv_buf_t()
+                               set_uv_buf_t_len(buf,len(message))
+                               set_uv_buf_t_base(buf,varptr("message","char *"))
+                               uv_write(req, client, buf, 1, Method(:echo_write))
+                       ok
+               
+               func echo_write
+                       aPara = uv_Eventpara(client,:read)
+                       req   = aPara[1]
+       
+
+Output:
+
+When we run the client, We will see the message "New Connection"
+
+Then the message "hello from the client"
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side - Using Classes
+       New Connection
+       hello from the client
+
+Example (Using Threads):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Threads - Using Classes"
+
+       open_object(:MyThreads)
+
+       class MyThreads from ObjectControllerParent
+
+               func Start
+                       one_id = new_uv_thread_t()
+                       two_id = new_uv_thread_t()
+                       uv_thread_create(one_id, Method(:One))
+                       uv_thread_create(two_id, Method(:Two))
+                       uv_thread_join(one_id)
+                       uv_thread_join(two_id)
+                       destroy_uv_thread_t(one_id)
+                       destroy_uv_thread_t(two_id)
+               
+               func one
+                       ? "Message from the First Thread!"
+               
+               func Two
+                       ? "Message from the Second Thread!"
+               
+
+Output:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads - Using Classes
+       Message from the First Thread!
+       Message from the Second Thread!
+
+For more information about this extension (RingLibuv) check the chapter: Using RingLibuv
\ No newline at end of file
diff --git a/docs/en/target/whatisnew8.txt b/docs/en/target/whatisnew8.txt
new file mode 100644 (file)
index 0000000..b6080ac
--- /dev/null
@@ -0,0 +1,567 @@
+.. index:: 
+       single: What is new in Ring 1.8?; Introduction
+
+========================
+What is new in Ring 1.8?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.8 release.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.8 comes with the next features!
+
+* Better Performance
+* Find in files Application
+* String2Constant Application
+* StopWatch Application
+* More 3D Samples
+* Compiling on Manjaro Linux
+* Using This in the class region as Self
+* Default value for object attributes is NULL
+* The For Loops uses the local scope
+* Merge binary characters
+* FoxRing Library
+* Better Form Designer
+* Better Cards Game
+* Better RingQt
+* Better Code Generator For Extensions
+* Better Ring Compiler and VM
+* Notes to extensions creators
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Performance 
+
+Better Performance
+==================
+
+Ring 1.8 is faster than Ring 1.7 
+
+The performance gain is between 10% and 100% based on the application.
+
+Check the 3D samples in this release to get an idea about the current performance.
+
+For more information check the Performance Tips chapter.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Find in files Application
+
+Find in files Application
+=========================
+
+Ring 1.8 comes with Find in files application
+
+.. image:: findinfiles.png
+       :alt: Find in files
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; String2Constant Application
+
+String2Constant Application
+===========================
+
+Ring 1.8 comes with String2Constant application
+
+Using this tool we can convert the source code to be based on constants instead of string literals
+
+Then we can store constants in separate source code files that we can translate to different languages
+
+Where we can have special file for each language, like (English.ring, Arabic.ring and so on)
+
+Using this simple tool, the Form Designer is translated to the Arabic language.
+
+For more information check the Multi-language Applications chapter.
+
+.. image:: string2constant.png
+       :alt: String2Constant 
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; StopWatch Application
+
+StopWatch Application
+=====================
+
+Ring 1.8 comes with StopWatch application
+
+.. image:: stopwatch.png
+       :alt: StopWatch
+
+.. index:: 
+       pair: What is new in Ring 1.8?; More 3D Samples
+
+More 3D Samples
+===============
+
+Ring 1.8 comes with more 3D Samples
+
+The next screen shot for the Top-Down view - Many levels of cubes sample
+
+.. image:: more3dsamples.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera Sample
+
+.. image:: more3dsamples2.jpg
+       :alt: 3D samples
+
+The next screen shot for the Camera and background sample
+
+Developer : Azzeddine Remmal
+
+.. image:: cameraandbackground.png
+       :alt: Camera and background
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Compiling on Manjaro Linux
+
+Compiling on Manjaro Linux
+==========================
+
+Ring 1.8 is tested on Manjaro Linux too
+
+Tests by : Iip Rifai
+
+.. image:: ringonmanjarolinux.png
+       :alt: Ring on Manjaro Linux
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Using This in the class region as Self
+
+Using This in the class region as Self
+======================================
+
+The class region is the region that comes after the class name and before any method.
+
+Now we can use This in the class region as Self.
+
+Example:
+
+.. code-block:: ring
+
+       func main
+
+               o1 = new program {
+                       test()
+               }
+
+               ? o1
+
+       class program 
+
+               this.name = "My Application"
+               this.version = "1.0"
+               ? name ? version        
+
+               func test
+                       ? "Name    = " + name 
+                       ? "Version = " + version
+
+Output
+
+.. code-block:: none
+
+       My Application
+       1.0
+       Name    = My Application
+       Version = 1.0
+       name: My Application
+       version: 1.0
+
+.. note:: When we use braces to change the current active object, Using This we can still point to the class.
+
+.. tip:: The difference between This and Self is that Self point to the current active object that we can change using braces.
+
+Remember that in most cases we don't need to use This or Self in the class region
+
+We can write
+
+
+.. code-block:: ring
+
+       class program name version
+
+Or 
+
+.. code-block:: ring
+
+       class program name="My Application" version="1.0"
+
+.. note:: We use This or Self in the class region just to avoid conflict with global variables that are defined with the same name.
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Default value for object attributes is NULL
+
+Default value for object attributes is NULL
+===========================================
+
+Starting from Ring 1.8 the default value for object attributes is NULL
+
+In Ring, the NULL value is just an empty string or a string that contains "NULL"
+
+We can check for NULL values using the isNULL() function
+
+Example:
+
+.. code-block:: ring
+
+       oProgram = new Program
+       ? oProgram.name
+       ? oProgram.version
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       oProgram { name="My Application" version="1.0" }
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       ? oProgram
+
+       class program
+               name 
+               version
+
+Output:
+
+.. code-block:: none
+
+       NULL
+       NULL
+       1
+       1
+       0
+       0
+       name: My Application
+       version: 1.0
+
+In previous versions of Ring, trying to access the object attribute before assigning a value to it
+
+Will lead to runtime error and you can't check it using isnull() 
+
+The only way was assigning a value or using try/catch/end 
+
+We changed this behavior so we can have full control in seamless way.
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; The For Loops uses the local scope
+
+The For Loops uses the local scope
+==================================
+
+In Ring 1.8, when the For Loop defines new identifier (variable) it will define it in the local scope.
+
+Example:
+
+.. code-block:: ring
+
+       x = 10
+       ? x             # Print 10
+       test1()
+       ? x             # Print 10
+       test2()
+       ? x             # Print 10
+
+       func test1
+               for x = 1 to 5
+               next
+               ? x     # Print 6
+
+       func test2
+               list = 1:5
+               for x in list
+               next
+               ? x     # Print NULL (The "For In" loop will kill the reference after the loop)
+
+Output:
+
+.. code-block:: ring
+
+       10
+       6
+       10
+       NULL
+       10      
+               
+.. index:: 
+       pair: What is new in Ring 1.8?; Merge binary characters
+
+Merge binary characters
+=======================
+
+From Ring 1.0 we can create binary strings and do operations on these strings.
+
+Now in Ring 1.8, we can get individual characters from these strings and merge them together using
+the '+' operator.
+
+Example:
+
+.. code-block:: ring
+
+       cStr = "Welcome"
+       ? cstr[1] + cstr[2] + cStr[5]
+       v = cstr[1] + cstr[2] + cStr[5]
+       ? v
+       ? len(v)
+       c1 = cStr[1]
+       ? c1
+       aList = [1,2,3]
+       cStr = ""
+       for item in aList 
+               cStr += int2bytes(item)
+       next 
+       ? "All String"
+       ? len(cStr)
+       ? "First Part"
+       n1 = cStr[1] + cStr[2] + cStr[3] + cStr[4]
+       ? len(n1)
+       ? "Second Part"
+       n2 = cStr[5] + cStr[6] + cStr[7] + cStr[8]
+       ? len(n2)
+       ? "Third Part"
+       n3 = cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(n3)
+       ? "All String"
+       cString = cStr[1] + cStr[2] + cStr[3] + cStr[4] + 
+                 cStr[5] + cStr[6] + cStr[7] + cStr[8] + 
+                 cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(cString)
+       ? ascii(cStr[1])
+       ? len(cStr[2])
+
+Output:
+
+.. code-block:: ring
+
+       Weo
+       Weo
+       3
+       W
+       All String
+       12
+       First Part
+       4
+       Second Part
+       4       \ 2
+       Third Part
+       4
+       All String
+       12
+       1
+       1
+       
+
+.. index:: 
+       pair: What is new in Ring 1.8?; FoxRing Library
+
+FoxRing Library
+===============
+
+Developer: Jose Rosado
+
+A class with some of the functions I used in FoxPro\
+
+Example:
+
+.. code-block:: ring
+
+       Load "foxring.ring"
+
+       mf = new frFunctions
+       ? mf.frAbs(-45)      
+       ? mf.frAbs(10-30)    
+       ? mf.frAbs(30-10)   
+
+       ? mf.frTransform("    Ring is a good language    ",
+                        "@! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") 
+       ? mf.frAllTrim("    Ring is a good language    ", Null) 
+
+Output:
+
+.. code-block:: ring
+
+       45
+       20
+       20
+           RING IS A GOOD LANGUAGE
+       Ring is a good language
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Form Designer
+
+Better Form Designer
+====================
+
+(1) Layout Control - Display the control name when loading forms.
+(2) Button Control - Display the button images written using relative path.
+(3) Table  Control - Display the control name when loading forms.
+(4) Better behavior in "Bring to front" and "Send to back" operations.
+(5) New buttons are added to the toolbar (Duplicate, Bring to front, Send to back, Delete).
+(6) Using layouts in (Menubar designer, Window Flags window, Selecting Objects window).
+(7) Better behavior for displaying the properties window when changing the selected objects.
+(8) New buttons are added to move and resize multiple selection of objects.
+(9) Window Properties - Add button to select the layout.
+(10) Opening forms and switching between files is faster.
+(11) Objects Order window.
+(12) Select Objects window.
+(13) When we change the control name, the name will be updated in layout objects.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Cards Game
+
+Better Cards Game
+=================
+
+The Cards game is updated and we can play with the Computer
+
+.. image:: cardsmainmenu.png
+       :alt: Cards Main Menu
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better RingQt
+
+Better RingQt
+=============
+
+* The next classes are added to RingQt
+
+(1) QTabBar
+(2) QFile
+(3) QFileDevice
+(4) QStandardPaths
+(5) QDir
+(6) QQuickWidget
+(7) QQmlError
+(8) QScrollBar
+
+* RingQt for Android is updated to support modern versions of Qt
+
+Tested using
+
+(1) Qt 5.5.1
+(2) Qt 5.9.5
+(3) Qt 5.11.0
+
+* In RingQt for Android, The Ring Object File (ringo) will be executed directly from resources.
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Code Generator For Extensions
+
+Better Code Generator For Extensions
+====================================
+
+New Option: StaticMethods
+
+Starting from Ring 1.8 the code generator support the staticmethods option.
+
+So the code generator can know that the class doesn't need an object to call the methods.
+
+Example:
+
+.. code-block:: none
+
+       <class>
+       name: QStandardPaths
+       para: void
+       nonew
+       staticmethods
+       </class>
+
+       QString displayName(QStandardPaths::StandardLocation type)
+       QString findExecutable(QString executableName, QStringList paths))
+
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Better Ring Compiler and VM
+
+Better Ring Compiler and VM
+===========================
+
+(1) Better loading for files in relative paths
+(2) Code Optimization for eval() function 
+(3) Better Memory Pool
+(4) When embedding Ring in Ring, the error in the hosted environment will not close the host
+
+Example:
+
+.. code-block:: ring
+
+       ? "Start the test!" 
+
+       pState = ring_state_init()
+
+       ring_state_runcode(pState," ? 'Let us try having an error' ? x")
+
+       ring_state_delete(pState)
+
+       ? ""
+       ? "End of test!"
+
+Output:
+
+.. code-block:: none
+
+       Start the test!
+       Let us try having an error
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file Ring_EmbeddedCode
+       End of test!
+       
+(5) The compiler will ignore new lines after keywords that expect tokens after it
+
+Example:
+
+.. code-block:: ring
+
+       see 
+       "
+               Hello, World!
+       "
+       test()
+
+       func 
+       #======================#
+               Test
+       #======================#
+
+               ?
+               "
+       
+               Hello from the Test function
+
+               "
+
+Output:
+
+.. code-block:: none
+
+
+               Hello, World!
+
+
+               Hello from the Test function
+
+(6) Better code (faster) for the main loop, special loop for eval() function.
+(7) Better code (faster) for tracking C pointers to avoid using NULL pointers.
+(8) Better code (faster) for getting the self object using braces.
+
+.. index:: 
+       pair: What is new in Ring 1.8?; Notes to extensions creators
+
+Notes to extensions creators
+============================
+
+If you have created new extensions for Ring in the C/C++ languages.
+
+You have to rebuild your extension (Generate the DLL file again using Ring 1.8 header files) before usage with Ring 1.8
+
+Because we changed the internal structure of the VM, but no changes to the code are required. just rebuild.
diff --git a/docs/en/target/whatisnew9.txt b/docs/en/target/whatisnew9.txt
new file mode 100644 (file)
index 0000000..fd441b8
--- /dev/null
@@ -0,0 +1,606 @@
+.. index:: 
+       single: What is new in Ring 1.9?; Introduction
+
+========================
+What is new in Ring 1.9?
+========================
+
+In this chapter we will learn about the changes and new features in Ring 1.9 release.
+
+.. index:: 
+       pair: What is new in Ring 1.9?; List of changes and new features
+
+List of changes and new features
+================================
+
+Ring 1.9 comes with the next features!
+
+* New Game : Gold Magic 800
+* More Games
+* Better Ring Notepad
+* Better StdLib
+* BigNumber Library
+* RingPostgreSQL Extension
+* Deploying Web applications in the Cloud
+* Better RingQt
+* Better Memory Management 
+* Better Code Generator for Extensions
+* More Improvements
+
+.. index:: 
+       pair: What is new in Ring 1.9?; New Game : Gold Magic 800
+
+New Game : Gold Magic 800
+=========================
+
+The Gold Magic 800 is a new puzzle game.
+
+Ring 1.9 comes with the Demo Version (18 Levels) and the game source code.
+
+Steam Page (44 Levels) : https://store.steampowered.com/app/939200/Gold_Magic_800/
+
+We can select the level
+
+.. image:: gmshot2.png
+       :alt: Gold Magic 800 - Screen Shot 2
+
+The next screen shot for level (1)
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 - Screen Shot 3
+
+The Gold Magic 800 Level Editor 
+
+.. image:: gmleveleditor.png
+       :alt: Gold Magic 800 Level Editor
+
+.. index:: 
+       pair: What is new in Ring 1.9?; More Games 
+
+More Games
+==========
+
+The next games are added to Ring Applications 
+
+(1) The 2048 Game
+(2) The Memory Game
+(3) The Wise Quadrat Game 
+(4) The Tessera Game
+(5) The Othello Game
+
+The next screen shot for the 2048 game on Android 
+
+.. image:: game2048_shot1.png
+       :alt: 2048 Game
+
+The next screen shot for the Tessera game
+
+.. image:: tesseragame.png
+       :alt: Tessera Game
+
+The next screen shot for the Othello game
+
+.. image:: othellogame.png
+       :alt: Othello Game
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better Ring Notepad 
+
+Better Ring Notepad
+===================
+
+(1) New Style
+(2) New Mode
+(3) Tabs for opened files 
+(4) Support executing batch files 
+
+.. image:: rnote19.jpg
+       :alt: Ring Notepad
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better StdLib
+
+Better StdLib
+=============
+
+(1) The List2Code() function is added to the StdLib 
+
+This function convert a Ring list during the runtime to Ring source code that we can save to source files.
+
+The list may contains strings, numbers or sub lists.
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList = 1:10
+       ? list2Code(aList)
+
+Output:
+
+.. code-block:: ring
+
+       [
+               1,2,3,4,5,6,7,8,9,10
+       ]
+
+
+(2) The Str2ASCIIList() and ASCIIList2Str() are added to the StdLib
+
+Using these functions we can convert between string of bytes and a list of numbers where each item represent
+the ASCII code of one byte in the string.
+
+So we may convert a string of bytes to ASCII List then do some operations on the list numbers (Like XOR)
+
+Example:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       cStr = "MmMm"
+
+       aList = Str2ASCIILIST(cStr)
+       ? aList 
+
+       cStr2 = ASCIIList2Str(aList)
+       ? cStr2
+       ? len(cStr2)
+
+Output:
+
+.. code-block:: none
+
+       77
+       109
+       77
+       109
+
+       MmMm
+       4
+
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; BigNumber Library
+
+BigNumber Library
+=================
+
+Using the BigNumber library we can do arithmetic operations on huge numbers.
+
+Example:
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+
+       num1 = "62345678901234567891678345123456789"    ### Big
+       num2 =  "1237894567890123419871236545"          ### Small
+       num3 =     "64"                                 ### Divide Small
+       num4 = "765432"                 
+       num5 =      "3"                                 ### Power            
+    
+       ? "Add big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 + a2                    a3.Print() ? nl
+
+       ? "Substract big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 - a2                    a3.Print() ? nl
+
+       ? "Multiply big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()      
+       a3 = a1 * a2                    a3.print() ? nl
+
+       ? "Divide big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+    
+       ? "Divide big numbers: by very small number" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num3)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+
+       ? "Power of big number:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num5)        a2.print()
+       a3 = a1 ^ a2                    a3.print() ? nl
+    
+Output:
+
+.. code-block:: none
+
+       Add big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       62345680139129135781801764994693334
+
+
+       Substract big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       52345687663340000001554925252220244
+
+
+       Multiply big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       77177377243260150103462178714197454736432472780119682305154005
+
+
+       Divide big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       50364288
+
+
+       Divide big numbers: by very small number
+       62345678901234567891678345123456789
+       64
+       974151232831790123307474142554012
+
+
+       Power of big number:
+       62345678901234567891678345123456789
+       3
+       242336636261471172092347146031727004 (Output continue in next line)
+       371698195628343934238988256152289508 (Output continue in next line)
+       493964611043228971692389860897069
+
+For more information check the BigNumber Library Chapter in the documentation
+
+.. index:: 
+       pair: What is new in Ring 1.9?; RingPostgreSQL Extension
+
+RingPostgreSQL Extension
+========================
+
+Ring 1.9 provide native support for PostgreSQL database using the RingPostgreSQL Extension.
+
+Example:
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+
+       conninfo = "user=postgres password=sa dbname = mahdb"
+
+       exit_nicely = func conn {
+               PQfinish(conn)
+               shutdown(1)
+       }
+
+       conn = PQconnectdb(conninfo)
+
+       if (PQstatus(conn) != CONNECTION_OK)
+               fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                       call exit_nicely(conn)
+       ok
+
+       res = PQexec(conn, "
+               DROP DATABASE mahdb;
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+
+       res = PQexec(conn, "CREATE DATABASE mahdb;")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+
+
+       res = PQexec(conn, "
+       CREATE TABLE COMPANY (
+                        ID INT PRIMARY KEY     NOT NULL,
+                        NAME           TEXT    NOT NULL,
+                        AGE            INT     NOT NULL,
+                        ADDRESS        CHAR(50),
+                        SALARY         REAL );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                       INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
+                       VALUES  (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
+                                       (2, 'Ahmed'   , 27, 'Jeddah', 20.00 ),
+                                       (3, 'Mohammed', 33, 'Egypt' , 30.00 ),
+                                       (4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                  select * from COMPANY
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+               PQclear(res)
+               call exit_nicely(conn)
+       ok
+
+
+       nFields = PQnfields(res)
+       for i = 1 to nFields
+                       ? PQfname(res, i-1) 
+       next
+
+       ? copy("*",60)
+
+       for i = 1 to PQntuples(res)
+               for j=1 to nFields
+                       see PQgetvalue(res, i-1, j-1) + " "
+               next
+               see nl
+       next
+
+       PQclear(res)
+
+       PQfinish(conn)
+
+Output:
+
+.. code-block:: none
+
+       id
+       name
+       age
+       address
+       salary
+       ************************************************************
+       1 Mahmoud  31 Jeddah  10
+       2 Ahmed    27 Jeddah  20
+       3 Mohammed 31 Egypt   30
+       4 Ibrahim  24 Egypt   40        
+       
+
+For more information check the PostgreSQL Chapter in the documentation
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Deploying Web applications in the Cloud
+
+Deploying Web applications in the Cloud
+=======================================
+
+We created a new project and tutorial to explain how to deploy Ring web applications in the Cloud using Heroku
+
+Demo : http://testring.herokuapp.com/
+
+Project : https://github.com/ring-lang/RingWebAppOnHeroku
+
+Heroku Website : https://www.heroku.com/
+
+.. image:: ringincloud.png
+       :alt: Ring Web Application in the Cloud
+
+For more information check the Deploying Web Applications In The Cloud chapter in the documentation.
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better RingQt
+
+Better RingQt
+=============
+
+(1) The next classes are added to RingQt 
+
+* QDrag
+* QMimeData
+* QDropEvent
+* QDragMoveEvent
+* QDragEnterEvent
+* QDragLeaveEvent
+* QClipboard
+* QChildEvent
+* QGeoPositionInfo
+* QGeoCoordinate
+* QGeoAddress
+* QGeoAreaMonitorInfo
+* QGeoAreaMonitorSource
+* QGeoCircle
+* QGeoPositionInfoSource
+* QGeoRectangle
+* QGeoShape
+* QGeoSatelliteInfo
+* QGeoSatelliteInfoSource
+* QNmeaPositionInfoSource
+* QAxWidget
+* QTextStream
+* QPrinterInfo
+* QPrintPreviewWidget
+* QPrintPreviewDialog
+* QPageSetupDialog
+* QAbstractPrintDialog
+* QPrintDialog
+
+(2) The next classes are updated
+
+* QAllEvents Class : New Events (ChildAdded, ChildPolished, ChildRemoved).
+* QPainter Class : Updated Methods (drawConvexPloygon, drawPoints, drawPolyline) Accept Ring list of points.
+* QVariant : More versions that accept different parameters when creating the object.
+* QAxBase : Different versions for the dynamicCall() and querySubObject() methods.
+
+The next example for using the QPrintPreviewDialog class
+
+Example:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer Preview Dialog")
+                       setgeometry(100,100,800,880)
+                       printer1 = new qPrinter(0)
+                       show()
+                       oPreview = new qPrintPreviewDialog(printer1) {
+                               setParent(win1)
+                               move(10,10) 
+                               setPaintrequestedevent("printPreview()")
+                               exec()
+                       }
+               }
+               exec()
+       }
+
+       func printPreview
+               printer1  {
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)
+                               setfont(myfont)
+                               drawtext(100,100,"Test - Page (1)")
+                               printer1.newpage()
+                               drawtext(100,100,"Test - Page (2)")
+                               printer1.newpage()
+                               myfont2 = new qfont("Times",14,-1,0)
+                               setfont(myfont2)
+                               for x = 1 to 30
+                                       drawtext(100,100+(20*x),"Number : " + x)
+                               next 
+                               endpaint()
+                       }
+               }
+
+Screen Shot:
+
+.. image:: printpreviewdialog.png
+       :alt: Print Preview Dialog
+
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better Memory Management
+
+Better Memory Management
+========================
+
+The Ring API is updated to include RING_API_RETMANAGEDCPOINTER()
+
+Using RING_API_RETMANAGEDCPOINTER() the Ring extensions written in C/C++ languages can return a managed
+pointer to Ring. This pointer can be controlled by the Ring VM using reference counting.
+
+This is important to avoid the need to write code that free the unmanaged resources like QPixMap objects in RingQt.
+
+Also the Code Generator for extensions is updated to automatically use RING_API_RETMANAGEDCPOINTER() based on need.
+
+Syntax:
+
+.. code-block:: ring
+
+       RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                       void (* pFreeFunc)(void *,void *))
+
+For more information about RING_API_RETMANAGEDCPOINTER()
+
+See the "Extension using the C/C++ languages" Chapter in the documentation 
+
+.. index:: 
+       pair: What is new in Ring 1.9?; Better Code Generator for Extensions
+
+Better Code Generator for Extensions
+====================================
+
+(1) The code generator for extensions is updated to support the <loadfile> command
+
+.. code-block:: ring
+
+       <loadfile> filename.cf
+
+This is useful to separate the extension configuration file to many files
+
+Example:
+
+The file : qt_module_network.cf in the RingQt Extension
+
+.. code-block:: ring
+
+       <comment>
+                                       Module (network)
+       </comment>
+
+       <loadfile> qabstractsocket.cf
+       <loadfile> qnetworkproxy.cf
+       <loadfile> qtcpsocket.cf
+       <loadfile> qtcpserver.cf
+       <loadfile> qhostaddress.cf
+       <loadfile> qhostinfo.cf
+       <loadfile> qnetworkrequest.cf
+       <loadfile> qnetworkaccessmanager.cf
+       <loadfile> qnetworkreply.cf
+
+(2) The code generator support the <managed> option when defining classes.
+
+Using this option, the generator will use RING_API_RETMANAGEDCPOINTER() to return the C pointer.
+
+So the Garbage Collector will manage these C pointers.
+
+Example
+
+.. code-block:: ring
+
+       <class>
+       name: QFont
+       para: QString, int, int, bool
+       managed
+       </class>
+
+.. index:: 
+       pair: What is new in Ring 1.9?; More Improvements
+
+More Improvements
+=================
+
+(1)  Ring Compiler - The Rule (Factor -> '-' Expr) changed to (Factor -> '-' Factor).
+(2)  Ring VM - Better Error Message.
+(3)  Better code for IsNULL() function - updated to check pointers too.
+(4)  Better code for ringvm_evalinscope() function - used by the Trace Library.
+(5)  Better code for Space() function.
+(6)  Better code for Hex() and Dec() functions.
+(7)  Better code for Download() function.
+(8)  Better code for SubStr() function.
+(9)  Better code for the Unsigned() function.
+(10) Better code for Chdir() function.
+(11) Better code for Tempname() function.
+(12) Better code for HashTable - New Key (using ring_strdup() instead of strdup() function).
+(13) New Function : SRandom() - Initialize random number generator. 
+(14) New Function : IsPointer().
+(15) IsList() will not return True for C Pointers, we have now the IsPointer() function. 
+(16) The ? Operator is updated to respect the ringvm_see() function.
+(17) Scripts to run Ring tests on Linux and macOS (Not only Windows).
+(18) RingAllegro is Updated from Allegro 5.1 to Allegro 5.2.
+(19) Shader Functions are added to RingAllegro.
+(20) Joystick Functions are added to RingAllegro.
+(21) Network functions are added to RingLibSDL.
+(22) Game Engine for 2D Games - Text Class - Check the font object before usage.
+(23) Game Engine for 2D Games - Automatic support for Joystick.
+(24) RingLibCurl is updated to automatically use CURLOPT_COPYPOSTFIELDS when needed.
+(25) Ring Notepad - Find Previous Feature.
+(26) Ring Notepad - Default Style. 
+(27) Ring Notepad - Support using Non-English language (Like Arabic) in file names.
+(28) Form Designer - Nice Alignment for Toolbox Icons.
+(29) Form Desginer - QAllEvents Class - Mouse Double Click Event.
+(30) Find in Files - Replace and Replace All options.
+(31) Qt Class Converter is updated for better conversion results.
+(32) More samples are added to ring/samples/other folder.
+(33) Code Refactoring for Ring Notepad, RingQt, Game Engine for 2D Games.
+(34) Better Documentation - Many images are updated to reflect the current state of Ring Environment.
+(35) Better Documentation - More chapters are added to the documentation.
\ No newline at end of file
diff --git a/docs/en/target/windowflags.png b/docs/en/target/windowflags.png
new file mode 100644 (file)
index 0000000..5ed7606
Binary files /dev/null and b/docs/en/target/windowflags.png differ
diff --git a/docs/en/target/winstartupman.jpg b/docs/en/target/winstartupman.jpg
new file mode 100644 (file)
index 0000000..b539a45
Binary files /dev/null and b/docs/en/target/winstartupman.jpg differ
diff --git a/docs/en/target/zerolib.txt b/docs/en/target/zerolib.txt
new file mode 100644 (file)
index 0000000..567ee1f
--- /dev/null
@@ -0,0 +1,168 @@
+.. index:: 
+       Single: Using ZeroLib;  Introduction
+
+=============
+Using ZeroLib
+=============
+
+In this chapter we will learn how to use the ZeroLib library.
+
+
+.. index:: 
+       pair: Using ZeroLib; Introduction
+
+Introduction
+============
+
+ZeroLib is a simple library written in Ring.
+
+The library provides classes for Lists and String where the index starts from 0.
+
+
+.. index:: 
+       pair: Using ZeroLib; Z() function
+
+Z() function
+============
+
+Syntax:
+
+.. code-block:: none
+
+       Z(String|List) ---> New Object (ZeroBasedString|ZeroBasedList)
+
+.. index:: 
+       pair: Using ZeroLib; ZeroBasedList Class
+
+ZeroBasedList Class
+===================
+
+Simple class provide a List where the index starts from zero.
+
+Methods:
+
+===========================    ======================================================================
+Method                                         Description/Output
+===========================    ======================================================================
+Init(List)                     
+Add(Value)                     Add item to the list
+Insert(nIndex,Value)           Inset Item after nIndex
+Find(Value)                    Find item
+Delete(nIndex)                 Delete item from the list 
+Item(nIndex)                   Get item from the list
+First()                                Get the first item in the list
+Last()                         Get the last item in the list
+Set(nIndex,Value)              Set item value
+FindInColumn(nCol,Value)       Find item in a column 
+Sort()                         Sort items - return new list
+Reverse()                      Reverse items - return new list
+Swap(nIndex1,nIndex2)          Swap two items
+===========================    ======================================================================
+
+
+Example:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using List - Index start from 0"
+       List = Z( [1,2,3] )
+       List.Add(4)
+       List.Add(5)
+       ? List[0]
+       ? List[1]
+       ? List[2]
+       ? List[3]
+       ? List[4]
+       nIndex = List.find(2)
+       ? "Find(2) = " + nIndex
+       List.delete(0)
+       ? "After deleting the first item : List[0]" 
+       ? "Now List[0] = " + List[0] 
+
+Output:
+
+.. code-block:: ring 
+
+       Using List - Index start from 0
+       1
+       2
+       3
+       4
+       5
+       Find(2) = 1
+       After deleting the first item : List[0]
+       Now List[0] = 2
+
+.. index:: 
+       pair: Using ZeroLib; ZeroBasedString Class
+
+ZeroBasedString Class
+=====================
+
+Simple class provide a String where the index starts from zero.
+
+===========================    ======================================================================
+Method                         Description/Output
+===========================    ======================================================================
+Init(String|Number) 
+Lower()                        New String - Lower case characters
+Upper()                        New String - Upper case characters
+Left(x)                        New String - contains x characters from the left
+Right(x)                       New String - contains x characters from the right
+Lines()                        Number - Lines count
+Trim()                         New String - Remove Spaces
+Copy(x)                        New String - repeat string x times
+strcmp(cString)                Compare string with cString  
+tolist()                       List (String Lines to String Items)
+tofile(cFileName)              Write string to file
+mid(nPos1,nPos2)               New String - from nPos1 to nPos2
+getfrom(nPos1)                 New String - from nPos1 to the end of the string
+replace(cStr1,cStr2,lCase)     New String - Replace cStr1 with cStr2 , lCase (True=Match Case)
+split()                                List - Each Word as list item
+startswith(substring)          Return true if the start starts with a substring 
+endswith(substring)            Return true if the start ends with a substring
+===========================    ======================================================================
+
+Example:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using String - Index start from 0"
+       String = Z( "Welcome" )
+       ? String[0]
+       ? String[1]
+       ? String[2]
+       ? String[3]
+       ? String[4]
+       ? String[5]
+       ? String[6]
+
+Output:
+
+.. code-block:: ring 
+
+       Using String - Index start from 0
+       W
+       e
+       l
+       c
+       o
+       m
+       e
+
+.. index:: 
+       pair: Using ZeroLib; Source Code
+
+Source Code
+===========
+
+We can find the library source code in this folder 
+
+URL : https://github.com/ring-lang/ring/tree/master/ringlibs/zerolib
+
+
+
diff --git a/docs/ja-jp/LICENSE b/docs/ja-jp/LICENSE
new file mode 100644 (file)
index 0000000..1bfb4bc
--- /dev/null
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2016-2019 Mahmoud Fayed
+Copyright (c) 2017-2019 isVowel / Japan Ring Team
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/docs/ja-jp/Makefile b/docs/ja-jp/Makefile
new file mode 100644 (file)
index 0000000..e0c9375
--- /dev/null
@@ -0,0 +1,192 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = build
+
+# User-friendly check for sphinx-build
+ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
+$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
+endif
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
+
+help:
+       @echo "Please use \`make <target>' where <target> is one of"
+       @echo "  html       to make standalone HTML files"
+       @echo "  dirhtml    to make HTML files named index.html in directories"
+       @echo "  singlehtml to make a single large HTML file"
+       @echo "  pickle     to make pickle files"
+       @echo "  json       to make JSON files"
+       @echo "  htmlhelp   to make HTML files and a HTML help project"
+       @echo "  qthelp     to make HTML files and a qthelp project"
+       @echo "  applehelp  to make an Apple Help Book"
+       @echo "  devhelp    to make HTML files and a Devhelp project"
+       @echo "  epub       to make an epub"
+       @echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+       @echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+       @echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
+       @echo "  text       to make text files"
+       @echo "  man        to make manual pages"
+       @echo "  texinfo    to make Texinfo files"
+       @echo "  info       to make Texinfo files and run them through makeinfo"
+       @echo "  gettext    to make PO message catalogs"
+       @echo "  changes    to make an overview of all changed/added/deprecated items"
+       @echo "  xml        to make Docutils-native XML files"
+       @echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
+       @echo "  linkcheck  to check all external links for integrity"
+       @echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+       @echo "  coverage   to run coverage check of the documentation (if enabled)"
+
+clean:
+       rm -rf $(BUILDDIR)/*
+
+html:
+       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+       @echo
+       @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+       $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+       @echo
+       @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+       @echo
+       @echo "Build finished; now you can process the pickle files."
+
+json:
+       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+       @echo
+       @echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+       @echo
+       @echo "Build finished; now you can run HTML Help Workshop with the" \
+             ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+       @echo
+       @echo "Build finished; now you can run "qcollectiongenerator" with the" \
+             ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+       @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Ring.qhcp"
+       @echo "To view the help file:"
+       @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Ring.qhc"
+
+applehelp:
+       $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
+       @echo
+       @echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
+       @echo "N.B. You won't be able to view it unless you put it in" \
+             "~/Library/Documentation/Help or install it in your application" \
+             "bundle."
+
+devhelp:
+       $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+       @echo
+       @echo "Build finished."
+       @echo "To view the help file:"
+       @echo "# mkdir -p $$HOME/.local/share/devhelp/Ring"
+       @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Ring"
+       @echo "# devhelp"
+
+epub:
+       $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+       @echo
+       @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo
+       @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+       @echo "Run \`make' in that directory to run these through (pdf)latex" \
+             "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo "Running LaTeX files through pdflatex..."
+       $(MAKE) -C $(BUILDDIR)/latex all-pdf
+       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+latexpdfja:
+       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       @echo "Running LaTeX files through platex and dvipdfmx..."
+       $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
+       @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+       $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+       @echo
+       @echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+       $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+       @echo
+       @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo
+       @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+       @echo "Run \`make' in that directory to run these through makeinfo" \
+             "(use \`make info' here to do that automatically)."
+
+info:
+       $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+       @echo "Running Texinfo files through makeinfo..."
+       make -C $(BUILDDIR)/texinfo info
+       @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+       $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+       @echo
+       @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+       @echo
+       @echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+       @echo
+       @echo "Link check complete; look for any errors in the above output " \
+             "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+       @echo "Testing of doctests in the sources finished, look at the " \
+             "results in $(BUILDDIR)/doctest/output.txt."
+
+coverage:
+       $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
+       @echo "Testing of coverage in the sources finished, look at the " \
+             "results in $(BUILDDIR)/coverage/python.txt."
+
+xml:
+       $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
+       @echo
+       @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+
+pseudoxml:
+       $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
+       @echo
+       @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
diff --git a/docs/ja-jp/README.md b/docs/ja-jp/README.md
new file mode 100644 (file)
index 0000000..3ab1708
--- /dev/null
@@ -0,0 +1,22 @@
+このフォルダにはプログラミング言語 Ring の取扱説明書を収録しています (Sphinx で作成)。
+
+(1) Python 2.7 をインストールします。
+
+(2) https://bootstrap.pypa.io/get-pip.py をダウンロードします。
+
+(3) python get-pip.py を実行します。
+
+(4) pip install sphinx==1.3.1 を実行します。
+
+(5) pygments lexer を使用するには、 ring.py を C:\Python27\Lib\site-packages\pygments\lexers へコピーします。
+
+(6) その後に python _mapping.py を実行します。
+
+(7) CHM ファイルを作成するには、 Microsoft Help Workshop を使用します : https://www.microsoft.com/en-us/download/details.aspx?id=21138
+
+(8) PDF ファイルを作成するには、 Lyx (https://www.lyx.org/Download) と MiKTEX (https://miktex.org/download) を使用します
+
+(9) PDF ファイルを作成するには、 buildepub.bat を実行します。
+
+Windows XP 以降でのビルド方法は下記のサイトを参照してください。
+https://osdn.net/projects/ring-lang-081/wiki/2019%2F02%2FDocuments-081#h1-2018.E5.B9.B405.E6.9C.8827.E6.97.A5.28.E5.9C.9F.29
diff --git a/docs/ja-jp/buildepub.bat b/docs/ja-jp/buildepub.bat
new file mode 100644 (file)
index 0000000..d612bd1
--- /dev/null
@@ -0,0 +1 @@
+make epub
\ No newline at end of file
diff --git a/docs/ja-jp/buildhtml.bat b/docs/ja-jp/buildhtml.bat
new file mode 100644 (file)
index 0000000..d210288
--- /dev/null
@@ -0,0 +1 @@
+make html
diff --git a/docs/ja-jp/buildhtmlhelp.bat b/docs/ja-jp/buildhtmlhelp.bat
new file mode 100644 (file)
index 0000000..4968f0a
--- /dev/null
@@ -0,0 +1 @@
+make htmlhelp
\ No newline at end of file
diff --git a/docs/ja-jp/buildlatex.bat b/docs/ja-jp/buildlatex.bat
new file mode 100644 (file)
index 0000000..3b4fa83
--- /dev/null
@@ -0,0 +1 @@
+make latex
\ No newline at end of file
diff --git a/docs/ja-jp/make.bat b/docs/ja-jp/make.bat
new file mode 100644 (file)
index 0000000..4872d3e
--- /dev/null
@@ -0,0 +1,263 @@
+@ECHO OFF
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+       set SPHINXBUILD=sphinx-build
+)
+set BUILDDIR=build
+set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% target
+set I18NSPHINXOPTS=%SPHINXOPTS% target
+if NOT "%PAPER%" == "" (
+       set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+       set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+       :help
+       echo.Please use `make ^<target^>` where ^<target^> is one of
+       echo.  html       to make standalone HTML files
+       echo.  dirhtml    to make HTML files named index.html in directories
+       echo.  singlehtml to make a single large HTML file
+       echo.  pickle     to make pickle files
+       echo.  json       to make JSON files
+       echo.  htmlhelp   to make HTML files and a HTML help project
+       echo.  qthelp     to make HTML files and a qthelp project
+       echo.  devhelp    to make HTML files and a Devhelp project
+       echo.  epub       to make an epub
+       echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
+       echo.  text       to make text files
+       echo.  man        to make manual pages
+       echo.  texinfo    to make Texinfo files
+       echo.  gettext    to make PO message catalogs
+       echo.  changes    to make an overview over all changed/added/deprecated items
+       echo.  xml        to make Docutils-native XML files
+       echo.  pseudoxml  to make pseudoxml-XML files for display purposes
+       echo.  linkcheck  to check all external links for integrity
+       echo.  doctest    to run all doctests embedded in the documentation if enabled
+       echo.  coverage   to run coverage check of the documentation if enabled
+       goto end
+)
+
+if "%1" == "clean" (
+       for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
+       del /q /s %BUILDDIR%\*
+       goto end
+)
+
+
+REM Check if sphinx-build is available and fallback to Python version if any
+%SPHINXBUILD% 2> nul
+if errorlevel 9009 goto sphinx_python
+goto sphinx_ok
+
+:sphinx_python
+
+set SPHINXBUILD=python -m sphinx.__init__
+%SPHINXBUILD% 2> nul
+if errorlevel 9009 (
+       echo.
+       echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+       echo.installed, then set the SPHINXBUILD environment variable to point
+       echo.to the full path of the 'sphinx-build' executable. Alternatively you
+       echo.may add the Sphinx directory to PATH.
+       echo.
+       echo.If you don't have Sphinx installed, grab it from
+       echo.http://sphinx-doc.org/
+       exit /b 1
+)
+
+:sphinx_ok
+
+
+if "%1" == "html" (
+       %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html 
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The HTML pages are in %BUILDDIR%/html.
+       goto end
+)
+
+if "%1" == "dirhtml" (
+       %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
+       goto end
+)
+
+if "%1" == "singlehtml" (
+       %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
+       goto end
+)
+
+if "%1" == "pickle" (
+       %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can process the pickle files.
+       goto end
+)
+
+if "%1" == "json" (
+       %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can process the JSON files.
+       goto end
+)
+
+if "%1" == "htmlhelp" (
+       %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in %BUILDDIR%/htmlhelp.
+       goto end
+)
+
+if "%1" == "qthelp" (
+       %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in %BUILDDIR%/qthelp, like this:
+       echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Ring.qhcp
+       echo.To view the help file:
+       echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Ring.ghc
+       goto end
+)
+
+if "%1" == "devhelp" (
+       %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished.
+       goto end
+)
+
+if "%1" == "epub" (
+       %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The epub file is in %BUILDDIR%/epub.
+       goto end
+)
+
+if "%1" == "latex" (
+       %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
+       goto end
+)
+
+if "%1" == "latexpdf" (
+       %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+       cd %BUILDDIR%/latex
+       make all-pdf
+       cd %~dp0
+       echo.
+       echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+       goto end
+)
+
+if "%1" == "latexpdfja" (
+       %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
+       cd %BUILDDIR%/latex
+       make all-pdf-ja
+       cd %~dp0
+       echo.
+       echo.Build finished; the PDF files are in %BUILDDIR%/latex.
+       goto end
+)
+
+if "%1" == "text" (
+       %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The text files are in %BUILDDIR%/text.
+       goto end
+)
+
+if "%1" == "man" (
+       %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The manual pages are in %BUILDDIR%/man.
+       goto end
+)
+
+if "%1" == "texinfo" (
+       %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
+       goto end
+)
+
+if "%1" == "gettext" (
+       %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
+       goto end
+)
+
+if "%1" == "changes" (
+       %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.The overview file is in %BUILDDIR%/changes.
+       goto end
+)
+
+if "%1" == "linkcheck" (
+       %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Link check complete; look for any errors in the above output ^
+or in %BUILDDIR%/linkcheck/output.txt.
+       goto end
+)
+
+if "%1" == "doctest" (
+       %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Testing of doctests in the sources finished, look at the ^
+results in %BUILDDIR%/doctest/output.txt.
+       goto end
+)
+
+if "%1" == "coverage" (
+       %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Testing of coverage in the sources finished, look at the ^
+results in %BUILDDIR%/coverage/python.txt.
+       goto end
+)
+
+if "%1" == "xml" (
+       %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The XML files are in %BUILDDIR%/xml.
+       goto end
+)
+
+if "%1" == "pseudoxml" (
+       %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
+       if errorlevel 1 exit /b 1
+       echo.
+       echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
+       goto end
+)
+
+:end
diff --git a/docs/ja-jp/pygments_lexer/ring.py b/docs/ja-jp/pygments_lexer/ring.py
new file mode 100644 (file)
index 0000000..164eacd
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+"""
+    pygments.lexers.ring
+    ~~~~~~~~~~~~~~~~~~~~~~
+
+    Lexer for the Ring language.
+
+    :copyright: Copyright 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+"""
+
+import re
+
+from pygments.lexer import RegexLexer, include, default
+from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
+    Number, Punctuation, Error
+
+__all__ = ['RingLexer']
+
+
+class RingLexer(RegexLexer):
+    """
+    For `Ring <http://Ring-code.org/>`_ source code.
+
+    .. versionadded:: 1.5
+    """
+
+    name = 'Ring'
+    aliases = ['ring', 'ring']
+    filenames = ['*.ring', '*.rh']
+    mimetypes = ['text/x-ring']
+
+    flags = re.MULTILINE | re.IGNORECASE | re.UNICODE
+
+    def underscorize(words):
+        newWords = []
+        new = ""
+        for word in words:
+            for ch in word:
+                new += (ch + "_?")
+            newWords.append(new)
+            new = ""
+        return "|".join(newWords)
+
+    keywords = [
+               'again','and','but','bye','call','case','catch','class','def','do','done',
+               'else','elseif','end','exit','for','from','func','get','give','if','import',
+               'in','load','loop','new','next','not','off','ok','on','or','other','package'
+               'private','put','return','see','step','switch','to','try','while','changeringkeyword',
+               'changeringoperator','loadsyntax','endfunc','endclass','endpackage'
+    ]
+
+    keywordsPseudo = [
+        'null', 'true', 'false'
+    ]
+
+    opWords = [
+        'and', 'or', 'not'
+    ]
+
+    types = [
+        'list', 'string', 'stack', 'queue', 'tree', 'hashtable'
+       ]
+
+    tokens = {
+        'root': [
+            (r'##.*$', String.Doc),
+            (r'#.*$', Comment),
+            (r'[*=><+\-/@$~&%!?|\\\[\]]', Operator),
+            (r'\.\.|\.|,|\[\.|\.\]|\{\.|\.\}|\(\.|\.\)|\{|\}|\(|\)|:|\^|`|;',
+             Punctuation),
+
+            # Strings
+            (r'(?:[\w]+)"', String, 'rdqs'),
+            (r'"""', String, 'tdqs'),
+            ('"', String, 'dqs'),
+
+            # Char
+            ("'", String.Char, 'chars'),
+
+            # Keywords
+            (r'(%s)\b' % underscorize(opWords), Operator.Word),
+            (r'(p_?r_?o_?c_?\s)(?![(\[\]])', Keyword, 'funcname'),
+            (r'(%s)\b' % underscorize(keywords), Keyword),
+            (r'(%s)\b' % underscorize(['from', 'import', 'include']),
+             Keyword.Namespace),
+            (r'(v_?a_?r)\b', Keyword.Declaration),
+            (r'(%s)\b' % underscorize(types), Keyword.Type),
+            (r'(%s)\b' % underscorize(keywordsPseudo), Keyword.Pseudo),
+            # Identifiers
+            (r'\b((?![_\d])\w)(((?!_)\w)|(_(?!_)\w))*', Name),
+            # Numbers
+            (r'[0-9][0-9_]*(?=([e.]|\'f(32|64)))',
+             Number.Float, ('float-suffix', 'float-number')),
+            (r'0x[a-f0-9][a-f0-9_]*', Number.Hex, 'int-suffix'),
+            (r'0b[01][01_]*', Number.Bin, 'int-suffix'),
+            (r'0o[0-7][0-7_]*', Number.Oct, 'int-suffix'),
+            (r'[0-9][0-9_]*', Number.Integer, 'int-suffix'),
+            # Whitespace
+            (r'\s+', Text),
+            (r'.+$', Error),
+        ],
+        'chars': [
+            (r'\\([\\abcefnrtvl"\']|x[a-f0-9]{2}|[0-9]{1,3})', String.Escape),
+            (r"'", String.Char, '#pop'),
+            (r".", String.Char)
+        ],
+        'strings': [
+            (r'(?<!\$)\$(\d+|#|\w+)+', String.Interpol),
+            (r'[^\\\'"$\n]+', String),
+            # quotes, dollars and backslashes must be parsed one at a time
+            (r'[\'"\\]', String),
+            # unhandled string formatting sign
+            (r'\$', String)
+            # newlines are an error (use "nl" state)
+        ],
+        'dqs': [
+            (r'\\([\\abcefnrtvl"\']|\n|x[a-f0-9]{2}|[0-9]{1,3})',
+             String.Escape),
+            (r'"', String, '#pop'),
+            include('strings')
+        ],
+        'rdqs': [
+            (r'"(?!")', String, '#pop'),
+            (r'""', String.Escape),
+            include('strings')
+        ],
+        'tdqs': [
+            (r'"""(?!")', String, '#pop'),
+            include('strings'),
+            include('nl')
+        ],
+        'funcname': [
+            (r'((?![\d_])\w)(((?!_)\w)|(_(?!_)\w))*', Name.Function, '#pop'),
+            (r'`.+`', Name.Function, '#pop')
+        ],
+        'nl': [
+            (r'\n', String)
+        ],
+        'float-number': [
+            (r'\.(?!\.)[0-9_]*', Number.Float),
+            (r'e[+-]?[0-9][0-9_]*', Number.Float),
+            default('#pop')
+        ],
+        'float-suffix': [
+            (r'\'f(32|64)', Number.Float),
+            default('#pop')
+        ],
+        'int-suffix': [
+            (r'\'i(32|64)', Number.Integer.Long),
+            (r'\'i(8|16)', Number.Integer),
+            default('#pop')
+        ],
+    }
diff --git a/docs/ja-jp/run.bat b/docs/ja-jp/run.bat
new file mode 100644 (file)
index 0000000..dcf7f53
--- /dev/null
@@ -0,0 +1,4 @@
+cd build\html
+start index.html
+cd..
+cd..
diff --git a/docs/ja-jp/source/BMI.png b/docs/ja-jp/source/BMI.png
new file mode 100644 (file)
index 0000000..179db0c
Binary files /dev/null and b/docs/ja-jp/source/BMI.png differ
diff --git a/docs/ja-jp/source/Fedora.png b/docs/ja-jp/source/Fedora.png
new file mode 100644 (file)
index 0000000..f6a5406
Binary files /dev/null and b/docs/ja-jp/source/Fedora.png differ
diff --git a/docs/ja-jp/source/Fedora2.png b/docs/ja-jp/source/Fedora2.png
new file mode 100644 (file)
index 0000000..32ddb4d
Binary files /dev/null and b/docs/ja-jp/source/Fedora2.png differ
diff --git a/docs/ja-jp/source/Fedora3.png b/docs/ja-jp/source/Fedora3.png
new file mode 100644 (file)
index 0000000..19b705e
Binary files /dev/null and b/docs/ja-jp/source/Fedora3.png differ
diff --git a/docs/ja-jp/source/_static/cover.png b/docs/ja-jp/source/_static/cover.png
new file mode 100644 (file)
index 0000000..1cc67c3
Binary files /dev/null and b/docs/ja-jp/source/_static/cover.png differ
diff --git a/docs/ja-jp/source/_static/epub-cover.html b/docs/ja-jp/source/_static/epub-cover.html
new file mode 100644 (file)
index 0000000..74d2c8a
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Ring 1.10 取扱説明書</title>
+    <link rel="stylesheet" href="_static/classic.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+  </head>
+  <body>
+  </body>
+     <img src="_static/cover.png">
+
+  </html>
diff --git a/docs/ja-jp/source/allegro.txt b/docs/ja-jp/source/allegro.txt
new file mode 100644 (file)
index 0000000..1fe1ce6
--- /dev/null
@@ -0,0 +1,492 @@
+.. index:: 
+       single: グラフィックスとゲームプログラミング; はじめに
+
+==========================================================
+RingAllegro によるグラフィックスと 2D ゲームプログラミング
+==========================================================
+
+Ring アプリケーションにおける Allegro ゲームプログラミング・ライブラリの用法を学びます。
+
+gamelib.ring ファイルは Allegro 関数接続用の DLL ライブラリを読み込みます。
+
+.. code-block:: Ring
+
+       Load "allegro.rh"
+       if iswindows()
+               LoadLib("ring_allegro.dll")
+       but ismacosx()
+               LoadLib("libringallegro.dylib")
+       else
+               LoadLib("libringallegro.so")
+       ok
+
+gamelib.ring ファイルは allegro.rh ファイル (プログラムで利用する定数を記述したソースコードファイル) を  Load 命令で実行します。
+
+そして DLL ライブラリである“ring_allegro.dll” を LoadLib() 関数で読み込みます。
+
+可搬性のあるコードを書くには gamelib.ring の変更を行い
+DLL/So ファイルの読み込む前にプラットフォームを確認します。
+
+.. index:: 
+       pair: グラフィックスとゲームプログラミング; 描画、アニメーションと入力
+
+描画、アニメーションと入力
+==========================
+
+この用例では Allegro ライブラリを用いて描画処理や画面上にあるオブジェクトの移動、およびキーボートとマウスの入力を取得します。
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)
+
+       al_show_native_message_box(display, "Hello", "Welcome",
+                               "Using Allegro from the Ring programming language", 
+                               "", 0);
+
+       al_clear_to_color(al_map_rgb(0,0,255))
+
+       BOUNCER_SIZE = 40
+       bouncer_x = 10
+       bouncer_y = 20
+       bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE)
+       al_set_target_bitmap(bouncer)
+       al_clear_to_color(al_map_rgb(255,0,255))
+
+       for x = 1 to 30
+               bouncer_x += x 
+               bouncer_y += x
+               al_set_target_bitmap(al_get_backbuffer(display))
+               al_clear_to_color(al_map_rgb(0,0,0))
+               al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0)
+               al_draw_bitmap(bouncer, 200+bouncer_x,200+ bouncer_y, 0)
+               al_flip_display()
+               al_rest(0.1)
+       next
+
+       al_clear_to_color(al_map_rgb(255,255,255))
+       image = al_load_bitmap("man2.jpg")
+       al_draw_bitmap(image,200,200,0)
+       al_flip_display()
+       al_rest(2)
+
+       event_queue = al_create_event_queue()
+       al_register_event_source(event_queue, al_get_display_event_source(display))
+
+       ev = al_new_allegro_event()
+       timeout = al_new_allegro_timeout()
+       al_init_timeout(timeout, 0.06)
+
+       FPS = 60
+       timer = al_create_timer(1.0 / FPS)
+       al_register_event_source(event_queue, al_get_timer_event_source(timer))
+       al_start_timer(timer)
+       redraw = true
+
+       SCREEN_W = 640
+       SCREEN_H = 480
+       BOUNCER_SIZE = 32
+       bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0
+       bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0
+       bouncer_dx = -4.0
+       bouncer_dy = 4.0
+
+       al_install_mouse()
+       al_register_event_source(event_queue, al_get_mouse_event_source())
+
+       al_install_keyboard()
+       al_register_event_source(event_queue, al_get_keyboard_event_source())
+
+       KEY_UP = 1
+       KEY_DOWN = 2
+       KEY_LEFT = 3
+       KEY_RIGHT = 4
+       Key = [false,false,false,false]
+
+       while true
+               al_init_timeout(timeout, 0.06)
+               al_wait_for_event_until(event_queue, ev, timeout)
+               switch al_get_allegro_event_type(ev)
+               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                       exit
+               on ALLEGRO_EVENT_TIMER
+                       
+                       # アニメーション
+                       if bouncer_x < 0 or bouncer_x > SCREEN_W - BOUNCER_SIZE
+                               bouncer_dx = -bouncer_dx
+                       ok
+        
+                       if bouncer_y < 0 or bouncer_y > SCREEN_H - BOUNCER_SIZE
+                               bouncer_dy = -bouncer_dy
+                       ok
+        
+                       bouncer_x += bouncer_dx
+                       bouncer_y += bouncer_dy
+                       
+                       # キーボード
+                       if key[KEY_UP] and bouncer_y >= 4.0
+                               bouncer_y -= 4.0
+                       ok 
+                       if key[KEY_DOWN] and bouncer_y <= SCREEN_H - BOUNCER_SIZE - 4.0
+                               bouncer_y += 4.0
+                       ok 
+                       if key[KEY_LEFT] and bouncer_x >= 4.0
+                               bouncer_x -= 4.0
+                       ok 
+                       if key[KEY_RIGHT] and bouncer_x <= SCREEN_W - BOUNCER_SIZE - 4.0
+                               bouncer_x += 4.0
+                       ok
+        
+                       redraw = true
+                       
+               on ALLEGRO_EVENT_MOUSE_AXES
+                       bouncer_x = al_get_allegro_event_mouse_x(ev)
+                       bouncer_y = al_get_allegro_event_mouse_y(ev)
+               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                       bouncer_x = al_get_allegro_event_mouse_x(ev)
+                       bouncer_y = al_get_allegro_event_mouse_y(ev)
+               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                       exit
+               on ALLEGRO_EVENT_KEY_DOWN
+                       switch al_get_allegro_event_keyboard_keycode(ev)
+                               on ALLEGRO_KEY_UP
+                                       key[KEY_UP] = true
+                               on ALLEGRO_KEY_DOWN
+                                       key[KEY_DOWN] = true
+                               on ALLEGRO_KEY_LEFT
+                                       key[KEY_LEFT] = true
+                               on ALLEGRO_KEY_RIGHT
+                                       key[KEY_RIGHT] = true
+                       off
+               on ALLEGRO_EVENT_KEY_UP
+                       switch al_get_allegro_event_keyboard_keycode(ev)
+                               on ALLEGRO_KEY_UP
+                                       key[KEY_UP] = false
+                               on ALLEGRO_KEY_DOWN
+                                       key[KEY_DOWN] = false
+                               on ALLEGRO_KEY_LEFT
+                                       key[KEY_LEFT] = false
+                               on ALLEGRO_KEY_RIGHT
+                                       key[KEY_RIGHT] = false
+                               on ALLEGRO_KEY_ESCAPE
+                                       exit
+                       off
+               off
+               if redraw and al_is_event_queue_empty(event_queue)
+                       redraw = false          
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0)
+                       al_flip_display()
+               ok
+               callgc()
+       end
+
+       al_destroy_timer(timer)
+       al_destroy_allegro_event(ev)
+       al_destroy_allegro_timeout(timeout)
+       al_destroy_event_queue(event_queue)
+       al_destroy_bitmap(bouncer)
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+
+.. note:: 前述の用例では While/End ループの内側で callgc() 関数 (Ring 関数) を呼び出して、強制的にガベージコレクターを実行しています。
+
+プログラムの実行結果:
+
+まず、プログラムでメッセージボックスを表示します。
+
+.. image:: ringalleg_shot1.jpg
+       :alt: プログラムからメッセージボックスを表示
+
+次に画面上で二つの長方形を移動します。
+
+.. image:: ringalleg_shot2.jpg
+       :alt: アニメーション - 画面上で二つの長方形を移動
+
+そして、画面上に画像を表示します。
+
+.. image:: ringalleg_shot3.jpg
+       :alt: 画面上に画像を表示
+
+最後に、画面上で常に移動している四角形を表示しており、
+四角形はマウスとキーボードで操作します。
+
+.. image:: ringalleg_shot4.jpg
+       :alt: アニメーションとキーボード、およびマウスでオブジェクトを移動
+
+.. index:: 
+       pair: グラフィックスとゲームプログラミング; TrueType フォント
+
+TrueType フォントの用法
+=======================
+
+この用例は Allegro 採用ゲームでの TrueType フォント (\*.ttf) の用法を示したものです。
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_font_addon()
+       al_init_ttf_addon()
+
+       display = al_create_display(800,600)
+
+       al_clear_to_color(al_map_rgb(0,0,255))
+       font = al_load_ttf_font("pirulen.ttf",14,0 )
+       al_draw_text(font, al_map_rgb(255,255,255), 10, 10,ALLEGRO_ALIGN_LEFT,
+                "Welcome to the Ring programming language")
+       al_flip_display()
+       al_rest(2)
+
+       al_destroy_display(display)
+
+スクリーンショット:
+
+.. image:: ringalleg_shot5.jpg
+       :alt: TrueType フォントの用法
+
+.. index:: 
+       pair: グラフィックスとゲームプログラミング; 音声ファイルの再生
+
+音声ファイルの再生
+==================
+
+この用例は音声ファイルを再生します。
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_install_audio()
+       al_init_acodec_addon()
+       al_reserve_samples(1) 
+
+       sample = al_load_sample( "footstep.wav" )
+
+       sampleid = al_new_allegro_sample_id()
+       al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,sampleid)
+
+       display = al_create_display(640,480)
+       al_clear_to_color(al_map_rgb(0,0,255))
+       al_flip_display()
+       al_rest(10)
+
+       al_destroy_allegro_sample_id(sampleid)
+       al_destroy_sample(sample)
+       al_destroy_display(display)
+
+       al_exit()
+
+.. index:: 
+       pair: グラフィックスとゲームプログラミング; 画像の寸法変更と回転
+
+画像の寸法変更と回転
+====================
+
+この用例は画像の回転と表示を行います。
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)
+       al_set_target_bitmap(al_get_backbuffer(display))
+       al_clear_to_color(al_map_rgb(255,255,255))
+
+       image = al_load_bitmap("man2.jpg")
+       al_draw_rotated_bitmap(image,0,0,250,250,150,0)
+       al_draw_scaled_bitmap(image,0,0,250,250,20,20,400,400,0)
+
+       al_flip_display()
+       al_rest(2)
+
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+スクリーンショット:
+
+.. image:: ringalleg_shot6.jpg
+       :alt: 画像の寸法変更と回転
+
+.. index:: 
+       pair: グラフィックスとゲームプログラミング; 透過画像の表示
+
+透過画像の表示
+==============
+
+この用例は、画像 (白色の背景) に別の画像を重ね合わせて表示します。
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       al_init()
+       al_init_image_addon()
+
+       display = al_create_display(640,480)    
+       imageback = al_load_bitmap("palace.jpg")
+       al_draw_bitmap(imageback,0,0,0)
+
+       image = al_load_bitmap("man4.png")
+       al_convert_mask_to_alpha(image,al_map_rgb(255,255,255))
+       al_draw_bitmap(image,0,0,0)
+       al_flip_display()
+       al_rest(10)
+
+       al_destroy_bitmap(image)
+       al_destroy_display(display)     
+
+スクリーンショット:
+
+.. image:: ringalleg_shot7.jpg
+       :alt: 透過画像の表示
+
+.. index:: 
+       pair: グラフィックスとゲームプログラミング; スレッドの用法
+
+スレッドの用法
+==============
+
+この用例では Allegro ライブラリにおけるスレッドの用法を学びます。
+
+.. code-block:: ring
+
+       Load "gamelib.ring"
+
+       o1 = new mythreads 
+
+       Func Main
+               al_init()
+               for k = 1 to 5
+                       al_create_thread("o1.thread1()")
+                       al_create_thread("o1.thread2()")
+                       al_create_thread("o1.thread3()")
+               next
+               al_rest(2)
+
+       Class Mythreads
+
+               cAppName = "Threads Application"
+
+               Func Thread1
+                       for x = 1 to 5
+                               see x + nl      
+                       next
+                       See 'Thread(1) : Application Name : '  + cAppName + nl
+
+               Func Thread2
+                       for x = 1 to 5
+                               see '*****' + x + nl    
+                       next
+                       See 'Thread(2) : Application Name : '  + cAppName + nl
+
+               Func Thread3
+                       for x = 1 to 5
+                               see '!!!!' + x + nl     
+                       next
+                       See 'Thread(3) : Application Name : '  + cAppName + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****4
+       *****5
+       Thread(2) : Application Name : Threads Application
+       !!!!1
+       !!!!2
+       !!!!3
+       !!!!4
+       !!!!5
+       Thread(3) : Application Name : Threads Application
+       1
+       2
+       3
+       4
+       5
+       Thread(1) : Application Name : Threads Application
+       *****1
+       *****2
+       *****3
+       *****1
+       *****4
+       *****2
+       !!!!1
+       *****5
+       *****3
+       1
+       !!!!2
+       Thread(2) : Application Name : Threads Application
+       1
+       *****4
+       !!!!1
+       2
+       !!!!3
+       !!!!4
+       *****5
+       !!!!2
+       3
+       2
+       !!!!5
+       Thread(2) : Application Name : Threads Application
+       !!!!3
+       4
+       3
+       Thread(3) : Application Name : Threads Application
+       !!!!4
+       5
+       4
+       !!!!5
+       Thread(1) : Application Name : Threads Application
+       5
+       Thread(3) : Application Name : Threads Application
+       Thread(1) : Application Name : Threads Application
diff --git a/docs/ja-jp/source/analogclock.png b/docs/ja-jp/source/analogclock.png
new file mode 100644 (file)
index 0000000..261d19f
Binary files /dev/null and b/docs/ja-jp/source/analogclock.png differ
diff --git a/docs/ja-jp/source/asciitable.png b/docs/ja-jp/source/asciitable.png
new file mode 100644 (file)
index 0000000..747b1e8
Binary files /dev/null and b/docs/ja-jp/source/asciitable.png differ
diff --git a/docs/ja-jp/source/autocomplete.png b/docs/ja-jp/source/autocomplete.png
new file mode 100644 (file)
index 0000000..29ab605
Binary files /dev/null and b/docs/ja-jp/source/autocomplete.png differ
diff --git a/docs/ja-jp/source/bignumber.txt b/docs/ja-jp/source/bignumber.txt
new file mode 100644 (file)
index 0000000..c8974f5
--- /dev/null
@@ -0,0 +1,163 @@
+.. index:: 
+       single: bignumber; はじめに
+
+====================
+BigNumber ライブラリ
+====================
+
+Big Number ライブラリの用法を学びます。
+
+開発者 : バート・マリアーニ、ガル・ゾルト (カームソフト)
+
+.. index:: 
+       pair: bignumber; ライブラリの読み込み
+
+ライブラリの読み込み
+====================
+
+この関数の使用前に bignumber.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+       # BigNumber ライブラリ関数の使用
+
+.. index:: 
+       pair: bignumber; 用例
+
+用例
+====
+
+BigNumber ライブラリは非常に大きい数の算術演算で使用します。
+
+用例:
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+
+       num1 = "62345678901234567891678345123456789"    ### 大なり
+       num2 =  "1237894567890123419871236545"          ### 小なり
+       num3 =     "64"                                 ### 小なりを割る
+       num4 = "765432"                 
+       num5 =      "3"                                 ### 累乗            
+    
+       ? "Add big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 + a2                    a3.Print() ? nl
+
+       ? "Substract big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 - a2                    a3.Print() ? nl
+
+       ? "Multiply big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()      
+       a3 = a1 * a2                    a3.print() ? nl
+
+       ? "Divide big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+    
+       ? "Divide big numbers: by very small number" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num3)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+
+       ? "Power of big number:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num5)        a2.print()
+       a3 = a1 ^ a2                    a3.print() ? nl
+    
+実行結果:
+
+.. code-block:: none
+
+       Add big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       62345680139129135781801764994693334
+
+
+       Substract big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       52345687663340000001554925252220244
+
+
+       Multiply big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       77177377243260150103462178714197454736432472780119682305154005
+
+
+       Divide big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       50364288
+
+
+       Divide big numbers: by very small number
+       62345678901234567891678345123456789
+       64
+       974151232831790123307474142554012
+
+
+       Power of big number:
+       62345678901234567891678345123456789
+       3
+       242336636261471172092347146031727004 (実行結果は次行へ続きます)
+       371698195628343934238988256152289508 (実行結果は次行へ続きます)
+       493964611043228971692389860897069
+
+
+.. index:: 
+       pair: bignumber; BigNumber 関数
+
+BigNumber 関数
+==============
+
+このライブラリで使える関数のリストです。
+
+.. code-block:: none
+
+       FuncAdd(num1,num2)
+       FuncSubtract(num1,num2)
+       FuncCompare(num1,num2)
+       FuncDivide(num1,num2)
+       FuncMultiply(num1,num2)
+       FuncPower(num1,num2)
+       FuncBinaryToDecimal(num1)
+       FuncDecimalToBinary(num1)
+       printBinaryDigits(binList)
+       printDecimalDigits(decList)
+
+.. index:: 
+       pair: bignumber; BigNumber クラス
+
+BigNumber クラス
+================
+
+このライブラリで使えるクラスのリストです。
+
+.. code-block:: ring
+
+       class BigNumber 
+               func init aPara 
+               func operator cOperator, Para
+               func print 
+               func value
+
+.. index:: 
+       pair: bignumber; ライブラリのソースコード
+
+ライブラリのソースコード
+========================
+
+ライブラリのソースコードは ring/ringlibs/bignumber フォルダにあります。
+
+ソースコード : https://github.com/ring-lang/ring/blob/master/ringlibs/bignumber/bignumber.ring
+
diff --git a/docs/ja-jp/source/calcapp.jpg b/docs/ja-jp/source/calcapp.jpg
new file mode 100644 (file)
index 0000000..f48b4fc
Binary files /dev/null and b/docs/ja-jp/source/calcapp.jpg differ
diff --git a/docs/ja-jp/source/calendar.png b/docs/ja-jp/source/calendar.png
new file mode 100644 (file)
index 0000000..66c80eb
Binary files /dev/null and b/docs/ja-jp/source/calendar.png differ
diff --git a/docs/ja-jp/source/callstack.png b/docs/ja-jp/source/callstack.png
new file mode 100644 (file)
index 0000000..ac1d35b
Binary files /dev/null and b/docs/ja-jp/source/callstack.png differ
diff --git a/docs/ja-jp/source/cameraandbackground.png b/docs/ja-jp/source/cameraandbackground.png
new file mode 100644 (file)
index 0000000..28a847c
Binary files /dev/null and b/docs/ja-jp/source/cameraandbackground.png differ
diff --git a/docs/ja-jp/source/cardsmainmenu.png b/docs/ja-jp/source/cardsmainmenu.png
new file mode 100644 (file)
index 0000000..5009e83
Binary files /dev/null and b/docs/ja-jp/source/cardsmainmenu.png differ
diff --git a/docs/ja-jp/source/cardsqt.png b/docs/ja-jp/source/cardsqt.png
new file mode 100644 (file)
index 0000000..efdba1f
Binary files /dev/null and b/docs/ja-jp/source/cardsqt.png differ
diff --git a/docs/ja-jp/source/checkandconvert.txt b/docs/ja-jp/source/checkandconvert.txt
new file mode 100644 (file)
index 0000000..576c987
--- /dev/null
@@ -0,0 +1,586 @@
+.. index:: 
+       single: データ型; はじめに
+
+====================
+データ型の検査と変換
+====================
+
+この用途の関数を学びます。
+
+* データ型の検査
+* 文字の検査
+* 変換
+
+.. index:: 
+       pair: データ型; データ型の検査
+
+データ型の検査
+==============
+
+データ型の検査用関数です
+
+* isstring()
+* isnumber()
+* islist()
+* type()
+* isnull()
+
+.. index:: 
+       pair: データ型; IsString()
+
+IsString() 関数
+===============
+
+IsString() 関数は値が文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsString(値) ---> 値が文字列ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isstring(5) + nl +          # 0 を表示
+           isstring("hello") + nl      # 1 を表示
+
+.. index:: 
+       pair: データ型; IsNumber()
+
+IsNumber() 関数
+===============
+
+IsNumber() 関数は値が数値であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsNumber(値) ---> 値が数値ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isnumber(5) + nl +          # 1 を表示
+           isnumber("hello") + nl      # 0 を表示
+
+.. index:: 
+       pair: データ型; IsList()
+
+IsList() 関数
+=============
+
+IsList() 関数は値がリストであるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsList(値) ---> 値がリストならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see islist(5) + nl +            # 0 を表示
+           islist("hello") + nl +      # 0 を表示
+           islist([1,3,5])             # 1 を表示
+       
+.. index:: 
+       pair: データ型; Type()
+
+Type() 関数
+===========
+
+Type() 関数は値の型を検査します。
+
+
+文法:
+
+.. code-block:: ring
+
+       Type(値) ---> 型を文字列で返します。
+
+用例:
+
+.. code-block:: ring
+
+           see Type(5) + nl +          # NUMBER を表示
+           Type("hello") + nl +        # STRING を表示
+           Type([1,3,5])               # LIST を表示
+
+.. index:: 
+       pair: データ型; isNULL()
+
+IsNULL() 関数
+=============
+
+IsNULL() 関数は値が null であるかどうか検査します。 
+
+文法:
+
+.. code-block:: ring
+
+       IsNULL(値) ---> 値が NULL ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+           see isnull(5) + nl +        # 0 を表示
+           isnull("hello") + nl +      # 0 を表示
+           isnull([1,3,5]) + nl +      # 0 を表示
+           isnull("") + nl +           # 1 を表示
+           isnull("NULL")              # 1 を表示
+
+.. index:: 
+       pair: データ型; 文字の検査
+
+文字の検査
+==========
+
+この関数は文字を検査します。
+
+* isalnum()
+* isalpha()
+* iscntrl()
+* isdigit()
+* isgraph()
+* islower()
+* isprint()
+* ispunct()
+* isspace()
+* isupper()
+* isxdigit()
+
+.. index:: 
+       pair: データ型; IsAlNum()
+
+IsAlNum() 関数
+==============
+
+IsAlNum() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsAlNum(値) ---> 値が数字または文字ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isalnum("Hello") + nl +     # 1 を表示
+           isalnum("123456") + nl +    # 1 を表示
+           isalnum("ABCabc123") + nl + # 1 を表示
+           isalnum("How are you")      # 空白のため 0 を表示
+
+.. index:: 
+       pair: データ型; IsAlpha()
+
+IsAlpha() 関数
+==============
+
+IsAlpha() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsAlpha(値) ---> 値が文字ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isalpha("Hello") + nl +     # 1 を表示
+           isalpha("123456") + nl +    # 0 を表示
+           isalpha("ABCabc123") + nl + # 0 を表示
+           isalpha("How are you")      # 0 を表示
+
+.. index:: 
+       pair: データ型; IsCntrl()
+
+IsCntrl() 関数
+==============
+
+IsCntrl() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsCntrl(値) ---> 値が制御文字 (表示不能) ならば 1 を、
+                           そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       See iscntrl("hello") + nl +     # 0 を表示 
+           iscntrl(nl)                 # 1 を表示
+
+.. index:: 
+       pair: データ型; IsDigit()
+
+IsDigit() 関数
+==============
+
+IsDigit() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsDigit(値) ---> 値が数字ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isdigit("0123456789") + nl +        # 1 を表示
+           isdigit("0123a")                    # 0 を表示
+
+.. index:: 
+       pair: データ型; IsGraph()
+
+IsGraph() 関数
+==============
+
+IsGraph() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsGraph(値)
+               ---> 値が表示可能 (空白文字を除く) であれば 1 を、そうでなければ 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       see isgraph("abcdef") + nl +    # 1 を表示
+           isgraph("abc def")          # 0 を表示
+
+
+.. index:: 
+       pair: データ型; IsLower()
+
+IsLower() 関数
+==============
+
+IsLower() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsLower(値) ---> 値が英数小文字ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see islower("abcDEF") + nl +    # 0 を表示
+           islower("ghi")              # 1 を表示
+
+
+.. index:: 
+       pair: データ型; IsPrint()
+
+IsPrint() 関数
+==============
+
+IsPrint() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsPrint(値) ---> 値が表示可能であれば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isprint("Hello") + nl +             # 1 を表示
+           isprint("Nice to see you") + nl +   # 1 を表示
+           isprint(nl)                         # 0 を表示
+
+.. index:: 
+       pair: データ型; IsPunct()
+
+IsPunct() 関数
+==============
+
+IsPunct() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsPunct(値) ---> 値が句読記号文字ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see ispunct("hello") + nl +     # 0 を表示
+           ispunct(",")                # 1 を表示
+
+.. index:: 
+       pair: データ型; IsSpace()
+
+IsSpace() 関数
+==============
+
+IsSpace() 関数は文字または文字列であるかどうか検査します。 
+
+文法:
+
+.. code-block:: ring
+
+       IsSpace(値) ---> 値が空白文字ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isspace("   ") + nl +       # 1 を表示
+           isspace("test")             # 0 を表示
+
+
+.. index:: 
+       pair: データ型; IsUpper()
+
+IsUpper() 関数
+==============
+
+IsUpper() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsUpper(値) ---> 値が英数大文字ならば 1 を、そうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isupper("welcome") + nl +    # 0 を表示 
+           isupper("WELCOME")           # 1 を表示
+
+
+.. index:: 
+       pair: データ型; IsXdigit()
+
+IsXdigit() 関数
+===============
+
+IsXdigit() 関数は文字または文字列であるかどうか検査します。
+
+文法:
+
+.. code-block:: ring
+
+       IsXdigit(値) ---> 値が十六進数文字ならば 1 をそうでなければ 0 です。
+
+用例:
+
+.. code-block:: ring
+
+       see isxdigit("0123456789abcdef") + nl +  # 1 を表示
+           isxdigit("123z")                     # 0 を表示
+
+
+.. index:: 
+       pair: データ型; 変換
+
+変換
+====
+
+この関数は変換で使用します。
+
+* number()
+* string()
+* ascii()
+* char()
+* hex()
+* dec()
+* str2hex()
+* hex2str()
+
+.. index:: 
+       pair: データ型; Number()
+
+Number() 関数
+=============
+
+Number() 関数または + 演算子は文字列を数値へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       Number(文字列) ---> 数値
+       0 + 文字列     ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       see number("5") + 5 + nl        # 1 を表示0
+       see 0 + "10" + 2                # 12 を表示  
+
+.. index:: 
+       pair: データ型; String()
+
+String() 関数
+=============
+
+String() 関数または + 演算子は数値を文字列へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       String(数値) ---> 文字列
+       "" + 数値    ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       see string(5) + 5 + nl          # 55 を表示
+       see "" + 10 + 2                 # 102 を表示
+
+.. index:: 
+       pair: データ型; Ascii()
+
+Ascii() 関数
+============
+
+Ascii() 関数は文字から ASCII コードを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       Ascii(文字) ---> ASCII コード
+
+用例:
+
+.. code-block:: ring
+
+       See ascii("m") + nl +   # 109 を表示
+           ascii("M")          # 77 を表示
+
+.. index:: 
+       pair: データ型; Char()
+
+Char() 関数
+===========
+
+Char() 関数は ASCII コードを文字へ変換できます
+
+文法:
+
+.. code-block:: ring
+
+       Char(ASCII コード) ---> 文字
+
+用例:
+
+.. code-block:: ring
+
+       See char(109) + nl +    # m を表示
+           char(77)            # M を表示
+
+
+.. index:: 
+       pair: データ型; Hex()
+
+Hex() 関数
+==========
+
+Hex() 関数は十進数から十六進数へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       Hex(十進数) ---> 十六進数
+
+用例:
+
+.. code-block:: ring
+
+       See hex(10) + nl +      # a を表示
+           hex(200)            # c8 を表示
+
+.. index:: 
+       pair: データ型; Dec()
+
+Dec() 関数
+==========
+
+Dec() 関数は十六進数から十進数へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       Dec(十六進数) ---> 十進数
+
+用例:
+
+.. code-block:: ring
+
+       See dec("a") + nl +     # 10 を表示
+           dec("c8")           # 200 を表示
+
+.. index:: 
+       pair: データ型; Str2Hex()
+
+Str2hex() 関数
+==============
+
+Str2hex() 関数は文字列の文字を十六進数文字へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       Str2hex(文字列) ---> 十六進数文字列
+
+用例:
+
+.. code-block:: ring
+
+       See str2hex("hello")    # 68656c6c6f を表示
+
+.. index:: 
+       pair: データ型; Hex2str()
+
+Hex2str() 関数
+==============
+
+Hex2str() 関数は十六進数文字を文字列へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       Hex2Str(十六進数文字列) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       See hex2str("68656c6c6f")       # hello を表示
diff --git a/docs/ja-jp/source/checkersgame.png b/docs/ja-jp/source/checkersgame.png
new file mode 100644 (file)
index 0000000..287820b
Binary files /dev/null and b/docs/ja-jp/source/checkersgame.png differ
diff --git a/docs/ja-jp/source/chessgame.png b/docs/ja-jp/source/chessgame.png
new file mode 100644 (file)
index 0000000..0f9649a
Binary files /dev/null and b/docs/ja-jp/source/chessgame.png differ
diff --git a/docs/ja-jp/source/classeslist.png b/docs/ja-jp/source/classeslist.png
new file mode 100644 (file)
index 0000000..35b9c46
Binary files /dev/null and b/docs/ja-jp/source/classeslist.png differ
diff --git a/docs/ja-jp/source/codeeditors.txt b/docs/ja-jp/source/codeeditors.txt
new file mode 100644 (file)
index 0000000..b1b4169
--- /dev/null
@@ -0,0 +1,151 @@
+.. index:: 
+       single: テキストエディタの設定; はじめに
+
+======================
+テキストエディタの設定
+======================
+
+Ring/Editor フォルダには、テキストエディタ用の拡張機能を収録しています。
+
+* Notepad++
+* Geany
+* Atom
+* Sublime Text 2
+* Visual Studio IDE
+* Emacs
+* Visual Studio Code (VSCode)
+
+.. index:: 
+       pair: テキストエディタの設定; Notepad++
+
+
+Notepad++
+=========
+
+フォルダ : ring/editor/notepad_plus_plus
+
+* Notepad++ を開きます。
+* “言語” メニューを開きます。
+* “言語の定義...” を選択します。
+* “Import...” をクリックします。
+* `Ring.xml` を選択します。
+* “インポート成功” のダイアログで “OK” を選択してから “ユーザ定義言語” のダイアログまたはパネルを閉じます。
+* 場合によっては Notepad++ を再起動してください。
+
+.. image:: editor1.png
+       :alt: Notepad++
+
+.. index:: 
+       pair: テキストエディタの設定; Geany
+
+Geany
+=====
+
+フォルダ : ring/editor/geany
+
+* Geany エディタを起動します。
+* “ツール -> 設定ファイル -> filetypes_extensions.conf” メニューをクリックします。
+* この行 “Ring=*.ring;” を [Extensions] の後ろにクォートを付けずに追加します。
+* Ubuntu では “filetypes.Ring.conf” ファイルを “/home/{ユーザ名}/filetypes.Ring.conf” フォルダへコピーします。
+* F5 キーを押すと実行します。
+
+.. image:: editor2.png
+       :alt: Geany
+
+
+.. index:: 
+       pair: テキストエディタの設定; Atom
+
+Atom
+====
+
+フォルダ : ring/editor/atom
+
+このフォルダへ atom-language-ring をコピーします。
+
+.. code-block:: none
+
+       "C:\Users\{ユーザ名}\.atom\Packages"
+
+.. image:: editor3.jpg
+       :alt: Atom
+
+.. index:: 
+       pair: テキストエディタの設定; Sublime Text 2
+
+Sublime Text 2
+==============
+
+フォルダ : ring/editor/sublime text 2
+
+Sublime_Text_2 フォルダには次の三つのファイルがあります:
+
+1 - ring.json-tmlanguage
+
+2 - ring.sublime-build
+
+3 - ring.tmlanguage
+
+上記のファイルを下記のパスへコピーします。
+
+.. code-block:: none
+
+       "C:\Users\{ユーザ名}\AppData\Roaming\Sublime Text 2\Packages\User\"
+
+この行が ring.sublime-build ファイルに記載されています。
+
+.. code-block:: none
+
+       "cmd": ["B:\\ring\\bin\\ring.exe","$file"],
+
+システムの構成に合わせて ring.exe のパスを変更します。
+
+
+.. image:: editor4.jpg
+       :alt: Sublime Text 2
+
+
+.. index:: 
+       pair: テキストエディタの設定; Visual Studio IDE
+
+Visual Studio IDE
+=================
+
+フォルダ : ring/editor/visualstudio
+
+インストール手順については ReadMe ファイルをご確認ください。
+
+.. image:: editor5.png
+       :alt: Visual Studio IDE
+
+.. index:: 
+       pair: テキストエディタの設定; Emacs エディタ
+
+Emacs エディタ
+==============
+
+フォルダ : ring/editor/emacs
+
+インストール手順については ReadMe ファイルをご確認ください。
+
+スクリーンショット:
+
+.. image:: ringemacs.png
+       :alt: Emacs エディタ
+
+
+.. index:: 
+       pair: テキストエディタの設定; Visual Studio Code
+
+Visual Studio Code
+==================
+
+フォルダ : ring/vscode
+
+インストール手順については ReadMe ファイルをご確認ください。
+
+スクリーンショット:
+
+.. image:: ringinvscode.png
+       :alt: Visual Studio Code による Ring
+
diff --git a/docs/ja-jp/source/codegenerator.txt b/docs/ja-jp/source/codegenerator.txt
new file mode 100644 (file)
index 0000000..8998bc6
--- /dev/null
@@ -0,0 +1,1282 @@
+.. index:: 
+       single: コード生成器; はじめに
+
+==================================
+C/C++ ライブラリ接続用コード生成器
+==================================
+
+コード生成器で Ring アプリケーションへ C/C++ ライブラリを接続する方法を学びます。
+
+.. index:: 
+       pair: コード生成器; ツールの用法
+
+ツールの用法
+============
+
+コード生成プログラムは parsec.ring であり、
+Ring で別の Ring コードを実行できます
+
+URL : https://github.com/ring-lang/ring/tree/master/extensions/codegen
+
+例えば、設定ファイル test.cf を読み込んでソースコードファイル test.c を生成するには、 parsec.ring を実行します。
+
+.. code-block:: ring
+
+       ring parsec.ring test.cf test.c
+
+.. index:: 
+       pair: コード生成器; 設定ファイル
+
+
+設定ファイル
+============
+
+設定ファイル (\*.cf) は、コード生成器への入力ファイルです。
+このファイルは C/C++ ライブラリから呼び出す関数プロトタイプを決定します。
+
+設定ファイルの記述方法は次の規則に従います。
+
+.. index:: 
+       pair: コード生成器; 関数プロトタイプの用法
+
+関数プロトタイプの用法
+======================
+
+* C 関数の接続用コードを生成するには、 C 関数プロトタイプを記述します。
+
+用例:
+
+.. code-block:: ring
+
+       ALLEGRO_DISPLAY *al_create_display(int w, int h)
+       void al_destroy_display(ALLEGRO_DISPLAY *display)
+       int al_get_new_display_flags(void)
+       void al_set_new_display_flags(int flags)
+       int al_get_new_display_option(int option, int *importance)
+
+前述の用例では al_create_display(), al_destroy_display(), al_get_new_display_flags(),
+al_set_new_diplay_flas() および al_get_new_display_option()
+関数の接続に五本の関数生成をコード生成器に指示します。
+
+生成コードの一例は、
+
+用例:
+
+.. code-block:: ring
+
+       RING_FUNC(ring_al_create_display)
+       {
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               RING_API_RETCPOINTER(al_create_display( (int ) RING_API_GETNUMBER(1),
+                                        (int ) RING_API_GETNUMBER(2)),"ALLEGRO_DISPLAY");
+       }
+
+
+       RING_FUNC(ring_al_destroy_display)
+       {
+         if ( RING_API_PARACOUNT != 1 ) {
+               RING_API_ERROR(RING_API_MISS1PARA);
+               return ;
+         }
+         if ( ! RING_API_ISPOINTER(1) ) {
+               RING_API_ERROR(RING_API_BADPARATYPE);
+               return ;
+         }
+         al_destroy_display((ALLEGRO_DISPLAY *) RING_API_GETCPOINTER(1,"ALLEGRO_DISPLAY"));
+       }
+
+
+       RING_FUNC(ring_al_get_new_display_flags)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               RING_API_RETNUMBER(al_get_new_display_flags());
+       }
+
+
+       RING_FUNC(ring_al_set_new_display_flags)
+       {
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               al_set_new_display_flags( (int ) RING_API_GETNUMBER(1));
+       }
+
+
+       RING_FUNC(ring_al_get_new_display_option)
+       {
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISSTRING(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               RING_API_RETNUMBER(al_get_new_display_option( (int ) RING_API_GETNUMBER(1),
+                                       RING_API_GETINTPOINTER(2)));
+               RING_API_ACCEPTINTVALUE(2) ;
+       }
+
+前述の用例から、コード生成器は時間と手間の節約になることがわかります。
+
+.. index:: 
+       pair: コード生成器; コードの追加
+
+コードの追加
+============
+       
+* コードを直接生成するには <code> ~ </code> に追加したいコードを記述してください。
+
+用例 :
+
+.. code-block:: ring
+
+       <code>
+               /* こちらへ C コードを書いてください。 */
+       </code>
+
+この機能はコード生成器で処理を行わないコードの記述時に使用します。
+例えば、ヘッダファイルやマクロによる定数の定義などです。
+
+.. index:: 
+       pair: コード生成器; 関数名の接頭辞
+
+関数名の接頭辞
+==============
+
+* 全ての関数に付ける接頭辞を決定するには <funcstart> ~ </funcstart> に指定したい接頭辞を記述してください。
+       例えば、 Allegro ゲームプログラミング・ライブラリを接続した後に全てのライブラリ関数名が
+       “al” で始まるようにするためには、このコードを設定ファイルへ記述します。
+
+.. code-block:: ring
+
+       <funcstart>
+       al
+       </funcstart>
+
+.. index:: 
+       pair: コード生成器; 構造体を接続する関数の生成
+
+構造体を接続する関数の生成
+==========================
+
+* 構造体の接続用関数を生成するには (構造体メンバの作成、削除、取得)
+       <struct> ~ </struct> に指定したい構造体名を記述してください。
+       なお、構造体名を記述してから { ~ } に構造体メンバをコンマで区切って記述します。
+
+用例:
+
+.. code-block:: ring
+
+       <struct>
+       ALLEGRO_COLOR
+       ALLEGRO_EVENT { type , keyboard.keycode , mouse.x , mouse.y }
+       </struct>
+
+前述の用例では ALLEGRO_COLOR 構造体の作成と削除を行う二本の関数を生成します。
+また ALLEGRO_EVENT 構造体の作成と削除を行う二本の関数、および
+ALLEGRO_EVENT のメンバ (type, keyboard.keycode, mouse.x, mouse.y) を受け取る四本の関数を生成します。
+
+.. index:: 
+       pair: コード生成器; 構造体メンバ型の決定
+
+構造体メンバ型の決定
+====================
+
+構造体メンバ名の先頭にポインタの名前を決定できます。
+
+用例:
+
+.. code-block:: none
+
+       SDL_Surface {flags,SDL_PixelFormat *format,w,h,pitch,void *pixels}
+
+.. index:: 
+       pair: コード生成器; 定数の定義
+
+定数の定義
+==========
+
+<constant> ~ </constant> で定数を定義します。
+
+生成器は定数の値を取得するのに必要な関数を生成します。
+
+また、 Ring ヘッダファイル (\*.rh) から同一ファイル名の Ring コードで用いる定数の定義も生成します。
+
+用例:
+
+.. code-block:: ring
+
+       <constant>
+       MIX_DEFAULT_FORMAT
+       SDL_QUIT
+       SDL_BUTTON_LEFT
+       SDL_BUTTON_MIDDLE
+       SDL_BUTTON_RIGHT
+       </constant>
+
+.. note:: 生成されたソースファイルの後には必ず parsec.ring へ \*.rh ファイル名を渡してください。
+
+用例:
+
+.. code-block:: ring
+
+       ring ..\codegen\parsec.ring libsdl.cf ring_libsdl.c ring_libsdl.rh
+
+.. index:: 
+       pair: コード生成器; 新しい関数の登録
+
+新しい関数の登録
+================
+
+<register> ~ </register> に関数プロトタイプを記述することで、関数を登録できます。
+このような関数のコードは、関数プロトタイプを直接記述しない場合に限り記述が必要です。
+
+用例:
+
+.. code-block:: ring
+
+       <register>
+       void al_exit(void)
+       </register>
+
+       <code>
+       RING_FUNC(ring_al_exit)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+       }
+       exit(0);
+       }
+       </code>
+
+前述の用例では al_exit() 関数を登録しました。この関数は Allegro ライブラリの一部ではありませんが、必要なので追加した関数です。この関数が <code> ~ </code> にある場合はコードとして扱われます。この関数は C 言語ライブラリから exit() 関数を呼び出します。
+
+.. index:: 
+       pair: コード生成器; 設定ファイルにコメントを書くには
+
+設定ファイルにコメントを書くには
+================================
+
+* コメントは <comment> ~ </comment> に記述します。
+
+用例:
+
+.. code-block:: ring
+
+       <comment>
+       設定ファイル
+       </comment>
+
+.. index:: 
+       pair: コード生成器; コードの生成時にコード実行するには
+
+コードの生成時にコード実行するには
+==================================
+
+* コード生成器で設定ファイルを読み込むときに Ring コードの実行を要求するには
+       <runcode> ~ </runcode> にコードを書きます。
+
+用例:
+
+.. code-block:: ring
+
+       <runcode>
+       aNumberTypes + "al_fixed"
+       </runcode>
+
+前述の行は文字列“al_fixed”をリスト NumberTypes へ追加するためのコードです。
+このリストには、関数プロトタイプにおいてコード生成器が検出したときに数値としてみなせる型があります。
+
+.. index:: 
+       pair: コード生成器; 列挙型と数値
+
+列挙型と数値
+============
+
+関数プロトタイプで使用する列挙型の追加用に aEnumTypes リストがあります。
+
+用例:
+
+.. code-block:: ring
+
+       <runcode>
+       aNumberTypes + "qreal"
+       aNumberTypes + "qint64"
+       aEnumTypes + "Qt::GestureType"
+       aEnumTypes + "Qt::GestureFlag"
+       </runcode>
+
+
+.. index:: 
+       pair: コード生成器; 条件式による篩い分け
+
+条件式による篩い分け
+====================
+
+<filter> ~ </filter> は、
+条件に基づいて設定ファイルの一部を包含または除外します。例えば、
+
+.. code-block:: ring
+
+               <filter> iswindows() 
+                       ... functions related to windows
+               </filter>
+
+.. index:: 
+       pair: コード生成器; 定数型
+
+定数型
+======
+
+デフォルトの定数型は数値です。
+しかし、定数は別の型でも良いです。例えば、 (ポインタ : void \*)
+
+<constant> ~ </constant> の使用前に <runcode> ~ </runcode> を記述することで、
+コード生成器で使われる二つのグローバル変数を用いて定数の型を決定します。
+
+最初の変数は $nDefaultConstantType であり、この定数を指定できます。
+
+* C_CONSTANT_TYPE_NUMBER
+* C_CONSTANT_TYPE_STRING
+* C_CONSTANT_TYPE_POINTER
+
+C_CONSTANT_TYPE_POINTER の使用時は、
+$cDefaultConstantPointerType の二つ目にあるグローバル変数のポインタ型の決定が必要です。
+
+用例 :
+
+この用例では、この機能を FreeGLUT ライブラリーにおける定数の定義で使用しています。
+
+.. code-block:: ring
+
+       <runcode>
+       $nDefaultConstantType = C_CONSTANT_TYPE_POINTER 
+       $cDefaultConstantPointerType = "void"
+       </runcode>
+       <constant>
+               GLUT_STROKE_ROMAN  
+               GLUT_STROKE_MONO_ROMAN
+               GLUT_BITMAP_9_BY_15   
+               GLUT_BITMAP_8_BY_13   
+               GLUT_BITMAP_TIMES_ROMAN_10
+               GLUT_BITMAP_TIMES_ROMAN_24 
+               GLUT_BITMAP_HELVETICA_10   
+               GLUT_BITMAP_HELVETICA_12   
+               GLUT_BITMAP_HELVETICA_18   
+       </constant>
+
+.. index:: 
+       pair: コード生成器; Allegro ライブラリ用の設定ファイル
+
+Allegro ライブラリ用の設定ファイル
+==================================
+
+この設定ファイル (1000行以下) は Allegro ライブラリの関数用です。
+このファイルをコード生成器で処理したときに生成される C 言語コードは約 12000 行です!
+
+この設定ファイルはコード生成器の完全な用例として参照できます。
+また 2D ゲームの作成で実装済みの
+RingAllegro 関数の確認にも使えます!
+
+.. code-block:: ring
+
+       <code>
+       #define ALLEGRO_NO_MAGIC_MAIN
+
+       #include <allegro5/allegro.h>
+       #include "allegro5/allegro_image.h"
+       #include <allegro5/allegro_font.h>
+       #include <allegro5/allegro_ttf.h>
+       #include <allegro5/allegro_audio.h>
+       #include <allegro5/allegro_acodec.h>
+       #include <allegro5/allegro_opengl.h>
+       #include <allegro5/allegro_direct3d.h>
+       #include <allegro5/allegro_color.h>
+       #include <allegro5/allegro_memfile.h>
+       #include "allegro5/allegro_native_dialog.h"
+       #include <allegro5/allegro_physfs.h>
+       #include <allegro5/allegro_primitives.h>
+       </code>
+
+       <funcstart>
+       al
+       </funcstart>
+
+       <struct>
+       ALLEGRO_EVENT { type , keyboard.keycode , mouse.x , mouse.y }
+       ALLEGRO_TIMEOUT
+       ALLEGRO_SAMPLE_ID
+       ALLEGRO_COLOR
+       </struct>
+
+       <register>
+       void al_exit(void)
+       </register>
+
+       <code>
+       RING_FUNC(ring_al_exit)
+       {
+               if ( RING_API_PARACOUNT != 0 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               exit(0);
+       }
+       </code>
+
+       int al_init(void)
+
+       <comment>
+       configuration files
+       </comment>
+
+       <runcode>
+       aNumberTypes + "al_fixed"
+       </runcode>
+
+       ALLEGRO_CONFIG *al_create_config(void)
+       void al_destroy_config(ALLEGRO_CONFIG *config)
+       ALLEGRO_CONFIG *al_load_config_file(const char *filename)
+       ALLEGRO_CONFIG *al_load_config_file_f(ALLEGRO_FILE *file)
+       bool al_save_config_file(const char *filename, const ALLEGRO_CONFIG *config)
+       bool al_save_config_file_f(ALLEGRO_FILE *file, const ALLEGRO_CONFIG *config)
+       void al_add_config_section(ALLEGRO_CONFIG *config, const char *name)
+
+.. note:: 
+       これは設定ファイルの引用です。
+       完全なコピーは Ring ソースコードの配布物をご確認ください。
+
+.. index:: 
+       pair: コード生成器; スレッドへの対応
+
+スレッドへの対応
+================
+
+この設定ファイルの別の部分は、スレッドライブラリで Ring アプリケーションへスレッドを
+追加する方法について学ぶことができるため重要です。
+
+考えかたとして Ring コードを実行するために ring_vm_mutexfunctions() および ring_vm_runcodefromthread() を使用します。
+
+.. code-block:: ring
+
+       <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) ) {
+                       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)
+
+.. index:: 
+       pair: コード生成器; C++ クラスの接続に関するコード生成器の規則
+
+C++ クラスの接続に関するコード生成器の規則
+==========================================
+
+* <class> ~ </class> にクラスを定義します。
+* <class> ~ </class> に“name, nonew, para, parent, codename,
+  passvmpointer, abstract および staticmethods”などの属性を設定できます。
+* 値が不要な場合に限り、属性名:値 (attributename:value)、
+  または属性名 (attributename) による記法で属性を設定します。
+* “name” 属性は C++ コードのクラス名を決定します。
+  また、この名前は Ring コードにおけるデフォルトの名前になります。
+* nonew 命令はメソッドの新規作成または削除は不要であることを意味します。
+* parent 属性は親クラス名を決定します。
+* codename 属性は C++ コードで別のクラス名を決定します。
+* passvmpointer 命令は新しいオブジェクトの作成時にクラスのコンストラクタへ
+  Ring 仮想計算機のポインタを渡すことを意味します。これは codename 属性をクラス定義として設定するときに発生するため、
+  このクラスでは仮想計算機のポインタが必要です
+  (例えば C++ から Ring コードの実行のために使用)。
+* abstract 命令は、このクラスでは“オブジェクトが作成されない”ため、新しいメソッドは不要であることを意味します。
+* staticmethods 命令はメソッドを呼び出すためのオブジェ      クトを用意する必要はないことを意味します。
+* <nodllstartup> により #include “ring.h” を回避できます。これはスタートアップコードを記述するために必要です。
+* <libinitfunc> によりライブラリ関数へ登録する関数名を変更できます。
+* <ignorecpointertype> はポインタ型の検査を無視します。
+* aStringTypes リストは const char \* として扱われる新しい型を定義します。
+* aBeforeReturn リストは関数から変数を返すときに変数名末尾に挿入される
+  コードを定義できます。
+* aNewMethodName リストは C++ のメソッドを呼び出すときに Ring のコードで使用されるメソッドの別名を定義できます。
+  この機能は、 C++ メソッドで “load”, ”next”, ”end” および “done” など
+  Ring のキーワードと同一名称であるため必要となるものです。
+* メソッドのプロトタイプでは - メソッド名に @ を使うときは、
+  同じメソッドで様々な仮引数 (C++ のように) があることを意味します。
+
+.. index:: 
+       pair: コード生成器; C++ ライブラリ接続用設定ファイルの用法
+
+C++ ライブラリ接続用設定ファイルの用法
+======================================
+
+Ring アプリケーションから C++ ライブラリを使うにはコード生成器でコードを生成します。
+C ライブラリで使うと、 \*.c ファイルではなく \*.cpp ファイルを生成します。
+また、生成ファイルも決定します (\*.ring)。
+このファイルには C++ のクラスとオブジェクトを使用する C++ 関数と接続するための Ring コードによるクラスがあります。
+
+.. code-block:: ring
+
+       ring parsec.ring generator\qt.cf ring_qt.cpp ring_qt.ring
+
+
+.. index:: 
+       pair: コード生成器; Qt フレームワーク用の設定ファイル
+
+Qt フレームワーク用の設定ファイル
+=================================
+
+これは Qt クラスとの接続に用いる設定ファイルです。
+設定ファイルは約 3500 行であり、生成されるコードは約 56000 行の C++ コード、
+および約 9000 行の Ring コードとなります。
+
+.. code-block:: ring
+
+       <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"
+       #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>
+       #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>
+
+
+       <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)
+       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)
+       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)
+       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)
+       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)
+       QString selectedText(void)
+       int selectionStart(void)
+       void setAlignment(int)
+       void setBuddy(QWidget *buddy)
+       void setIndent(int)
+       void setMargin(int)
+       void setOpenExternalLinks(bool open)
+       void setScaledContents(bool)
+       void setSelection(int start, int length)
+       void setTextFormat(int)
+       void setTextInteractionFlags(int flags)
+       void setWordWrap(bool on)
+       QString text(void)
+       int textFormat(void)
+       int textInteractionFlags(void)
+       bool wordWrap(void)
+       void clear(void)
+       void setMovie(QMovie *movie)
+       void setNum(double num)
+       void setPicture(QPicture)
+       void setPixmap(QPixmap)
+       void setText(QString)
+
+       <class>
+       name: QPushButton
+       para: QWidget *
+       parent: QWidget
+       codename: GPushButton
+       passvmpointer
+       </class>
+
+       void setText(const char *)
+       void setClickEvent(const char *)
+       void setIcon(QIcon)
+       void setIconSize(QSize)
+
+       <class>
+       name: QLineEdit
+       para: QWidget *
+       parent: QWidget
+       codename: GLineEdit
+       passvmpointer
+       </class>
+
+       int alignment(void)
+       void backspace(void)
+       QCompleter *completer(void)
+       QMenu *createStandardContextMenu(void)
+       void cursorBackward(bool mark, int steps)
+       void cursorForward(bool mark, int steps)
+       int cursorMoveStyle(void)
+       int cursorPosition(void)
+       int cursorPositionAt(QPoint)
+       void cursorWordBackward(bool mark)
+       void cursorWordForward(bool mark)
+       void del(void)
+       void deselect(void)
+       QString displayText(void)
+       bool dragEnabled(void)
+       int echoMode(void)
+       void end(bool mark)
+       void getTextMargins(int *left, int *top, int *right, int *bottom)
+       bool hasAcceptableInput(void)
+       bool hasFrame(void)
+       bool hasSelectedText(void)
+       void home(bool mark)
+       QString inputMask(void)
+       void insert(QString)
+       bool isModified(void)
+       bool isReadOnly(void)
+       bool isRedoAvailable(void)
+       bool isUndoAvailable(void)
+       int maxLength(void)
+       QString placeholderText(void)
+       QString selectedText(void)
+       int selectionStart(void)
+       void setAlignment(int flag)
+       void setCompleter(QCompleter *c)
+       void setCursorMoveStyle(int style)
+       void setCursorPosition(int)
+       void setDragEnabled(bool b)
+       void setEchoMode(int)
+       void setFrame(bool)
+       void setInputMask(QString)
+       void setMaxLength(int)
+       void setModified(bool)
+       void setPlaceholderText(QString)
+       void setReadOnly(bool)
+       void setSelection(int start, int length)
+       void setTextMargins(int left, int top, int right, int bottom)
+       void setValidator(QValidator *v)
+       QString text(void)
+       QMargins textMargins(void)
+       QValidator *validator(void)
+
+       void clear(void)
+       void copy(void) 
+       void cut(void)
+       void paste(void)
+       void redo(void)
+       void selectAll(void)
+       void setText(QString)
+       void undo(void)
+
+       void setTextChangedEvent(const char *)
+       void setcursorPositionChangedEvent(const char *)
+       void seteditingFinishedEvent(const char *)
+       void setreturnPressedEvent(const char *)
+       void setselectionChangedEvent(const char *)
+       void settextEditedEvent(const char *)
+
+.. note:: ソースコード全文は Ring ソースコードの配布物にあるため、
+        この取扱説明書からは前述の設定ファイルにおける内容の大部分を割愛しています。
+
+
+.. index:: 
+       pair: コード生成器; 静的メソッド
+
+静的メソッド
+============
+
+Ring 1.8 からコード生成器は staticmethods オプションに対応しました。
+
+これにより、コード生成器はクラスでメソッドを呼び出すためのオブジェクトの準備は不要であることを検出できるようになりました。
+
+用例:
+
+.. code-block:: none
+
+       <class>
+       name: QStandardPaths
+       para: void
+       nonew
+       staticmethods
+       </class>
+
+       QString displayName(QStandardPaths::StandardLocation type)
+       QString findExecutable(QString executableName, QStringList paths))
+
+.. index:: 
+       pair: コード生成器; ファイルの読み込み
+
+ファイルの読み込み
+==================
+
+コード生成器は <loadfile> 命令に対応しました (Ring 1.9 以降)。
+
+.. code-block:: ring
+
+       <loadfile> filename.cf
+
+これは、拡張機能設定ファイルを複数のファイルへ分割するのに便利です。
+
+用例:
+
+ファイル : RingQt 拡張機能の qt_module_network.cf より引用
+
+.. code-block:: ring
+
+       <comment>
+                                       モジュール (ネットワーク)
+       </comment>
+
+       <loadfile> qabstractsocket.cf
+       <loadfile> qnetworkproxy.cf
+       <loadfile> qtcpsocket.cf
+       <loadfile> qtcpserver.cf
+       <loadfile> qhostaddress.cf
+       <loadfile> qhostinfo.cf
+       <loadfile> qnetworkrequest.cf
+       <loadfile> qnetworkaccessmanager.cf
+       <loadfile> qnetworkreply.cf
+
+.. index:: 
+       pair: コード生成器; マネージドクラス
+
+マネージドクラス
+================
+
+コード生成器は、クラス定義時の <managed> オプションに対応しました (Ring 1.9 以降)。
+
+このオプションにより、生成器は C ポインタを返すために RING_API_RETMANAGEDCPOINTER() を使用します。
+
+これにより、ガベージコレクターは C ポインタを管理対象にします。
+
+用例:
+
+.. code-block:: ring
+
+       <class>
+       name: QFont
+       para: QString, int, int, bool
+       managed
+       </class>
+
+
+.. index:: 
+       pair: コード生成器; 設定ファイルの用例
+
+設定ファイルの用例
+==================
+
+この用例から学ぶことができます。
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/classes/qt.cf
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/libsdl.cf
+
+設定ファイルの変更後に、必ずコードの生成をしてください。
+この用例から学ぶことができます。
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencode.bat
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/gencode.bat
+
+コード生成後にライブラリのビルドを必ずしてください。この用例から学ぶことができます。
+
+* RingAllegro : https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/buildvc.bat
+* RingQt : https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildmingw32.bat
+* RingLibSDL : https://github.com/ring-lang/ring/blob/master/extensions/ringsdl/buildvc.bat
diff --git a/docs/ja-jp/source/compiler.txt b/docs/ja-jp/source/compiler.txt
new file mode 100644 (file)
index 0000000..89bdac9
--- /dev/null
@@ -0,0 +1,949 @@
+.. index:: 
+       single: コマンドラインオプション; はじめに
+
+========================
+コマンドラインオプション
+========================
+
+Ring はソースコードファイル (\*.ring) または、オブジェクトファイル (\*.ringo) とオプションを指定するとプログラムを実行します。
+
+
+書式:
+
+.. code-block:: bash
+
+       ring <ファイル名.ring>|<ファイル名.ringo> [オプション]
+
+オプション:
+
+.. csv-table::
+       :header: "オプション", "説明"
+       :widths:       18,     82
+
+       "-tokens",              "ソースコードファイルのトークンリストを表示します。"
+       "-rules",               "トークンに適用された文法規則を表示します。"
+       "-ic",                  "中間バイトコードを表示します (実行前)。"
+       "-icfinal",     "最終バイトコードを表示します (実行後)。"
+       "-cgi",                 "エラーメッセージの前に http レスポンスヘッダを表示します。"
+       "-norun",               "コンパイル後にプログラムを実行しません。"
+       "-ins",                 "実行前に命令演算コードを表示します。"
+       "-performance", "プログラムの実行前後に処理時間測定結果を表示します。"
+       "-go",                  "オブジェクトファイルを生成します。"
+       "-geo",                 "組込型オブジェクトファイル (C ソースコード) を生成します。"
+       "-w",                   "警告を表示します。"
+
+.. note:: オブジェクトファイル形式では、一部使用できないオプションがあります。
+
+
+.. index:: 
+       pair: コマンドラインオプション; トークンの表示
+
+トークンの表示
+==============
+
+用例:
+
+.. code-block:: ring
+
+       Func Main
+               See "Hello World" + nl
+               for x = 1 to 10
+                       see x + nl
+               next
+               test()
+
+       func test
+               see "welcome" + nl
+               o1 = new point { x=10 y=20 z=30 }
+               see o1
+
+       class point x y z
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -tokens -norun
+
+実行結果:
+
+.. code-block:: ring
+
+       ===================================================
+       Tokens - Generated by the Scanner
+       ===================================================
+
+          Keyword : FUNC
+       Identifier : main
+          EndLine
+          Keyword : SEE
+          Literal : Hello World
+         Operator : +
+       Identifier : nl
+          EndLine
+          Keyword : FOR
+       Identifier : x
+         Operator : =
+           Number : 1
+          Keyword : TO
+           Number : 10
+          EndLine
+          Keyword : SEE
+       Identifier : x
+         Operator : +
+       Identifier : nl
+          EndLine
+          Keyword : NEXT
+          EndLine
+       Identifier : test
+         Operator : (
+         Operator : )
+          EndLine
+          Keyword : FUNC
+       Identifier : test
+          EndLine
+          Keyword : SEE
+          Literal : welcome
+         Operator : +
+       Identifier : nl
+          EndLine
+       Identifier : o1
+         Operator : =
+          Keyword : NEW
+       Identifier : point
+         Operator : {
+       Identifier : x
+         Operator : =
+           Number : 10
+       Identifier : y
+         Operator : =
+           Number : 20
+       Identifier : z
+         Operator : =
+           Number : 30
+         Operator : }
+          EndLine
+          Keyword : SEE
+       Identifier : o1
+          EndLine
+          Keyword : CLASS
+       Identifier : point
+       Identifier : x
+       Identifier : y
+       Identifier : z
+          EndLine
+
+       ===================================================
+
+.. index:: 
+       pair: コマンドラインオプション; 文法規則の表示
+
+文法規則の表示
+==============
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -rules -norun
+
+実行結果:
+
+.. code-block:: ring
+
+       ===================================================
+       Grammar Rules Used by The Parser
+       ===================================================
+
+       Rule : Program --> {Statement}
+
+       Line 1
+       Rule : Statement  --> 'Func' Identifier [ParaList]
+
+       Line 2
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 3
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'For' Identifier '=' Expr to Expr ['step' Expr]
+
+       Line 4
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 5
+       Rule : Next --> 'Next'
+
+       Line 6
+       Rule : Mixer -> '(' [Expr { ',' Expr} ] ')'
+
+       Line 8
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Statement  --> 'Func' Identifier [ParaList]
+
+       Line 9
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : Arithmetic --> Arithmetic + Arithmetic
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 10
+       Rule : Factor --> New Identifier {'.' Identifier }
+       Rule : Mixer --> '{' {Statement} BraceEnd
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Number
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : BraceEnd --> '}'
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Assignment -> '=' Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+
+       Line 11
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       Line 13
+       Rule : Statement  --> 'Class' Identifier
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+       Rule : Factor --> Identifier [ {Mixer} | Assignment | PlusPlus | MinusMinus]
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> Expr
+
+       ===================================================
+
+.. index:: 
+       pair: コマンドラインオプション; 中間コードの表示
+
+中間コードの表示
+================
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -ic -norun
+
+実行結果:
+
+.. code-block:: ring
+
+       ===================================================
+       Byte Code - Before Execution by the VM
+       ===================================================
+
+                PC      OPCode        Data
+
+                 1  ReturnNull
+                 2        Func    main
+                 3     NewLine       2
+                 4     FuncExE
+                 5       PushC   Hello World
+                 6       LoadA      nl      0
+                 7       PushV
+                 8         SUM       0
+                 9       Print
+                10     NewLine       3
+                11    ExitMark      29     28
+                12  LoadAFirst       x
+                13       PushN   1.000000
+                14  BeforeEqual       0
+                15  Assignment
+                16       PushN   1.000000
+                17  StepNumber
+                18  JumpVarLENum       x  10.000000    29
+                19     NewLine       4
+                20     FuncExE
+                21       LoadA       x      0
+                22       PushV
+                23       LoadA      nl      0
+                24       PushV
+                25         SUM       0
+                26       Print
+                27     NewLine       5
+                28     IncJump       x     18
+                29  POPExitMark
+                30     POPStep
+                31     NewLine       6
+                32    LoadFunc    test
+                33        Call       0
+                34  NoOperation
+                35     NewLine       8
+                36       PushV
+                37   FreeStack
+                38  ReturnNull
+                39        Func    test
+                40     NewLine       9
+                41     FuncExE
+                42       PushC   welcome
+                43       LoadA      nl      0
+                44       PushV
+                45         SUM       0
+                46       Print
+                47     NewLine      10
+                48       LoadA      o1      0
+                49  AssignmentPointer
+                50         New   point
+                51    SetScope
+                52       PushV
+                53  BraceStart
+                54       LoadA       x      0     58
+                55  AssignmentPointer
+                56       PushN   10.000000
+                57  BeforeEqual       0
+                58  Assignment       0      0
+                59   FreeStack
+                60       LoadA       y      0     64
+                61  AssignmentPointer
+                62       PushN   20.000000
+                63  BeforeEqual       0
+                64  Assignment       0      0
+                65   FreeStack
+                66       LoadA       z      0     70
+                67  AssignmentPointer
+                68       PushN   30.000000
+                69  BeforeEqual       0
+                70  Assignment       0      0
+                71   FreeStack
+                72    LoadFunc   ismethod
+                73       LoadA    self      0
+                74       PushV
+                75       PushC   braceend
+                76        Call
+                77  NoOperation
+                78       PushV
+                79       JumpZ      85
+                80    LoadFunc   braceend
+                81        Call
+                82  NoOperation
+                83       PushV
+                84   FreeStack
+                85    BraceEnd
+                86   FreeStack
+                87     NewLine      11
+                88     FuncExE
+                89       LoadA      o1      0
+                90       PushV
+                91       Print
+                92     NewLine      13
+                93  ReturnNull
+                94       Class   point  006E8BC0
+                95    NewLabel
+                96       LoadA       x      0
+                97       PushV
+                98   FreeStack
+                99       LoadA       y      0
+               100       PushV
+               101   FreeStack
+               102       LoadA       z      0
+               103       PushV
+               104   FreeStack
+               105  ReturnNull
+
+       ===================================================
+
+.. index:: 
+       pair: コマンドラインオプション; 最終中間コードの表示
+
+最終中間コードの表示
+====================
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -icfinal
+
+実行結果:
+
+.. code-block:: ring
+
+       Hello World
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       welcome
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+
+       ===================================================
+       Byte Code - After Execution by the VM
+       ===================================================
+
+                PC      OPCode        Data
+
+                 1  ReturnNull
+                 2        Func    main
+                 3     NewLine       2
+                 4     FuncExE
+                 5       PushC   Hello World
+                 6       PushP   007D3670      0
+                 7       PushV
+                 8         SUM       0
+                 9       Print
+                10     NewLine       3
+                11    ExitMark      29     28
+                12  LoadAFirst       x
+                13       PushN   1.000000
+                14  BeforeEqual       0
+                15  Assignment
+                16       PushN   1.000000
+                17  StepNumber
+                18  JumpVarLPLENum       x  10.000000    29
+                19     NewLine       4
+                20     FuncExE
+                21  PushPLocal       x      0
+                22       PushV
+                23       PushP   007D3670      0
+                24       PushV
+                25         SUM       0
+                26       Print
+                27     NewLine       5
+                28   IncLPJump       x     18
+                29  POPExitMark
+                30     POPStep
+                31     NewLine       6
+                32   LoadFuncP    test
+                33        Call       0
+                34  NoOperation
+                35     NewLine       8
+                36       PushV
+                37   FreeStack
+                38  ReturnNull
+                39        Func    test
+                40     NewLine       9
+                41     FuncExE
+                42       PushC   welcome
+                43       PushP   007D3670      0
+                44       PushV
+                45         SUM       0
+                46       Print
+                47     NewLine      10
+                48  PushPLocal      o1      0
+                49  AssignmentPointer
+                50         New   point
+                51    SetScope
+                52       PushV
+                53  BraceStart
+                54       LoadA       x      0     58
+                55  AssignmentPointer
+                56       PushN   10.000000
+                57  BeforeEqual       0
+                58  SetProperty       0    106
+                59   FreeStack
+                60       LoadA       y      0     64
+                61  AssignmentPointer
+                62       PushN   20.000000
+                63  BeforeEqual       0
+                64  SetProperty       0    141
+                65   FreeStack
+                66       LoadA       z      0     70
+                67  AssignmentPointer
+                68       PushN   30.000000
+                69  BeforeEqual       0
+                70  SetProperty       0    176
+                71   FreeStack
+                72    LoadFunc   ismethod
+                73       LoadA    self      0
+                74       PushV
+                75       PushC   braceend
+                76        Call
+                77  NoOperation
+                78       PushV
+                79       JumpZ      85
+                80    LoadFunc   braceend
+                81        Call
+                82  NoOperation
+                83       PushV
+                84   FreeStack
+                85    BraceEnd
+                86   FreeStack
+                87     NewLine      11
+                88     FuncExE
+                89  PushPLocal      o1      0
+                90       PushV
+                91       Print
+                92     NewLine      13
+                93  ReturnNull
+                94       Class   point  007D8470
+                95    NewLabel
+                96       LoadA       x      0
+                97       PushV
+                98   FreeStack
+                99       LoadA       y      0
+               100       PushV
+               101   FreeStack
+               102       LoadA       z      0
+               103       PushV
+               104   FreeStack
+               105  ReturnNull
+               106    LoadFunc   ismethod
+               107       LoadA   ring_gettemp_var      0
+               108       PushV
+               109       PushC    setx
+               110        Call       0
+               111  NoOperation
+               112       PushV
+               113       JumpZ     132
+               114     NewLine       2
+               115       LoadA   ring_gettemp_var      0
+               116  LoadMethod    setx
+               117       LoadA   ring_settemp_var      0
+               118       PushV
+               119        Call       0      1
+               120  AfterCallMethod
+               121       PushV
+               122   FreeStack
+               123     NewLine       3
+               124       LoadA   ring_tempflag_var      0    128
+               125  AssignmentPointer
+               126       PushN   0.000000
+               127  BeforeEqual       0
+               128  Assignment       0      0
+               129   FreeStack
+               130     NewLine       4
+               131        Jump     140
+               132     NewLine       5
+               133       PushP   007D37D8      0    137
+               134  AssignmentPointer
+               135       PushN   1.000000
+               136  BeforeEqual       0
+               137  Assignment       0      0
+               138   FreeStack
+               139     NewLine       6
+               140      Return
+               141    LoadFunc   ismethod
+               142       LoadA   ring_gettemp_var      0
+               143       PushV
+               144       PushC    sety
+               145        Call       0
+               146  NoOperation
+               147       PushV
+               148       JumpZ     167
+               149     NewLine       2
+               150       LoadA   ring_gettemp_var      0
+               151  LoadMethod    sety
+               152       LoadA   ring_settemp_var      0
+               153       PushV
+               154        Call       0      1
+               155  AfterCallMethod
+               156       PushV
+               157   FreeStack
+               158     NewLine       3
+               159       LoadA   ring_tempflag_var      0    163
+               160  AssignmentPointer
+               161       PushN   0.000000
+               162  BeforeEqual       0
+               163  Assignment       0      0
+               164   FreeStack
+               165     NewLine       4
+               166        Jump     175
+               167     NewLine       5
+               168       PushP   007D37D8      0    172
+               169  AssignmentPointer
+               170       PushN   1.000000
+               171  BeforeEqual       0
+               172  Assignment       0      0
+               173   FreeStack
+               174     NewLine       6
+               175      Return
+               176    LoadFunc   ismethod
+               177       LoadA   ring_gettemp_var      0
+               178       PushV
+               179       PushC    setz
+               180        Call       0
+               181  NoOperation
+               182       PushV
+               183       JumpZ     202
+               184     NewLine       2
+               185       LoadA   ring_gettemp_var      0
+               186  LoadMethod    setz
+               187       LoadA   ring_settemp_var      0
+               188       PushV
+               189        Call       0      1
+               190  AfterCallMethod
+               191       PushV
+               192   FreeStack
+               193     NewLine       3
+               194       LoadA   ring_tempflag_var      0    198
+               195  AssignmentPointer
+               196       PushN   0.000000
+               197  BeforeEqual       0
+               198  Assignment       0      0
+               199   FreeStack
+               200     NewLine       4
+               201        Jump     210
+               202     NewLine       5
+               203       PushP   007D37D8      0    207
+               204  AssignmentPointer
+               205       PushN   1.000000
+               206  BeforeEqual       0
+               207  Assignment       0      0
+               208   FreeStack
+               209     NewLine       6
+               210      Return
+
+       ===================================================
+
+.. index:: 
+       pair: コマンドラインオプション; CGI への対応
+
+
+CGI への対応
+============
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -cgi
+
+.. index:: 
+       pair: コマンドラインオプション; コンパイルの実行
+
+コンパイルの実行
+================
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -norun
+
+.. index:: 
+       pair: コマンドラインオプション; 命令演算コードの表示
+
+命令演算コードの表示
+====================
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -ins
+
+
+実行結果:
+
+.. code-block:: ring
+
+       ===================================================
+
+       Operation  : ReturnNull  
+       PC         : 1  
+       Line Number    : 1  , File test.ring 
+        
+       SP (After) : 0  - FuncSP : 0 
+        LineNumber 1 
+       ===================================================
+       .....
+       .....
+       .....
+       
+.. tip:: 前述の用例は非常に大きいので実行結果を省略してあります!
+
+.. index:: 
+       pair: コマンドラインオプション; 実行性能の計測
+
+実行性能の計測
+==============
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -performance
+
+実行結果:
+
+.. code-block:: ring
+
+       ===================================================
+       Date  : 2015/09/15 Time : 15:56:17
+       Clock : 0 
+       ===================================================
+       Hello World
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       welcome
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       
+       ===================================================
+       Date  : 2015/09/15 Time : 15:56:17
+       Clock : 0 
+       ===================================================
+
+.. index:: 
+       pair: コマンドラインオプション; オブジェクトファイルの生成
+
+オブジェクトファイルの生成
+==========================
+
+-go オプションは、ソースコードファイル (\*.ring) からオブジェクトファイル (\*.ringo) を生成します。
+
+.. tip:: アプリケーション (商用またはオープンソース) の Ring ソースファイル一式を非公開 (保管) または配布できます。
+       また、アプリケーションの配布または実行用のオブジェクトファイルも生成できます。
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -go
+
+コンパイル済みのオブジェクトファイルを実行するには、
+
+.. code-block:: ring
+
+       ring test.ringo
+
+
+.. index:: 
+       pair: コマンドラインオプション; 組込型オブジェクトファイルの生成
+
+組込型オブジェクトファイルの生成
+================================
+
+-geo オプションはソースコードファイル (\*.ring) から組込型オブジェクトファイル (C ソースコード) を生成します。
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -geo
+
+このコマンドは最低でも 3 ファイルを生成します。
+
+.. code-block:: ring
+
+       test.c
+       ringappcode.c
+       ringappcode.h
+
+プロジェクトの規模により、それ以上のファイルを生成します。
+
+生成後のファイルは Ring VM のバイトコードとして実行されます。
diff --git a/docs/ja-jp/source/conf.py b/docs/ja-jp/source/conf.py
new file mode 100644 (file)
index 0000000..e165b3f
--- /dev/null
@@ -0,0 +1,385 @@
+# -*- coding: utf-8 -*-
+#
+# Ring documentation build configuration file, created by
+# sphinx-quickstart on Sun May 03 10:07:42 2015.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+#    'sphinx.ext.intersphinx',
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+#    'sphinx.ext.mathjax',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.viewcode'
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
+source_suffix = '.txt'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'Ring'
+copyright = u'2016-2020, Ring Team'
+author = u'Ring Team'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '1.12'
+# The full version, including alpha/beta/rc tags.
+release = '1.12'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = 'ja'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = []
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#html_theme = 'alabaster'
+
+html_theme = "classic"
+html_theme_options = {
+    "rightsidebar": "true",
+    "relbarbgcolor": "black"
+#    "nosidebar": "true"
+}
+
+#html_theme = "sphinx_rtd_theme"
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> 取扱説明書".
+html_title = u"プログラミング言語 Ring 1.12 取扱説明書"
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
+#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
+html_search_language = 'ja'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+#html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'Ringdoc'
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+       'classoptions': ',oneside,openany',
+       'babel': '\\usepackage[english]{babel}',
+       'pointsize': '18pt'
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+
+# Latex figure (float) alignment
+#'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+  (master_doc, 'Ring.tex', u'Ring 取扱説明書',
+   u'Ring Team', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'ring', u'Ring 取扱説明書',
+     [author], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  (master_doc, 'Ring', u'Ring 取扱説明書',
+   author, 'Ring', 'One line description of project.',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False
+
+
+# -- Options for Epub output ----------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = html_title
+epub_author = author
+epub_publisher = author
+epub_copyright = copyright
+
+# The basename for the epub file. It defaults to the project name.
+#epub_basename = project
+
+# The HTML theme for the epub output. Since the default themes are not optimized
+# for small screen space, using the same theme for HTML and epub output is
+# usually not wise. This defaults to 'epub', a theme designed to save visual
+# space.
+epub_theme = 'epub'
+
+
+epub_theme_options = {
+    "relbar1": "true",
+    "footer": "false"
+}
+
+
+# The language of the text. It defaults to the language option
+# or 'en' if the language is not set.
+epub_language = 'ja'
+
+# The scheme of the identifier. Typical schemes are ISBN or URL.
+#epub_scheme = ''
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#epub_identifier = ''
+
+# A unique identification for the text.
+#epub_uid = ''
+
+# A tuple containing the cover image and cover page html template filenames.
+epub_cover = ('_static/cover.png', '')
+
+# A sequence of (type, uri, title) tuples for the guide element of content.opf.
+#epub_guide = ()
+
+# HTML files that should be inserted before the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_pre_files = []
+
+# HTML files shat should be inserted after the pages created by sphinx.
+# The format is a list of tuples containing the path and title.
+#epub_post_files = []
+
+# A list of files that should not be packed into the epub file.
+epub_exclude_files = ['search.html']
+
+# The depth of the table of contents in toc.ncx.
+epub_tocdepth = 3
+
+# Allow duplicate toc entries.
+#epub_tocdup = True
+
+# Choose between 'default' and 'includehidden'.
+#epub_tocscope = 'default'
+
+# Fix unsupported image types using the Pillow.
+#epub_fix_images = False
+
+# Scale large images.
+#epub_max_image_width = 0
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#epub_show_urls = 'inline'
+
+# If false, no index is generated.
+epub_use_index = True
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'https://docs.python.org/': None}
diff --git a/docs/ja-jp/source/consolecolors.png b/docs/ja-jp/source/consolecolors.png
new file mode 100644 (file)
index 0000000..57e03bc
Binary files /dev/null and b/docs/ja-jp/source/consolecolors.png differ
diff --git a/docs/ja-jp/source/contribute.txt b/docs/ja-jp/source/contribute.txt
new file mode 100644 (file)
index 0000000..11c6bef
--- /dev/null
@@ -0,0 +1,140 @@
+.. index:: 
+       single: 開発に貢献するには?; はじめに
+
+====================
+開発に貢献するには?
+====================
+
+Ring は、自由なオープンソースプロジェクトです。どなたさまでも Ring への貢献は歓迎します。
+
+プロジェクトの拠点 : https://github.com/ring-lang/ring
+
+多種多様な才能を発揮していただくことにより、プロジェクトの支援へとつながります。
+
+なお、参加前に GitHub の用法の学習、環境構築を各自にお願いしております (不明点がございましたらグループ、またはフォーラムまでお気軽に質問をお願いします)。
+
+* 取扱説明書
+* 動作検証
+* サンプル
+* アプリケーション
+* エディタの対応
+* Ring のライブラリ
+* C/C++ による拡張機能
+* コンパイラと仮想計算機 (VM)
+* 意見と提案
+
+
+.. index:: 
+       pair: 開発に貢献するには?; 貢献者へ心からの感謝を
+
+
+貢献者へ心からの感謝を
+======================
+
+このプロジェクトの開発では、学生ならびに専門家からの貢献が非常に頼りになりました。
+
+彼らの貢献は非常に貴重なものでした。私たちは感謝の意を表して、すべての熱心な仕事を表彰したいと思います。
+
+* Ring チーム: http://ring-lang.sf.net/team.html
+* Ring チーム(日本非公式): http://ring-lang-081.osdn.jp/team.html
+
+.. index:: 
+       pair: 開発に貢献するには?; 取扱説明書
+
+
+取扱説明書
+==========
+
+このフォルダにあるテキストファイル (\*.txt) を更新することにより、取扱説明書の内容を変更できます : https://github.com/ring-lang/ring/tree/master/docs/source
+
+取扱説明書は Sphinx で生成しています : http://www.sphinx-doc.org/ja/stable/
+
+.. index:: 
+       pair: 開発に貢献するには?; 動作検証
+
+
+動作検証
+========
+
+このフォルダには新しい動作検証を記述できます : 
+
+https://github.com/ring-lang/ring/tree/master/tests/scripts
+
+
+.. index:: 
+       pair: 開発に貢献するには?; サンプル
+
+
+サンプル
+========
+
+このフォルダには新しいサンプルを追加できます :
+
+https://github.com/ring-lang/ring/tree/master/samples/other
+
+.. index:: 
+       pair: 開発に貢献するには?; アプリケーション
+
+
+アプリケーション
+================
+
+このフォルダには新しいアプリケーションを追加できます :
+
+https://github.com/ring-lang/ring/tree/master/applications
+
+.. index:: 
+       pair: 開発に貢献するには?; エディタの対応
+
+
+エディタの対応
+==============
+
+あなたのご助力で様々なコードエディタを Ring へ対応させることができます。
+
+このフォルダをご確認ください : 
+
+https://github.com/ring-lang/ring/tree/master/editor
+
+.. index:: 
+       pair: 開発に貢献するには?; Ring のライブラリ
+
+Ring のライブラリ
+=================
+
+このフォルダへライブラリの追加と更新ができます。
+
+https://github.com/ring-lang/ring/tree/master/ringlibs
+
+.. index:: 
+       pair: 開発に貢献するには?; C/C++ による拡張機能
+
+
+C/C++ による拡張機能
+====================
+
+このフォルダへ拡張機能の追加と更新ができます。
+
+https://github.com/ring-lang/ring/tree/master/extensions
+
+.. index:: 
+       pair: 開発に貢献するには?; コンパイラと仮想計算機 (VM)
+
+コンパイラと仮想計算機 (VM)
+===========================
+
+* ソースコード (C 言語) : https://github.com/ring-lang/ring/tree/master/src
+* ビジュアルソース (PWCT) : https://github.com/ring-lang/ring/tree/master/visualsrc
+
+.. index:: 
+       pair: 開発に貢献するには?; アイディアと提案
+
+
+アイディアと提案
+=====================
+
+このグループでアイディア、提案と質問を共有できます。
+
+https://groups.google.com/forum/#!forum/ring-lang
+
+
diff --git a/docs/ja-jp/source/controlstructures.txt b/docs/ja-jp/source/controlstructures.txt
new file mode 100644 (file)
index 0000000..195b0c2
--- /dev/null
@@ -0,0 +1,441 @@
+.. index:: 
+       single: 制御構造 - 第一形式; はじめに
+
+===================
+制御構造 - 第一形式
+===================
+
+第一形式による制御構造の用法を学びます。
+
+.. index:: 
+       pair: 制御構造; 分岐処理
+
+
+分岐処理
+========
+
+* If ステートメント
+
+文法:
+
+.. code-block:: ring
+
+       if 式
+               ステートメント・ブロック
+       but 式
+               ステートメント・ブロック
+       else
+               ステートメント・ブロック
+       ok
+
+用例:
+
+.. code-block:: ring
+
+       see " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " give nOption
+
+       if nOption = 1  see "Enter your name : " give name see "Hello " + name + nl
+       but nOption = 2 see "Sample : using if statement" + nl
+       but nOption = 3 bye
+       else see "bad option..." + nl
+       ok
+              
+
+.. index:: 
+       pair: 制御構造 - 第一形式; Switch ステートメント
+
+* Switch ステートメント
+
+文法:
+
+.. code-block:: ring
+
+       switch 式
+       on 式
+               ステートメント・ブロック
+       other
+               ステートメント・ブロック
+       off
+
+用例:
+
+.. code-block:: ring
+
+       See " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " Give nOption
+
+       Switch nOption
+       On 1 See "Enter your name : " Give name See "Hello " + name + nl
+       On 2 See "Sample : using switch statement" + nl
+       On 3 Bye
+       Other See "bad option..." + nl
+       Off
+
+
+.. index:: 
+       pair: 制御構造 - 第一形式; ループ処理
+
+ループ処理
+==========
+
+.. index:: 
+       pair: 制御構造 - 第一形式; While ループ
+
+* While ループ
+
+文法:
+
+.. code-block:: ring
+
+       while 式
+               ステートメント・ブロック
+       end
+
+用例:
+
+.. code-block:: ring
+
+       While True
+
+               See " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Give nOption
+
+               Switch nOption
+               On 1 
+                       See "Enter your name : " 
+                       Give name 
+                       See "Hello " + name + nl
+               On 2 
+                       See "Sample : using while loop" + nl
+               On 3 
+                       Bye
+               Other 
+                       See "bad option..." + nl
+               Off
+       End
+
+.. index:: 
+       pair: 制御構造 - 第一形式; For ループ
+
+* For ループ
+
+文法:
+
+.. code-block:: ring
+
+       for 識別子=式 to 式 [step 式]
+               ステートメント・ブロック
+       next
+
+用例:
+
+.. code-block:: ring
+
+       # 1 ~ 10 までの数値を表示します。
+       for x = 1 to 10  see x + nl  next
+
+用例:
+
+.. code-block:: ring
+
+       # 動的ループ
+       See "Start : " give nStart       
+       See "End   : " give nEnd
+       See "Step  : " give nStep
+       For x = nStart to nEnd Step nStep
+               see x + nl
+       Next
+
+用例:
+
+.. code-block:: ring
+
+       # 0 ~ 10 までの偶数値を表示します。
+       for x = 0 to 10 step 2
+               see x + nl
+       next
+
+用例:
+
+.. code-block:: ring
+
+       # 10 ~ 0 までの偶数値を表示します。
+       for x = 10 to 0 step -2
+               see x + nl
+       next
+
+
+.. index:: 
+       pair: 制御構造 - 第一形式; For in ループ
+
+* For in ループ
+
+文法:
+
+.. code-block:: ring
+
+       for 識別子 in リストまたは文字列  [step 式]
+               ステートメント・ブロック
+       next
+
+用例:
+
+.. code-block:: ring
+
+       aList = 1:10                     # 1 ~ 10 までの数値を有するリストを作成します。
+       for x in aList see x + nl  next  # 1 ~ 10 までの数値を表示します。
+
+.. index:: 
+       pair: 制御構造 - 第一形式; Step オプション
+
+For in での Step オプションの用法
+=====================================
+
+For in で Step オプションを使用することにより、繰り返しのたびに対象となった項目の数値における処理を省きます。
+
+用例:
+
+.. code-block:: ring
+
+       aList = 1:10    # 1 ~ 10 までの数値を有するリストを作成します。
+       # リスト内にある奇数の項目を表示します。
+       for x in aList step 2
+               see x + nl  
+       next  
+
+
+.. index:: 
+       pair: 制御構造 - 第一形式; For in でのリスト変更方法
+
+For in でのリスト変更方法
+=========================
+
+(For in) は項目を参照で取得します。
+
+つまり、ループの内側で項目の読み取りと編集ができます。
+       
+用例:
+
+.. code-block:: ring
+
+       aList = 1:5     # 1 ~ 5 までの数値を有するリストを作成します。
+       # リストの数値を文字列へ置換します。
+       for x in aList  
+               switch x
+               on 1  x = "one"
+               on 2  x = "two"
+               on 3  x = "three"
+               on 4  x = "four"
+               on 5  x = "five"
+               off
+       next
+       see aList       # リストの項目を表示します。
+
+.. index:: 
+       pair: 制御構造 - 第一形式; Do ~ Again ループ
+
+Do ~ Again ループ
+==================
+
+文法:
+
+.. code-block:: ring
+       
+       do
+               ステートメント・ブロック
+       again 式
+
+用例:
+
+.. code-block:: ring
+
+       x = 1 
+       do 
+               see x + nl 
+               x++ 
+       again x <= 10
+
+.. index:: 
+       pair: 制御構造 - 第一形式; Exit 命令
+
+Exit 命令
+=========
+
+一階層以上のループの外側へ脱出します。
+
+
+文法:
+
+.. code-block:: ring
+
+       exit  [式]     # ループの内側
+
+
+用例:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               see x + nl
+               if x = 5 exit ok
+       next
+
+.. index:: 
+       pair: 制御構造 - 第一形式; 二階層のループからの脱出
+
+二階層のループからの脱出
+========================
+
+この用例では Exit 命令で二階層のループから一気に脱出する方法を示します。
+
+用例:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               for y = 1 to 10
+                       see "x=" + x + " y=" + y + nl
+                       if x = 3 and y = 5
+                               exit 2     # 二階層のループから脱出
+                       ok
+               next
+       next                    
+
+.. index:: 
+       pair: 制御構造 - 第一形式; Loop 命令
+
+Loop 命令
+=========
+
+次のループの繰り返し処理を飛ばすために使用されます。
+
+文法:
+
+.. code-block:: ring
+
+       loop [式]       # ループの内側
+
+用例:
+
+.. code-block:: ring
+
+       for x = 1 to 10
+               if x = 3
+                       see "Number Three" + nl
+                       loop
+               ok
+               see x + nl
+       next
+
+.. index:: 
+       pair: 制御構造 - 第一形式; 短絡評価
+
+短絡評価
+========
+
+論理演算子 and/or は `短絡評価 <https://ja.wikipedia.org/wiki/短絡評価>`_ となります。
+
+AND 演算子において最初の引数が 0 ならば、
+次の引数の評価は不要であるため、結果は 0 です。
+
+OR 演算子において最初の引数が 1 ならば、
+次の引数の評価は不要であるため、結果は 1 です。
+
+用例:
+
+.. code-block:: ring
+
+       /* 実行結果
+       ** nice 
+       ** nice 
+       ** great        
+       */
+
+       x = 0 y = 10
+
+       if (x = 0 and nice()) and (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl   return 1
+
+
+用例:
+
+.. code-block:: ring
+
+       # 実行結果なし
+
+       x = 0 y = 10
+
+       if (x = 1 and nice()) and (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl   return 1
+
+
+用例:
+
+.. code-block:: ring
+
+       /* 実行結果
+       ** nice
+       ** great
+       */
+       x = 0 y = 10
+
+       if (x = 0 and nice()) or (y = 10 and nice())
+               see "great" + nl
+       ok
+
+       func nice  see "nice" + nl  return 1                    
+
+
+.. index:: 
+       pair: 制御構造 - 第一形式; 評価方法の解説
+
+評価方法の解説
+==============
+
+* True, False, nl と NULL は言語で定義済みの変数です。
+
+* True = 1
+
+* False = 0
+
+* nl = 改行
+
+* NULL = 空文字列 = “”
+
+* 0 (False) は以外はすべて True として評価されます。
+
+用例:
+
+.. code-block:: ring
+
+       # 実行結果 = message from the if statement
+
+       if 5    # 非ゼロ (0) であるため 5 は true として評価されます。
+               see "message from the if statement" + nl
+       ok
diff --git a/docs/ja-jp/source/controlstructures2.txt b/docs/ja-jp/source/controlstructures2.txt
new file mode 100644 (file)
index 0000000..34aa1c6
--- /dev/null
@@ -0,0 +1,219 @@
+.. index:: 
+       single: 制御構造 - 第二形式; はじめに
+
+===================
+制御構造 - 第二形式
+===================
+
+第二形式による制御構造の用法を学びます。
+
+.. index:: 
+       pair: 制御構造 - 第二形式; 分岐処理
+
+
+分岐処理
+========
+
+.. index:: 
+       pair: 制御構造 - 第二形式; If ステートメント
+
+* If ステートメント
+
+文法:
+
+.. code-block:: ring
+
+       if 式
+               ステートメント・ブロック
+       elseif 式
+               ステートメント・ブロック
+       else
+               ステートメント・ブロック
+       end
+
+用例:
+
+.. code-block:: ring
+
+       put " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " get nOption
+
+       if nOption = 1  put "Enter your name : " get name put "Hello " + name + nl
+       elseif nOption = 2 put "Sample : using if statement" + nl
+       elseif nOption = 3 bye
+       else put "bad option..." + nl
+       end
+
+.. index:: 
+       pair: 制御構造 - 第二形式; Switch ステートメント
+
+* Switch ステートメント
+
+文法:
+
+.. code-block:: ring
+
+       switch 式
+       case 式
+               ステートメント・ブロック
+       else
+               ステートメント・ブロック
+       end             
+
+用例:
+
+.. code-block:: ring
+
+       Put " 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+           " Get nOption
+
+       Switch nOption
+       Case 1 Put "Enter your name : " Get name Put "Hello " + name + nl
+       Case 2 Put "Sample : using switch statement" + nl
+       Case 3 Bye
+       Else Put "bad option..." + nl
+       End
+
+.. index:: 
+       pair: 制御構造 - 第二形式; ループ処理
+
+ループ処理
+==========
+
+* While ループ
+
+文法:
+
+.. code-block:: ring
+
+       while 式
+               ステートメント・ブロック
+       end
+
+
+用例:
+
+.. code-block:: ring
+
+       While True
+
+               Put " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Get nOption
+
+               Switch nOption
+               Case 1 
+                       Put "Enter your name : " 
+                       Get name 
+                       Put "Hello " + name + nl
+               Case 2 
+                       Put "Sample : using while loop" + nl
+               Case 3 
+                       Bye
+               Else 
+                       Put "bad option..." + nl
+               End
+       End
+.. index:: 
+       pair: 制御構造 - 第二形式; For ループ
+
+
+* For ループ
+
+文法:
+
+.. code-block:: ring
+
+       for 識別子=式 to 式 [step 式]
+               ステートメント・ブロック
+       end
+
+用例:
+
+.. code-block:: ring
+
+       # 1 ~ 10 までの数値を表示します。
+       for x = 1 to 10  put x + nl  end
+
+用例:
+
+.. code-block:: ring
+
+       # 動的ループ
+       Put "Start : " get nStart       
+       Put "End   : " get nEnd
+       Put "Step  : " get nStep
+       For x = nStart to nEnd Step nStep
+               Put x + nl
+       End
+
+用例:
+
+.. code-block:: ring
+
+       # 0 ~ 10 までの偶数値を表示します。
+       for x = 0 to 10 step 2
+               Put x + nl
+       end
+
+用例:
+
+.. code-block:: ring
+
+       # 10 ~ 0 までの偶数値を表示します。
+       for x = 10 to 0 step -2
+               put x + nl
+       end
+
+
+.. index:: 
+       pair: 制御構造 - 第二形式; For in ループ
+
+* For in ループ
+
+文法:
+
+.. code-block:: ring
+
+       for 識別子 in リストまたは文字列  [step 式]
+               ステートメント・ブロック
+       end
+
+用例:
+
+.. code-block:: ring
+
+       aList = 1:10    # 1 ~ 10 までの数値を有するリストを作成します。
+       for x in aList  put x + nl  end # 1 ~ 10 までの数値を表示します。
+
+.. index:: 
+       pair: 制御構造 - 第二形式; 例外処理
+
+例外処理
+========
+
+.. code-block:: ring
+
+       try
+               ステートメント・ブロック
+       catch
+               ステートメント・ブロック
+       end
+
diff --git a/docs/ja-jp/source/controlstructures3.txt b/docs/ja-jp/source/controlstructures3.txt
new file mode 100644 (file)
index 0000000..04e755d
--- /dev/null
@@ -0,0 +1,293 @@
+.. index:: 
+       single: 制御構造 - 第三形式; はじめに
+
+================================
+制御構造 - 第三形式
+================================
+
+第三形式による制御構造の用法を学びます。
+
+.. index:: 
+       pair: 制御構造 - 第三形式; 分岐処理
+
+
+分岐処理
+========
+
+.. index:: 
+       pair: 制御構造 - 第三形式; If ステートメント
+
+* If ステートメント
+
+文法:
+
+.. code-block:: ring
+
+       if 式 {
+               ステートメント・ブロック
+       elseif 式
+               ステートメント・ブロック
+       else
+               ステートメント・ブロック
+       }
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       print(" 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+           ")
+
+       nOption = getnumber()
+
+       if nOption = 1  {
+               print("Enter your name : ") 
+               name = getstring()      
+               print("Hello #{name}\n")
+       elseif nOption = 2 
+               print("Sample : using if statement\n")
+       elseif nOption = 3 
+               bye
+       else 
+               print("bad option...\n")
+       }
+
+.. index:: 
+       pair: 制御構造 - 第三形式; Switch ステートメント
+
+* Switch ステートメント
+
+文法:
+
+.. code-block:: ring
+
+       switch 式 {
+       case 式
+               ステートメント・ブロック
+       else
+               ステートメント・ブロック
+       }       
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       print(" 
+               Main Menu
+               ---------
+               (1) Say Hello
+               (2) About
+               (3) Exit
+
+             ")
+
+       nOption = GetString()
+
+       switch nOption {
+       case 1 
+               print("Enter your name : ")
+               name = getstring()
+               print("Hello #{name}\n")
+       case 2 
+               print("Sample : using switch statement\n")
+       case 3 
+               Bye
+       else 
+               print("bad option...\n")
+       }
+
+
+.. index:: 
+       pair: 制御構造 - 第三形式; ループ処理
+
+ループ処理
+==========
+
+.. index:: 
+       pair: 制御構造 - 第三形式; While ループ
+
+* While ループ
+
+文法:
+
+.. code-block:: ring
+
+       while 式 {
+               ステートメント・ブロック
+       }
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       While True {
+
+               print(" 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                         ")
+
+               nOption = GetString()
+
+               switch nOption {
+               case 1 
+                       print("Enter your name : ")
+                       name = getstring()
+                       print("Hello #{name}\n")
+               case 2 
+                       print("Sample : using switch statement\n")
+               case 3 
+                       Bye
+               else 
+                       print("bad option...\n")
+               }
+
+       }
+
+.. index:: 
+       pair: 制御構造 - 第三形式; For ループ
+
+* For ループ
+
+文法:
+
+.. code-block:: ring
+
+       for 識別子=式 to 式 [step 式] {
+               ステートメント・ブロック
+       }
+
+用例:
+
+.. code-block:: ring
+
+       # 1 ~ 10 までの数値を表示します。
+       load "stdlib.ring"
+       for x = 1 to 10  { 
+               print("#{x}\n") 
+       }
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # 動的ループ
+       print("Start : ") nStart = getnumber()
+       print("End   : ") nEnd = getnumber()
+       print("Step  : ") nStep = getnumber()
+       for x = nStart to nEnd step nStep {
+               print("#{x}\n") 
+       }
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # 0 ~ 10 までの偶数値を表示します。
+       for x = 0 to 10 step 2 {
+               print("#{x}\n") 
+       }
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       # 10 ~ 0 までの偶数値を表示します。
+       for x = 10 to 0 step -2 {
+               print("#{x}\n") 
+       }
+
+
+.. index:: 
+       pair: 制御構造 - 第三形式; For In ループ
+
+* For in ループ
+
+文法:
+
+.. code-block:: ring
+
+       for 識別子 in リストまたは文字列  [step 式] {
+               ステートメント・ブロック
+       }
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:10    # 1 ~ 10 までの数値を有するリストを作成します。
+       for x in aList { print("#{x}\n") }      # 1 ~ 10 までの数値を表示します。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:10    # 1 ~ 10 までの数値を有するリストを作成します。
+       # print リスト内にある奇数の項目を表示します。
+       for x in aList step 2 {
+               print("#{x}\n") 
+       }
+
+(For in) は項目を参照で取得します。
+
+つまり、ループの内側で項目の読み取りと編集ができます。
+       
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       aList = 1:5             # 1 ~ 5 までの数値を有するリストを作成します。
+       # リストの数値を文字列へ置換します。
+       for x in aList {
+               switch x {
+               case 1  x = "one"
+               case 2  x = "two"
+               case 3  x = "three"
+               case 4  x = "four"
+               case 5  x = "five"
+               }
+       }
+       print(aList)    # リストの項目を表示します。
+
+
+.. index:: 
+       pair: 制御構造 - 第三形式; 例外処理
+
+例外処理
+========
+
+.. code-block:: ring
+
+       try {
+               ステートメント・ブロック
+       catch
+               ステートメント・ブロック
+       }
+
diff --git a/docs/ja-jp/source/dateandtime.txt b/docs/ja-jp/source/dateandtime.txt
new file mode 100644 (file)
index 0000000..d8f8e42
--- /dev/null
@@ -0,0 +1,268 @@
+.. index:: 
+       single: 日付と時刻; はじめに
+
+==========
+日付と時刻
+==========
+
+日付と時刻の用法を学びます。
+
+.. index:: 
+       pair: 日付と時刻; clock()
+
+
+Clock() 関数
+============
+
+文法:
+
+.. code-block:: ring
+
+        Clock() ---> プログラム開始時からのクロック・ティック数
+
+用例:
+
+.. code-block:: ring
+       
+       See "Calculate performance" + nl
+       t1 = clock()
+       for x = 1 to 1000000 next
+       see clock() - t1 
+
+.. index:: 
+       pair: 日付と時刻; ClosPerSecond()
+
+ClocksPerSecond() 関数
+======================
+
+一秒あたりのクロック数を返します。
+
+文法:
+
+.. code-block:: ring
+
+       clockspersecond() ---> 一秒あたりのクロック数
+
+用例:
+
+.. code-block:: ring
+
+       # 1 秒待つ
+       t = clock()
+       while clock() - t <= clockspersecond() end
+
+.. index:: 
+       pair: 日付と時刻; Time()
+
+Time() 関数
+===========
+
+Time() 関数はシステムの時刻を取得します。
+
+用例:
+
+.. code-block:: ring
+       
+       See "Time : " + time()
+
+
+.. index:: 
+       pair: 日付と時刻; Date()
+
+Date() 関数
+===========
+
+Date() 関数は日付を取得します。
+
+文法:
+
+.. code-block:: ring
+
+        Date() ---> 文字列は "日/月/西暦" 表記による日付表記です。
+
+用例:
+
+.. code-block:: ring
+
+       See "Date : " + date()  # 日付 : 24/05/2015
+
+
+.. index:: 
+       pair: 日付と時刻; TimeList()
+
+TimeList() 関数
+===============
+
+TimeList() 関数は日付と時刻の情報を表示します。 
+
+文法:
+
+.. code-block:: ring
+
+       TimeList() ---> リストは時刻と日時の情報を有しています。
+
+この表はリストの項目です。
+
+============   =================================================
+インデックス             値
+============   =================================================
+1                              略式による週の名前
+2                              正式による週の名前
+3                              略式による月の名前
+4                              正式による月の名前
+5                              日付と時刻
+6                              今月からの経過日数
+7                              時間 (24 時間制)
+8                              時間 (12 時間制)
+9                              今年からの経過日数
+10                             今年からの経過週数
+11                             今時からの経過分数
+12                             AM (午前) または PM (午後)
+13                             今分からの経過秒数
+14                             今年からの経過週数 (日~土)
+15                             今週からの経過日数
+16                             日付
+17                             時刻
+18                             世紀による年の表記
+19                             西暦
+20                             タイムゾーン
+21                             パーセント記号
+============   =================================================
+
+用例:
+
+.. code-block:: ring
+
+       ## 実行結果:
+       ## Sun                  略式による週の名前
+       ## Sunday               正式による週の名前
+       ## May                  略式による月の名前
+       ## May                  正式による月の名前
+       ## 05/24/15 09:58:38    日付と時刻
+       ## 24                   今月からの経過日数
+       ## 09                   時間 (24 時間制)
+       ## 09                   時間 (12 時間制)
+       ## 144                  今年からの経過日数
+       ## 05                   今年からの経過週数
+       ## 58                   今時からの経過分数
+       ## AM                   AM (午前) または PM (午後)
+       ## 38                   今分からの経過秒数
+       ## 21                   今年からの経過週数 (日~土)
+       ## 0                    今週からの経過日数
+       ## 05/24/15             日付
+       ## 09:58:38             日時
+       ## 15                   世紀による年表記
+       ## 2015                 西暦
+       ## 東京 (標準時)        タイムゾーン (結果は OS, 言語、地域に依存)
+       ## %                    パーセント記号
+       
+       See TimeList() 
+
+用例:
+
+.. code-block:: ring
+
+       See "Day Name : " + TimeList()[2]       # Sunday
+
+用例:
+
+.. code-block:: ring
+
+       See "Month Name : " + TimeList()[4]     # May
+
+.. index:: 
+       pair: 日付と時刻; AddDays()
+
+AddDays() 関数
+==============
+
+文法:
+
+.. code-block:: ring
+
+       AddDays(cDate,nDays) ---> cDate から  nDays 後の日付です。
+
+用例:
+
+.. code-block:: ring
+
+       cDate = date()
+       see cDate + nl                  # 24/05/2015
+       cDate = adddays(cDate,10)
+       see cDate + nl                  # 03/06/2015
+
+.. index:: 
+       pair: 日付と時刻; DiffDays()
+
+DiffDays() 関数
+===============
+
+文法:
+
+.. code-block:: ring
+
+       DiffDays(cDate1,cDate2) ---> 日数 (Date1 - Date2)
+
+用例:
+
+.. code-block:: ring
+
+       cDate1 = date()
+       see cDate1 + nl                                         # 24/05/2015
+       cDate2 = adddays(cDate1,10)
+       see cDate2 + nl                                         # 03/06/2015
+       see "DiffDays = " + diffdays(cDate1,cDate2) + nl        # -10
+       see "DiffDays = " + diffdays(cDate2,cDate1) + nl        # 10
+       
+.. index:: 
+       pair: 日付と時刻; EpochTime()
+
+EpochTime() 関数
+====================
+
+文法:
+
+.. code-block:: ring
+
+       EpochTime( cDate, cTime ) ---> エポック秒
+
+用例:
+
+.. code-block:: ring
+
+       ###-------------------------------------------------------------
+       # EpochTime()
+       # 用例    ---   EpochSec = EpochTime( Date(), Time() )
+       # 呼び出し形式: EpochSec = EpochTime( "15/07/2016", "10:15:30" )
+       #               EpochSec = 1468577730
+       #---------------------------------------------------------------
+       
+       Func EpochTime(Date, Time)
+               
+           arrayDate = split(Date, "/")
+           arrayTime = split(Time, ":")
+               
+           Year = arrayDate[3] ; Month  = arrayDate[2] ; Day    = arrayDate[1]
+           Hour = arrayTime[1] ; Minute = arrayTime[2] ; Second = arrayTime[3]
+               
+           cDate1    = Day +"/"+ Month +"/"+ Year
+           cDate2    = "01/01/" + Year
+           DayOfYear = DiffDays( cDate1, cDate2)
+               
+           ### 数式
+           tm_sec  = Second    * 1
+           tm_min  = Minute    * 60
+           tm_hour = Hour      * 3600
+           tm_yday = DayOfYear * 86400
+           tm_year = Year      - 1900
+               
+           tm_year1 =         ( tm_year -  70)          * 31536000
+           tm_year2 = ( floor(( tm_year -  69) /   4 )) * 86400
+           tm_year3 = ( floor(( tm_year -   1) / 100 )) * 86400
+           tm_year4 = ( floor(( tm_year + 299) / 400 )) * 86400
+               
+           ### 結果
+           EpochSec = tm_sec + tm_min + tm_hour + tm_yday + tm_year1 + tm_year2 - tm_year3 + tm_year4
+
+       return EpochSec
+
diff --git a/docs/ja-jp/source/debug.txt b/docs/ja-jp/source/debug.txt
new file mode 100644 (file)
index 0000000..990107d
--- /dev/null
@@ -0,0 +1,238 @@
+.. index:: 
+       single: トレースライブラリとインタラクティブデバッガ; はじめに
+
+============================================
+トレースライブラリとインタラクティブデバッガ
+============================================
+
+トレースライブラリとインタラクティブデバッガの用法を学びます。
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; トレースライブラリの読み込み
+
+トレースライブラリの読み込み
+============================
+
+トレースライブラリの使用前に tracelib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; イベントをすべてトレースするには
+
+イベントをすべてトレースするには
+================================
+
+この用例は トレースライブラリの用法としてイベントをすべてトレースするためのデモです。
+
+.. code-block:: ring
+
+       # イベントをすべてトレース
+       trace(:AllEvents)
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+
+       mytest()
+
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; 関数と制御フローのトレース
+
+関数と制御フローのトレース
+==========================
+
+この用例は関数と制御フローのトレースのデモとしての
+トレースライブラリの用法です。
+
+.. code-block:: ring
+
+       Trace(:Functions)
+
+       test1()
+
+       func test1
+               see :test1 + nl
+               test2()
+
+       func test2
+               see :test2 + nl
+               see test3() + nl
+
+       func test3
+               see :test3 + nl
+               return "test 3 output" 
+       
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; エラーの渡しかた
+
+エラーの渡しかた
+================
+
+この用例は トレースライブラリの用法であり、
+エラーを渡すためのデモです!
+
+.. code-block:: ring
+
+       Trace(:PassError)
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               test2() # ランタイムエラー!
+               see "We can continue!"
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; インタラクティブデバッガ
+
+インタラクティブデバッガ
+========================
+
+この用例は トレースライブラリの用法であり、
+インタラクティブデバッガを使用したデモです。
+
+.. code-block:: ring
+
+       Trace(:Debugger)
+
+       test1()
+       see "good bye!" + nl
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               test2() # ランタイムエラー!
+               see "After Error!" +nl
+               see "t = " see t see nl
+               see "x = " see x see nl
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; プログラムを一行ずつ実行
+
+プログラムを一行ずつ実行
+========================
+
+この用例は トレースライブラリの用法であり、
+プログラムを一行ずつ実行するデモです!
+
+.. code-block:: ring
+
+       Trace(:LineByLine)
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               test2()
+               see "After Error!" +nl
+               see "t = " + t + nl
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; ブレークポイント
+       
+ブレークポイント
+================
+
+この用例は トレースライブラリのブレークポイントの停止における
+用法のデモンストレーションです!
+
+.. code-block:: ring
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; ブレークポイントの禁止
+
+ブレークポイントの禁止
+======================
+
+この用例はトレースライブラリの用法であり、
+ブレークポイントを禁止する方法です!
+
+.. code-block:: ring
+
+       NoBreakPoints()
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+.. index:: 
+       pair: トレースライブラリとインタラクティブデバッガ; インタラクティブデバッガの用法
+               
+インタラクティブデバッガの用法
+==============================
+
+この用例はブレークポイントをインタラクティブデバッガで開きます!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+
+スクリーンショット:
+
+ブレークポイントに関してはインタラクティブデバッガがあります!
+
+.. image:: debugshot1.png
+       :alt: インタラクティブデバッガ
+
+変数の値を表示できます。
+
+.. image:: debugshot2.png
+       :alt: インタラクティブデバッガ
+
+変数値の変更後に実行を継続できます。
+
+.. image:: debugshot3.png
+       :alt: インタラクティブデバッガ
+
+実行結果ウィンドウでもインタラクティブデバッガを実行できます。
+
+.. image:: debugshot4.png
+       :alt: インタラクティブデバッガ
+
diff --git a/docs/ja-jp/source/debugshot1.png b/docs/ja-jp/source/debugshot1.png
new file mode 100644 (file)
index 0000000..7e7f953
Binary files /dev/null and b/docs/ja-jp/source/debugshot1.png differ
diff --git a/docs/ja-jp/source/debugshot2.png b/docs/ja-jp/source/debugshot2.png
new file mode 100644 (file)
index 0000000..c6ba5b1
Binary files /dev/null and b/docs/ja-jp/source/debugshot2.png differ
diff --git a/docs/ja-jp/source/debugshot3.png b/docs/ja-jp/source/debugshot3.png
new file mode 100644 (file)
index 0000000..56087f6
Binary files /dev/null and b/docs/ja-jp/source/debugshot3.png differ
diff --git a/docs/ja-jp/source/debugshot4.png b/docs/ja-jp/source/debugshot4.png
new file mode 100644 (file)
index 0000000..00d3e47
Binary files /dev/null and b/docs/ja-jp/source/debugshot4.png differ
diff --git a/docs/ja-jp/source/declarative.txt b/docs/ja-jp/source/declarative.txt
new file mode 100644 (file)
index 0000000..888d1f8
--- /dev/null
@@ -0,0 +1,346 @@
+.. index:: 
+       single: 宣言型プログラミング; はじめに
+
+================================
+入れ子構造の宣言型プログラミング
+================================
+
+オブジェクト指向による入れ子構造の宣言型プログラミング環境の構築方法を学びます。
+
+* リストへオブジェクトを作成するには
+* コンポジションと参照によりオブジェクトとリストを返すには
+* オブジェクトのアクセス完了後にコードを実行するには
+* オブジェクト指向による宣言型プログラミング
+
+.. index:: 
+       pair: 宣言型プログラミング; リストへオブジェクトを作成するには
+
+リストへオブジェクトを作成するには
+====================================
+
+リストの定義時にリストへオブジェクトを作成できます。
+
+Add() 関数、または + 演算子により、必要なときにオブジェクトをリストへ追加できます。
+
+用例:
+
+.. code-block:: ring
+
+       alist = [new point, new point, new point]       # # オブジェクトが三つあるリストを作成します。
+
+       alist + [1,2,3]                                 # 別の項目をリストへ追加します。
+
+       see "Item 4 is a list contains 3 items" + nl
+       see alist[4] 
+
+       add(alist , new point)
+       alist + new point
+
+       alist[5] { x = 100 y = 200 z = 300 }
+       alist[6] { x = 50 y = 150 z = 250 }
+
+       see "Object inside item 5" + nl
+       see alist[5]
+       see "Object inside item 6" + nl
+       see alist[6]
+
+       class point x y z
+
+実行結果:
+
+.. code-block:: ring
+
+       Item 4 is a list contains 3 items
+       1
+       2
+       3
+       Object inside item 5
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       Object inside item 6
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+.. index:: 
+       pair: 宣言型プログラミング; 参照によりオブジェクトを返すには
+
+コンポジションと参照によりオブジェクトとリストを返すには
+========================================================
+
+コンポジションの使用とクラス属性のオブジェクトがある場合、オブジェクトの返値は参照で返します。
+
+呼び出し元で代入演算子を使う場合は、オブジェクトのコピーを作成します。
+
+呼出し元で代入演算子を使わない場合は、参照で返されたオブジェクトへ直接アクセスできます。
+
+また、属性がリスト (オブジェクトではありません) でも同じ処理が適用されます。
+
+.. note:: オブジェクト、およびリストは同じ規則で処理します。
+       関数へ渡すときは、参照渡しになります。
+       関数から返すときは、参照で返されたオブジェクト属性を除き値返しになります。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new Container
+       myobj = o1.addobj()     # 別のコピーを代入で作成します。
+       myobj.x = 100
+       myobj.y = 200
+       myobj.z = 300
+       see o1.aobjs[1]         # コンテナにあるオブジェクトを表示します。
+       see myobj               # コピーの表示
+
+       Class Container
+               aObjs = []
+               func addobj
+                       aobjs + new point
+                       return aobjs[len(aobjs)]        # オブジェクトを参照で返します。
+
+       Class point 
+               x  = 10
+               y  = 20
+               z  = 30
+
+実行結果:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+
+用例②:
+
+.. code-block:: ring
+
+       func main
+               o1 = new screen  {
+                       content[point()] { 
+                               x = 100 
+                               y = 200
+                               z = 300         
+                       }
+                       content[point()] { 
+                               x = 50 
+                               y = 150
+                               z = 250         
+                       }
+               }
+               see o1.content[1]
+               see o1.content[2]
+
+       Class Screen
+               content = []
+               func point
+                       content + new point
+                       return len(content)
+
+       Class point 
+               x  = 10
+               y  = 20
+               z  = 30
+
+実行結果:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+用例③:
+
+.. code-block:: ring
+
+       func main
+               o1 = New Screen  {
+                       point() {               # 参照でオブジェクトへアクセスします。
+                               x = 100 
+                               y = 200
+                               z = 300         
+                       }
+                       point() {               # 参照でオブジェクトへアクセスします。
+                               x = 50 
+                               y = 150
+                               z = 250         
+                       }
+               }
+               see o1.content[1]               
+               see o1.content[2]
+
+       Class Screen
+               content = []
+               func point
+                       content + new point
+                       return content[len(content)]    # オブジェクトを参照で返します。
+
+       Class point x=10 y=20 z=30
+
+実行結果:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+
+
+.. index:: 
+       pair: 宣言型プログラミング; オブジェクトのアクセス完了後にコードを実行するには
+
+オブジェクトのアクセス完了後にコードを実行するには
+==================================================
+
+オブジェクト属性とメソッドを使うには { } でオブジェクトへアクセスします。
+
+オブジェクトに BraceEnd() メソッドがある場合は、オブジェクトのアクセス完了直前に実行します。
+
+用例:
+
+.. code-block:: ring
+
+       New Point { See "How are you?" + nl }
+
+       Class Point x y z
+               func braceend
+                       see "I'm fine, Thank you!" + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       How are you?
+       I'm fine, Thank you!
+
+
+.. index:: 
+       pair: 宣言型プログラミング; オブジェクト指向による宣言型プログラミング
+
+オブジェクト指向による宣言型プログラミング
+==========================================
+
+この機能でオブジェクト指向による入れ子構造の宣言型プログラミング環境の構築と使用を可能にします。
+
+* { } によるオブジェクト属性、およびメソッドへのアクセス
+* BraceEnd() メソッド
+* 参照によるオブジェクト返し
+* Setter (セッター) / Getter (ゲッター) メソッド (オプション扱い)
+
+用例:
+
+.. code-block:: ring
+
+       # 宣言型プログラミング (入れ子構造)
+
+       Screen() 
+       {
+
+               point() 
+               {                       
+                       x = 100 
+                       y = 200
+                       z = 300         
+               }
+
+               point() 
+               {                        
+                       x = 50 
+                       y = 150
+                       z = 250         
+               }
+       }
+
+       # 関数とクラス
+
+       Func screen return new screen
+
+       Class Screen
+
+               content = []
+
+               func point
+                       content + new point
+                       return content[len(content)]    
+
+               func braceend
+                       see "I have " + len(content) + " points!"
+
+       Class point 
+
+               x=10 y=20 z=30
+
+               func braceend           
+                       see self        
+
+実行結果:
+
+.. code-block:: ring
+
+       x: 100.000000
+       y: 200.000000
+       z: 300.000000
+       x: 50.000000
+       y: 150.000000
+       z: 250.000000
+       I have 2 points!
+
+.. index:: 
+       pair: 宣言型プログラミング; コード品質の向上
+
+コード品質の向上
+================
+
+メソッドで仮引数を使わないときは、メソッド名末尾の () を省略できます。これにより、コード品質の向上になります。 
+この機能はオブジェクトメソッドとオブジェクト属性との機能に違いがあるため Ring では使えません。
+オブジェクト属性へ Getter メソッドを定義するとき、同様の効果をコードの構文で実現できます。
+例えば point() メソッドの定義ではなく point 属性値の取得で実行される
+getpoint() メソッドを point 属性として定義します。変数名は () を省略できるため、
+point() ではなく point と記述します。
+getpoint() メソッドはオブジェクトの作成、およびオブジェクトの参照を返します。
+
+用例:
+
+.. code-block:: ring
+
+       new Container 
+       {
+               Point 
+               { 
+                       x=10 
+                       y=20 
+                       z=30 
+               }
+       }
+
+       Class Container
+               aObjs = []
+               point
+               func getpoint
+                       aObjs + new Point
+                       return aObjs[len(aObjs)]
+
+       Class Point x y z
+               func braceend
+                       see "3D Point" + nl + x + nl + y + nl + z + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       3D Point
+       10
+       20
+       30
+
diff --git a/docs/ja-jp/source/demo.txt b/docs/ja-jp/source/demo.txt
new file mode 100644 (file)
index 0000000..ea5b1ce
--- /dev/null
@@ -0,0 +1,200 @@
+.. index:: 
+       single: デモプログラム; はじめに
+
+==============
+デモプログラム
+==============
+
+デモプログラムを紹介します。
+
+* 対話型プログラミング言語シェル
+* メインメニュー
+
+.. index:: 
+       pair: 対話型プログラミング言語シェル; 対話型プログラミング言語シェル
+
+対話型プログラミング言語シェル
+==============================
+
+このプログラムでは対話型プログラミング環境を作成します。
+
+.. code-block:: ring
+
+       while true 
+               see nl + "code:> "
+               give cCode 
+               try
+                       eval(cCode) 
+               catch
+                       see cCatchError
+               done
+       end
+
+実行結果:
+
+.. code-block:: ring
+
+       code:> see "hello world"
+       hello world
+       code:> for x = 1 to 10 see x + nl next
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+       code:> func test see "Hello from test" + nl
+
+       code:> test()
+       Hello from test
+
+       code:> bye
+
+.. index:: 
+       pair: デモプログラム; メインメニュー
+
+メインメニュー
+==============
+
+用例:
+
+.. code-block:: ring
+
+       # デモプログラム
+
+       while true
+
+               see "
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               " give nMenu see nl
+
+               # IF-BUT-ELSE-OK の代わりに Switch-ON-Other-OFF を使えます。
+
+               Switch nMenu
+               On 1 sayhello() 
+               On 2 Sum()
+               On 3 Stars()
+               On 4 
+                       see "Enter Number : " give x
+                       see "Output : " 
+
+                       Try     
+                               see Fact(number(x))
+                       Catch
+                               see "Error in parameters!" + nl
+                       Done
+
+               On "5" return 
+               Other see "bad option" + nl
+               Off
+
+       end
+
+       func sayhello
+               see "Enter your name ? " give fname
+               see "Hello " + fname + nl
+
+       func sum
+               see "number 1 : " give num1 see "number 2 : " give num2
+               see "Sum : " see 0 + num1 + num2
+
+       func stars
+               for x = 1 to 10
+                       see space(8)
+                       for y = 1 to x see "*" next see nl
+               next
+
+       func fact x if x = 0 return 1 else return x * fact(x-1) ok
+
+       func space x y = "" for t=1 to x y += " " next return y
+
+実行結果:
+
+.. code-block:: ring
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               1
+
+       Enter your name ? Mahmoud Fayed
+       Hello Mahmoud Fayed
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               2
+
+       number 1 : 3
+       number 2 : 4
+       Sum : 7
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               3
+
+               *
+               **
+               ***
+               ****
+               *****
+               ******
+               *******
+               ********
+               *********
+               **********
+
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               4
+
+       Enter Number : 5
+       Output : 120
+
+               Main Menu
+               ===========
+               [1] Say Hello
+               [2] Sum two numbers
+               [3] Stars
+               [4] Fact
+               [5] Exit
+
+               5
diff --git a/docs/ja-jp/source/deployincloud.txt b/docs/ja-jp/source/deployincloud.txt
new file mode 100644 (file)
index 0000000..d3a86a5
--- /dev/null
@@ -0,0 +1,199 @@
+.. index:: 
+       single: クラウド経由でのウェブアプリケーションの配布方法; はじめに
+
+================================================
+クラウド経由でのウェブアプリケーションの配布方法
+================================================
+
+クラウドサービスである Heroku で Ring ウェブアプリケーションを配布する方法を学びます。
+
+.. index:: 
+       pair: クラウド経由でのウェブアプリケーションの配布方法; はじめに
+
+はじめに
+========
+
+これは新規プロジェクトの作成方法、およびクラウドサービスである Heroku で Ring ウェブアプリケーションを配布する方法を解説するためのチュートリアルです。
+
+デモ : http://testring.herokuapp.com/
+
+プロジェクト : https://github.com/ring-lang/RingWebAppOnHeroku
+
+Heroku ウェブサイト : https://www.heroku.com/
+
+.. image:: ringincloud.png
+       :alt: クラウドでの Ring ウェブアプリケーション
+
+.. index:: 
+       pair: クラウド経由でのウェブアプリケーションの配布方法; 用法
+
+用法
+====
+
+このプロジェクトを Heroku へ配布するには
+
+(1) Heroku アカウントを作成します
+
+(2) Heroku アカウントを開きアプリケーションの新規作成をします
+
+用例 : testring
+
+.. note:: 自作アプリケーションでは、必ず唯一無二の名前を選んでください。
+
+(3) コマンドプロンプトを開いて、新規フォルダを作成します : MyApp
+
+.. code-block:: none
+
+       md MyApp
+
+(4) アプリケーションのフォルダを開きます
+
+.. code-block:: none
+
+       cd MyApp        
+
+(5) このプロジェクトを Git でクローンします (カレントディレクトリへクローンするときは、末尾にドットを付けるのをお忘れなく)
+
+.. code-block:: none
+
+       git clone https://github.com/ring-lang/RingWebAppOnHeroku .
+
+(6) Heroku へログインします (電子メートアドレスとパスワードを入力します)
+
+.. code-block:: none
+
+       heroku login
+
+(7) heroku (リモート) へ Git プロジェクトを追加します
+
+testring から自作アプリケーションの名前へ変更します
+
+.. code-block:: none
+
+       heroku git:remote -a testring
+
+(8) buildpacks (ビルトパックス) を設定します (こうすることで Heroku はプロジェクトへの対応方法を認識できるようになります)
+
+.. code-block:: none
+
+       heroku buildpacks:add --index 1 https://github.com/ring-lang/heroku-buildpack-apt
+       heroku buildpacks:add --index 2 https://github.com/ring-lang/heroku-buildpack-ring
+
+(9) プロジェクトのビルトと配布をします
+
+.. code-block:: none
+
+       git push heroku master
+
+(10) プロジェクトのテスト (ブラウザで行います)
+
+.. code-block:: none
+
+       heroku open
+
+.. index:: 
+       pair: クラウド経由でのウェブアプリケーションの配布方法; Ring ソースコードファイルとパーミッション
+
+Ring ソースコードファイルとパーミッション
+=========================================
+
+新規 Ring スクリプトを実行可能にするには Git で実行可能ファイルのパーミッションを設定します。
+
+例えば、 myscript.ring を作成した場合は
+
+.. code-block:: none
+
+       git update-index --chmod=+x myscript.ring 
+       git commit -m "Update file permission"  
+
+TortoiseGit の場合は、 Windows エクスプローラでファイルを選択して
+
+右クリック ---> プロパティ ---> Git ---> 実行 (+x)
+
+その後、コミットと配布が行われます!
+
+.. index:: 
+       pair: クラウド経由でのウェブアプリケーションの配布方法; Hello World プログラム
+
+Hello World プログラム
+======================
+
+ファイル : ringapp/helloworld.ring
+
+実行先 : http://testring.herokuapp.com/ringapp/helloworld.ring
+
+.. code-block:: ring
+
+       #!/app/runring.sh -cgi
+
+       see "content-type: text/html" +nl+nl    
+       see "Hello, World!" + nl
+
+ファイル : ringapp/helloworld2.ring
+
+実行先 : http://testring.herokuapp.com/ringapp/helloworld2.ring
+
+.. code-block:: ring
+
+       #!/app/runring.sh -cgi
+       load "weblib.ring"
+       import System.Web
+       new page {
+               text("Hello, World!")
+       }
+
+.. index:: 
+       pair: クラウド経由でのウェブアプリケーションの配布方法; アプリケーションのデータベース
+
+アプリケーションのデータベース
+==============================
+
+アプリケーションを配布をする場合、そのまますべて動作します!
+
+変更は不要ですが、実際はデータベースを使用するために、下記のファイルを更新してください。
+
+データベースと相互作用する2本のスクリプトがあります (今回のクラウドでは PostgreSQL を使います)。
+
+別のデータベースを使用する場合は、下記のファイルに記載されている接続文字列の更新が必要です。
+
+* ファイル: ringapp/database/newdb.ring (テーブルを一括作成するにはブラウザで実行します)
+* ファイル: ringapp/datalib.ring (Database クラス)
+
+実プロジェクトでは、より優れたコードを記述できます (データベースは変更可能であるため)。
+
+また、設定ファイルを作成できます (ある場所に接続文字列を記述するために)。
+
+データベースサービス : https://www.heroku.com/postgres
+
+.. index:: 
+       pair: クラウド経由でのウェブアプリケーションの配布方法; 配布後の更新
+
+配布後の更新
+============
+
+Git でコミット後に heroku へ push (プッシュ) します。
+
+ファイル: 手軽にテストができるよう build.bat には下記のコマンドが記載されています。
+
+.. code-block:: none
+
+       git add .
+       git commit -m "Update RingWebAppOnHeroku"
+       git push heroku master
+       heroku open
+
+.. index:: 
+       pair: クラウド経由でのウェブアプリケーションの配布方法; ローカルテスト
+
+ローカルテスト
+==============
+
+ローカルテストを行うには Windows で Ring ノートパッドを使用します (ローカルの Apache ウェブサーバーで試験実行)
+
+ringapp/index.ring ファイルの一行目を置換します:
+
+.. code-block:: ring
+
+       #!ring -cgi 
+       
+そして Ring ノートパッドから実行します (Ctrl+F6)
diff --git a/docs/ja-jp/source/distribute.txt b/docs/ja-jp/source/distribute.txt
new file mode 100644 (file)
index 0000000..087ed9a
--- /dev/null
@@ -0,0 +1,129 @@
+.. index:: 
+       single: Ring アプリケーションの配布方法; はじめに
+
+===============================
+Ring アプリケーションの配布方法
+===============================
+
+Ring アプリケーションの配布方法を学びます。
+
+下記は古い方法 (Ring 1.5 以前) です!
+
+現在は、スグレモノである RingEXE (Ring 1.6 以降) があります。
+
+Ring2EXE (Ring にて記述) で Windows, Linux および macOS 用のアプリケーションを手軽に配布できます。
+
+詳細情報は本取扱説明書の「Ring2EXE による Ring アプリケーションの配布方法」をご確認ください。
+
+
+.. index:: 
+       pair: Ring アプリケーションの配布方法; Microsoft Windows 用のアプリケーションの配布
+
+Microsoft Windows 用のアプリケーションの配布
+============================================
+
+手順①:
+
+.. code-block:: none
+
+       例えば c:\ring\bin フォルダを c:\myapp へコピーします。
+
+手順②:
+
+.. code-block:: none
+
+       c:\myapp\ring.exe から c:\myapp\myapp.exe へ名称変更します。
+
+手順③:
+
+.. code-block:: none
+
+       c:\myapp\ring.ring ファイルを作成します。
+
+下記を記述します。
+
+.. code-block:: ring
+
+       Load "myapp.ring"
+
+myapp.exe の実行時、 ring.ring ファイルも自動的に実行します。
+
+つまり、 myapp.ring ファイルが呼び出されて実行されます。
+
+あるいは myapp.ring を ring.ring へ名称変更します。
+
+これはアプリケーションを短時間で配布可能にする方法です。
+
+.. index:: 
+       pair: Ring アプリケーションの配布方法; ソースコードの保護
+
+ソースコードの保護
+==================
+
+手順①:
+
+このコマンドを実行します。
+
+.. code-block:: none
+
+       ring myapp.ring -go
+
+これはプロジェクトファイル (\*.ring) からオブジェクトファイル (myapp.ringo) を生成します。
+
+手順②:
+
+.. code-block:: none
+
+       myapp.ringo から ring.ringo へ名称変更します。
+
+実行可能ファイル (ring.exe または myapp.exe) を実行したとき ring.ringo ファイルを実行します。
+
+.. index:: 
+       pair: Ring アプリケーションの配布方法; ring.ring と ring.ringo ファイル
+
+ring.ring と ring.ringo ファイル
+================================
+
+Ring は下記の場合に限り ring.ring と ring.ringo ファイルを実行します。
+
+(1) ファイルはカレントディレクトリに存在する
+(2) ring.exe で実行するファイルを指定していない
+
+Ring アプリケーションの配布方法として ring.ring (および ring.ringo) に対応しています (Ring2EXE 実装以前)。
+
+.. index:: 
+       pair: Ring アプリケーションの配布方法; Windows インストーラの作成
+
+Windows インストーラの作成
+==========================
+
+アプリケーションの配布用ツールは色々あります。
+
+参考 : Nullsoft Scriptable Install System (NSIS)
+
+URL : http://nsis.sourceforge.net/Main_Page
+
+.. index:: 
+       pair: Ring アプリケーションの配布方法; C/C++ コンパイラとリンカの使用
+
+C/C++ コンパイラとリンカの使用
+==============================
+
+C/C++ コンパイラによるアプリケーションの配布方法があります。
+
+Ring を C/C++ プロジェクトを組み込むことにより
+C/C++ コンパイラで実行可能ファイルを作成できます (ring.ring や ring.ringo ファイルは不要になります)。
+
+詳細情報は“Ring を C/C++ プログラムへ組み込むには”をご確認ください。
+
+.. index:: 
+       pair: Ring アプリケーションの配布方法; モバイル機器向けアプリケーションおよびゲームの配布
+
+モバイル機器向けアプリケーションおよびゲームの配布
+==================================================
+
+Ring の Qt プロジェクトまたは LibSDL プロジェクトを組み込むことで、モバイル・アプリケーション、およびゲームをビルドできます。
+
+Qt のプロジェクトまたは LibSDL プロジェクトのビルドを行うことで Android 版のパッケージ (\*.apk) を直接出力できます。
+
+「Qt または LibSDL を使用したモバイル開発における Ring の配布ついて」をご確認ください。
diff --git a/docs/ja-jp/source/distribute_ring2exe.txt b/docs/ja-jp/source/distribute_ring2exe.txt
new file mode 100644 (file)
index 0000000..7ca0003
--- /dev/null
@@ -0,0 +1,592 @@
+.. index:: 
+       single: Ring2EXE による Ring アプリケーションの配布方法; はじめに
+
+===============================================
+Ring2EXE による Ring アプリケーションの配布方法
+===============================================
+
+Ring アプリケーションの配布方法を学びます。
+
+現在は、スグレモノである RingEXE (Ring 1.6 以降) があります。
+
+Ring2EXE で Windows, Linux, macOS およびモバイル・アプリケーションを手軽に配布できます。
+
+.. note:: Ring ノートパッドの配布メニューも使えます (最も簡単な方法)。
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE の用法
+
+Ring2EXE の用法
+===============
+
+.. code-block:: none
+
+               ring2exe ファイル名.ring [オプション]
+
+プログラムの入力として ファイル名.ring を指定します
+
+このファイルが生成されます。
+
+.. code-block:: none
+
+               ファイル名.ringo          (Ring オブジェクトファイル - コンパイラにより生成)
+               ファイル名.c              (このプログラムにより生成された
+                                              ringo ファイルの内容を有する
+                                              C ソースコードファイルです)
+               ファイル名_buildvc.bat    (Visual C/C++ で filename.c をビルドするために実行します)
+               ファイル名_buildgcc.bat   (GNU C/C++ で filename.c をビルドするために実行します)
+               ファイル名_buildclang.bat (CLang C/C++ で filename.c をビルドするために実行します)
+               ファイル名.obj            (Visual C/C++ コンパイラにより生成されます)
+               ファイル名.exe            (Visual C/C++ リンカにより生成されます)
+               ファイル名                (実行ファイル - Linux および macOS プラットフォームにおいて)
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE の動作方法
+
+Ring2EXE の動作方法
+===================
+
+最初に Ring コンパイラで Ring オブジェクトファイル (\*.ringo) を生成します。
+
+C コンパイラ (オプション扱い) が存在する場合、このオブジェクトファイルは C ソースコードファイル内部へ埋め込まれます。
+
+その後に、コンパイラと Ring ライブラリ (Ring 仮想計算機も組み込まれます) で実行ファイルを生成します!
+
+C コンパイラが存在しない場合は Ring 実行ファイルのコピーを行い、アプリケーション名へ名称変更されます。
+
+そして Ring オブジェクトファイルは (\*.ringo) 起動時に実行される ring.ringo が実行ファイルとなります。
+
+よって Ring2EXE を使用する電子計算機へ C コンパイラを導入したほうが簡単で良いです。
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; 用例
+
+用例
+====
+
+test.ring の内容は、
+
+.. code-block:: ring
+
+       see "Hello, World!" + nl
+
+Windows, Linux または macOS 用の実行可能ファイルをビルドするには
+
+.. code-block:: none
+       
+               ring2exe test.ring 
+
+プログラムを実行するには (Windows)
+
+.. code-block:: none
+
+               test 
+
+プログラムを実行するには (Linux と macOS)
+
+.. code-block:: none
+
+               ./test
+
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; オプション
+
+オプション
+==========
+
+.. code-block:: none
+
+               -keep            : 一時作業用ファイルを削除しない
+               -static          : スタンドアロン形式による実行ファイルのビルド 
+                                  (ring.dll/ring.so/ring.dylib を使用しない)
+               -gui             : GUI アプリケーションのビルド (コンソールウィンドウの非表示)
+               -dist            : 配布対象のアプリケーションを準備
+               -allruntime      : 配布物へ全てのライブラリを同梱
+               -mobileqt        : モバイル版 Ring アプリケーションの配布準備で用いる Qt プロジェクトを準備
+               -noqt            : 配布物から RingQt を削除
+               -noallegro       : 配布物から RingAllegro を削除
+               -noopenssl       : 配布物から RingOpenSSL を削除
+               -nolibcurl       : 配布物から RingLibCurl を削除
+               -nomysql         : 配布物から RingMySQL を削除
+               -noodbc          : 配布物から RingODBC を削除
+               -nosqlite        : 配布物から RingSQLite を削除
+               -noopengl        : 配布物から RingOpenGL を削除
+               -nofreeglut      : 配布物から RingFreeGLUT を削除
+               -nolibzip        : 配布物から RingLibZip を削除
+               -noconsolecolors : 配布物から RingConsoleColors を削除
+               -nomurmuhash     : 配布物から RingMurmurHash を削除
+               -nocruntime      : 配布物から C ランタイムを削除
+               -qt              : 配布物へ RingQt を追加
+               -allegro         : 配布物へ RingAllegro を追加
+               -openssl         : 配布物へ RingOpenSSL を追加
+               -libcurl         : 配布物へ RingLibCurl を追加
+               -mysql           : 配布物へ RingMySQL を追加
+               -odbc            : 配布物へ RingODBC を追加
+               -sqlite          : 配布物へ RingSQLite を追加
+               -postgresql      : 配布物へ RingPostgreSQL を追加
+               -opengl          : 配布物へ RingOpenGL を追加
+               -freeglut        : 配布物へ RingFreeGLUT を追加
+               -libzip          : 配布物へ RingLibZip を追加
+               -libuv           : 配布物へ RingLibuv  を追加
+               -consolecolors   : 配布物へ RingConsoleColors を追加
+               -murmurhash      : 配布物へ RingMurmurHash を追加
+               -cruntime        : 配布物へ C ランタイムを追加
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; スタンドアロン形式によるコンソールアプリケーションのビルド方法
+
+スタンドアロン形式によるコンソールアプリケーションのビルド方法
+==============================================================
+
+“-static” オプションはコンソールアプリケーションの実行ファイルをビルドします (静的リンク)。
+
+こうすると Ring 動的リンクライブラリ (ring.dll, ring.so または ring.dylib) を使用しません (不要になります)。
+
+ほかのライブラリを使うには、アプリケーションでライブラリをインクルードしてください。 
+
+.. code-block:: none
+
+               ring2exe test.ring -static
+
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; RingAllegro アプリケーションの配布方法
+
+RingAllegro アプリケーションの配布方法
+======================================
+
+この内容のコードが test2.ring にあります。
+
+.. code-block:: ring
+
+
+       # Ring2EXE ツールのテスト用プログラムです!
+       # RingAllegro の用法
+
+       load "gameengine.ring"   # ゲームエンジンへ制御権を渡します。
+
+       func main                # ゲームエンジンから呼び出されます。
+
+               oGame = New Game # ゲームオブジェクトの作成
+               {
+                       title = "My First Game"
+               }     
+
+
+ゲームの配布用に実行可能ファイルのビルドと準備をするには
+
+“-dist” および “-allruntime” オプションで全てのライブラリをインクルードします。
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -allruntime
+
+前述のコマンドを実行後、出力先は:
+
+* Windows : target/windows フォルダ
+
+* Linux   : target/linux フォルダ
+
+* macOS   : target/macos フォルダ
+
+前述のコマンドは、全ての Ring ランタイムライブラリを配布物へ追加します。
+
+しかし RingAllegro のみ必要な場合は、このコマンドのほうが良いです。
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -allegro -cruntime
+
+これは、不要なランタイムファイルを除外することで配布物の容量を削減します!
+
+また “-gui” オプションでコンソールウィンドウを非表示にできます。
+
+よって、このコマンドのほうが良いです。
+
+.. code-block:: none
+
+       ring2exe test2.ring -dist -gui -allegro -cruntime
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; RingQt アプリケーションの配布方法
+
+RingQt アプリケーションの配布方法
+=================================
+
+この内容のコードが test3.ring にあります。
+
+.. code-block:: ring
+
+       # Ring2EXE ツールのテスト用プログラムです!
+       # RingQt の用法
+
+       load "guilib.ring"
+
+       new qApp {
+               new qWidget() {
+                       setwindowtitle("Hello, World!")
+                       resize(400,400)
+                       show()
+               }
+               exec()
+       }
+
+
+GUI アプリケーションの配布用に、実行可能ファイルのビルドと準備をするには
+
+“-dist” および “-allruntime” オプションで全てのライブラリをインクルードします。
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -allruntime
+
+前述のコマンドを実行後、出力先は:
+
+* Windows : target/windows フォルダ
+
+* Linux   : target/linux フォルダ
+
+* macOS   : target/macos フォルダ
+
+前述のコマンドは全ての Ring ランタイムライブラリを配布物へ追加します。
+
+RingQt のみ必要ならば、このコマンドのほうが良いです。
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -qt -cruntime
+
+これは、不要なランタイムファイルを除外することで配布物の容量を削減します!
+
+また “-gui” オプションによりコンソールウィンドウを非表示にできます。
+
+よって、このコマンドのほうが良いです。
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -gui -qt -cruntime
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル用アプリケーションの配布方法 (RingQt)
+
+モバイル用アプリケーションの配布方法 (RingQt)
+=============================================
+
+“-mobileqt” オプションで RingQt アプリケーション (test3.ring) 用の Qt プロジェクトを準備します。
+
+用例 :
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -mobileqt
+
+前述のコマンドを実行後、 target/mobile/qtproject フォルダに Qt プロジェクトがあります。
+
+メインのプロジェクトファイルは project.pro です。 Qt Creator IDE で開くことができます。
+
+またリソースファイルもあります : project.qrc
+
+別の重要なファイルは C++ メインファイルです : main.cpp
+
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル版 Cards ゲームのビルド方法 (RingQt)
+
+モバイル版 Cards ゲームのビルド方法 (RingQt)
+============================================
+
+このフォルダにある Cards ゲームは Ring を使用した Android パッケージのビルド方法の良例であると考えられます:
+       ring/application/cards
+
+Cards ゲームのフォルダには三本のファイルがあります
+
+* cards.ring  : ゲームのソースコード
+
+* cards.jpg   : ゲームで使用される画像ファイル
+
+* project.qrc : Qt プロジェクトで使用されるリソースファイル
+
+リソースファイルの内容:
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>cards.ringo</file>
+                       <file>cards.jpg</file>
+               </qresource>
+       </RCC>
+
+二本のリソースファイルがあります。
+
+一本目のファイルは cards.ringo (Ring オブジェクトファイル) であり、二本目のファイルは cards.jpg (画像ファイル) です。
+
+まず、 Ring2EXE でリソースファイル (target/mobile/qtproject/project.qrc) を生成します。
+
+しかし、このファイルの内容は cards.ringo のみです (Ring2EXE は Ring コンパイラを呼び出すことにより生成します)。
+
+このリソースファイルへ画像を追加してから必ず更新してください : cards.jpg
+
+更新後にメインのアプリケーションファイルへリソースファイルをコピーします。
+
+Ring2EXE の再実行時に更新済みリソースファイルを使用します!
+
+これでモバイル用の Card ゲームのビルドが行えます。
+
+(1) このコマンドを実行します
+
+.. code-block:: none
+
+       ring2exe cards.ring -dist -mobileqt
+
+(2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
+
+(3) Qt Creator でビルドと実行を行います。
+
+
+Cards ゲームで画像ファイルを検出する方法は?
+
+RingQt にはシンプルな関数があります: AppFile()
+
+関数はデスクトップまたはモバイルプラットフォームでアクセスするファイルを決定するために使えます。
+
+このコードは cards.ring からの引用です。
+
+.. code-block:: ring
+
+       mypic = new QPixmap(AppFile("cards.jpg"))
+
+必要ならば AppFile() 関数を画像ファイルに使用します!
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; モバイル版 Weight History アプリケーションのビルド方法 (RingQt)
+
+モバイル版 Weight History アプリケーションのビルド方法 (RingQt)
+===============================================================
+
+このフォルダにある Weight History アプリケーションは Ring による Android パッケージのビルド方法であり
+Ring2EXE と Qt を使用したモバイル・アプリケーションを配布するための別例であると考えられます:
+
+       ring/application/weighthistory 
+
+Weight History アプリケーションのフォルダには四本のファイルがあります
+
+* weighthistory.ring : アプリケーションのソースコード
+
+* weighthistory.db : SQLite データベース
+
+* project.qrc : Qt プロジェクト用のリソースファイル
+
+* main.cpp : Qt プロジェクト用のメイン C++ ソースファイル
+
+モバイル用の Weight History アプリケーションをビルドするには
+
+(1) このコマンドを実行
+
+.. code-block:: none
+
+       ring2exe weighthistory.ring -dist -mobileqt
+
+(2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
+
+(3) Qt Creator でビルドと実行を行います。
+
+リソースファイル (project.qrc) には二つのファイルがあります。
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>weighthistory.ringo</file>
+                       <file>weighthistory.db</file>
+               </qresource>
+       </RCC>
+
+一本目のファイルは weighthistory.ringo (Ring オブジェクトファイル - Ring2EXE が Ring コンパイラを呼び出すことで生成)
+
+データベースファイル : weighthistory.db
+
+main.cpp には次の小規模な更新があるため、モバイル機器の書き込み可能なリソースの場所へデータベースファイルをコピーしてください。
+
+.. code-block:: none
+
+    QString path3 ;
+    path3 = path+"/weighthistory.db";
+    QFile::copy(":/weighthistory.db",path3);
+
+この作業はデータベースファイルのみ行う必要があります!
+
+Ring2EXE 使用時、ツールは project.qrc および main.cpp の確認を行い、存在する場合は更新されたファイルとして
+
+Ring2EXE により生成されたデフォルト版である target/mobile/qtproject を使用します。
+
+よって Ring2EXE でファイルを更新した後に、更新する時にアプリケーションのフォルダへファイルをコピーするために使用してください。
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; フォームデザイナーをモバイル機器用にビルドするには (RingQt)
+
+フォームデザイナーをモバイル機器用にビルドするには (RingQt)
+===========================================================
+
+モバイル用のアプリケーションをフォームデザイナー・アプリケーション (ring/applications/formdesigner) でビルドをするには
+
+(1) このコマンドを実行
+
+.. code-block:: none
+
+       ring2exe formdesigner.ring -dist -mobileqt
+
+(2) Qt Creator で target/mobile/qtproject/project.pro を開きます。
+
+(3) Qt Creator でビルドと実行を行います。
+
+ring/application/formdesigner フォルダにはリソースファイルがあります : project.qrc
+
+Ring2EXE により自動的に使用されます。
+
+.. code-block:: none
+
+       <RCC>
+               <qresource>
+                       <file>formdesigner.ringo</file>
+                       <file>image/allevents.png</file>
+                       <file>image/checkbox.png</file>
+                       <file>image/close.png</file>
+                       <file>image/combobox.bmp</file>
+                       <file>image/datepicker.bmp</file>
+                       <file>image/dial.png</file>
+                       <file>image/formdesigner.png</file>
+                       <file>image/frame.png</file>
+                       <file>image/grid.bmp</file>
+                       <file>image/hyperlink.png</file>
+                       <file>image/image.png</file>
+                       <file>image/label.png</file>
+                       <file>image/layout.png</file>
+                       <file>image/lcdnumber.png</file>
+                       <file>image/listview.png</file>
+                       <file>image/lock.png</file>
+                       <file>image/new.png</file>
+                       <file>image/open.png</file>
+                       <file>image/progressbar.png</file>
+                       <file>image/project.png</file>
+                       <file>image/pushbutton.png</file>
+                       <file>image/radiobutton.png</file>
+                       <file>image/save.png</file>
+                       <file>image/saveas.png</file>
+                       <file>image/select.png</file>
+                       <file>image/slider.png</file>
+                       <file>image/spinner.bmp</file>
+                       <file>image/statusbar.png</file>
+                       <file>image/tab.png</file>
+                       <file>image/textarea.png</file>
+                       <file>image/textfield.png</file>
+                       <file>image/timer.png</file>
+                       <file>image/toolbar.png</file>
+                       <file>image/tree.bmp</file>
+                       <file>image/videowidget.png</file>
+                       <file>image/webview.png</file>
+               </qresource>
+       </RCC>
+
+Cards ゲームと同様、フォームデザイナーは AppFile() 関数を画像ファイル名を決定するために使用します。
+
+このコードは ring/applications/formdesigner/mainwindow/formdesignerview.ring からの引用です。
+
+.. code-block:: ring
+
+       func CreateToolBar
+               aBtns = [
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/new.png"))
+                                       setclickevent(Method(:NewAction))
+                                       settooltip("New File")
+                               } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/open.png"))
+                                       setclickevent(Method(:OpenAction))
+                                       settooltip("Open File")
+                               } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/save.png"))
+                                       setclickevent(Method(:SaveAction))
+                                       settooltip("Save")
+                                } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/saveas.png"))
+                                       setclickevent(Method(:SaveAsAction))
+                                       settooltip("Save As")
+                                } ,
+                               new qtoolbutton(win) {
+                                       setbtnimage(self,AppFile("image/close.png"))
+                                       setclickevent(Method(:ExitAction))
+                                       settooltip("Exit")
+                               }
+                       ]
+
+               tool1 = win.addtoolbar("files")  {
+                       for x in aBtns { addwidget(x) addseparator() }
+               }
+
+この用例でサブフォルダでの画像の用法を理解できます。
+
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; Qt リソースファイルの作成方法 (Folder2qrc)
+
+Qt リソースファイルの作成方法 (Folder2qrc)
+==========================================
+
+大量の画像とファイルを有する大規模 RingQt プロジェクトがある場合、モバイル・アプリケーションの配布時にリソースファイル (\*.qrc) へファイルを必ず追加してください。
+
+Ring 1.6 以降では Folder2qrc ツールにより、一つずつファイルを追加する必要がなくなるので時間の節約になります。
+
+用例:
+
+.. code-block:: none
+
+       folder2qrc formdesigner.ring
+
+アプリケーションフォルダに移動している間に、メインソースファイルの決定をするために
+Folder2qrc は現在のフォルダとサブフォルダにある全てのファイルを確認します。
+そして mainfile.ringo の後にリソースファイルを追加します (この用例ではformdesigner.ringo です)。
+
+出力ファイル : project.qrc
+
+ファイルを開く、または削除するためにリソースは不要です!
+
+
+.. index:: 
+       pair: Ring2EXE による Ring アプリケーションの配布方法; Ring2EXE に関する重要情報
+
+Ring2EXE に関する重要情報
+=========================
+
+* Ring2EXE で配布物を準備すると、古い配布物にあるファイルを全て削除します。
+
+例えば target/windows が使用される場合は
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -allruntime
+
+target/windows にあるファイルは再びファイルを追加する前に削除されます。
+
+これは、モバイル機器用の配布物を準備するときに重要となります。
+
+.. code-block:: none
+
+       ring2exe test3.ring -dist -mobileqt
+
+リソースファイルを修正する場合は : project.qrc または、メインファイル main.cpp をアプリケーションフォルダへコピーすることを忘れないように注意してください!
+
+前述のコマンドを再実行すると、 Ring2EXE で更新版を使えます!
+
+* Ring2EXE は Ring 記述しています。こちらからソースコードを読むことができます
+
+       https://github.com/ring-lang/ring/blob/master/ring2exe/ring2exe.ring
+
+* ライブラリの情報は個々の独立したファイルに記録されています。よって将来、新しいライブラリへ対応する場合は、このファイルを自動的に更新できます。
+
+       https://github.com/ring-lang/ring/blob/master/ring2exe/libs
+
diff --git a/docs/ja-jp/source/dssapp.png b/docs/ja-jp/source/dssapp.png
new file mode 100644 (file)
index 0000000..34b1e25
Binary files /dev/null and b/docs/ja-jp/source/dssapp.png differ
diff --git a/docs/ja-jp/source/editor1.png b/docs/ja-jp/source/editor1.png
new file mode 100644 (file)
index 0000000..57aeaf7
Binary files /dev/null and b/docs/ja-jp/source/editor1.png differ
diff --git a/docs/ja-jp/source/editor2.png b/docs/ja-jp/source/editor2.png
new file mode 100644 (file)
index 0000000..2301202
Binary files /dev/null and b/docs/ja-jp/source/editor2.png differ
diff --git a/docs/ja-jp/source/editor3.jpg b/docs/ja-jp/source/editor3.jpg
new file mode 100644 (file)
index 0000000..1db0ab1
Binary files /dev/null and b/docs/ja-jp/source/editor3.jpg differ
diff --git a/docs/ja-jp/source/editor4.jpg b/docs/ja-jp/source/editor4.jpg
new file mode 100644 (file)
index 0000000..dc00a5d
Binary files /dev/null and b/docs/ja-jp/source/editor4.jpg differ
diff --git a/docs/ja-jp/source/editor5.png b/docs/ja-jp/source/editor5.png
new file mode 100644 (file)
index 0000000..800a900
Binary files /dev/null and b/docs/ja-jp/source/editor5.png differ
diff --git a/docs/ja-jp/source/embedding.txt b/docs/ja-jp/source/embedding.txt
new file mode 100644 (file)
index 0000000..fcc5605
--- /dev/null
@@ -0,0 +1,158 @@
+.. index:: 
+       single: C/C++ プログラムへ Ring を組み込むには; はじめに
+
+======================================
+C/C++ プログラムへ Ring を組み込むには
+======================================
+
+この関数により C/C++ プログラムから Ring を使えます。
+
+.. code-block:: C
+
+       RingState *ring_state_init();
+       ring_state_runcode(RingState *pState,const char *cCode);
+       ring_state_delete(RingState *pState);
+
+.. index:: 
+       pair: C/C++ プログラムへ Ring を組み込むには; Ring のステート
+
+Ring のステート
+================
+
+考えかたとしては ring_state_init() で Ring ステートの新規作成後に、
+ring_state_runcode() 関数を呼び出すことで、同一ステートの Ring コードの実行します。
+処理完了後に ring_state_delete() を呼び出して、メモリを解放します。
+
+用例:
+
+.. code-block:: C
+
+       #include "ring.h"
+       #include "stdlib.h"
+       int main(int argc, char *argv[])
+       {       
+         RingState *pState = ring_state_init();
+         printf("welcome\n");
+         ring_state_runcode(pState,"see 'hello world from the ring programming language'+nl");
+         ring_state_delete(pState);
+       }
+
+実行結果:
+
+.. code-block:: C
+
+       welcome
+       hello world from the ring programming language
+
+.. index:: 
+       pair: C/C++ プログラムへ Ring を組み込むには; Ring ステート関数
+
+Ring ステート関数
+=================
+
+Ring の API にはステートの作成と削除を行う関数です。
+また、新しい変数の作成と変数の値を取得するための関数もあります。
+
+.. code-block:: C
+
+       RingState * ring_state_init ( void ) ;
+       RingState * ring_state_delete ( RingState *pRingState ) ;
+       void ring_state_runcode ( RingState *pRingState,const char *cStr ) ;
+       List * ring_state_findvar ( RingState *pRingState,const char *cStr ) ;
+       List * ring_state_newvar ( RingState *pRingState,const char *cStr ) ;
+       void ring_state_main ( int argc, char *argv[] ) ;
+       void ring_state_runfile ( RingState *pRingState,const char *cFileName ) ;
+       void ring_state_runobjectfile ( RingState *pRingState,const char *cFileName ) ;
+
+.. index:: 
+       pair: C/C++ プログラムへ Ring を組み込むには; Ring ステート変数
+
+Ring ステート変数
+=================
+
+同一プログラム内で複数の Ring のステートを作成できます。また、変数の作成と値の変更もできます。
+
+ring_state_findvar() 関数は変数のリストを取得します。
+
+ring_state_newvar() 関数は新しい変数を作成します。
+
+用例:
+
+.. code-block:: C
+
+       #include "ring.h"
+       #include "stdlib.h"
+       
+       int main(int argc, char *argv[])
+       {
+         List *pList;
+
+         RingState *pState = ring_state_init();
+         RingState *pState2 = ring_state_init();
+
+         printf("welcome\n");
+         ring_state_runcode(pState,"see 'hello world from the ring programming language'+nl");
+
+         printf("Again from C we will call ring code\n");
+         ring_state_runcode(pState,"for x = 1 to 10 see x + nl next");
+
+         ring_state_runcode(pState2,"for x = 1 to 5 see x + nl next");
+
+         printf("Now we will display the x variable value from ring code\n");
+         ring_state_runcode(pState,"see 'x value : ' + x + nl ");
+         ring_state_runcode(pState2,"see 'x value : ' + x + nl ");
+
+         pList = ring_state_findvar(pState,"x");
+
+         printf("Printing Ring variable value from C , %.0f\n",
+                       ring_list_getdouble(pList,RING_VAR_VALUE));
+
+         printf("now we will set the ring variable value from C\n");
+         ring_list_setdouble(pList,RING_VAR_VALUE,20);
+
+         ring_state_runcode(pState,"see 'x value after update : ' + x + nl ");
+
+         pList = ring_state_newvar(pState,"v1");
+         ring_list_setdouble(pList,RING_VAR_VALUE,10); 
+
+         pList = ring_state_newvar(pState,"v2");
+         ring_list_setdouble(pList,RING_VAR_VALUE,20);
+
+         ring_state_runcode(pState,"see 'v1 + v2 = ' see v1+v2 see nl");
+
+         ring_state_runcode(pState,"see 'end of test' + nl");
+
+         ring_state_delete(pState);
+         ring_state_delete(pState2);
+       }
+
+実行結果:
+
+.. code-block:: ring
+
+       welcome
+       hello world from the ring programming language
+       Again from C we will call ring code
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       1
+       2
+       3
+       4
+       5
+       Now we will display the x variable value from ring code
+       x value : 11
+       x value : 6
+       Printing Ring variable value from C , 11
+       now we will set the ring variable value from C
+       x value after update : 20
+       v1 + v2 = 30
+       end of test
\ No newline at end of file
diff --git a/docs/ja-jp/source/empapp.png b/docs/ja-jp/source/empapp.png
new file mode 100644 (file)
index 0000000..14a8945
Binary files /dev/null and b/docs/ja-jp/source/empapp.png differ
diff --git a/docs/ja-jp/source/evaldebug.txt b/docs/ja-jp/source/evaldebug.txt
new file mode 100644 (file)
index 0000000..3edcc4e
--- /dev/null
@@ -0,0 +1,204 @@
+.. index:: 
+       single: Eval() とデバッグ; はじめに
+
+=================
+Eval() とデバッグ
+=================
+
+下記の用法を学びます。
+
+* Try/Catch/Done によるエラー処理
+
+* Eval() 関数
+
+* Raise() 関数
+
+* Assert() 関数
+
+.. index:: 
+       pair: Eval() とデバッグ; Try/Carch/Done
+
+Try/Catch/Done
+==============
+
+文法:
+
+.. code-block:: ring
+
+       Try
+               ステートメント...
+       Catch
+               ステートメント...
+       Done
+
+まず Try ブロックのステートメントが実行されます。
+そしてエラーが発生すると catch ブロックのステートメントが実行されます。
+
+catch ブロックの内側では変数 cCatchError でエラーメッセージを取得できます。
+
+用例:
+
+.. code-block:: ring
+
+       Try
+               see 5/0
+       Catch
+               see "Catch!" + nl + cCatchError
+       Done
+
+実行結果:
+
+.. code-block:: ring
+
+       Catch!
+       Error (R1) : Cann't divide by zero !
+
+
+.. index:: 
+       pair: Eval() とデバッグ; Eval()
+
+Eval() 関数
+===========
+
+Eval() 関数は実行時に文字列からコードを実行します。
+
+文法:
+
+.. code-block:: ring
+
+       Eval(cCode)
+
+用例:
+
+.. code-block:: ring
+
+       Eval("nOutput = 5+2*5 " )
+       See "5+2*5 = " + nOutput + nl                    
+       Eval("for x = 1 to 10 see x + nl next")          
+       Eval("func test see 'message from test!' ")      
+       test()
+
+実行結果:
+
+.. code-block:: ring
+
+       5+2*5 = 15
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+       message from test!
+
+
+Return 命令で値を返せます。
+
+用例:
+
+.. code-block:: ring
+
+       see Eval("return 5*5")
+
+実行結果:
+
+.. code-block:: ring
+
+       25
+
+.. index:: 
+       pair: Eval() とデバッグ; Raise()
+
+Raise() 関数
+============
+
+Raise() 関数は例外を発生します。
+
+文法:
+
+.. code-block:: ring
+
+       Raise(cErrorMessage)
+
+この関数はエラーメッセージを表示した後にプログラムを終了します。
+
+raise() 関数で生成された例外は Try/Catch/Done により回避できます。
+
+用例:
+
+.. code-block:: ring
+
+       nMode = 10
+
+       if nMode < 0 or nMode > 5
+               raise("Error : nMode not in the range 1:4")
+       ok
+
+実行結果:
+
+.. code-block:: ring
+
+       Line 4 Error : nMode not in the range 1:4
+       In raise in file tests\raise.ring
+
+用例:
+
+.. code-block:: ring
+
+       try 
+               testmode(6)
+       catch
+               see "avoid raise!"
+       done
+
+       testmode(-1)
+
+       func testmode nMode
+
+               if nMode < 0 or nMode > 5
+                       raise("Error : nMode not in the range 1:4")
+               ok
+
+実行結果:
+
+.. code-block:: ring
+
+       avoid raise!
+       Line 12 Error : nMode not in the range 1:4
+       In raise In function testmode() in file tests\raise2.ring
+       called from line 7  in file tests\raise2.ring
+
+.. index:: 
+       pair: Eval() とデバッグ; Assert()
+
+Assert() 関数
+=============
+
+Assert() 関数はコードの実行前に条件をテストします。
+
+テストに失敗した場合は、アサートの条件を有するエラーメッセージを表示後にプログラムを終了します。
+
+文法:
+
+.. code-block:: ring
+
+       Assert( 条件 )
+
+用例:
+
+.. code-block:: ring
+
+       x = 10
+       assert( x = 10)
+       assert( x = 100 ) 
+
+実行結果:
+
+.. code-block:: ring
+
+       Line 3 Assertion Failed!
+       In assert in file tests\assert.ring
diff --git a/docs/ja-jp/source/ex10.jpg b/docs/ja-jp/source/ex10.jpg
new file mode 100644 (file)
index 0000000..c7d34b4
Binary files /dev/null and b/docs/ja-jp/source/ex10.jpg differ
diff --git a/docs/ja-jp/source/ex11.jpg b/docs/ja-jp/source/ex11.jpg
new file mode 100644 (file)
index 0000000..bd10d2e
Binary files /dev/null and b/docs/ja-jp/source/ex11.jpg differ
diff --git a/docs/ja-jp/source/ex12.jpg b/docs/ja-jp/source/ex12.jpg
new file mode 100644 (file)
index 0000000..d5587de
Binary files /dev/null and b/docs/ja-jp/source/ex12.jpg differ
diff --git a/docs/ja-jp/source/ex12r.jpg b/docs/ja-jp/source/ex12r.jpg
new file mode 100644 (file)
index 0000000..d7da373
Binary files /dev/null and b/docs/ja-jp/source/ex12r.jpg differ
diff --git a/docs/ja-jp/source/ex13.jpg b/docs/ja-jp/source/ex13.jpg
new file mode 100644 (file)
index 0000000..5bfbacc
Binary files /dev/null and b/docs/ja-jp/source/ex13.jpg differ
diff --git a/docs/ja-jp/source/ex14.jpg b/docs/ja-jp/source/ex14.jpg
new file mode 100644 (file)
index 0000000..fa8d512
Binary files /dev/null and b/docs/ja-jp/source/ex14.jpg differ
diff --git a/docs/ja-jp/source/ex15.jpg b/docs/ja-jp/source/ex15.jpg
new file mode 100644 (file)
index 0000000..576bbe8
Binary files /dev/null and b/docs/ja-jp/source/ex15.jpg differ
diff --git a/docs/ja-jp/source/ex16.jpg b/docs/ja-jp/source/ex16.jpg
new file mode 100644 (file)
index 0000000..c2c5051
Binary files /dev/null and b/docs/ja-jp/source/ex16.jpg differ
diff --git a/docs/ja-jp/source/ex17.jpg b/docs/ja-jp/source/ex17.jpg
new file mode 100644 (file)
index 0000000..4dc5b73
Binary files /dev/null and b/docs/ja-jp/source/ex17.jpg differ
diff --git a/docs/ja-jp/source/ex18.jpg b/docs/ja-jp/source/ex18.jpg
new file mode 100644 (file)
index 0000000..3d92b66
Binary files /dev/null and b/docs/ja-jp/source/ex18.jpg differ
diff --git a/docs/ja-jp/source/ex19.jpg b/docs/ja-jp/source/ex19.jpg
new file mode 100644 (file)
index 0000000..702808c
Binary files /dev/null and b/docs/ja-jp/source/ex19.jpg differ
diff --git a/docs/ja-jp/source/ex1_basicshapes.png b/docs/ja-jp/source/ex1_basicshapes.png
new file mode 100644 (file)
index 0000000..8f4fe48
Binary files /dev/null and b/docs/ja-jp/source/ex1_basicshapes.png differ
diff --git a/docs/ja-jp/source/ex20.jpg b/docs/ja-jp/source/ex20.jpg
new file mode 100644 (file)
index 0000000..fb03f57
Binary files /dev/null and b/docs/ja-jp/source/ex20.jpg differ
diff --git a/docs/ja-jp/source/ex21.jpg b/docs/ja-jp/source/ex21.jpg
new file mode 100644 (file)
index 0000000..360d3f2
Binary files /dev/null and b/docs/ja-jp/source/ex21.jpg differ
diff --git a/docs/ja-jp/source/ex21_2.jpg b/docs/ja-jp/source/ex21_2.jpg
new file mode 100644 (file)
index 0000000..9c7cb82
Binary files /dev/null and b/docs/ja-jp/source/ex21_2.jpg differ
diff --git a/docs/ja-jp/source/ex22.jpg b/docs/ja-jp/source/ex22.jpg
new file mode 100644 (file)
index 0000000..d3f0e6f
Binary files /dev/null and b/docs/ja-jp/source/ex22.jpg differ
diff --git a/docs/ja-jp/source/ex23.jpg b/docs/ja-jp/source/ex23.jpg
new file mode 100644 (file)
index 0000000..0ca8c02
Binary files /dev/null and b/docs/ja-jp/source/ex23.jpg differ
diff --git a/docs/ja-jp/source/ex24.jpg b/docs/ja-jp/source/ex24.jpg
new file mode 100644 (file)
index 0000000..4ba5ad6
Binary files /dev/null and b/docs/ja-jp/source/ex24.jpg differ
diff --git a/docs/ja-jp/source/ex24_2.jpg b/docs/ja-jp/source/ex24_2.jpg
new file mode 100644 (file)
index 0000000..74377d8
Binary files /dev/null and b/docs/ja-jp/source/ex24_2.jpg differ
diff --git a/docs/ja-jp/source/ex25.jpg b/docs/ja-jp/source/ex25.jpg
new file mode 100644 (file)
index 0000000..3d9c4de
Binary files /dev/null and b/docs/ja-jp/source/ex25.jpg differ
diff --git a/docs/ja-jp/source/ex26.jpg b/docs/ja-jp/source/ex26.jpg
new file mode 100644 (file)
index 0000000..925901d
Binary files /dev/null and b/docs/ja-jp/source/ex26.jpg differ
diff --git a/docs/ja-jp/source/ex28.jpg b/docs/ja-jp/source/ex28.jpg
new file mode 100644 (file)
index 0000000..d4735e8
Binary files /dev/null and b/docs/ja-jp/source/ex28.jpg differ
diff --git a/docs/ja-jp/source/ex4.jpg b/docs/ja-jp/source/ex4.jpg
new file mode 100644 (file)
index 0000000..82ec53d
Binary files /dev/null and b/docs/ja-jp/source/ex4.jpg differ
diff --git a/docs/ja-jp/source/ex5.jpg b/docs/ja-jp/source/ex5.jpg
new file mode 100644 (file)
index 0000000..ff19ab6
Binary files /dev/null and b/docs/ja-jp/source/ex5.jpg differ
diff --git a/docs/ja-jp/source/ex6.jpg b/docs/ja-jp/source/ex6.jpg
new file mode 100644 (file)
index 0000000..ea52801
Binary files /dev/null and b/docs/ja-jp/source/ex6.jpg differ
diff --git a/docs/ja-jp/source/ex7.jpg b/docs/ja-jp/source/ex7.jpg
new file mode 100644 (file)
index 0000000..e34e60d
Binary files /dev/null and b/docs/ja-jp/source/ex7.jpg differ
diff --git a/docs/ja-jp/source/ex8.jpg b/docs/ja-jp/source/ex8.jpg
new file mode 100644 (file)
index 0000000..4ea8d7c
Binary files /dev/null and b/docs/ja-jp/source/ex8.jpg differ
diff --git a/docs/ja-jp/source/ex9.jpg b/docs/ja-jp/source/ex9.jpg
new file mode 100644 (file)
index 0000000..d7bbac8
Binary files /dev/null and b/docs/ja-jp/source/ex9.jpg differ
diff --git a/docs/ja-jp/source/extension.txt b/docs/ja-jp/source/extension.txt
new file mode 100644 (file)
index 0000000..721df2a
--- /dev/null
@@ -0,0 +1,719 @@
+.. index:: 
+       single: 拡張機能; はじめに
+
+==============================
+C/C++ による拡張機能の開発方法
+==============================
+
+.. note:: 現在、本章の説明だけでは拡張機能の開発は困難です。
+               Ring のソースコード (include, src, visualsrc, stdlib フォルダ)、および拡張機能のソースコード (android, extensions, libdepwin フォルダ) のコードリーディングを強く推奨します。
+               
+
+プログラミング言語 C / C++ で記述した関数を新たに追加することにより Ring 仮想計算機 (Ring VM) の機能を拡張できます。 Ring VM には C により記述された様々な関数が付属しており Ring の関数として呼び出せます。
+
+新しい関数を記述してから Ring VM のリビルドすることで Ring 言語の機能を拡張できます。
+また、共有ライブラリ (.dll / .so) ファイルを作成することで Ring VM をリビルドせずに機能の拡張ができます。
+
+Ring のソースコードには Ring VM へ新しいモジュールを追加するための二本のファイルが付属しています。
+
+.. index:: 
+       pair: 拡張機能; ring_ext.h
+
+ring_ext.h
+==========
+
+ファイル ring_ext.h にはビルド処理の間にモジュールの包含、または除外を変更できる定数があります。
+
+.. code-block:: C
+
+       #ifndef ringext_h
+       #define ringext_h
+       /* 定数 */
+       #define RING_VM_LISTFUNCS       1
+       #define RING_VM_REFMETA         1
+       #define RING_VM_MATH            1
+       #define RING_VM_FILE            1
+       #define RING_VM_OS              1
+       #define RING_VM_MYSQL           1
+       #define RING_VM_ODBC            1
+       #define RING_VM_OPENSSL         1
+       #define RING_VM_CURL            1
+       #define RING_VM_DLL             1
+       #endif
+
+
+.. index:: 
+       pair: 拡張機能; ring_ext.c
+
+ring_ext.c
+==========
+
+モジュールのスタートアップ関数を呼び出す前に、ファイル ring_ext.c は ring_ext.h で定義されている定数を確認します。
+
+モジュールは Ring VM へモジュール関数を登録する関数があります。
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       void ring_vm_extension ( RingState *pRingState )
+       {
+               /* リフレクションとメタプログラミング */
+               #if RING_VM_REFMETA
+                       ring_vm_refmeta_loadfunctions(pRingState);
+               #endif
+               /* リスト関数 */
+               #if RING_VM_LISTFUNCS
+                       ring_vm_listfuncs_loadfunctions(pRingState);
+               #endif
+               /* 算術 */
+               #if RING_VM_MATH
+                       ring_vm_math_loadfunctions(pRingState);
+               #endif
+               /* ファイル */
+               #if RING_VM_FILE
+                       ring_vm_file_loadfunctions(pRingState);
+               #endif
+               /* OS */
+               #if RING_VM_OS
+                       ring_vm_os_loadfunctions(pRingState);
+               #endif
+               /* MySQL */
+               #if RING_VM_MYSQL
+                       ring_vm_mysql_loadfunctions(pRingState);
+               #endif
+               /* ODBC */
+               #if RING_VM_ODBC
+                       ring_vm_odbc_loadfunctions(pRingState);
+               #endif
+               /* OPENSSL */
+               #if RING_VM_OPENSSL
+                       ring_vm_openssl_loadfunctions(pRingState);
+               #endif
+               /* CURL */
+               #if RING_VM_CURL
+                       ring_vm_curl_loadfunctions(pRingState);
+               #endif
+               /* DLL */
+               #if RING_VM_DLL
+                       ring_vm_dll_loadfunctions(pRingState);
+               #endif
+       }
+
+.. index:: 
+       pair: 拡張機能; モジュールの組織化
+
+モジュールの組織化
+===================
+
+モジュールごとに Ring ヘッダファイル (ring.h) をインクルードすることから始まります。
+このファイルには Ring VM の拡張機能で用いる Ring API があります。
+
+モジュールには Ring VM へモジュール関数を登録するための関数が付属しています。
+ring_vm_funcregister() 関数で登録を完了します。
+
+ring_vm_funcregister() 関数は二つの仮関数を扱います。
+一番目の仮引数は Ring プログラムが関数を呼び出すために使用される関数名です。
+二番目の仮引数は C プログラム側の関数ポインタです。
+
+この用例では、モジュール関数の登録用コードが ring_vmmath.c モジュールにあります。
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       void ring_vm_math_loadfunctions ( RingState *pRingState )
+       {
+               ring_vm_funcregister("sin",ring_vm_math_sin);
+               ring_vm_funcregister("cos",ring_vm_math_cos);
+               ring_vm_funcregister("tan",ring_vm_math_tan);
+               ring_vm_funcregister("asin",ring_vm_math_asin);
+               ring_vm_funcregister("acos",ring_vm_math_acos);
+               ring_vm_funcregister("atan",ring_vm_math_atan);
+               ring_vm_funcregister("atan2",ring_vm_math_atan2);
+               ring_vm_funcregister("sinh",ring_vm_math_sinh);
+               ring_vm_funcregister("cosh",ring_vm_math_cosh);
+               ring_vm_funcregister("tanh",ring_vm_math_tanh);
+               ring_vm_funcregister("exp",ring_vm_math_exp);
+               ring_vm_funcregister("log",ring_vm_math_log);
+               ring_vm_funcregister("log10",ring_vm_math_log10);
+               ring_vm_funcregister("ceil",ring_vm_math_ceil);
+               ring_vm_funcregister("floor",ring_vm_math_floor);
+               ring_vm_funcregister("fabs",ring_vm_math_fabs);
+               ring_vm_funcregister("pow",ring_vm_math_pow);
+               ring_vm_funcregister("sqrt",ring_vm_math_sqrt);
+               ring_vm_funcregister("unsigned",ring_vm_math_unsigned);
+               ring_vm_funcregister("decimals",ring_vm_math_decimals);
+               ring_vm_funcregister("murmur3hash",ring_vm_math_murmur3hash);
+       }
+
+.. tip:: ring_vm_math_loadfunctions() 関数は ring_vm_extension() 関数により、
+                呼び出されることを覚えておいてください (ring_ext.c ファイルで)。
+
+.. index:: 
+       pair: 拡張機能; 関数の構造
+
+関数の構造
+==========
+
+このような手順がモジュール関数ごとにあります。
+
+1 - 仮引数の個数を検査
+
+2 - 仮引数の型を検査
+
+3 - 仮引数の値を取得
+
+4 - コードの実行 / 関数の呼び出し
+
+5 - 返値を返す
+
+この構造は関数と非常に似ています (入力~処理~出力)。 
+ここでは Ring API の 1, 2, 3, および 5 の手順を使用しています。
+
+
+.. index:: 
+       pair: 拡張機能; 仮引数の個数を検査するには
+
+仮引数の個数を検査するには
+===========================
+
+RING_API_PARACOUNT マクロで仮引数の個数を検査します。
+
+RING_API_PARACOUNT は == または != 演算子により数値で比較します。
+
+
+用例:
+
+.. code-block:: C
+
+       if ( RING_API_PARACOUNT != 1 ) {
+               /* コード */
+       }
+
+       
+用例:
+
+.. code-block:: C
+
+       if ( RING_API_PARACOUNT == 1 ) {
+               /* コード */
+       }
+
+.. index:: 
+       pair: 拡張機能; エラーメッセージの表示
+
+エラーメッセージの表示
+=======================
+
+RING_API_ERROR() 関数はエラーメッセージを表示します。
+
+この関数はエラー、およびプログラム実行時に表示します。
+
+.. note:: この関数の動作は Ring コードで Try/Catch/Done ステートメントにより変更できますので 
+                 C コードでは、この関数の後に retrun を記述してください。
+                 
+
+文法:
+
+.. code-block:: C
+
+       RING_API_ERROR(const char *cErrorMsg);
+       
+
+Ring API には定義済みのエラーメッセージがあり、このように使うことができます。
+
+.. code-block:: C
+
+       #define RING_API_MISS1PARA "Bad parameters count, the function expect one parameter"
+       #define RING_API_MISS2PARA "Bad parameters count, the function expect two parameters"
+       #define RING_API_MISS3PARA "Bad parameters count, the function expect three parameters"
+       #define RING_API_MISS4PARA "Bad parameters count, the function expect four parameters"
+       #define RING_API_BADPARATYPE    "Bad parameter type!"
+       #define RING_API_BADPARACOUNT   "Bad parameters count!"
+       #define RING_API_BADPARARANGE   "Bad parameters value, error in range!"
+       #define RING_API_NOTPOINTER     "Error in parameter, not pointer!"
+       #define RING_API_NULLPOINTER    "Error in parameter, NULL pointer!"
+       #define RING_API_EMPTYLIST      "Bad parameter, empty list!"
+
+.. index:: 
+       pair: 拡張機能; 仮引数の型を検査するには
+
+仮引数の型を検査するには
+=========================
+
+この関数は仮引数の型を検査します。
+
+.. code-block:: C
+
+       int RING_API_ISNUMBER(int nParameterNumber);
+       int RING_API_ISSTRING(int nParameterNumber);
+       int RING_API_ISLIST(int nParameterNumber);
+       int RING_API_ISPOINTER(int nParameterNumber);
+
+これらの関数の実行結果は 1 (True) または 0 (False) です。
+
+.. index:: 
+       pair: 拡張機能; 仮引数の値を取得するには
+
+仮引数の値を取得するには
+=========================
+
+この関数は仮引数の値を取得します。
+
+.. code-block:: C
+
+       double RING_API_GETNUMBER(int nParameterNumber);
+       const char *RING_API_GETSTRING(int nParameterNumber);
+       int RING_API_GETSTRINGSIZE(int nParameterNumber);
+       List *RING_API_GETLIST(int nParameterNumber);
+       void *RING_API_GETCPOINTER(int nParameterNumber, const char *cPoinerType);
+       int RING_API_GETPOINTERTYPE(int nParameterNumber);
+
+       
+.. index:: 
+       pair: 拡張機能; 返値
+
+返値
+====
+
+この関数は関数の返値を取得します。
+
+.. code-block:: C
+
+       RING_API_RETNUMBER(double nValue);
+       RING_API_RETSTRING(const char *cString);
+       RING_API_RETSTRING2(const char *cString,int nStringSize);
+       RING_API_RETLIST(List *pList);
+       RING_API_RETCPOINTER(void *pValue,const char *cPointerType);
+       RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                       void (* pFreeFunc)(void *,void *))
+
+.. index:: 
+       pair: 拡張機能; 関数プロトタイプ
+
+
+関数プロトタイプ
+================
+
+Ring VM の拡張機能用の新しい関数を定義するには、このプロトタイプを使用します。
+
+.. code-block:: C
+
+       void my_function_name( void *pPointer );
+       
+または RING_FUNC() マクロを使えます。
+
+.. code-block:: C
+
+       RING_FUNC(my_function_name);
+
+       
+.. index:: 
+       pair: 拡張機能; Sin() 関数の実装
+
+Sin() 関数の実装
+================
+
+このコードは Ring API と C 関数 sin() による
+Sin() 関数の実装です。 
+
+
+.. code-block:: C
+
+       void ring_vm_math_sin ( void *pPointer )
+       {
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISNUMBER(1) ) {
+                       RING_API_RETNUMBER(sin(RING_API_GETNUMBER(1)));
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+
+.. index:: 
+       pair: 拡張機能; Fopen() および Fclose() の実装
+
+Fopen() および Fclose() の実装
+==============================
+
+このコードは Ring API と C 関数 fopen() による
+fopen() 関数の実装です。
+
+この関数は二つの仮引数を扱います。第一仮引数はファイル名を文字列で指定します。
+第二仮引数はモードを文字列で指定します。
+
+ファイル ring_vmfile.h はポインタ型などの定数として使用するものがあります。
+
+.. code-block:: C
+
+       #define RING_VM_POINTER_FILE    "file"
+       #define RING_VM_POINTER_FILEPOS "filepos"
+
+ring_vmfile.c における関数の実装です。
+
+.. code-block:: C
+
+       void ring_vm_file_fopen ( void *pPointer )
+       {
+               FILE *fp  ;
+               if ( RING_API_PARACOUNT != 2 ) {
+                       RING_API_ERROR(RING_API_MISS2PARA);
+                       return ;
+               }
+               if ( RING_API_ISSTRING(1) && RING_API_ISSTRING(2) ) {
+                       fp = fopen(RING_API_GETSTRING(1),RING_API_GETSTRING(2));
+                       RING_API_RETCPOINTER(fp,RING_VM_POINTER_FILE);
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+
+このコードは fclose() 関数の実装です。
+
+.. code-block:: C
+
+       void ring_vm_file_fclose ( void *pPointer )
+       {
+               FILE *fp  ;
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISPOINTER(1) ) {
+                       fp = (FILE *) RING_API_GETCPOINTER(1,RING_VM_POINTER_FILE) ;
+                       if ( fp != NULL ) {
+                               RING_API_RETNUMBER(fclose(fp));
+                               RING_API_SETNULLPOINTER(1);
+                       }
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+fopen() および fclose() から次の実装について学びました
+
+1 - RING_API_RETCPOINTER() 関数で C ポインタを返す方法
+
+2 - RING_API_ISPOINTER() 関数で仮引数がポインタの場合における検査方法
+
+3 - RING_API_GETCPOINTER() 関数で C ポインタ値の取得方法
+
+4 - RING_API_SETNULLPOINTER() 関数で C ポインタ変数 (Ring VM では) に NULL を設定する方法。
+
+.. index:: 
+       pair: 拡張機能; RING API - リスト関数
+
+Ring API - リスト関数
+=====================
+
+リストの新規作成とリスト項目操作用の Ring API リスト関数を学びます。
+
+.. code-block:: C
+
+       List * ring_list_new ( int nSize ) ;
+       void ring_list_newitem ( List *pList ) ;
+       Item * ring_list_getitem ( List *pList,int index ) ;
+       List * ring_list_delete ( List *pList ) ;
+       void ring_list_deleteitem ( List *pList,int index ) ;
+       void ring_list_print ( List *pList ) ;
+       int ring_list_gettype ( List *pList, int index ) ;
+       void ring_list_setint ( List *pList, int index ,int number ) ;
+       void ring_list_addint ( List *pList,int x ) ;
+       void ring_list_setpointer ( List *pList, int index ,void *pValue ) ;
+       void ring_list_addpointer ( List *pList,void *pValue ) ;
+       void ring_list_setfuncpointer ( List *pList, int index ,void (*pFunc)(void *) ) ;
+       void ring_list_addfuncpointer ( List *pList,void (*pFunc)(void *) ) ;
+       int ring_list_isfuncpointer ( List *pList, int index ) ;
+       void ring_list_setdouble ( List *pList, int index ,double number ) ;
+       void ring_list_adddouble ( List *pList,double x ) ;
+       void ring_list_setstring ( List *pList, int index ,const char *str ) ;
+       void ring_list_setstring2 ( List *pList, int index ,const char *str,int nStrSize ) ;
+       void ring_list_addstring ( List *pList,const char *str ) ;
+       void ring_list_addstring2 ( List *pList,const char *str,int nStrSize ) ;
+       List * ring_list_newlist ( List *pList ) ;
+       List * ring_list_getlist ( List *pList, int index ) ;
+       void ring_list_setlist ( List *pList, int index ) ;
+       void ring_list_setactiveitem ( List *pList, Items *pItems, int index ) ;
+       void ring_list_copy ( List *pNewList, List *pList ) ;
+       int ring_list_isnumber ( List *pList, int index ) ;
+       int ring_list_isstring ( List *pList, int index ) ;
+       int ring_list_islist ( List *pList, int index ) ;
+       int ring_list_ispointer ( List *pList, int index ) ;
+       void ring_list_deleteallitems ( List *pList ) ;
+       void ring_list_insertitem ( List *pList,int x ) ;
+       void ring_list_insertint ( List *pList,int nPos,int x ) ;
+       void ring_list_insertdouble ( List *pList,int nPos,double x ) ;
+       void ring_list_insertpointer ( List *pList,int nPos,void *pValue ) ;
+       void ring_list_insertstring ( List *pList,int nPos,const char *str ) ;
+       void ring_list_insertstring2 ( List *pList,int nPos,const char *str,int nStrSize ) ;
+       void ring_list_insertfuncpointer ( List *pList,int nPos,void (*pFunc)(void *) ) ;
+       List * ring_list_insertlist ( List *pList,int nPos ) ;
+       int ring_list_isiteminsidelist ( List *pList,Item *pItem ) ;
+       int ring_list_findstring ( List *pList,const char *str,int nColumn ) ;
+       int ring_list_finddouble ( List *pList,double nNum1,int nColumn ) ;
+       void ring_list_sortnum ( List *pList,int left,int right,int nColumn ) ;
+       void ring_list_sortstr ( List *pList,int left,int right,int nColumn ) ;
+       int ring_list_binarysearchnum ( List *pList,double nNum1,int nColumn ) ;
+       int ring_list_binarysearchstr ( List *pList,const char *cFind,int nColumn ) ;
+       void ring_list_swap ( List *pList,int x,int y ) ;
+       double ring_list_getdoublecolumn ( List *pList,int nIndex,int nColumn ) ;
+       char * ring_list_getstringcolumn ( List *pList,int nIndex,int nColumn ) ;
+       void ring_list_genarray ( List *pList ) ;
+       void ring_list_deletearray ( List *pList ) ;
+       void ring_list_genhashtable ( List *pList ) ;
+       void ring_list_genhashtable2 ( List *pList ) ;
+       void ring_list_refcopy ( List *pNewList, List *pList ) ;
+       void ring_list_clear ( List *pList ) ;
+       /* マクロ */
+       ring_list_isdouble(pList,index)
+       ring_list_isint(pList,index) 
+       ring_list_deletelastitem(x)
+       ring_list_gethashtable(x) 
+       ring_list_getint(pList,index)
+       ring_list_getpointer(pList,index)
+       ring_list_getfuncpointer(pList,index)
+       ring_list_callfuncpointer(pList,index,x)
+       ring_list_getdouble(pList,index) 
+       ring_list_getstring(pList,index) 
+       ring_list_getstringobject(pList,index) 
+       ring_list_getstringsize(pList,index)
+       ring_list_getsize(x) (x->nSize)
+
+.. index:: 
+       pair: 拡張機能; RING API - 文字列関数
+
+Ring API - 文字列関数
+=====================
+
+文字列の新規作成と文字列内容操作用の Ring API 文字列関数を学びます。
+
+.. code-block:: C
+
+       String * ring_string_new ( const char *str ) ;
+       String * ring_string_new2 ( const char *str,int nStrSize ) ;
+       String * ring_string_delete ( String *pString ) ;
+       int ring_string_size ( String *pString ) ;
+       void ring_string_set ( String *pString,const char *str ) ;
+       void ring_string_set2 ( String *pString,const char *str,int nStrSize ) ;
+       void ring_string_add ( String *pString,const char *str ) ;
+       void ring_string_add2 ( String *pString,const char *str,int nStrSize ) ;
+       void ring_string_print ( String *pString ) ;
+       void ring_string_setfromint ( String *pString,int x ) ;
+       char * ring_string_lower ( char *cStr ) ;
+       char * ring_string_upper ( char *cStr ) ;
+       char * ring_string_lower2 ( char *cStr,int nStrSize ) ;
+       char * ring_string_upper2 ( char *cStr,int nStrSize ) ;
+       char * ring_string_find ( char *cStr1,char *cStr2 ) ;
+       char * ring_string_find2 ( char *cStr1,int nStrSize1,char *cStr2,int nStrSize2 ) ;
+       /* マクロ */
+       ring_string_tolower(x)
+       ring_string_toupper(x)
+       ring_string_get(x)
+
+
+.. index:: 
+       pair: 拡張機能; MySQL_Columns() 関数の実装
+
+MySQL_Columns() 関数の実装
+=======================================
+
+このコードは MySQL_Columns() 関数の実装です。
+
+この関数はカラム情報を返します。
+
+.. code-block:: C
+
+       void ring_vm_mysql_columns ( void *pPointer )
+       {
+               MYSQL *con  ;
+               MYSQL_RES *result  ;
+               int nColumns,x  ;
+               MYSQL_ROW row  ;
+               MYSQL_FIELD *field  ;
+               List *pList, *pList2  ;
+               if ( RING_API_PARACOUNT != 1 ) {
+                       RING_API_ERROR(RING_API_MISS1PARA);
+                       return ;
+               }
+               if ( RING_API_ISPOINTER(1) ) {
+                       con = (MYSQL *) RING_API_GETCPOINTER(1,RING_VM_POINTER_MYSQL) ;
+                       if ( con == NULL ) {
+                               return ;
+                       }
+                       result = mysql_store_result(con);
+                       if ( result == NULL ) {
+                               RING_API_RETNUMBER(0);
+                               return ;
+                       }
+                       pList = RING_API_NEWLIST ;
+                       nColumns = mysql_num_fields(result);
+                       if ( row = mysql_fetch_row(result) ) {
+                               while ( field = mysql_fetch_field(result) ) {
+                                       pList2 = ring_list_newlist(pList);
+                                       ring_list_addstring(pList2,field->name);
+                                       ring_list_adddouble(pList2,field->length);
+                                       ring_list_adddouble(pList2,field->type);
+                                       ring_list_adddouble(pList2,field->flags);
+                               }
+                       }
+                       mysql_free_result(result);
+                       RING_API_RETLIST(pList);
+               } else {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+               }
+       }
+
+
+List はリスト型であり、以前の関数でリスト型のポインタ
+\*pList, \*pList2; の二つ使用して宣言されています。
+
+       
+.. note:: この関数は RING_API_NEWLIST で新しいリストを作成するために使用しますが
+                 ring_list_new() の代わりに一時作業用のリストを作成します。関数のスコープはメモリと関連付けられています。
+                 このように関数からリストを返せます。また Ring コードにより保存された格納済みの変数ならば、
+                 リストの削除を行いません。それ以外ならば Ring VM により自動削除されます。
+                 
+
+リストは部分リストを有することができ、部分リストは ring_list_newlist() 関数で作成します。
+
+ring_list_addstring() 関数は部分リストへ文字列の項目を追加します。
+
+ring_list_adddouble() 関数は部分リストへ数値の項目を追加します。 
+
+.. note:: Ring VM 拡張機能の関数から返されたリストにある数値の項目は倍精度実数型 (double) であるため 
+          ring_list_adddouble() 関数でリストへ追加してください。
+                 
+
+RING_API_RETLIST() 関数は拡張機能の関数からリストを返します。
+
+.. index:: 
+       pair: 拡張機能; 共有ライブラリ
+
+動的 / 共有ライブラリ (DLL/So/Dylib) および LoadLib() 関数
+==============================================================
+
+新しい関数を C/C++ と Ring API で記述後に Ring VM のリビルドをするのではなく、 DLL /So / Dylib
+ファイルの作成を行い、このファイルを実行時に LoadLib() 関数へ指定することで動的に関数を使えます。
+
+
+C による動的ライブラリの用例
+
+.. code-block:: C
+
+       #include "ring.h"
+
+       RING_FUNC(ring_ringlib_dlfunc)
+       {
+               printf("Message from dlfunc");
+       }
+
+       RING_API void ringlib_init(RingState *pRingState)
+       {
+               ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc); 
+       }
+
+考えかたとしては ringlib_init() 関数を作成することであり、この関数は生成された DLL ファイルを
+LoadLib() 関数で読み込んで使用する時に Ring VM から呼び出されます。
+
+ringlib_init() 関数内でモジュール関数の登録、またはモジュール関数を全て登録処理するための関数を呼び出せます。
+
+この Ring コードは実行時に DLL ライブラリの用法です。
+
+.. code-block:: ring
+
+       See "Dynamic DLL" + NL
+       LoadLib("ringlib.dll")
+       dlfunc()
+
+実行結果:
+
+.. code-block:: ring
+
+       Dynamic DLL
+       Message from dlfunc
+
+.. index:: 
+       pair: 拡張機能; Using RING_API_RETMANAGEDCPOINTER() の用法
+
+
+RING_API_RETMANAGEDCPOINTER() の用法
+====================================
+
+RING_API_RETMANAGEDCPOINTER() は C/C++ 言語で記述された Ring 拡張機能でマネージドポインタを Ring へ返します。このポインタは参照カウンタを使用している Ring VM により制御可能です。
+
+これは RingQt の QPixMap オブジェクトなどのアンマネージドのリソース解放用コードを書く必要性を回避するには重要です。
+
+また、コード生成器は必要に応じて拡張機能を RING_API_RETMANAGEDCPOINTER() に対応したものへ自動更新します。
+
+文法:
+
+.. code-block:: ring
+
+               RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                               void (* pFreeFunc)(void *,void *))
+
+用例:
+
+この用例は ring_qt.cpp の QPixMap クラスにある Scaled() メソッドからの引用です。
+
+.. code-block:: none
+
+       RING_FUNC(ring_QPixmap_scaled)
+       {
+               QPixmap *pObject ;
+               if ( RING_API_PARACOUNT != 5 ) {
+                       RING_API_ERROR(RING_API_BADPARACOUNT);
+                       return ;
+               }
+               RING_API_IGNORECPOINTERTYPE ;
+               if ( ! RING_API_ISPOINTER(1) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               pObject = (QPixmap *) RING_API_GETCPOINTER(1,"QPixmap");
+               if ( ! RING_API_ISNUMBER(2) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(3) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(4) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               if ( ! RING_API_ISNUMBER(5) ) {
+                       RING_API_ERROR(RING_API_BADPARATYPE);
+                       return ;
+               }
+               {
+                       QPixmap *pValue ; 
+                       pValue = new QPixmap() ;
+                       *pValue = pObject->scaled( (int ) RING_API_GETNUMBER(2),
+                                (int ) RING_API_GETNUMBER(3),
+                                (Qt::AspectRatioMode )  (int) RING_API_GETNUMBER(4),
+                                (Qt::TransformationMode )  (int) RING_API_GETNUMBER(5));
+                       RING_API_RETMANAGEDCPOINTER(pValue,"QPixmap",ring_QPixmap_freefunc);
+               }
+       }
+
+この関数は二種類の仮引数 (Ring のステートと確保されたメモリのポインタ) の指定によりメモリを解放します。
+
+用例:
+
+.. code-block:: none
+
+       void ring_QPixmap_freefunc(void *pState,void *pPointer)
+       {
+               QPixmap *pObject ; 
+               pObject = (QPixmap *) pPointer;
+               delete pObject ;
+       }
+
diff --git a/docs/ja-jp/source/extension_tutorial.txt b/docs/ja-jp/source/extension_tutorial.txt
new file mode 100644 (file)
index 0000000..67d7ce5
--- /dev/null
@@ -0,0 +1,1504 @@
+.. index:: 
+       single: チュートリアル: C/C++ による拡張機能の開発方法; チュートリアル: C/C++ による拡張機能の開発方法
+
+==============================================
+チュートリアル: C/C++ による拡張機能の開発方法
+==============================================
+
+この章では Ring プログラムで C コードを用いるための簡単な用例を学びます。
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; Hello World
+
+Hello World
+===========
+
+サンプル : ring/extensions/tutorial/helloworld
+
+ファイル mylib.c の内容
+
+.. code-block:: c
+
+       #include "ring.h"
+
+       #include "stdlib.h"
+
+       RING_FUNC(ring_myfunction)
+       {       
+               printf("Hello, World!");
+       }
+
+       RING_API void ringlib_init(RingState *pRingState)
+       {
+               ring_vm_funcregister("myfunction",ring_myfunction);
+       }
+
+ソースコードを参照すると、最初の行で Ring API の定義を記した ring.h ファイルをインクルードしています。
+
+新規関数の定義に RING_FUNC マクロを使います。通常の C 関数とは異なる定義であることを識別しやすくするために関数定義の接頭辞にring_を付けるのは良い考えです。 
+
+Ring VM で拡張機能が読み込まれるときに呼び出される関数 ringlib_init() があります。
+
+この関数では Ring VM へ新規関数を登録するために ring_vm_funcregister() を使用します。
+
+拡張機能をビルドするには :
+
+buildvc.bat
+
+buildvc.bat ファイルの内容には Visual C/C++ で拡張機能をビルドするためのコマンドが記述されています
+
+
+.. code-block:: none
+
+       cls
+       call ../../../src/locatevc.bat
+       cl /c /DEBUG mylib.c -I"..\..\..\include"
+       link /DEBUG mylib.obj  ..\..\..\lib\ring.lib /DLL /OUT:mylib.dll /SUBSYSTEM:CONSOLE,"5.01" 
+       del mylib.obj
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       loadlib("mylib.dll")
+
+       ? "Calling a C Function"
+       myfunction()
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; 異動作環境間での機能拡張のビルド
+
+異動作環境間での機能拡張のビルド
+================================
+
+サンプル : ring/extensions/tutorial/helloworld2
+
+この拡張機能は前述のものですが、 Windows, Linux および macOS に対応させます。
+
+このファイルを使用します
+
+.. code-block:: none
+
+       buildvc.bat
+       buildgcc.sh
+       buildclang.sh
+
+Windows では buildvc.bat を、 Linux では buildgcc.sh および macOS では buildclang.sh でビルドします。
+
+ファイル buildgcc.sh には下記の内容が記述されています
+
+.. code-block:: none
+
+       gcc -c -fpic mylib.c -I $PWD/../../../include 
+       gcc -shared -o libmylib.so mylib.o -L $PWD/../../../lib -lring
+       sudo cp libmylib.so /usr/lib
+       sudo cp libmylib.so /usr/lib64
+
+ファイル buildclang.sh の内容
+
+.. code-block:: none
+
+       clang -c -fpic mylib.c -I $PWD/../../../include
+       clang -dynamiclib -o libmylib.dylib mylib.o  -L $PWD/../../../lib  -lring
+       cp libmylib.dylib /usr/local/lib
+
+動作環境別にライブラリの読み込み対象を変更するために mylib.ring から LoadLib() 関数を呼び出します。
+
+mylib.ringのコード内容は
+
+.. code-block:: ring
+
+       if iswindows()
+               LoadLib("mylib.dll")
+       but ismacosx()
+               LoadLib("libmylib.dylib")
+       else
+               LoadLib("libmylib.so")
+       ok
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; 二数値の合計
+
+二数値の合計
+============
+
+サンプル : ring/extensions/tutorial/sumtwonumbers
+
+この拡張機能では二数値を合計する C 関数の作成方法を学びます。
+
+これは Hello World 2 拡張機能の更新版です : ring/extensions/tutorial/helloworld2 フォルダ
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_sumtwonumbers)
+       {
+               double nNum1,nNum2,nSum;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! (RING_API_ISNUMBER(1) && RING_API_ISNUMBER(2)) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // 数値の総和
+                       nNum1 = RING_API_GETNUMBER(1);
+                       nNum2 = RING_API_GETNUMBER(2);
+                       nSum  = nNum1 + nNum2 ;
+               // 処理結果を返します
+                       RING_API_RETNUMBER(nSum);
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("sumtwonumbers",ring_sumtwonumbers);
+
+前述コードは理解しやすく、エラーの確認が容易になるように記述してあります。
+
+略記もできます
+
+.. code-block:: c
+
+               RING_API_RETNUMBER(RING_API_GETNUMBER(1) + RING_API_GETNUMBER(2));
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; Say Hello
+
+Say Hello
+=========
+
+サンプル : ring/extensions/tutorial/sayhello
+
+この拡張機能では文字列として名前を取得してから say hello を表示する C 関数の作成方法を学びます。
+
+これは sumtwonumbers 拡張機能の更新版です : ring/extensions/tutorial/sumtwonumbers フォルダ
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_sayhello)
+       {
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! RING_API_ISSTRING(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               printf("Hello %s\n",RING_API_GETSTRING(1));
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("sayhello",ring_sayhello);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; 数値リストの総和
+
+数値リストの総和
+================
+
+サンプル : ring/extensions/tutorial/sumlist
+
+この拡張機能では数値リストの総和を行う C 関数の作成方法を学びます。
+
+これは sayhello 拡張機能の更新版です : ring/extensions/tutorial/sayhello フォルダ
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_sumlist)
+       {
+               List *pList;
+               int x,nSum;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! RING_API_ISLIST(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // 数値リストの総和
+                       nSum = 0;
+                       pList = RING_API_GETLIST(1);
+                       for(x=1 ; x <= ring_list_getsize(pList) ; x++) {
+                               if ( ring_list_isdouble(pList,x) ) {
+                                       nSum += (int) ring_list_getdouble(pList,x) ;
+                               }
+                       }
+               // 処理結果を返します 
+                       RING_API_RETNUMBER(nSum);
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("sumlist",ring_sumlist);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; リスト項目の増分
+
+リスト項目の増分
+================
+
+サンプル : ring/extensions/tutorial/incrementlist
+
+この拡張機能ではリスト項目の増分を行う C 関数の作成方法を学びます。
+
+これは sumlist 拡張機能の更新版です : ring/extensions/tutorial/sumlist フォルダ
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_inclist)
+       {
+               List *pList;
+               int x,nSum;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // リスト項目の増分
+                       nSum = 0;
+                       pList = RING_API_GETLIST(1);
+                       for(x=1 ; x <= ring_list_getsize(pList) ; x++) {
+                               if ( ring_list_isdouble(pList,x) ) {
+                                       ring_list_setdouble(pList,x,
+                                               ring_list_getdouble(pList,x)+
+                                               RING_API_GETNUMBER(2)) ;
+                               }       
+                       }
+               // 処理結果を返します
+                       RING_API_RETLIST(pList);
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("inclist",ring_inclist);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: ring
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; リスト項目の篩い分け
+
+リスト項目の篩い分け
+====================
+
+サンプル : ring/extensions/tutorial/filterlist
+
+この拡張機能ではリスト項目を篩い分ける C 関数の作成方法を学びます。
+
+これは incrementlist 拡張機能の更新版です : ring/extensions/tutorial/incrementlist フォルダ
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_filterlist)
+       {
+               List *pList;
+               int x;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // リスト項目の篩い分け
+                       pList = RING_API_GETLIST(1);
+                       for(x = ring_list_getsize(pList) ; x >= 1 ; x--) 
+                               if ( ring_list_isdouble(pList,x) ) 
+                                       if ( ! (ring_list_getdouble(pList,x) >
+                                                        RING_API_GETNUMBER(2)) )
+                                               ring_list_deleteitem(pList,x) ;
+               // 処理結果を返します
+                       RING_API_RETLIST(pList);
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("filterlist",ring_filterlist);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; リスト項目の複製
+
+リスト項目の複製
+================
+
+サンプル : ring/extensions/tutorial/replicatelist
+
+この拡張機能ではリストへ複数の項目を追加する C 関数の作成方法を学びます。
+
+これは filterlist 拡張機能の更新版です : ring/extensions/tutorial/filterlist フォルダ
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_replicatelist)
+       {
+               List *pList;
+               int x,y,nTimes,nSize;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // リスト項目の複製
+                       pList = RING_API_GETLIST(1);
+                       nSize = ring_list_getsize(pList);
+                       nTimes = (int) RING_API_GETNUMBER(2);
+                       if (nTimes < 1) {
+                               RING_API_ERROR("Error: The second parameter must be >= 1 \n");
+                               return;
+                       }
+                       for(x = 1 ; x <= nTimes ; x++) 
+                               for(y = 1 ; y <= nSize ; y++) 
+                                       if ( ring_list_isdouble(pList,y) ) 
+                                               ring_list_adddouble(pList,
+                                                       ring_list_getdouble(pList,y));
+               // 処理結果を返します
+                       RING_API_RETLIST(pList);
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("replicatelist",ring_replicatelist);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; リストの生成
+
+リストの生成
+============
+
+サンプル : ring/extensions/tutorial/generatelist
+
+この拡張機能ではリストの新規作成とリストへ項目を追加する C 関数の作成方法を学びます。
+
+これは replicatelist 拡張機能の更新版です : ring/extensions/tutorial/replicatelist フォルダ
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_generatelist)
+       {
+               List *pList;
+               int x,nSize;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! RING_API_ISNUMBER(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // リストを作成します
+                       pList = RING_API_NEWLIST;
+               // リスト項目の生成
+                       nSize = (int) RING_API_GETNUMBER(1);
+                       if (nSize < 1) {
+                               RING_API_ERROR("Error: The list size must be >= 1 \n");
+                               return;
+                       }
+                       for(x = 1 ; x <= nSize ; x++) 
+                               ring_list_adddouble(pList,(double) x);
+               // 処理結果を返します
+                       RING_API_RETLIST(pList);
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("generatelist",ring_generatelist);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; リストの表示
+
+リストの表示
+============
+
+サンプル : ring/extensions/tutorial/displaylist
+
+この拡張機能では入れ子リストも対象としたリストの全項目を表示する C 関数の作成方法を学びます。
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       void mylib_displaylist(List *pList);
+
+       RING_FUNC(ring_displaylist)
+       {
+               List *pList;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 1) {
+                               RING_API_ERROR(RING_API_MISS1PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! RING_API_ISLIST(1) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // リストの取得
+                       pList = RING_API_GETLIST(1);
+               // 入れ子リストも対象としたリスト項目の表示
+                       mylib_displaylist(pList);
+       }
+
+       void mylib_displaylist(List *pList) {
+               int x;
+               for (x=1; x <= ring_list_getsize(pList); x++) {
+                       if ( ring_list_isdouble(pList,x) ) {
+                               printf("Number : %f \n", ring_list_getdouble(pList,x) ) ;
+                       } else if ( ring_list_isstring(pList,x) ) {
+                               printf("String : %s \n", ring_list_getstring(pList,x) ) ;
+                       } else if ( ring_list_islist(pList,x) ) {
+                               printf("Sub List..\n");
+                               mylib_displaylist( ring_list_getlist(pList,x) );                
+                       }
+               }
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("displaylist",ring_displaylist);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; テーブルの更新
+
+テーブルの更新
+==============
+
+サンプル : ring/extensions/tutorial/updatetable
+
+この拡張機能では行列から構成されるテーブルの更新を行う C 関数の作成方法を学びます。
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_updatetable)
+       {
+               List *pList, *pRow;
+               int nRow,nCol;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! ( RING_API_ISLIST(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // リストの取得 (テーブル表記)
+                       pList = RING_API_GETLIST(1);
+               // テーブルの行列更新
+               for (nRow = 1 ; nRow <= ring_list_getsize(pList) ; nRow++ ) {
+                       if ( ring_list_islist(pList,nRow) ) {
+                       pRow = ring_list_getlist(pList,nRow);
+                       for (nCol = 1 ; nCol <= ring_list_getsize(pRow) ; nCol++ ) {
+                               if ( ring_list_isdouble(pRow,nCol) ) {
+                                       ring_list_setdouble(pRow,nCol,RING_API_GETNUMBER(2));
+                               } else {
+                                       RING_API_ERROR("Error : We expect numbers!\n");
+                                       return ;
+                               }
+                       }
+                       } else {
+                               RING_API_ERROR("Error : The parameter is not a table! \n");
+                               return ;
+                       }
+               }
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("updatetable",ring_updatetable);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+       ? ""
+
+       ? "Create List (2,2)"
+       aList = newList(2,2)
+       ? "Update the list using C code - set all cells to 10"
+       UpdateTable(aList,10)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       Create List (2,2)
+       Update the list using C code - set all cells to 10
+       aList[1][1] : 10
+       aList[1][2] : 10
+       aList[2][1] : 10
+       aList[2][2] : 10
+
+.. index:: 
+       pair: チュートリアル: C/C++ による拡張機能の開発方法; テーブルの作成
+
+テーブルの作成
+==============
+
+サンプル : ring/extensions/tutorial/createtable
+
+この拡張機能では行列から構成されるテーブルの生成を行う C 関数の作成方法を学びます。
+
+ファイル mylib.c を変更します
+
+.. code-block:: c
+
+       RING_FUNC(ring_createtable)
+       {
+               List *pList, *pRow;
+               int x,y,nRows,nCols;
+               // 引数の個数を検査します
+                       if (RING_API_PARACOUNT != 2) {
+                               RING_API_ERROR(RING_API_MISS2PARA);
+                               return;
+                       }
+               // 引数の型を検査します
+                       if ( ! ( RING_API_ISNUMBER(1) && RING_API_ISNUMBER(2) ) ) {
+                               RING_API_ERROR(RING_API_BADPARATYPE);
+                               return;
+                       }
+               // リストを作成します
+                       pList = RING_API_NEWLIST;
+               // テーブルの項目を作成します
+                       nRows = (int) RING_API_GETNUMBER(1);
+                       nCols = (int) RING_API_GETNUMBER(2);
+                       if ( (nRows < 1) || (nCols < 1) ) {
+                       RING_API_ERROR("Error: The table rows and columns must be >= 1 \n");
+                       return;
+                       }
+                       for(x = 1 ; x <= nRows ; x++) {
+                               pRow = ring_list_newlist(pList);
+                               for(y = 1 ; y <= nCols ; y++) 
+                                       ring_list_adddouble(pRow,0.0);
+                       }
+               // 処理結果を返します
+                       RING_API_RETLIST(pList);
+       }
+
+関数を新規登録します
+
+.. code-block:: c
+
+       ring_vm_funcregister("createtable",ring_createtable);
+
+ファイル test.ring の内容
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       ? "Loading Library"
+       load "mylib.ring"
+
+       ? "Calling a C Function"
+       myfunction()
+
+       ? "Sum Two Numbers (3,5)"
+       ? SumTwoNumbers(3,5)
+
+       ? "Say Hello"
+       SayHello("Mahmoud")
+
+       ? "Sum List contains numbers from 1 to 10"
+       aList = 1:10
+       ? SumList(aList)
+
+       ? "Increment List Items"
+       ? inclist(aList,10)
+
+       ? "Filter List Items (Items > 15)"
+       ? filterlist(aList,15)
+
+       aList = 1:3
+       ? "Replicate list (1:3) three times then print the items (We expect 12 items)"
+       ? replicatelist(aList,3)
+
+       ? "Create list contains 5 items using C code"
+       aList = GenerateList(5)
+       ? aList
+
+       ? "Create List (3,2)"
+       aList = newList(3,2)
+       aList[1][1] = "R 1 C 1"
+       aList[1][2] = "R 1 C 2"
+       aList[2][1] = "R 2 C 1"
+       aList[2][2] = "R 2 C 2"
+       aList[3][1] = "R 3 C 1"
+       aList[3][2] = "R 3 C 2"
+       ? "Print the List using Ring"
+       ? aList
+       ? "Print the List by calling C Code"
+       displayList(aList)
+       ? ""
+
+       ? "Create List (2,2)"
+       aList = newList(2,2)
+       ? "Update the list using C code - set all cells to 10"
+       UpdateTable(aList,10)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+       ? ""
+
+       ? "Create List (3,3) using C code"
+       aList = CreateTable(3,3)
+       ? "aList[1][1] : " + aList[1][1]
+       ? "aList[1][2] : " + aList[1][2]
+       ? "aList[1][3] : " + aList[1][3]
+       ? "aList[2][1] : " + aList[2][1]
+       ? "aList[2][2] : " + aList[2][2]
+       ? "aList[2][3] : " + aList[2][3]
+       ? "aList[3][1] : " + aList[3][1]
+       ? "aList[3][2] : " + aList[3][2]
+       ? "aList[3][3] : " + aList[3][3]
+
+関数のテスト
+
+.. code-block:: none
+
+       ring test.ring
+
+実行結果
+
+.. code-block:: none
+
+       Loading Library
+       Calling a C Function
+       Hello, World!
+       Sum Two Numbers (3,5)
+       8
+       Say Hello
+       Hello Mahmoud
+       Sum List contains numbers from 1 to 10
+       55
+       Increment List Items
+       11
+       12
+       13
+       14
+       15
+       16
+       17
+       18
+       19
+       20
+
+
+       Filter List Items (Items > 15)
+       16
+       17
+       18
+       19
+       20
+
+       Replicate list (1:3) three times then print the items (We expect 12 items)
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+       1
+       2
+       3
+
+       Create list contains 5 items using C code
+       1
+       2
+       3
+       4
+       5
+
+       Create List (3,2)
+       Print the List using Ring
+       R 1 C 1
+       R 1 C 2
+       R 2 C 1
+       R 2 C 2
+       R 3 C 1
+       R 3 C 2
+
+       Print the List by calling C Code
+       Sub List..
+       String : R 1 C 1
+       String : R 1 C 2
+       Sub List..
+       String : R 2 C 1
+       String : R 2 C 2
+       Sub List..
+       String : R 3 C 1
+       String : R 3 C 2
+
+       Create List (2,2)
+       Update the list using C code - set all cells to 10
+       aList[1][1] : 10
+       aList[1][2] : 10
+       aList[2][1] : 10
+       aList[2][2] : 10
+
+       Create List (3,3) using C code
+       aList[1][1] : 0
+       aList[1][2] : 0
+       aList[1][3] : 0
+       aList[2][1] : 0
+       aList[2][2] : 0
+       aList[2][3] : 0
+       aList[3][1] : 0
+       aList[3][2] : 0
+       aList[3][3] : 0
diff --git a/docs/ja-jp/source/faq.txt b/docs/ja-jp/source/faq.txt
new file mode 100644 (file)
index 0000000..9a20460
--- /dev/null
@@ -0,0 +1,2119 @@
+.. index::
+       single: よくある質問と回答; はじめに
+
+========================
+よくある質問と回答 (FAQ)
+========================
+
+
+.. index::
+       pair: よくある質問と回答; 第三のプログラミング言語 (YAPL) は必要か?
+
+
+第三のプログラミング言語 (YAPL) は必要か?
+==========================================
+
+プログラミング言語 Supernova では「I want window and the window title is hello world.」と入力すると
+“Hello, World!” のウィンドウタイトルで GUI ウィンドウを作成できます。
+
+つまり、自然言語コードにより「英語のように制限なくプログラミングで人間の言語能力を発揮できる」ことを発見しましたが、
+実現には新しいプログラミング言語が必要です。
+
+(1) 汎用性
+
+(2) 実用性
+
+(3) 非常に手軽な方法で自然言語プログラムの作成ができます。
+
+使いやすく、生産性を最大限まで押し上げることができるシステムを享受できます。
+
+目的を達成する最良の方法として Ring を作成しました。
+
+Supernova はアイディアの検証であり、どのような利点と欠点があるかについての見識を得るために役に立ちました。
+新しいアイディアの検証後に実用的なプログラミング言語を提供しています。
+Supernova の後に Ring があります。 ABC の後に Python が存在するのと同じ物語です。
+Python は ABC の問題を回避していますが ABC の利点をもたらします。
+Ring は Ruby と Ruby on Rails (ROR) の伝説を学んでいます。
+プログラミング言語の実力は、汎用プログラミング言語の直接的な用法による優れたフレームワークに最も現れます。
+また Ring には明確な目的と動機である「次世代版 Programming Without Coding Technology (PWCT) ソフトウェアの開発」があり、
+C 言語で Unix オペレーティングシステムが設計されたことも学んでいます。
+言い換えれば、各々の設計判断で決定する目標があります。
+
+さて、質問です。計算機プログラミングの概念に関する知識を持たずに、非常に強力なソフトウェアを製作できますか? 科学的な答えは「ビジュアル・プログラミング」と「自然言語プログラミング」です。
+実際には、ほかに問題をもたらすことなく、パラダイムを切り替えることはありません。
+
+Ring (コンパイラ + 仮想計算機) の設計と開発、および C コードの生成では、
+ビジュアル・プログラミング言語「Programming Without Coding Technology (PWCT)」を 100% 使用しています (一行たりとも手作業でのコーディングはしていません)。
+
+Programming Without Coding Technology (PWCT) の利点は?
+
+(1) 高速化。
+
+(2) シンタックスエラーとは無縁となります。
+
+(3) 高水準の抽象化となるためコードの理解と管理は容易になります。
+
+(4) コードの記述はすべて管理できるため致命的な欠点はなくなります。
+
+上述のアイディアへの対応、パラダイム切り替え時に発生する問題の解決、強力なビジュアル・プログラミングツールの開発のための言語設計 (Qt対応などユーザインタフェースの作成機能を最重要視)、未来のコード不要プログラミング (自然言語の使用) 対応のための設計、実用的手法による自然言語プログラミングの提供、多種多様な方法での問題解決、および画期的かつ問題解決方法に関するアイディアの支援。
+
+そして、C, C++, C#, Lua, PHP, Python, Ruby, Harbour, Basic と Supernova などのプログラミング言語の豊富な経験とビジュアル・プログラミング (使用経験十年以上)、および自然言語プログラミング (使用経験五年以上) の長期にわたる研究の集大成として、現役プログラマの認識へ変革をもたらし実用プログラミング言語の新天地と成るべく Ring を設計・開発しました。
+
+プログラミング言語もそうですが、ソフトウェアの分野・用途を問わず、プログラマ、または開発者は意見や批評をする自由があります。 Ring も例外ではなく、ドキュメントの練度・整備不足による誤解、あるいはプログラマによく知られているがために背景にあるアイディアを見落してしまい、新規性がないと評価・判断を誤り、誤解されてしまう各種機能があります。
+
+設計段階から実装段階へ移行後に、新たに自然言語インタフェースの実装を行ってから、
+ソフトウェアを言葉で表現することにより、プログラミングを開始します (筆者としては、アイジャル・メソッドは自由であり、
+移行段階や移行時期についての決定は行いません)。
+
+Ring は新興プログラミング言語であるため、選択肢は三つあります:
+
+(1) 今は気にしません。
+
+(2) Ring の将来について考え、プログラミング言語に関する考えを理解して貢献したいのでしたら、ご支援をお願いします。
+
+(3) ご期待に添えず申し訳ございません。また数年後の使用再開をお待ちしております。
+
+まとめ
+------
+
+* Programming Without Coding Technology (PWCT) 2.0 の完成後は Ring で高品質かつ大規模ソフトウェアを開発できるようになります。
+
+* 宣言型と自然言語パラダイムを段階的に押し進めていきます。
+
+* 次の公開版では、ネットワーク・プログラミングと平行性のために、新しいパラダイムを提供する計画があります。去年、簡易試作品で新しいパラダイムを検証しました。なお、将来の公開版で Ring と統合する予定です。
+
+
+.. index::
+       pair: よくある質問と回答; なぜ弱い型付けを採用したのですか?
+
+なぜ弱い型付けを採用したのですか?
+==================================
+
+これは最初の目標で重要なことです。
+高速化と違和感の排除になるからです。
+最初の規則: 最初のデータ型は最後の結果に影響します。
+例えば \"Print : \" + 5 を入力すると、最初に文字列の 5 が表示された後に 5 は文字列へ変換されます。
+そして 5 + \"10\" と入力すると最初に数値の \"10\" が表示された後に \"10\" は 10 へ変換されます。
+これは同じ演算子を使用して数値と文字列との間で、すばやく変換するのに大いに役に立ちます。
+変換を防ぎたい場合は (変換を防ぐコードを記述します)、コードの記述量がより少ない (さらに削除可能) ことに気付くと思います。
+
+弱い型付け = 自動変換と *自動処理* は *優れたもの* であり、
+正しく使用されている場合は *手動処理* より優れています。
+
+.. index::
+       pair: よくある質問と回答; Lisp や Smalltalk よりも Ring を選ぶ利点は?
+
+Lisp や Smalltalk よりも Ring を選ぶ利点は?
+============================================
+
+Smalltalk と Lisp は、すばらしいプログラミング言語あり、背景にある様々な概念を気に入っています。
+しかし、問題に基づいて適切なプログラミング言語を選択した後であれば、問題を定義できると確信しています。
+筆者には解決したい問題があり、この問題において、前述のすばらしいプログラミング言語は理想的ではなかったので Ring を設計しました。
+
+新しいプログラミング言語を設計するとき、過去から学べますが、
+将来を見据えて未来へ向かって進まなくてダメなのです。おそらく、
+読者は自然言語プログラミングの知識に関して、古典的知識に基づいていることは筆者も同意しますが、
+別技法の実践により、これを実務に取り入れることができることを確認しています。
+自然言語に関して読者が誤解していることは *文脈依存* です。
+つまり、アイディアの表現方法に関して色々と考えることで使用できるようになります。
+
+用例 : I want window contains 3 buttons.
+
+一文で四つのオブジェクト (ウィンドウと三つのボタン) の作成を行い、ウィンドウへボタンを追加しました。
+このような様々な物事を取り入れるのが、自然言語プログラミングの考えかたです。
+
+.. index::
+       pair: よくある質問と回答; ネイティブ C や C++ よりも Ring を選ぶ利点は?
+
+ネイティブ C や C++ よりも Ring を選ぶ利点は?
+==================================================
+
+Ring 言語では、多種多様なプログラミングパラダイムをまとめて扱うことができます。
+
+(1) 言語構成要素では、類似の概念に関して類似のシンタックスを使用するため、あるプログラミングパラダイムから別のプログラミングパラダイムへの移行は容易です。
+
+(2) パラダイムは相互作用のために提供されており、ソフトウェアでは異なる階層で併用されます。
+       例えば、ゲームエンジンの作成はオブジェクト指向プログラミングで、
+       ゲームのコードは宣言型プログラミング、または自然言語プログラミングで記述を行い、
+       シーンの背後では宣言型、または自然言語のコードはオブジェクト指向クラスを使えます。
+
+(3) Ring は C/C++ よりも生産性が高く、違和感がありません。
+
+(4) Ring は、動的プログラミング言語です。実行中にコードの生成と実行ができます。 Ring は動的型付け言語であり、柔軟性のために弱い型付けを採用しています。
+
+(5) ガベージコレクターは、世代間 (エスケープ解析) および参照カウントを使用しており、非常に高速で、いつでもメモリを削除できるようにするために、プログラマの制御権を提供しています。
+
+(6) C/C++ ライブラリを使えます。 Ring には C 関数または C++ クラスからラッパーを作成するために、コード生成器が付属しています。さらなる処理能力を求めている、またはもっとライブラリを使用する必要がある場合は、簡単に実現できます。
+
+
+.. index::
+       pair: よくある質問と回答; Ring と Python との違いは?  Ring はオープンソースなの?
+
+Ring と Python との違いは?  Ring はオープンソースなの?
+========================================================
+
+もちろん。 Ring はオープンソースです (MIT ライセンス)。
+
+全般的に筆者は Python と Ruby が好きですが、筆者には目的となる単純明快な変更があります。
+
+(1) 英数大小文字の区別はしません。
+
+(2) リストのインデックスは 1  から開始します。
+
+(3) 関数の定義前に呼び出せます。
+
+(4) Python 風のシンタックスを使用しない (インデント、self の使用、pass & _)
+
+(5) 弱い型付け (コンテキストに基づいた型の間での自動変換)
+
+(6) プログラムは、単純明快な一定の構造に従います (ステートメントの後に関数、続いてパッケージとクラス)。
+
+(7) 代入と値のテストで ‘=’ 演算子の使用。
+
+重要な変更は、
+
+(1) 数日で習得できる単純明快な小規模プログラミング言語: Ring コンパイラ + 仮想計算機 = 約 20,000 行の ANSI C コード (すべてのプラットフォームでコンパイル可能)。ほかにライブラリ関連と C/C++ プログラム用のオプションで 500,000 行。
+
+(2) ガベージコレクター: エスケープ解析・参照カウントの使用、および代入演算子の使用によりメモリの削除を行う機会をプログラマが決定する権限を与えています。
+
+(3) 簡潔なシンタックス: Ring では、行は重要ではありません。 ; の記述または ENTER を押してステートメントを区切る必要はありません。
+
+(4) 直接、オブジェクトの属性とメソッドを使用した後は { } で、オブジェクトへアクセスします。
+
+(5) 自然言語プログラミング: オブジェクト指向プログラミングに基づき Ring を使うと違和感のない自然なインタフェースの作成が非常に簡単になります。
+
+(6) 入れ子構造の宣言型プログラミング
+
+さらに、 Ring の目的を達成するために、画期的な機能が追加されています (参照: 言語設計 - 明確な目標のための設計)。
+
+
+.. index::
+       pair: よくある質問と回答; Perl, PHP, Python や Ruby よりも Ring を使用する利点は?
+
+Perl, PHP, Python や Ruby よりも Ring を使用する利点は?
+========================================================
+
+(1) Ring は多機能で違和感がない上に、画期的で新規性があります。コードも美しく、簡潔で分かりやすく記述できます。 Ring はプログラミングに関する様々なことを考えさせられます。
+(2) Ring は小規模言語として設計されています (Lua 言語からの教訓)。
+(3) Ring は単純明快です (BASIC と Clipper/Harbour 言語からの教訓)。
+(4) Ring はより自然言語的です (Supernova 言語からの教訓)。
+(5) Ring はより宣言的です (REBOL と QML 言語からの教訓)。
+(6) Ring の実装は透過性があり、視覚的であり、さらに豪華な機能があります。
+
+なお、 Ring は PHP, Lua  Tcl や Smalltalk などの改良品や代用品として設計しておりません。
+
+.. index::
+       pair: よくある質問と回答; C# や Java よりも Ring を使用する利点は?
+
+C# や Java よりも Ring を使用する利点は?
+=========================================
+
+(1) 簡潔なコード (きれいで違和感がない)、生産性と柔軟性の向上。
+
+(2) 宣言型プログラミング、および自然言語プログラミングに関する対応の改善。
+
+
+.. index::
+       pair: よくある質問と回答; 関数型プログラミングへの対応が言及されていますが、これは他になにが起きますか?
+
+関数型プログラミングへの対応が言及されていますが、これは他になにが起きますか?
+==============================================================================
+
+このコードに関する質問です:
+
+.. code-block:: ring
+
+       f = func {
+           a = 42
+           return func { return a }
+       }
+
+       innerF = call f()
+       call innerF()
+
+実行結果:
+
+.. code-block:: none
+
+       Using uninitialized variable : a In function _ring_anonymous_func_16601()
+
+回答:
+
+* これは無名関数であり、クロージャー (関数閉包) ではありません。
+
+* この世界の開発者たちがクロージャーの実装を要望しましたが、 Ring 言語の開発で新しい機能を追加することは Ring 言語の目的と精神に反することです。
+
+* 明確な解決方法を提供するために、関数とステートを統合したいときはクラスとオブジェクトを使います。
+
+* リストを使用してリストの内側に無名関数を記述すると、ステートと関数のあるリストを返せます。なお、使用時は関数へリストを渡します。
+
+* eval() および substr() を使うと、無名関数を返す前に変数の値を直接追加できます。
+
+* 関数の定義時に、ほかのスコープを保護します。Ring では最大で三種類のスコープに属する各場所で、三種類のスコープ規則を提供しています (グローバル、オブジェクトのスコープ、およびローカルスコープ)。
+
+* ほかのプログラミング言語を、全て真似をする必要もありませんし、真似しても全て得られるわけではありません! そのように考えているならば、非常に複雑怪奇なプログラミング言語を作成するか、時間を節約するために他のプログラミング言語を使うと思います。
+
+* 新しいプログラミング言語の学習、または勉強に専念して (Ring の新しいところや優れたところ)、 いつから使い始めるかについて考えることがあります。数ヶ月前に、公開されたプログラミング言語と数年前に開発が始まったプログラミング言語を比較すること、および現在の世界で使用されているプログラミング言語をすべて理解したと錯覚しないでください。
+
+* 各々のプログラミング言語にある理解できないことが、ほかのプログラミング言語では特徴となります。アイディアは機能でありません。すべての機能に隠された精神と才能です。
+
+
+.. index::
+       pair: よくある質問と回答; シンタックスの処理ではなく自作言語の定義機能があり、コードなどで構文解析の使用を可能にしている理由は?
+
+シンタックスの処理ではなく自作言語の定義機能があり、コードなどで構文解析の使用を可能にしている理由は?
+======================================================================================================
+
+つまり、画期的です - 構文解析関連の学習をせずに、自然言語ステートメントを作成できます。
+聡明な判断により、クラスを使用します (後でコンテキストに基づき
+様々なステートメントへ対応するクラスを併用できるようにするためです -
+ステートメントの変更と変換など様々なことができます)。
+また、すべての Ring ステートメントを Ring 環境から使えるようにするステートメントを追加してあります。
+
+
+.. index::
+       pair: よくある質問と回答; ループの中断時に数値の指定ができる理由は?
+
+ループの中断時に数値の指定ができる理由は?
+==========================================
+
+Ring は小規模プログラミングと大規模プログラミングに対応しています。
+目的と手段に基づいて使用する機能を選択します。
+お望みとあれば、プログラマはプログラミング言語で粗悪なコードを記述できます。
+このアイディアは、柔軟性破壊などの問題を起こさせないために、言語設計でエラー対策を盛り込む必要があります。
+
+例えば、 Linux カーネルと Ruby の実装としてコードの一部を読むと、普段は使用しない一般的規則による実用的な GOTO の用法と用例を理解するでしょう。また、優れたプログラマは、いつ規則を破るべきかを知っています。
+Ring において GOTO は使用不能であり、実装予定については一切言及しません。
+しかし、一階層以上のループを中断する機能や下位関数からループを中断する機能は、小規模プログラムでは実用的です。
+
+とにかく、これらは言語により追加された小さな新機能の一部です (重要なアイディアではありません)。
+
+
+.. index::
+       pair: よくある質問と回答; Ring で ‘See’, ‘Give’, ‘But’ および ‘Ok’ キーワードを採用する理由は?
+
+Ring で ‘See’, ‘Give’, ‘But’ および ‘Ok’ キーワードを採用する理由は?
+=============================================================================
+
+See と Give は “反対の動作” ではありませんが、プログラマがしたいことをするために選びました。
+
+画面から処理の過程や結果を確認したいときは ‘See’ です。
+
+キーボードからの標準入力をプログラムへ与えたいときは ‘Give’ です。
+
+“but” や “ok” を選んだ根拠は簡単に書けるキーワードだからです。
+
+また elseif/elif/elsif は文脈ごとに違うキーワードを使い分ける必要があるため "but" のほうが覚えやすいです。
+
+これらは Ring 1.1 以降ではオプション扱いです。
+
+‘See’ と ‘Give’ の代わりに ‘Put’ と ‘Get’ を使えます。
+
+‘But’ と‘Ok’ の代わりに‘elseif’ または ‘end’ を使えます。
+
+それは読者の選択にゆだねられています。 Ring には複数の記法とシンタックスの柔軟性があります。
+
+また、自然言語の新規定義、および言語のキーワードと演算子を変更可能です。
+
+
+.. index::
+       pair: よくある質問と回答; Ring においてデータ型の背景にある哲学とは?
+
+Ring においてデータ型の背景にある哲学とは?
+===========================================
+
+Ring は開発で求められる基本概念を提供しています! 可能な限り、基本概念は単純明快・小規模を維持するのが目標の一つです。
+
+Ring におけるリストの用法で可能なこと
+
+* 配列の作成 (単体データ型)
+* リストの作成 (混成データ型)
+* ツリーの作成 (入れ子による配列)
+* インデックスに文字列を使用 (ディクショナリー・ハッシュテーブル風の記法)
+
+同じ原則は、これらを数値に使うときにも適用されます。
+
+* int 値
+* double 値
+* Boolean 値 (True/False)
+
+この事例の原則は、下記を文字列へ格納するときにも適用されます。
+
+* 文字
+* テキスト (一行以上)
+* バイナリデータ
+* 日付
+* 日時
+* NULL 値 (空の文字列)
+
+プログラマが新しいデータ型を定義することで、言語の定義済みデフォルト型として
+使用できるオブジェクト指向への対応。つまり、 + 演算子のオーバーロードがあります。
+
+よって、このようになりました。
+
+* 高速化のため、 Ring 言語では基本型 (文字列、数値、リスト、オブジェクト) を提供しています。
+* オブジェクト指向プログラミングを採用しました。アプリケーションの問題領域に従い、新しい型を追加することで拡張できる柔軟なプログラミング言語です。
+
+
+.. index::
+       pair: よくある質問と回答; Ring でのブール値とは?
+
+Ring でのブール値とは?
+=======================
+
+コードでブール式の結果を判定するときに
+
+true (真) では 1 を、および false (偽) では 0 を使えます。
+
+see 命令で値を表示するときに 1 は (true) であり、 0 は (false) を表示します。
+
+理由は?
+
+Ring には四種類の型があるからです。
+
+(1) 数値
+
+(2) 文字列
+
+(3) リスト
+
+(4) オブジェクト
+
+最初の型 (数値) は、 int (整数)、倍精度数、ブール値を表すために使用されます。
+
+二番目の型 (文字列) は、 char (文字) 型、文字の配列、日付と時刻を表すために使用されます。
+
+三番目の型 (リスト) は配列型であり、複合型から構成される配列として、ハッシュ (ディクショナリ)、ツリーなどを表すために使用されます。
+
+オブジェクトは、 Ring のクラス (全てのクラス) または C/C++ 関数、メソッドを呼び出すことで得られる C ポインタから作成されたオブジェクトです。
+
+なぜですか?
+
+Ring はプログラマ、開発者が様々な作業で使えるように
+最も単純明快な概念で設計されています。問題領域の定義に関心があるならば、
+プログラマ、開発者は様々な型を取得するために、新しいクラス (および演算子のオーバーロード)を作成することで言語をカスタマイズします。
+
+どうしてですか?
+
+単純なことは良いことであり、習得と記憶が簡単だからです! さらに、これは基本型で表現可能な高水準型の間における変換の柔軟性を提供します。
+
+
+.. index::
+       pair: よくある質問と回答; Ring に “Main” 関数を実装した理由は?
+
+Ring に “Main” 関数を実装した理由は?
+=======================================
+
+Main 関数は非常に重要であり、グローバルスコープの代わりにローカル変数を使用する
+ステートメントを記述したいときに必要です。
+
+用例:
+
+.. code-block:: ring
+
+       x = 10
+       myfunc()
+       See "X value = " + X  # ここでは x の値は (10) と想定します。
+                             # しかし myfunc() で x を使用しているため別の値 (6) になります!
+       Func myfunc
+          for x = 1 to 5
+              See x + nl
+          next
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       X value = 6
+
+Main 関数の使用
+
+.. code-block:: ring
+
+       Func Main
+          x = 10
+          myfunc()
+          See "X value = " + X
+
+       Func myfunc
+          for x = 1 to 5
+              See x + nl
+          next
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       5
+       X value = 10
+
+
+.. index::
+       pair: よくある質問と回答; Ring のインデックスが 1 から始まる理由は?
+
+Ring のインデックスが 1 から始まる理由は?
+==========================================
+
+実生活では、三個のリンゴを手に持って数えるとき、
+
+1 2 3 と数えます。
+
+0 から数えることはしません。
+
+質問: ほかのプログラミング言語において、インデックスが必ず 0 から開始されるのか?
+
+回答: これは、計算機における値とメモリアドレスの取り扱い方法について関係があります。
+
+用例:
+
+myarray[5] 配列があります。
+
+メモリには: myarray のアドレスがあります。
+
+最初の項目は、アドレスへ格納されます。
+
+二番目の項目は、アドレスの後などにあります。
+
+myarray のアドレスで必要となる最初のアドレスを指し示す必要がある場合は
+
+myarray + 0 の結果は、最初にある項目を指し示すため、そのまま myarray[0] と入力します。
+
+myarray + 1 の結果は、二番目などにある項目を指し示すため、 myarray[1] と入力します。
+
+このような仕組みは、低水準言語またはハードウェア寄りの言語では良いことです。
+
+しかし、アプリケーション開発用に設計された高級言語では、違和感のない仕組みのほうが優れています。
+
+用例:
+
+.. code-block:: ring
+
+       mylist = [1,2,3,4,5]
+       for x = 1 to len(mylist)
+               see x + nl
+       next
+
+前述の用例では、配列の長さは 1 から開始します。
+0 から開始するインデックスを記述する場合は、
+
+.. code-block:: ring
+
+       for x = 0 to len(mylist)-1
+
+また、 ほかのプログラミング言語の for ループのようにする方法を覚えておいてください。
+
+.. code-block:: ring
+
+       for(x=0 ; x<nMax ; x++ )
+
+\< 演算子を使用してください! (ZeroLib も使えます)
+
+
+.. index::
+       pair: よくある質問と回答; Ring が英数大小文字を区別しない理由は?
+
+Ring が英数大小文字を区別しない理由は?
+=======================================
+
+(1) もっとひとにやさしくするため。
+
+(2) Ada, SQL, Pascal, Delphi, Visual Basic, Visual FoxPro に影響を受けたため。
+
+(3) 自然言語プログラミングの対応において効果的であるため。
+
+(4) プログラミング言語のキーワードを記述するとき、好みの記法を選択できるようにするため。
+
+.. code-block:: ring
+
+       see "lower case!"
+
+.. code-block:: ring
+
+       SEE "UPPER case!"
+
+.. code-block:: ring
+
+       See "First Letter is UPPER case!"
+
+(5) 手軽なテストを書くために、 “Variable” ではなく “variable” を入力してしまった後にエラーメッセージになるのを防ぐため。
+
+(6) “dosomething()” ではなく、 “Dosomething()” を入力してしまった後にエラーメッセージになるのを防ぐため。
+
+(7) Ring では、変数、メソッド名、およびクラス名の間で名前衝突を起こさないため。
+
+変数名として、 person および クラス名として Person を記述できます。
+
+.. code-block:: ring
+
+       person = new Person
+       class Person
+               name address phone
+
+
+大小英数を区別したい場合は、キーワードと演算子の再定義 (またはプリプロセッサを自作)、および全角英数を使用してください。
+
+.. index::
+       pair: よくある質問と回答; 代入演算子で深いコピーを使用する理由は?
+
+代入演算子で深いコピーを使用する理由は?
+========================================
+
+“つまり、実行性能の利得に関しては疑問と劣悪な等価交換があります。
+       第三者による証明が行われるまで、深いvs浅いコピーの良い手引きとしては深いコピーのほうが好ましいです。”
+       ― スティーブ・マコーネル、コンプリートコードより
+
+(1) 代入演算子では深いコピーを要求したほうが違和感がありません。
+
+(2) 深いコピーが不要ならば、使用しないだけで良いです!
+
+(3) Ring は、できる限り参照の使用を減らすように設計しています。
+
+(4) Ring は、これが意味がある特別な場合において、参照を単純かつ可能にするために設計されています。
+
+(5) 関数へのリスト、およびオブジェクト渡すとき、 C/C++ ライブラリからオブジェクトを
+       作成時 (GUI オブジェクトなど)、リストの内側に格納されている
+       オブジェクトを返すときなど、これが当然である場合は参照となります。
+
+(6) これは機能であり、純粋関数を作成するために使えます。これが必要なとき、
+        stdlib の Value() 関数は、この機能で値によるリストとオブジェクトを渡します。
+
+(7) 参照が必要なときは、リストを共有管理するためのクラスとオブジェクトの作成を推奨します。
+
+(8) 様々なロジックエラーを回避することは、アプリケーションの水準ではより安全なことです。
+
+(9) Ring では、つまらない、細かいことに関して考えずに開発を開始してアプリケーションに専念するため、型を記述しなくても良いです (動的型付け)。
+       また、数値、および文字列の間で明示的変換を記述しなくても良いです (弱い型付け)。
+       さらに、値または参照、および使用の間で選択しなくても良いです。
+       そして、スコープを記述しなくても良いです (レキシカルスコープ)。
+
+(10) Ring には、スマートガベージコレクター (単純で高速) があります。代入演算子を使用すれば、いつでも好きなときにメモリを直接削除できます。
+       これは参照の削減方法、または管理プログラムから使用することは、当目的を達成するのに大いに有効です。
+       これによる完全な制御があります。
+
+(11) 参照の作成、および管理の作成を回避したい場合は
+       Object2Pointer() と Pointer2Object() 関数を使用します。
+       しかし、これは Ring の “精神” に反しています。
+
+
+.. index::
+       pair: よくある質問と回答; Ring にコンストラクタメソッドはありますか?
+
+Ring にコンストラクタメソッドはありますか?
+===========================================
+
+例えば新しいオブジェクトの作成時、
+
+.. code-block:: ring
+
+       new point
+
+1 - Ring で認識されていないときは Ring は新しいオブジェクトの属性で用いる動的メモリ空間を割り当てます。
+
+2 - Ring は手順①で作成されたオブジェクトのステートで現在のオブジェクトのスコープとローカルスコープを変更します。
+
+3 - Ring は実行中に、クラスの範囲を移動します (クラス名の末尾、そしてメソッドの先頭)。
+
+4 - クラスの範囲内にあるすべての命令やコードは、 Ring のコードとして実行されます。
+
+5 - クラスの範囲が終端に到達、または Return 命令を使うと、制御はクラスの範囲から (新しい場所) へ移動します。
+
+オブジェクトが追加された全属性は動的属性であるため、これは実行時に追加する属性を制御できます。
+
+用例:
+
+.. code-block:: ring
+
+       $3D = False
+       see  new point
+       $3D = True
+       see new point
+
+       class point
+               x y
+               if not $3D return ok
+               z
+
+実行結果:
+
+.. code-block:: none
+
+       x: NULL
+       y: NULL
+       x: NULL
+       y: NULL
+       z: NULL
+
+新しいオブジェクトの作成時、 init() メソッドを直接呼び出すオプションがあります。
+
+このメソッドはオブジェクトの作成後に、クラスの範囲にあるコードの実行すると呼び出されるため、オブジェクト属性で処理を行うことができます。
+
+
+.. code-block:: ring
+
+       p1 = new point3d(100,200,300)
+       see p1
+
+       class point3d
+               x y z
+               func init p1,p2,p3
+                       x=p1 y=p2 z=p3
+
+
+.. index::
+       pair: よくある質問と回答; オブジェクトの新規作成時に起きていることは?
+
+オブジェクトの新規作成時に起きていることは?
+============================================
+
+1 - オブジェクトの作成時に、クラスの範囲にあるコードは実行されます。そして、この範囲にあるコードに基づいたオブジェクトの属性があります。
+
+2 - Ring は、メソッドの呼び出しを開始するまでオブジェクトに関して気にしません。
+
+3 - メソッドの呼び出し時に、 Ring はオブジェクトのクラスと親クラスの確認を行い (継承を使用しているならば)、同一クラスに所属する全てのオブジェクトから現在または今後使用するためにメソッドを収集します。
+
+4 - メソッドは動的であり、各オブジェクトはクラスのメソッドから取得するため、オブジェクトの作成後に、メソッドの追加、オブジェクトまたは作成されたオブジェクトの使用、または同一クラスから作成できます。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point {x=10 y=20 z=30}
+       o2 = new point {x=100 y=200 z =300}
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+       o2.print()
+
+       class point x y z
+
+実行結果:
+
+.. code-block:: none
+
+       10
+       20
+       30
+       100
+       200
+       300
+
+
+.. index::
+       pair: よくある質問と回答; Getter と Setter メソッドでのアクセスにより属性を使えますか?
+
+Getter と Setter メソッドでのアクセスにより属性を使えますか?
+=============================================================
+
+もちろんです。クラスの外側から属性の使用を開始するときに、 Setter/Getter メソッドは自動的に呼び出されます。
+また、属性を使わずにメソッドを呼び出せます。読者の選択しだいです。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new Developer
+       o1.name = "Mahmoud"  see o1.name + nl
+       o1 { name = "Gal"  see name }
+       o1 { name = "Bert"  see name }
+
+       o1.setname("Marino")
+       see o1.getname()
+
+       Class Developer
+
+                       name language = "Ring Programming Language"
+
+                       func setname value
+                                       see "Message from SetName() Function!" + nl
+                                       name = value + " - " + language
+
+                       func getname
+                                       see "Message from GetName() Function!" + nl + nl
+                                       return "Mr. " + name + nl
+
+実行結果:
+
+.. code-block:: none
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Mahmoud - Ring Programming Language
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Gal - Ring Programming Language
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Bert - Ring Programming Language
+       Message from SetName() Function!
+       Message from GetName() Function!
+
+       Mr. Marino - Ring Programming Language
+
+
+.. index::
+       pair: よくある質問と回答; クラスを定義している間にグローバルな名前の検索を行う理由は?
+
+クラスを定義している間にグローバルな名前の検索を行う理由は?
+============================================================
+
+質問は、なぜクラス属性の定義時に
+グローバル変数との名前衝突を回避しないのですか?
+
+先頭にオプションの $ 記号で、グローバル変数名の問題解決になることを覚えておいてください。
+Main 関数は、グローバル変数を避けるために効果があります。
+
+回答:
+
+Ring は動的プログラミング言語です。
+
+実行時に、クラスの属性を決定できます (追加・削除)。
+
+クラスの属性を定義している間は、実行 (指定のコード) できます。
+
+用例①
+
+.. code-block:: ring
+
+       oPerson = new Person
+       Class Person
+          See "Welcome to the Ring language"
+
+用例②
+
+グローバル変数に基づき、属性をカスタマイズします。
+
+.. code-block:: ring
+
+       $debug = true
+       oPerson = new Person
+       see oPerson
+       Class Person
+           if $debug  date=date()  time=time() ok
+
+前述の用例では、 $debug フラグに true が設定されているとき、
+オブジェクトのステートへ Date と Time 属性を追加します。
+
+用例③
+
+グローバル変数に基づき、オブジェクトのインデックスを格納します。
+
+.. code-block:: ring
+
+       $ObjectsCount = 0
+       oPerson = new Person
+       see oPerson
+       oPerson2 = new Person
+       see oPerson2
+       Class Person
+             $ObjectsCount++
+             nIndex = $ObjectsCount
+
+実行結果:
+
+.. code-block:: ring
+
+       nindex: 1.000000
+       nindex: 2.000000
+
+一般的な用例:
+
+* データベースの接続後に、デーブルのカラムを取得します (グローバル変数やオブジェクトを使用)。
+
+* カラム名に基づき、クラスの属性を作成します。
+
+* 後でデータベースを修正します - 不要ならば、コードを修正しないでください。
+
+柔軟性はありますが、すばらしい応答性による強力さがあることを覚えておいてください。
+
+
+.. index::
+       pair: よくある質問と回答; Ring でグローバル変数とクラスの属性名間の名前衝突を回避しない理由は?
+
+Ring でグローバル変数とクラスの属性名間の名前衝突を回避しない理由は?
+=====================================================================
+
+このような場合の対応策です。
+
+1 - $ などの特殊記号を使用せずに、グローバル変数を定義するためです。
+
+2 - クラスには、特別なシンタックスで定義された属性があります (クラスの後に属性名を直接入力します)。
+
+3 - 属性は、コードの記述とグローバル変数の使用が許されているクラスの範囲で定義されます。
+
+クラスの範囲内で、 Ring の変数検出方法の変更について提案を受け入れる場合は、この問題よりも更に重要な問題を多発する前に三つの機能のうち一つを破る必要があります。
+
+Ring のコードをもっと綺麗なものにしておきたいし、 $ を使用する・しないときをプログラマに決定させたいため機能番号①の変更は好ましくありません。
+
+この機能は気に入っており、プログラマに Self.属性 の入力を強制するのは好みではないので機能番号②の変更は好ましくありません。
+
+ほとんどのアプリケーションでは、クラスの範囲内でのグローバル変数へのアクセスは非常に重要であるため機能番号③の変更は好ましくありません。
+
+判断理由は?
+
+筆者は、この特例を回避するかどうかをプログラマが決めるために、この事例を記載することにしました。
+
+1 - グローバル変数の使用を回避でき (最良)、 Main 関数 (オプション扱い) を使えます。
+
+2 - プログラマは変数名の先頭に ``$`` あるいは ``global_`` または ``g_`` などの記号を使えます。
+
+3 - プログラマは属性を定義するために、クラス名末尾に Self.属性 を使えます。
+
+一般に、小規模プログラムではグローバル変数と関数を使います。大規模プログラムではクラスとオブジェクトを使いますので、グローバル変数は数本だけに絞るか、または使わないでください。
+
+
+.. index::
+       pair: よくある質問と回答; ftell() と fseek() でファイルの大きさを取得するには?
+
+ftell() と fseek() でファイルの大きさを取得するには?
+=====================================================
+
+この関数はファイルの読み込みを行わずに、ファイルの大きさを取得します!
+
+.. code-block:: ring
+
+       func getFileSize fp
+              C_FILESTART = 0
+              C_FILEEND = 2
+              fseek(fp,0,C_FILEEND)
+              nFileSize = ftell(fp)
+              fseek(fp,0,C_FILESTART)
+              return nFileSize
+
+.. note:: 前述の関数では仮引数として、 fp (ファイルポインタ) を扱います。 fopen() 関数で開いているファイルから fp を取得できます。
+
+.. code-block:: ring
+
+       fp = fopen("filename","r")
+
+       see  "File Size : " + getFileSize(fp) + nl
+
+別の解決方法 (ファイルの読み取り):
+
+.. code-block:: ring
+
+       see len(read("filename"))
+
+
+.. index::
+       pair: よくある質問と回答; 現在のソースファイルのパスを取得するには?
+
+現在のソースファイルのパスを取得するには?
+==========================================
+
+この関数で、現在のソースファイルのパスを取得します。
+そして、パスを扱うための変数へファイル名を追加できます。
+
+.. code-block:: ring
+
+       cPath = CurrentPath()
+       func currentpath
+               cFileName = filename()
+               for x = len(cFileName) to 1 step -1
+                       if cFileName[x] = "/"
+                               return left(cFileName,x-1)
+                       ok
+               next
+               return cFileName
+
+
+.. index::
+       pair: よくある質問と回答; 関数の定義済み仮引数またはオプションの仮引数とは?
+
+関数の定義済み仮引数またはオプションの仮引数とは?
+==================================================
+
+定義済み仮引数、またはオプションの仮引数を使用したい場合は、ハッシュ、ディクショナリなどのリストを受け入れてください。
+
+用例:
+
+.. code-block:: ring
+
+       sum([ :a = 1, :b = 2])
+       sum([ :a = 1 ])
+       sum([ :b = 2 ])
+       func sum pList
+               if plist[:a] = NULL pList[:a] = 4 ok
+               if plist[:b] = NULL pList[:b] = 5 ok
+               see pList[:a] + pList[:b] + nl
+
+実行結果:
+
+.. code-block:: none
+
+       3
+       6
+       6
+
+
+.. index::
+       pair: よくある質問と回答; リストやディクショナリでキーまたは値のみを表示するには?
+
+リストやディクショナリでキーまたは値のみを表示するには?
+========================================================
+
+キーまたは値のみを表示したい場合は、項目のインデックスを選択します (1 または 2)。
+
+用例
+
+.. code-block:: ring
+
+
+       C_COUNTRY = 1
+       C_CITY = 2
+       mylist = [
+               :KSA = "Riyadh" ,
+               :Egypt = "Cairo"
+       ]
+
+       for x in mylist
+               see x[C_COUNTRY] + nl
+       next
+
+       for x in mylist
+               see x[C_CITY] + nl
+       next
+
+実行結果:
+
+.. code-block:: none
+
+       ksa
+       egypt
+       Riyadh
+       Cairo
+
+
+.. index::
+       pair: よくある質問と回答; リストで nl を表示するときに変な結果になる理由は?
+
+リストで nl を表示するときに変な結果になる理由は?
+==================================================
+
+このコードでは、
+
+.. code-block:: ring
+
+       list = 1:5        # list = [1,2,3,4,5]
+       see list + nl
+
+リストへ改行を追加後にリストを表示します。つまり、通常のリスト表示では、リストの末尾にある改行も表示します。
+新しい改行文字を追加したので、改行は二行表示となります。
+
+.. code-block:: ring
+
+       See <式>
+
+see 命令は式の最終結果を表示するため、このように式が評価されます。
+
+.. code-block:: ring
+
+       nl = char(13) + char(10) # 変更可能な変数!
+
+\+ は演算子です。
+
+.. code-block:: none
+
+       文字列 + 文字列 ---> 新しい文字列
+       文字列 + 数値   ---> 新しい文字列
+       数値   + 数値   ---> 新しい数値
+       数値   + 文字列 ---> 新しい数値
+
+リスト + 項目 ---> なにも新規作成されませんが、同じリストへ項目が追加されます。
+
+例外:
+
+数値 + nl ---> 新しい文字列
+
+この例外は数値の表示後に、改行を簡単にできるよう追加されています。
+
+最後の項目を表示した後には、改行が既にあるため、これはリストを表示するためには不要です。
+
+
+.. index::
+       pair: よくある質問と回答; StrCmp() の実行結果について解説していただけますか?
+
+StrCmp() の実行結果について解説していただけますか?
+===================================================
+
+まず、 ‘=’ 演算子で直接的に文字列を検査できることを覚えておいてください。
+
+.. code-block:: ring
+
+       see strcmp("hello","hello") + nl +
+       strcmp("abc","bcd") + nl +
+       strcmp("bcd","abc") + nl
+
+両方とも、同じ文字列の場合は 0 を返します。
+
+abc と bcd は違います。二行目は -1 を返しており三行目は 1 を返します。
+
+二行目では “abc” と “bcd” の比較を行っています。
+
+“abc” = “a” の一文字目と “bcd” = “b” の一文字は等しくありません。
+よって “a” != “b” と “a” < “b” の結果となります。
+
+よって “a” != “b” と “a” < “b” の
+
+実行結果は -1 となります。
+
+三行目には “bcd” と “abc” があります。
+
+“bcd” の一文字目は “b” であり “abc” の一文字は= “a” です。
+
+結果は “b” != “a” と “b” > “a” です。
+
+従って、実行結果は 1 となります。
+
+.. note:: ASCII(“a”) は 97 であり ASCII(“b”) は 98 です。よって 97 < 98 であるため “a” は “b” 以下となります。
+
+
+.. index::
+       pair: よくある質問と回答; プロジェクトで複数のソースコードを使うには?
+
+プロジェクトで複数のソースコードを使うには?
+============================================
+
+用例:
+
+このようなフォルダがあります。
+
+.. code-block:: none
+
+       C:\LRing
+
+このようなファイルがフォルダにあります。
+
+.. code-block:: none
+
+       C:\LRing\t1.ring
+       C:\LRing\mylib.ring
+       C:\LRing\libs\mylib2.ring
+
+このようなコードが t1.ring ファイルにあります。
+
+.. code-block:: ring
+
+       load "mylib.ring"
+       load "libs\mylib2.ring"
+       myfunc()
+       test()
+
+このようなコードが mylib.ring ファイルにあります。
+
+.. code-block:: ring
+
+       func myfunc
+               see "message from myfunc"+nl
+
+このようなコードが libs\mylib2.ring ファイルにあります。
+
+.. code-block:: ring
+
+       func test
+               see "message from test" + nl
+
+C:\\LRing フォルダから。
+
+Ring のパスを追加していない場合は、このコマンドで追加できます。
+
+.. code-block:: none
+
+       set path=%path%;c:\ring\bin;
+
+Ring フォルダ C:\\Ring のある場所で
+
+実行します。
+
+.. code-block:: none
+
+       Ring t1.ring
+
+実行結果:
+
+.. code-block:: none
+
+       message from myfunc
+       message from test
+
+
+.. index::
+       pair: よくある質問と回答; この用例で GetChar() を二度使用する理由は?
+
+この用例で GetChar() を二度使用する理由は?
+===========================================
+
+GetChar() 関数は、キーボードバッファから一文字受け取ります。
+
+この用例では、
+
+
+.. code-block:: ring
+
+
+       While True
+               See "
+                       Main Menu
+                       (1) Say Hello
+                       (2) Exit
+               "
+               Option = GetChar()
+               GetChar() GetChar()  # 行の終わり
+               # この行で前述の二行を置換できます。
+               # Give Option
+
+               if Option = 1
+                       see "Enter your name : " give cName
+                       see "Hello " + cName
+               else
+                       bye
+               ok
+       End
+
+GetChar() を三回使用しています。
+
+最初はユーザの選択肢を取得するときに、
+
+.. code-block:: ring
+
+       Option = GetChar()
+
+
+しかし、二回目と三回目があります (バッファから改行文字を受け取ります)。
+
+.. code-block:: ring
+
+       GetChar() GetChar()  # 行の終わり
+
+用例: ユーザが選択肢から 1 を選んだ後に ENTER を押します。
+
+ここでは、三文字あります。
+
+* 一文字目は : 数字の 1 です。
+* 二文字目は : CHAR(13) です。
+* 三文字目は : CHAR(10) です。
+
+Windows において、 CHAR(13) および CHAR(10) は、それぞれ改行となります (すなわち CR+LF)。
+
+
+.. index::
+       pair: よくある質問と回答; NULL と isNULL() 関数の用法は?
+
+NULL と isNULL() 関数の用法は?
+===============================
+
+Ring では、未初期化変数を使うと、明示的なランタイムエラーメッセージが表示されます。
+
+用例:
+
+.. code-block:: ring
+
+       See x
+
+実行結果:
+
+.. code-block:: none
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file tests\seeuninit.ring
+
+未初期化の属性へアクセスすると、同じことが起こります。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point
+       see o1
+       see o1.x
+       class point x y z
+
+実行結果
+
+.. code-block:: none
+
+       x: NULL
+       y: NULL
+       z: NULL
+
+       Line 3 Error (R24) : Using uninitialized variable : x
+       in file tests\seeuninit2.ring
+
+エラーを検査したい場合は、 Try/Catch/End を使用してください。
+
+.. code-block:: ring
+
+       Try
+               see x
+       Catch
+               See "Sorry, We can't use x!" + nl
+       Done
+
+実行結果:
+
+.. code-block:: none
+
+       Sorry, We can't use x!
+
+さて、 NULL と isNULL() についてお話します。
+
+未初期化の変数を扱おうとしたとき、エラーメッセージが出ます。
+
+これらのエラーは Try/Catch/Done で検査できます。文字列で扱うためには NULL と isNULL() を使用します。
+
+NULL には、空文字列の変数があります。
+
+isNULL() は関数であり、入力が空の文字列、または文字列の内容が “NULL” ならば true (1) を返します。
+
+これらの値 (空の文字列) をテストする必要があり、 DBMS などの外部リソースから “NULL” を有する文字列が入力されることがあるからです。
+
+用例:
+
+.. code-block:: ring
+
+       See isNULL(5) + nl +        # 0 の表示
+       isNULL("hello") + nl +      # 0 の表示
+       isNULL([1,3,5]) + nl +      # 0 の表示
+       isNULL("") + nl +           # 1 の表示
+       isNULL("NULL")              # 1 の表示
+
+
+.. index::
+       pair: よくある質問と回答; オブジェクトのあるリストを表示するには?
+
+オブジェクトのあるリストを表示するには?
+========================================
+
+この用例では、オブジェクトのあるリストの表示方法を確認します。
+
+.. code-block:: ring
+
+       aList = [[1,2,3] , new point(1,2,3), new point(1,2,3)]
+       see "print the list" + nl
+       see alist
+       see "print the item (object)" + nl
+       see alist[2]
+       class point x y z
+               func init p1,p2,p3 x=p1 y=p2 z=p3
+
+実行結果:
+
+.. code-block:: none
+
+       print the list
+       1
+       2
+       3
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+       print the item (object)
+       x: 1.000000
+       y: 2.000000
+       z: 3.000000
+
+
+.. index::
+       pair: よくある質問と回答; 改行と文字を表示するには?
+
+改行と文字を表示するには?
+==========================
+
+nl 変数で改行します。
+
+.. code-block:: ring
+
+       See "Hello" + nl
+
+複数行リテラルでも改行します。
+
+.. code-block:: ring
+
+       See "Hello
+
+       "
+
+char(nASCII) 関数で他の文字を表示します。
+
+.. code-block:: ring
+
+       See char(109) + nl +    # m の表示
+           char(77)            # M の表示
+
+
+.. index::
+       pair: よくある質問と回答; qApp クラス名末尾に () を使用しない理由は?
+
+qApp クラス名末尾に () を使用しない理由は?
+===========================================
+
+RingQt で GUI を作成する場合は、新しいオブジェクトの作成時にクラス名末尾に () を使用します。例えば、
+
+.. code-block:: ring
+
+       new qWidget() { setWindowTitle("Hello World") resize(400,400) show() }
+
+この処理の前に、 qApp クラスからオブジェクトを作成しますが、名前の後ろには () を使用しません。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app = new qApp
+       {
+           win=new qWidget()
+           {
+               setwindowtitle(:test)
+               show()
+           }
+           exec()
+       }
+
+クラス名末尾に () を使うと、クラス内にある init() メソッドの呼び出し、およびこのメソッドへの仮引数を渡す意味になります。
+
+クラス内に init() がないメソッドで () を使うと、例外エラーメッセージになります。
+
+そのほかのクラスには、 init() メソッドはありますが qApp クラスにはありません。
+関数を使用したオブジェクトのポインタを返すオブジェクトの作成に必要であり、
+このポインタは pObject 属性に格納されるのが理由です。
+詳細情報は ring_qt.ring ファイルに収録されているクラスを参照してください。
+
+
+.. index::
+       pair: よくある質問と回答; ウィンドウのタイトルバーが画面外に移動してしまう原因は?
+
+ウィンドウのタイトルバーが画面外に移動してしまう原因は?
+========================================================
+
+このコードを記述した場合、
+
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app = new qApp
+       {
+               win=new qWidget()
+               {
+                     setwindowtitle(:test)
+                     setGeometry(0,0,200,200)
+                     show()
+               }
+               exec()
+       }
+
+ウィンドウが (200,200) の寸法で (0,0) の地点へ移動すると思うでしょう。
+実際は、ウィンドウのタイトルバーが画面外に移動してしまいます。
+
+これは Qt フレームワークの挙動と関連があります。
+
+このコードで問題を回避します。
+
+.. code-block:: ring
+
+       load "guilib.ring"
+       new qApp {
+               new qWidget() {
+                       move(0,0)
+                       resize(200,200)
+                       show()
+               }
+               exec()
+       }
+
+
+.. index::
+       pair: よくある質問と回答; GUI アプリケーションでボタンの配列を作成するには?
+
+GUI アプリケーションでボタンの配列を作成するには?
+==================================================
+
+この用例をご確認ください:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       App1 = new qApp {
+
+               win1 = new qWidget() {
+                       move(0,0)
+                       resize(500,500)
+                       new qPushButton(win1)
+                       {
+                               settext("OK")
+                               setclickevent("click()")
+                       }
+                       btn1 = new qPushButton(win1)
+                       {
+                               setgeometry(100,100,100,30)
+                               settext("Button1")
+                       }
+
+                       btn2 = new qPushButton(win1)
+                       {
+                               setgeometry(200,100,100,30)
+                               settext("Button2")
+                       }
+
+                       button = [btn1, btn2]
+                       show()
+               }
+
+               exec()
+
+       }
+
+       func click
+
+               button[1] { settext ("Button3") }
+               button[2] { settext ("Button4") }
+
+
+.. index::
+       pair: よくある質問と回答; ウィンドウを閉じた後に別のウィンドウを表示するには?
+
+ウィンドウを閉じた後に別のウィンドウを表示するには?
+====================================================
+
+この用例は、ウィンドウを閉じる方法と別のウィンドウを表示する方法です。
+
+.. code-block:: none
+
+       Load "guilib.ring"
+
+       app=new qApp
+       {
+               frmBefore=new Qwidget()
+               {
+                       setWindowTitle("before!")
+                       resize(300,320)
+                       move(200,200)
+
+                       button=new qPushButton(frmBefore)
+                       {
+                               setText("Close")
+                               setClickEvent("frmBefore.close() frmMain.show()")
+                       }
+
+                       show()
+               }
+
+               frmMain=new Qwidget()
+               {
+                       setWindowTitle("After!")
+                       resize(300,320)
+                       move(200,200)
+               }
+
+               exec()
+
+       }
+
+
+.. index::
+       pair: よくある質問と回答; モーダルウィンドウの作成方法は?
+
+モーダルウィンドウの作成方法は?
+================================
+
+この用例は、モーダルウィンドウの作成方法です。
+
+.. code-block:: ring
+
+       load "guilib.ring"
+       app=new qApp
+       {
+               frmStart=new Qwidget()
+               {
+                       setWindowTitle("The First Window")
+                       resize(300,320)
+                       move(200,200)
+
+                       button=new qPushButton(frmStart)
+                       {
+                               setText("Show Modal Window")
+                               resize(200,30)
+                               setClickEvent("frmModal.show()")
+                       }
+
+                       new qPushButton(frmStart)
+                       {
+                               setText("Close Window")
+                               move(0,50)
+                               resize(200,30)
+                               setClickEvent("frmStart.Close()")
+                       }
+
+                       show()
+               }
+
+               frmModal =new Qwidget()
+               {
+                       setWindowTitle("Modal Window")
+                       resize(300,320)
+                       move(200,200)
+                       setparent(frmStart)
+                       setwindowmodality(true)
+                       setwindowflags(Qt_Dialog)
+               }
+
+               exec()
+
+       }
+
+
+関連資料:
+
+* http://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html
+* http://doc.qt.io/qt-5/qt.html#WindowType-enum
+* http://doc.qt.io/qt-5/qwindow.html#setParent
+* http://doc.qt.io/qt-5/qt.html#WindowModality-enum
+
+
+.. index::
+       pair: よくある質問と回答; 最大化ボタンの無効化およびウィンドウのサイズを変更するには?
+
+最大化ボタンの無効化およびウィンドウのサイズを変更するには?
+============================================================
+
+setWindowFlags() メソッドを使用します。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app1 = new qapp {
+                       win1 = new qwidget() {
+                                       setwindowtitle("First")
+                                       setgeometry(100,100,500,500)
+
+                                       new qpushbutton(win1) {
+                                                       setgeometry(100,100,100,30)
+                                                       settext("close")
+                                                       setclickevent("app1.quit()")
+                                       }
+
+                                       new qpushbutton(win1) {
+                                                       setgeometry(250,100,100,30)
+                                                       settext("Second")
+                                                       setclickevent("second()")
+                                       }
+
+                                       showmaximized()
+                       }
+                       exec()
+       }
+
+       func second
+                       win2 = new qwidget() {
+                                       setwindowtitle("Second")
+                                       setgeometry(100,100,500,500)
+                                       setwindowflags(Qt_dialog)
+                                       show()
+                       }
+
+
+.. index::
+       pair: よくある質問と回答; ODBC から SQLite を使うには?
+
+ODBC から SQLite を使うには?
+=============================
+
+Ring 1.1 以降では SQLite に標準対応しており ODBC は不要です。
+
+また、 RingQt から SQLite へアクセスできます。
+
+質問への回答
+
+.. code-block:: ring
+
+       pODBC = odbc_init()
+       odbc_connect(pODBC,"DRIVER=SQLite3 ODBC Driver;Database=mydb.db;LongNames=0;"+
+                          "Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;")
+       odbc_execute(pODBC,"create table 'tel' ('ID','NAME','PHONE');")
+       odbc_execute(pODBC,"insert into 'tel' values ('1','Mahmoud','123456');")
+       odbc_execute(pODBC,"insert into 'tel' values ('2','Ahmed','123456');")
+       odbc_execute(pODBC,"insert into 'tel' values ('3','Ibrahim','123456');")
+       odbc_execute(pODBC,"select * from tel") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x)
+                       if x != nMax see " - " ok
+               next
+       end
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+実行結果:
+
+.. code-block:: none
+
+       Columns Count : 3
+
+       1 - Mahmoud - 123456
+       2 - Ahmed - 123456
+       3 - Ibrahim - 123456
+
+このプログラムは、ファイルを作成します : mydb.db
+
+注意 : ODBC ドライバを表示したとき、そこにある長いリストを確認できます。
+
+.. code-block:: none
+
+       SQLite3 ODBC Driver - UsageCount=1
+       SQLite ODBC Driver - UsageCount=1
+       SQLite ODBC (UTF-8) Driver - UsageCount=1
+
+そして “SQLite3 ODBC Driver” を使用しています。
+
+
+.. index::
+       pair: よくある質問と回答; dBase/Harbour データベースへ接続できますか?
+
+dBase/Harbour データベースへ接続できますか?
+============================================
+
+多種多様なデータベースを ODBC で接続できます。
+
+xBase ファイル (\*.DBF) へ接続するには、
+
+.. code-block:: ring
+
+       See "Using DBF Files using ODBC" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"Driver={Microsoft dBase Driver (*.dbf)};"+
+                          "datasource=dBase Files;DriverID=277")
+       See "Select data" + nl
+       odbc_execute(pODBC,"select * from tel.dbf")
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+                  See "Row data:" + nl
+                  for x = 1 to nMax
+                                  see odbc_getdata(pODBC,x) + " - "
+                  next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+実行結果
+
+.. code-block:: none
+
+       Using DBF Files using ODBC
+       Connect to database
+       Select data
+       Columns Count : 3
+       Row data:
+       Ahmad - Egypt - 234567 - Row data:
+       Fady - Egypt - 345678 - Row data:
+       Shady - Egypt - 456789 - Row data:
+       Mahmoud - Egypt - 123456 - Close database...
+
+
+また Visual FoxPro データベースにも接続できます (Visual FoxPro ドライバのインストールが必要です)。
+
+.. code-block:: ring
+
+
+       See "ODBC test 6" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"Driver={Microsoft Visual FoxPro Driver};"+
+               "SourceType=DBC;SourceDB=C:\PWCT19\ssbuild\PWCTDATA\CH1\Data\mydata.dbc;")
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from t38") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See "Row data:" + nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) + " - "
+               next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+
+.. index::
+       pair: よくある質問と回答; setClickEvent() はオブジェクトのメソッドを直接参照しない理由は?
+
+setClickEvent() はオブジェクトのメソッドを直接参照しない理由は?
+================================================================
+
+setClickEvent(cCode) は、コードを有する文字列を受け入れます。 イベントの発生時にコードは実行されます。
+
+Ring は 手続き型、オブジェクト指向、関数型など様々なプログラミングパラダイムに対応しています。
+
+プログラミング言語の水準で様々なパラダイムに対応するときは、二つの選択肢のうち、どちらのパラダイムが使用されるのか検出することはできません。
+
+(1) 様々なプログラミングパラダイムで動作する一般的な解決方法を提供します。
+
+(2) 特定のパラダイムのうち一つのものと合致する様々な解決方法を提供します。
+
+setClickEvent() および、そのほかは (様々なプログラミングパラダイムで動作する一般的な解決方法) に所属しています。
+
+クラスとオブジェクトの取り扱いに関する注意を一切しなくても、文字列のコードを渡すことで実行されます。
+
+このコードは関数の呼び出し、メソッドの呼び出しと変数の値の設定などができました。
+
+そのほかのプログラミング言語では、イベントでオブジェクト指向プログラミングとメソッドの呼び出しの使用を強制します。また、現在のオブジェクトなどの仮引数を取得するために無名関数を使用します。
+
+現在、一般的な解決方法は方法はありますが、将来は、特定のパラダイムと合致する
+明確な解決方法を追加する場合があります (オブジェクト指向、宣言型プログラミング、および自然言語プログラミング)。
+
+
+.. index::
+       pair: よくある質問と回答; 定義エラーを起こさずに関数を呼び出せる理由は?
+
+定義エラーを起こさずに関数を呼び出せる理由は?
+==============================================
+
+プログラムは次の順序に従います。
+
+(1) ファイルの読み込み
+(2) グローバル変数とステートメント
+(3) 関数
+(4) パッケージ、クラスとメソッド
+
+どのような意味がありますか?
+
+(1) \**** 関数がない場合は、その後はクラスとなります。 \****
+(2) \**** 関数、メソッド、クラス、パッケージを終わらせるための命令は不要です。 \****
+
+この用例をご確認ください。
+
+.. code-block:: ring
+
+       See "Hello"
+       test()
+       func test
+           see "message from the test function!" + nl
+       class test
+
+前述の用例では、 test() 関数があるため test() を用いて直接的に呼び出せます。
+
+この用例では、 test() がメソッドになります。
+
+.. code-block:: ring
+
+       See "Hello"
+       test()    # ランタイムエラーメッセージ
+       class test
+               func test # Test() はメソッドです (関数ではない)
+                       see "message from the test method!" + nl
+
+メソッドの定義後に、関数を直接呼び出そうとしたときはエラーになります。
+
+前述のプログラムは必ずこの通りにしてください。
+
+.. code-block:: ring
+
+       See "Hello"
+       new test { test() }   # メソッドの呼び出し
+       class test
+               func test # Test() はメソッドです (関数ではない)
+                       see "message from the test method!" + nl
+
+
+.. index::
+       pair: よくある質問と回答; RingQt の拡張機能とクラスの追加方法は?
+
+RingQt の拡張機能とクラスの追加方法は?
+=======================================
+
+一般に C または C++ のコードで Ring を拡張します。
+
+Ring のコードから C 関数の呼び出し、または C++ クラスとメソッドを使えます。
+
+詳細情報は、本取扱説明書の「C/C++ による拡張機能の開発方法」をご確認ください。
+
+このコードの用例では Ring ライブラリ (\*.lib) を使用して \*.c ファイルを DLL ファイルへコンパイルします。
+
+.. code-block:: c
+
+       #include "ring.h"
+
+       RING_FUNC(ring_ringlib_dlfunc)
+       {
+               printf("Message from dlfunc");
+       }
+
+       RING_API void ringlib_init(RingState *pRingState)
+       {
+               ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc);
+       }
+
+Ring は、 LoadLib() 関数で DLL ファイルを読み込んだ後に Ring 関数から dlfunc() 関数が呼び出されます。その後に C 関数を呼び出します。
+
+.. code-block:: ring
+
+       See "Dynamic DLL" + NL
+       LoadLib("ringlib.dll")
+       dlfunc()
+
+実行結果:
+
+.. code-block:: none
+
+       Dynamic DLL
+       Message from dlfunc
+
+取扱説明書を読むと、仮引数 (文字列、数値、リストとオブジェクト) などの取得方法について知ることができます。
+
+また、関数から値 (任意型) を返す方法も知ることができます。
+
+実体験ですが、 C ライブラリまたは C++ ライブラリへ対応作業をしているとき、
+
+ほとんどの関数で、ほとんどのコードを共有していることを発見しました。
+
+こちらのコード生成器を使うと Ring 用の C/C++ ライブラリのラッパーを手軽に生成でき、時間の節約になります。
+
+https://github.com/ring-lang/ring/blob/master/extensions/codegen/parsec.ring
+
+コード生成器は 1200 行以下の Ring プログラムです。
+
+コード生成器で入力した設定ファイルには C/C++ ライブラリの情報があります。
+
+関数プロトタイプ、クラスとメソッド、定数、列挙体、構造体とメンバなど。
+
+そして、コード生成器で生成します。
+
+* C ライブラリに関する \*.C ファイル (ライブラリ関数を使用可能)
+
+* C++ ライブラリに関する \*.CPP ファイル (C++ クラスとメソッドを使用可能)
+
+* \*.Ring ファイル (C++ のクラスを Ring のクラスとして使用可能)
+
+* \*.RH ファイル (定数)
+
+コード生成器の動作を理解するには、この Allegro ゲームプログラミング・ライブラリ用の拡張機能をご確認ください。
+
+https://github.com/ring-lang/ring/tree/master/extensions/ringallegro
+
+ひとつ目の設定ファイルは、
+
+https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf
+
+このファイルは Allegro の取扱説明書と Ring コード生成器の規則を用いて記述しました。
+
+このバッチファイルでコード生成器を実行します。
+
+https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat
+
+または、このスクリプトを使用します。
+
+https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.sh
+
+生成されたソースコードファイルを取得します。
+
+https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/ring_allegro.c
+
+生成されたソースコードファイル (ring_allegro.c) は約 1,2000 行です。
+
+ですが、設定ファイルは 1000 行以下です。
+
+ライブラリをビルドするには (DLL ファイルの作成)
+
+https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/buildvc.bat
+
+また、この拡張機能は LibSDL ライブラリに関して確認できます。
+
+https://github.com/ring-lang/ring/tree/master/extensions/ringsdl
+
+まとめとして、知っておく必要のある関連事項は
+
+1 - 設定ファイルの記述
+
+2 - コード生成器の使用
+
+3 - ライブラリや拡張機能の作成
+
+4 - Ring コードからライブラリや拡張機能を使用
+
+さて Qt についての質問へ移りましょう。
+
+RingQt は Ringの拡張機能です (ringqt.dll)。
+
+Ring の改修や変更は不要です。
+
+(1) RingQt の変更が必要です。
+
+(2) または、別の Qt ベースの拡張機能により、 Ring の機能を拡張します (だだし、同じ Qt バージョンです)。
+
+最初の選択肢に関しては RingQt を参照してください。
+
+https://github.com/ring-lang/ring/tree/master/extensions/ringqt
+
+設定ファイル
+
+https://github.com/ring-lang/ring/blob/master/extensions/ringqt/qt.cf
+
+ソースコードを生成するには
+
+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
+
+DLL/so/Dylib ファイルをビルドするには
+
+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
+
+RingQt の学習をしてください。
+
+利用できる選択肢について学んでください。
+
+(1) 直接 Qt のクラスを接続します。
+
+(2) 新しい自作クラスを接続するために新しいクラスを作成します。
+
+第二の選択肢は (前述の二つの要点、またはそれ以前にある2つの要点)、
+
+C++ コードによる新しいクラスを作成します。
+
+そして、作成したクラスを RingQt へ統合、または特別な DLL を用意します (判断に応じて)。
+
+一般的な動作ならば、 RingQt に記述してください (他の人の手助けになります)。
+
+特別な動作ならば、別の拡張機能に記述してください (特定のアプリケーション)。
+
+
+.. index::
+       pair: よくある質問と回答; Combobox および QTableWidget のセルへ他の要素を追加するには?
+
+Combobox および QTableWidget のセルへ他の要素を追加するには?
+=============================================================
+
+このコードをご確認ください。
+
+.. code-block:: ring
+
+       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()
+       }
+
+
+.. index::
+       pair: よくある質問と回答; QTableWidget で選択されたセルの内容に処理を行うには?
+
+QTableWidget で選択されたセルの内容に処理を行うには?
+=====================================================
+
+このサンプルをご確認ください。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               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
+
+
+.. index::
+       pair: よくある質問と回答; 三種類の記法のうち一般に使用されている、またはコミュニティで推薦されているものは?
+
+三種類の記法のうち一般に使用されている、またはコミュニティで推薦されているものは?
+==================================================================================
+
+(1) 記法を選択するだけですが、同じプロジェクトで異なる記法の併用、
+     または最低でも、同じコンテキストを併用しないでください (実装、テスト、スクリプトなど)。
+
+.. note:: プロジェクトの開始時に規則の明示、およびその規則に従ってください。
+
+(2) 記法の自作ができます (キーワードの変更により) - この考えはカスタマイズと自由のためのものです。
+
+.. note:: 自然言語を使用する場合など、明確な理由がある場合に限り、新しい記法の作成とキーワードの変更を行うほうが良いです (日本語、アラビア語、フランス語など)。
+
+(3) 第一形式は質問、チュートリアル、および小規模アプリケーション・プログラム (5,000行以下のコード) には最適です (筆者個人の意見です)。
+      用例 : Ring 取扱説明書、 Ring のサンプル、およびアプリケーションの大部分
+
+(4) 第三形式は大規模アプリケーション、および現役プログラマには最適です (筆者個人の意見です)。
+
+       用例 (フォームデザイナー) : https://github.com/ring-lang/ring/tree/master/applications/formdesigner
diff --git a/docs/ja-jp/source/fdeventcode.png b/docs/ja-jp/source/fdeventcode.png
new file mode 100644 (file)
index 0000000..7f8205c
Binary files /dev/null and b/docs/ja-jp/source/fdeventcode.png differ
diff --git a/docs/ja-jp/source/fdeventmethod.png b/docs/ja-jp/source/fdeventmethod.png
new file mode 100644 (file)
index 0000000..0751a58
Binary files /dev/null and b/docs/ja-jp/source/fdeventmethod.png differ
diff --git a/docs/ja-jp/source/fdlistitems.png b/docs/ja-jp/source/fdlistitems.png
new file mode 100644 (file)
index 0000000..7dad0a7
Binary files /dev/null and b/docs/ja-jp/source/fdlistitems.png differ
diff --git a/docs/ja-jp/source/fdms.png b/docs/ja-jp/source/fdms.png
new file mode 100644 (file)
index 0000000..5dfab69
Binary files /dev/null and b/docs/ja-jp/source/fdms.png differ
diff --git a/docs/ja-jp/source/fdsayhello1.png b/docs/ja-jp/source/fdsayhello1.png
new file mode 100644 (file)
index 0000000..2bf752b
Binary files /dev/null and b/docs/ja-jp/source/fdsayhello1.png differ
diff --git a/docs/ja-jp/source/fifteen2.png b/docs/ja-jp/source/fifteen2.png
new file mode 100644 (file)
index 0000000..3eb922c
Binary files /dev/null and b/docs/ja-jp/source/fifteen2.png differ
diff --git a/docs/ja-jp/source/files.txt b/docs/ja-jp/source/files.txt
new file mode 100644 (file)
index 0000000..ff1a447
--- /dev/null
@@ -0,0 +1,711 @@
+.. index:: 
+       single: ファイル; はじめに
+
+========
+ファイル
+========
+
+ファイル関数の用法を学びます。
+
+* Read()
+* Write()
+* Dir()
+* Rename()
+* Remove()
+* fopen()
+* fclose()
+* fflush()
+* freopen()
+* tempfile()
+* tempname()
+* fseek()
+* ftell()
+* rewind()
+* fgetpos()
+* fsetpos()
+* clearerr()
+* feof()
+* ferror()
+* perror()
+* fgetc()
+* fgets()
+* fputc()
+* fputs()
+* ungetc()
+* fread()
+* fwrite()
+* fexists()
+* 数値とバイト
+
+.. index:: 
+       pair: ファイル; Read() 関数によるファイル内容の読み取り
+
+Read() 関数
+===========
+
+Read() 関数はファイルの内容を読み取ります。
+
+文法:
+
+.. code-block:: ring
+
+       Read(cFileName) ---> 文字列はファイルの内容を有しています。
+
+用例:
+
+.. code-block:: ring
+
+       see read("myfile.txt")
+
+Read() 関数はバイナリファイルの読み取りもできます。
+
+用例:
+
+.. code-block:: ring
+
+       see read("myapp.exe")
+
+
+.. index:: 
+       pair: ファイル; Write() 関数によるファイルへの書き込み
+
+Write() 関数
+============
+
+Write() 関数は文字列をファイルへ書き込みます。
+
+文法:
+
+.. code-block:: ring
+
+       Write(cFileName,cString)        # 文字列 cString をファイル cFileName へ書き込みます。
+
+Write() 関数はバイナリファイルの書き込みもできます。
+
+用例:
+
+.. code-block:: ring
+
+       # ファイルのコピー
+       cFile = read("ring.exe")
+       write("ring2.exe",cFile)
+
+.. index:: 
+       pair: ファイル; Dir()
+
+Dir() 関数
+==========
+
+Dir() 関数はフォルダの内容 (ファイルとサブフォルダ) を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       Dir(cFolderPath) ---> リストはファイルとサブフォルダを有しています。
+
+この関数はリストを返します。リストごとの項目は二つの項目を有するリストになります。
+
+* ファイル / サブフォルダの名前
+
+* 種類 (0 = ファイル , 1 = フォルダ、ディレクトリ)
+
+用例:
+
+.. code-block:: ring
+
+       see "Testing DIR() " + nl
+       mylist = dir("C:\myfolder")
+       for x in mylist
+               if x[2] 
+                       see "Directory : " + x[1] + nl
+               else
+                       see "File : " + x[1] + nl
+               ok
+       next
+       see "Files count : " + len(mylist)
+
+.. index:: 
+       pair: ファイル; Rename()
+
+Rename() 関数
+=============
+
+Rename() 関数はファイルを名称変更します。
+
+文法:
+
+.. code-block:: ring
+
+       Rename(cOldFileName,cNewFileName) ---> 数値 ( 状態: 成功 (0) , エラー (-1) )
+
+用例:
+
+.. code-block:: ring
+
+       rename("file.txt","help.txt")
+
+.. index:: 
+       pair: ファイル; Remove()
+
+Remove() 関数
+=============
+
+Remove() 関数はファイルを削除します。
+
+
+文法:
+
+.. code-block:: ring
+
+       Remove(cFileName)
+
+用例:
+
+.. code-block:: ring
+
+       remove("test.txt")
+
+.. index:: 
+       pair: ファイル; Fopen()
+
+Fopen() 関数
+============
+
+Fopen() 関数はファイルを開きます。
+
+文法:
+
+.. code-block:: ring
+
+       Fopen(cFileName,cMode) ---> ファイルハンドル
+
+.. csv-table::
+       :header: "モード", "説明"
+       :widths:       20,     80
+
+       "“r”",      "読み取り (ファイルが存在している必要があります)"
+       "“w”",      "書き込み (空のファイルを作成、上書き)"
+       "“a”",      "追記 (ファイルが存在しない場合は作成)"
+       "“r+”",     "更新 (読み取り、書き込み)"
+       "“w+”",     "空のファイルを作成 (読み取り、書き込み)"
+       "“a+”",     "読み取りと追記"
+
+.. index:: 
+       pair: ファイル; Fclose()
+
+Fclose() 関数
+=============
+
+fopen() 関数でファイルを開いて処理を終えた後は、
+Fclose() 関数でファイルを閉じます。
+
+文法:
+
+.. code-block:: ring
+
+       Fclose(ファイルハンドル)
+
+.. index:: 
+       pair: ファイル; Fflush()
+
+Fflush() 関数
+=============
+
+Fflush() 関数はストリームの出力バッファを追い出します (flush)。
+
+文法:
+
+.. code-block:: ring
+
+       Fflush(ファイルハンドル)
+
+.. index:: 
+       pair: ファイル; Freopen()
+
+Freopen() 関数
+==============
+
+同じファイルハンドルで別のファイルを開きますが、
+以前に開いていたファイルを併せて閉じます。
+
+文法:
+
+.. code-block:: ring
+
+       Freopen(cFileName,cMode,file handle) ---> ファイルハンドル
+
+用例:
+
+.. code-block:: ring
+
+       freopen("myprogoutput.txt","w+",stdout)
+       see "welcome" + nl
+       for x = 1 to 10
+               see x + nl
+       next
+
+       ##
+       ## 必読 : https://ja.wikipedia.org/wiki/デバイスファイル#MS-DOS・Windows
+       ## このコードには移植性がありません。使用前に iswindows() で動作環境を
+       ## 判定してから各オペレーティングシステム専用のコードを書いてください。
+       ##
+
+       freopen("CON","w",stdout)   # Microsoft Windows では
+       see "Done" + nl             # もう一度、標準出力へ表示
+
+実行結果:
+
+.. code-block:: ring
+
+       # 標準出力へ出力
+       Done
+
+       # ファイルへの出力 : myprogoutput.txt
+       welcome
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: ファイル; Tempfile()
+
+Tempfile() 関数
+===============
+
+Tempfile() 関数は一時ファイルを作成します (バイナリ形式)。
+
+ファイルはストリームが閉じられたときに自動で削除されます。
+
+文法:
+
+.. code-block:: ring
+
+       TempFile() ---> ファイルハンドル
+
+.. index:: 
+       pair: ファイル; Tempname()
+
+Tempname() 関数
+===============
+
+Tempname() 関数は一時ファイル名を生成します。
+
+生成された名前は唯一無二であり、既存ファイル名とは一切異なります。
+
+文法:
+
+.. code-block:: ring
+
+       Tempname() ---> ファイル名として生成された文字列
+
+.. index:: 
+       pair: ファイル; Fseek()
+
+Fseek() 関数
+============
+
+Fseek() 関数はストリームにおけるファイル位置を設定します。
+
+文法:
+
+.. code-block:: ring
+
+       Fseek(ファイルハンドル, nOffset, nWhence) ---> 0 ならば成功です。
+
+この表は nWhence の値を表したものです。
+
+==     ===============================
+値    説明
+==     ===============================
+0      ファイルの先頭
+1      現在の位置
+2      ファイルの末尾
+==     ===============================
+
+.. index:: 
+       pair: ファイル; Ftell()
+
+Ftell() 関数
+============
+
+Ftell() 関数 はストリームにおける現在のファイル位置を検出します。 
+
+文法:
+
+.. code-block:: ring
+
+       Ftell(ファイルハンドル) ---> 数値によるファイルの位置です。
+
+.. index:: 
+       pair: ファイル; Rewind()
+
+Rewind() 関数
+=============
+
+Rewind() 関数はファイルの位置を先頭へ設定します。
+
+文法:
+
+.. code-block:: ring
+       
+       Rewind(ファイルハンドル)
+
+.. index:: 
+       pair: ファイル; Fgetpos()
+
+Fgetpos() 関数
+==============
+
+Fgetpos() 関数はハンドルにおける現在のファイル位置を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       Fgetpos(ファイルハンドル) ---> 位置ハンドル
+
+.. index:: 
+       pair: ファイル; Fsetpos()
+
+Fsetpos() 関数
+==============
+
+Fsetpos() 関数は現在のファイルの位置を設定します。
+
+文法:
+
+.. code-block:: ring
+
+       Fsetpos(ファイルハンドル,位置ハンドル)
+
+.. index:: 
+       pair: ファイル; Clearerr()
+
+Clearerr() 関数
+===============
+
+clearerr () 関数は EOF エラーとエラーインジケーターをストリームから消去します。
+
+文法:
+
+.. code-block:: ring
+
+       Clearerr(ファイルハンドル)
+
+.. index:: 
+       pair: ファイル; Feof()
+
+Feof() 関数
+===========
+
+Feof() 関数は EOF インジケーターをテストします。
+
+文法:
+
+.. code-block:: ring
+
+       Feof(ファイルハンドル) ---> EOF ならば 1 を、そうでなければ 0 を返します。
+
+.. index:: 
+       pair: ファイル; Ferror()
+
+Ferror() 関数
+=============
+
+Ferror() 関数 はエラーインジケーターをテストします。
+
+文法:
+
+.. code-block:: ring
+
+       Ferror(ファイルハンドル) ---> エラーならば 1 を、そうでなければ 0 を返します。
+
+.. index:: 
+       pair: ファイル; Perror()
+
+Perror() 関数
+=============
+
+Perror() 関数は標準出力エラーへエラーメッセージを表示します。
+
+文法:
+
+.. code-block:: ring
+
+       Perror(cErrorMessage)
+
+.. index:: 
+       pair: ファイル; Fgetc()
+
+Fgetc() 関数
+============
+
+Fgetc() 関数はストリームから次の文字を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       Fgetc(ファイルハンドル) ---> 文字または EOF を返します。
+
+
+.. index:: 
+       pair: ファイル; Fgets()
+
+Fgets() 関数
+============
+
+Fgets() 関数はストリームから新しい行を読み取ります。
+
+文法:
+
+.. code-block:: ring
+
+       Fgets(ファイルハンドル,nSize) ---> 文字列
+
+この関数は nSize 文字まで読み取る、または新しい行を読み取るか EOF になると停止します。
+
+.. index:: 
+       pair: ファイル; Fputc()
+
+Fputc() 関数
+============
+
+Fputc() 関数は文字をストリームへ書き込みます。
+
+文法:
+
+.. code-block:: ring
+
+       Fputc(ファイルハンドル,cChar)
+
+.. index:: 
+       pair: ファイル; Fputs()
+
+Fputs() 関数
+============
+
+Fputs() 関数は文字列をストリームへ書き込みます。
+
+文法:
+
+.. code-block:: ring
+
+       Fputs(ファイルハンドル,cString)
+
+
+.. index:: 
+       pair: ファイル; Ungetc()
+
+Ungetc() 関数
+=============
+
+Ungetc() 関数は文字をストリームへプッシュします。
+
+文字は次回の読み取りから利用できます。
+
+文法:
+
+.. code-block:: ring
+
+       Ungetc(ファイルハンドル,文字)
+
+
+.. index:: 
+       pair: ファイル; Fread()
+
+Fread() 関数
+============
+
+Fread() 関数はデータをストリームへ読み込みます。 
+
+文法:
+
+.. code-block:: ring
+
+       Fread(ファイルハンドル,nSize)
+
+.. index:: 
+       pair: ファイル; Fwrite()
+
+Fwrite() 関数
+=============
+
+Fwrite() 関数はデータをストリームへ書き込みます。
+
+文法:
+
+.. code-block:: ring
+
+       Fwrite(ファイルハンドル,cString)
+
+
+.. index:: 
+       pair: ファイル; Fexists()
+
+Fexists() 関数
+==============
+
+Fexists() 関数はファイルの存在を確認します。
+
+文法:
+
+.. code-block:: ring
+
+       Fexists(cFileName) ---> ファイルが存在する場合は 1 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       see fexists("b:\mahmoud\apps\ring\ring.exe") + nl +
+           fexists("b:\mahmoud\apps\ring\ring2.exe") + nl 
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       0
+
+.. index:: 
+       pair: ファイル; 用例
+
+用例
+====
+
+このプログラムはファイル関数をテストします。
+
+.. code-block:: ring
+
+       See "testing file functions" + nl
+
+       See "open file" + nl
+       fp = fopen(exefolder() + "../tests/scripts/s65.ring","r")
+
+       See "reopen" + nl
+       fp = freopen(exefolder() + "../tests/scripts/s78.ring","r",fp)
+       See "close file" + nl
+       fclose(fp)
+
+       see "temp file" + nl
+       fp = tempfile()
+       fclose(fp)
+
+       see "temp name" + nl
+       see tempname() + nl
+
+       remove(exefolder() + "../tests/scripts/mytest2.txt")
+       write(exefolder() + "../tests/scripts/tests1.txt","hello")
+       rename(exefolder() + "../tests/scripts/test1.txt",exefolder() +
+                                               "../tests/scripts/mytests2.txt")
+
+       see "print file" + nl
+       fp = fopen(exefolder() + "../samples/fromdoc/filefuncs.ring","r")
+       r = fgetc(fp)
+       while isstring(r)
+                       see r
+                       r = fgetc(fp)
+       end
+       fclose(fp)
+
+       see nl+"print line from the file" + nl
+       fp = fopen(exefolder() + "../samples/fromdoc/filefuncs.ring","r")
+       r = fgets(fp,33)
+       see r + nl
+       fclose(fp)
+       fp = fopen(exefolder() + "../tests/scripts/test78.txt","w+")
+       fseek(fp,0,2) # ファイルの末尾へ移動
+       fputc(fp,"t")
+       fputc(fp,"e")
+       fputc(fp,"s")
+       fputc(fp,"t")
+       fputs(fp,"tests2")
+       fclose(fp)
+
+       see "print file" + nl
+       see read(exefolder() + "../tests/scripts/test78.txt")
+
+       fp = fopen(exefolder() + "../tests/scripts/test78.txt","r")
+       see "testing ungetc() " + nl
+       for x = 1 to 3
+                       r = fgetc(fp)
+                       see r + nl
+                       ungetc(fp,r)
+       next
+       fclose(fp)
+
+       see "testing fread() " + nl
+       fp = fopen(exefilename(),"rb")
+       r = fread(fp,100)
+       see r + nl
+       fclose(fp)
+
+       see "testing fwrite() " + nl
+       fp = fopen(exefolder() + "../tests/scripts/test1.txt","wb")
+       fwrite(fp,r)
+       fclose(fp)
+
+この用例はバイナリファイルの内容を表示します。
+
+.. code-block:: ring
+
+       see "Testing: fread()" +" FileName: "+ exefilename() +nl +nl
+       fp = fopen(exefilename(),"rb")
+       r = fread(fp,800)
+       for n =1 to len(r)
+               if isprint(substr(r, n, 1)) 
+                       see substr(r, n, 1) 
+               else
+                       see "." 
+               ok
+               ### 1行あたり 80 文字
+               if n % 80 = 0  
+                       see nl
+               ok
+       next
+       fclose(fp)
+
+.. index:: 
+       pair: ファイル; 数値とバイト
+
+数値とバイト
+============
+
+この関数は数値とバイトとの間で変換を行います。
+
+* Int2Bytes()
+* Float2Bytes()
+* Double2Bytes()
+* Bytes2Int()
+* Bytes2Float()
+* Bytes2Double()
+
+用例:
+
+.. code-block:: ring
+
+       see "Test Int2Bytes() and Bytes2Int() - Value : 77" + nl
+       r = Int2Bytes(77)
+       see "Int Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Int(r) + nl
+       see "Test Float2Bytes() and Bytes2Float() - Value 77.12" + nl
+       r = Float2Bytes(77.12)
+       see "Float Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Float(r) + nl
+       see "Test Double2Bytes() and Bytes2Double() - Value 9999977.12345" + nl
+       r = Double2Bytes(9999977.12345)
+       see "Double Size : " + len(r) + nl
+       see r + nl
+       decimals(5)
+       see Bytes2Double(r) + nl
diff --git a/docs/ja-jp/source/findinfiles.png b/docs/ja-jp/source/findinfiles.png
new file mode 100644 (file)
index 0000000..5cb26be
Binary files /dev/null and b/docs/ja-jp/source/findinfiles.png differ
diff --git a/docs/ja-jp/source/flappybird.png b/docs/ja-jp/source/flappybird.png
new file mode 100644 (file)
index 0000000..073a20a
Binary files /dev/null and b/docs/ja-jp/source/flappybird.png differ
diff --git a/docs/ja-jp/source/formdesigner.png b/docs/ja-jp/source/formdesigner.png
new file mode 100644 (file)
index 0000000..edd4a37
Binary files /dev/null and b/docs/ja-jp/source/formdesigner.png differ
diff --git a/docs/ja-jp/source/formdesigner.txt b/docs/ja-jp/source/formdesigner.txt
new file mode 100644 (file)
index 0000000..bf62662
--- /dev/null
@@ -0,0 +1,202 @@
+.. index:: 
+       single: フォームデザイナーの用法; はじめに
+
+========================
+フォームデザイナーの用法
+========================
+
+フォームデザイナーの用法を学びます。
+
+Ring ノートパッドからフォームデザイナーを実行できます。
+
+Ring ノートパッドのメニューバーから → 表示メニュー → フォームデザイナーを選択するとフォームデザイナーのウィンドウを表示、または非表示にできます。
+
+.. image:: rnotefd.png
+       :alt: フォームデザイナー - Ring ノートパッドの内面図
+
+また、別のウィンドウからフォームデザイナーを実行することもできます。
+
+Ring ノートパッドからツールメニュー → フォームデザイナーを選択します。
+
+.. image:: formdesigner.png
+       :alt: フォームデザイナー
+
+.. index:: 
+       pair: フォームデザイナーの用法; フォームデザイナーのウィンドウ
+
+フォームデザイナーのウィンドウ
+==============================
+
+* ツールボックス (Toolbox)     : ウィンドウへ追加するコントロールを選択します。
+
+* プロパティ (Properties)      : アクティブなウィンドウ、またはコントロールのプロパティを設定します。
+
+* デザイン領域 (Design Region) : ウィンドウとコントロールの選択、移動、サイズを変更します。
+
+.. index:: 
+       pair: フォームデザイナーの用法; ツールボックス
+
+ツールボックス
+==============
+
+このようなボタンがあります。
+
+* ロック (Lock)                         : 同じ種類の様々なコントロールを描画するために使えます。
+
+* 選択 (Select)                         : デザイン領域のコントロールを選択します。
+
+* コントロールボタン (Controls Buttons) : ウィンドウへ追加するコントロールを選択します。
+
+.. index:: 
+       pair: フォームデザイナーの用法; プロパティ
+
+プロパティ
+==========
+
+* ウィンドウ、またはコントロールの選択時に、選択したオブジェクトには、プロパティ (Properties) があります。
+
+* また、プロパティのウィンドウには、アクティブなコントロールを選択するためのコンボボックスがあります。
+
+* プロパティの一部では、プロパティ値の隣にボタンがあります。ボタンをクリックすると追加のオプションがあります。
+
+* コントロールを複数選択した時は、複数のオプションがあります。
+
+.. image:: fdms.png
+       :alt: フォームデザイナー - 複数選択
+
+.. index:: 
+       pair: フォームデザイナーの用法; フォームの実行
+
+フォームの実行
+==============
+
+フォームデザイナーは、フォームファイル (\*.rform) の保存時に二種類の Ring ファイルを作成します。
+
+* Controller クラス
+* View クラス
+
+例えば、フォームファイルが helloworld.rform ならば、
+
+フォームデザイナーはファイルを二つ生成します。
+
+* helloworldcontroller.ring
+* helloworldview.ring
+
+プログラムを実行するには、 Controller クラスのファイルを開いた後に Run ボタン (Ctrl+F5) をクリックします。
+
+.. tip:: Ring ノートパッドでフォームを開いた時は自動的に Controller クラスが開かれます。そのまま実行するには (Ctrl+F5) を打鍵、またはフォームデザイナーのウィンドウがアクティブな時に Run ボタンをクリックしてください。
+
+.. index:: 
+       pair: フォームデザイナーの用法; イベントのコード
+
+イベントのコード
+================
+
+(1) イベントプロパティに、メソッド名を入力します。
+
+.. image:: fdeventmethod.png
+       :alt: フォームデザイナー - イベントのメソッド
+
+(2) 次に、 Controller クラスへメソッドのコードを記述します。
+
+.. image:: fdeventcode.png
+       :alt: フォームデザイナー - イベントのコード
+
+この用例での記述は
+
+.. code-block:: ring
+
+       func CloseWindow
+               oView.win.close()
+
+Controller クラスの内側では、 oView オブジェクトからフォームへアクセスします。
+
+その他の用例:
+
+.. image:: fdsayhello1.png
+       :alt: フォームデザイナー - Say Hello
+
+イベントのコード
+
+.. code-block:: ring
+
+       func SayHello 
+               oView {
+                       LineEdit2.setText("Hello "+ LineEdit1.text() )
+               }
+
+
+.. index:: 
+       pair: フォームデザイナーの用法; キーボードショートカット
+
+キーボードショートカット
+========================
+
+コントロールを複数選択後に、
+
+* カーソルキー (上、下、左、右) で移動します。
+* Shift + カーソルキー (上、下、左、右) でコントロールのサイズを変更します。
+* Del キーでコントロールを削除します。
+* Ctrl + Shift + V でコントロールを複製します。
+
+
+.. index:: 
+       pair: フォームデザイナーの用法; メニューバーデザイナー
+
+メニューバーデザイナー
+======================
+
+ウィンドウのプロパティからメニューバーデザイナー開くことができます。
+
+
+.. image:: menubardesigner.png
+       :alt: フォームデザイナー - メニューバーデザイナー
+
+.. index:: 
+       pair: フォームデザイナーの用法; ウィンドウフラグ
+
+ウィンドウフラグ
+================
+
+ウィンドウのプロパティからウィンドウフラグのウィンドウを開くことができます。
+
+
+.. image:: windowflags.png
+       :alt: フォームデザイナー - ウィンドウフラグ
+
+
+.. index:: 
+       pair: フォームデザイナーの用法; 項目の入力
+
+項目の入力
+==========
+
+List ウィジェットなどのコントロールでは、項目をコンマ‘,’で区切って入力できます。
+
+.. image:: fdlistitems.png
+       :alt: フォームデザイナー - リスト項目
+
+
+.. index:: 
+       pair: フォームデザイナーの用法; レイアウトの用法
+
+レイアウトの用法
+================
+
+(1) レイアウトを使うには、まずウィンドウへ Layout コントロールを追加します。
+
+(2) ウィンドウの “レイアウトの設定” プロパティからメインレイアウトを決定します。
+
+(3) Layout プロパティから、コントロールとレイアウトの種類を決定します。
+
+
+.. index:: 
+       pair: フォームデザイナーの用法; その他のサンプルとテスト
+
+その他のサンプルとテスト
+========================
+
+フォルダをご確認ください : ring/applications/formdesigner/tests
+
+オンライン版 : https://github.com/ring-lang/ring/tree/master/applications/formdesigner/tests
+
diff --git a/docs/ja-jp/source/formdesignerandroid.png b/docs/ja-jp/source/formdesignerandroid.png
new file mode 100644 (file)
index 0000000..eac7ded
Binary files /dev/null and b/docs/ja-jp/source/formdesignerandroid.png differ
diff --git a/docs/ja-jp/source/formtranslation1.png b/docs/ja-jp/source/formtranslation1.png
new file mode 100644 (file)
index 0000000..992f34f
Binary files /dev/null and b/docs/ja-jp/source/formtranslation1.png differ
diff --git a/docs/ja-jp/source/foxringfuncsdoc.txt b/docs/ja-jp/source/foxringfuncsdoc.txt
new file mode 100644 (file)
index 0000000..b501ffb
--- /dev/null
@@ -0,0 +1,953 @@
+.. index:: 
+     single: FoxRing 関数リファレンス; はじめに
+
+========================
+FoxRing 関数リファレンス
+========================
+
+FoxPro 開発者として、 FoxPro 関数を使用したクラスの開発を開始しました。
+
+目標は FoxPro の関数に動作が似ている Ring の関数を可能な限り多数作成することです。
+
+開発者: ホセ・ロサード
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; FoxRing 関数
+
+FoxRing 関数
+============
+
++-----------------------+-----------------------------------------------------------------------------------------------+
+| 関数名                | 説明                                                                                          |
++=======================+===============================================================================================+
+| frAbs()               | 指定された数値式の絶対値を返します。                                                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAddBs()             | パス表現にバックスラッシュを追加します (必要ならば)。                                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frALines()            | 指定された文字列の内容で配列を作成します。                                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAllTrim()           | 指定された文字列の文頭と文末にある空白文字を全て除去します。                                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAsc()               | 文字式の左端にある文字の ANSI 値を返します。                                                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAt()                | 文字式に出現する別の文字式を検索します (英数大小文字を区別します)。                           |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frAtC()               | 文字式に出現する別の文字式を検索します (英数大小文字を区別しません)。                         |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frBetween()           | 式値が同一型の二式値の間にあるかどうかを確認します。                                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frChr()               | ANSI コードを数値で指定して関連づけられている文字列を返します。                               |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frEmpty()             | 式の評価が空であるかどうかを判定します。                                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frFile()              | 指定されたファイルがディスクにあるかどうかを確認します。                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frFileToStr()         | ファイルの内容を文字列として返します。                                                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frForceExt()          | ファイルの旧拡張子を新拡張子で置換した文字列を返します。                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frForcePath()         | 古いものの代わりに置換された新しいパス名を使用したファイル名を返します。                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frIif()               | 論理式の値により2つの値のうち1つを返します。                                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frInList()            | 式が別式にある式集合と一致する式であるかどうか決定します。                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frInt()               | 数値式を評価してから式の整数部分を返します。                                                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustDrive()         | 絶対パスからドライブ文字を返します。                                                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustExt()           | 絶対パスからファイル拡張子の文字を返します。                                                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustFName()         | 絶対パスとファイル名からファイル名の部分を返します。                                          |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustPath()          | 絶対パスとファイル名とパスの部分を返します。                                                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frJustStem()          | 絶対パスとファイル名からステム名 (拡張子の前のファイル名) を返します。                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frLen()               | 式の長さを示すことで、文字式の文字数を決定します。                                            |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frListToString()      | 文字列の配列要素で文字列を作成します。                                                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frLTrim()             | 指定された文字式から先頭の空白文字または構文解析文字を全て削除します。                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frPadL()              | 左側へ指定された長さの空白文字または文字で桁揃えを行い、式から文字列を返します。              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frPadR()              | 右側へ指定された長さの空白文字または文字で桁揃えを行い、式から文字列を返します。              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frProper()            | 文字式から固有名詞として適切に大文字化された文字列を返します。                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frReplicate()         | 指定された文字式を指定回数反復したものを文字列として返します。                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frRTrim()             | 指定された文字式から文末の空白文字または構文解析文字を全て削除します。                        |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSetIfEmpty()        | 変数の値が空、 NULL または 0 ならば変数の値を設定します。                                     |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSetSeparatorTo()    | 数値位置分離記号として使用する文字を指定します。                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSpace()             | 指定された個数の空白文字で構成されている文字列を返します。                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStr()               | 数値の式と等価な文字を返します。                                                              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStringToList()      | 指定された文字列の内容でリストを作成します。                                                  |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStrTran()           | 文字式に対して第二文字式を検索を行い、各出現位置を第三文字式で置換します。                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frStuff()             | 式の文字数を指定することにより別の文字式を新しい文字列で置換したものを返します。              |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frSubStr()            | 指定された文字式の始点位置から指定された文字数までを返します。                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+|                       | 総計を行った結果の文字式から文字列を返します。                                                |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frTransform()         | 書式コードにより決定された書式で式から文字列を返します。                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frVal()               | 数字で構成された文字式から数値を返します。                                                    |
++-----------------------+-----------------------------------------------------------------------------------------------+
+| frVarType()           | 式のデータ型を返します。                                                                      |
++-----------------------+-----------------------------------------------------------------------------------------------+
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frAbs() 関数
+
+frAbs() 関数
+============
+
+.. code-block:: none
+
+    * 文法    : lnReturnValue = frAbs(tnExpression)
+    * 説明    : 指定された数値式の絶対値を返します。
+    *         :
+    * 引数    : <tnExpression>
+    *         : frAbs() の返値は数値式を指定して
+    *         : 得られた絶対値です。
+    * 返値    : <lnReturnValue>
+    *         : 指定された数値式の絶対値を返します。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frAsc() 関数
+
+frAsc() 関数
+============
+
+.. code-block:: none
+
+        * 文法    : lnReturnValue = frAsc(tcExpression)
+        * 説明    : 文字式の左端にある文字に対して ANSI 値を返します。
+        *         : 
+        * 引数    : <tcExpression>
+        *         : frAsc() で ANSI 値を返したい文字のある文字式を指定します。
+        *         : 
+        *         : tcExpression にある先頭の1文字目以降は
+        *         : frAsc() により無視されます。
+        * 返値    : <lnReturnValue>
+        *         : 現在のコードページの文字テーブルに
+        *         : 関連づけられている文字位置を返します。
+        *         : 文字ごとに 0 ~ 255 までの範囲内で
+        *         : 固有の ANSI 値があります
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frAddBs() 関数
+
+frAddBs() 関数
+==============
+
+.. code-block:: none
+
+     * 文法    : lcReturnValue = frAddBs(tcPath)
+     * 説明    : パス表現にバックスラッシュを追加します (必要ならば)。
+     *         :
+     * 引数    : <tcPath>
+     *         : バックスラッシュを追加するパス名を指定します。
+     *         :
+     * 返値    : <lcReturnValue> バックスラッシュを追加したパス名を返します。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frAt() 関数
+
+frAt() 関数
+===========
+
+.. code-block:: none
+
+     * 文法    : lnPos = frAt(tcToSearch, tcString, tnOccurrence)
+     * 説明    : 文字式に出現する別の文字式を検索します。
+     *         : 
+     *         : frAt() による検索では英数大小文字を区別します。
+     *         :
+     * 引数    : <tcToSearch>
+     *         : <tcString> に対して検索する文字式を指定します。
+     *         : 
+     *         : <tcString> 
+     *         : <tcToSearch> に対して検索する文字式を指定します。
+     *         :  
+     *         : <tnOccurrence> 
+     *         : <tcString> に対する <tcToSearch> の検索において
+     *         : 1番目、2番目、3番目など出現位置を指定します。
+     *         : 
+     *         : デフォルトでは、 frAt() は <tcToSearch> (tnOccurrence = 1) の
+     *         : 最初の出現位置を検索します。
+     * 返値    : 数値。 frAt() は左端の文字を始点として、
+     *         : 文字式、または別の文字式内にあるメモフィールド、
+     *         : メモフィールドにある最初の文字の位置を示す整数を返します。
+     *         : 
+     *         : 式やフィールドが見つからない、
+     *         : または <tnOccurrence> が <tcToSearch> 内の
+     *         : <tcString> よりも出現回数が多いならばfrAt() は
+     *         : 0 を返します。
+     *         : 
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frAtC() 関数
+
+frAtC() 関数
+============
+
+.. code-block:: none
+
+     * 文法    : lnPos = frAtC(tcToSearch, tcString, tnOccurrence)
+     * 説明    : 文字式に出現する別の文字式を検索します。
+     *         : 
+     *         : frAtC() による検索では英数大小文字を区別しません。
+     *         :
+     * 引数    : <tcToSearch>
+     *         : <tcString> に対して検索する文字式を指定します。
+     *         : 
+     *         : <tcString> 
+     *         : <tcToSearch> に対して検索する文字式を指定します。
+     *         : 
+     *         : <tnOccurrence> 
+     *         : <tcString> に対する <tcToSearch> の検索において
+     *         : 1番目、2番目、3番目など出現位置を指定します。
+     *         : 
+     *         : デフォルトでは、 frAtC() は <tcToSearch> (tnOccurrence = 1) の
+     *         : 最初の出現位置を検索します。
+     * 返値    : 数値。 frAtC() は左端の文字を始点として、
+     *         : 文字式、または別の文字式内にあるメモフィールド、
+     *         : メモフィールドにある最初の文字の位置を示す整数を返します。
+     *         : 
+     *         : 式やフィールドが見つからない、
+     *         : または <tnOccurrence> が <tcToSearch> 内の
+     *         : <tcString> よりも出現回数が多いならばfrAtC() は
+     *         : 0 を返します。
+     *         : 
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frChr() 関数
+
+frChr() 関数
+============
+
+.. code-block:: none
+
+     * 文法    : lcReturnValue = frChr(tnExpression)
+     * 説明    : ANSI コードを数値で指定して関連づけられている文字を返します。
+     *         : 
+     * 引数    : <tnExpression>
+     *         : frChr() は 0 ~ 255 までの範囲内の数値に対応する
+     *         : ANSI 文字を指定します。
+     * 返値    : <lcReturnValue>
+     *         : 現在のコードページの文字テーブルに
+     *         : 関連づけられている文字の数値位置に
+     *         : 対応する文字を返します。
+     *         :
+     * 注釈    : tnExpression は 0 ~ 255 までの範囲内を必ず指定してください。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frEmpty() 関数
+
+frEmpty() 関数
+==================
+
+.. code-block:: none
+
+     * 文法    : llReturnValue = frEmpty(tuExpression)
+     * 説明    : 式の評価が空であるかどうかを判定します。
+     *         :
+     * 引数    : <tuExpression>
+     *         : EMPTY() で評価する式を指定します。
+     *         : 式には数値、文字、または論理型を指定できます。
+     *         : 
+     *         :
+     * 返値    : <llReturnValue> 論理
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frFile() 関数
+
+frFile() 関数
+=============
+
+.. code-block:: none
+
+     * 文法    : llReturnValue = frFile(tcFileName, tnFlag)
+     * 説明    : 指定されたファイルがディスクにあるかどうかを確認します。
+     *         :
+     * 引数    : <tcFileName>
+     *         : 指定されたファイル名で確認します。
+     *         : tcFileName にはファイルの拡張子が必要です。
+     *         : ディレクトリでのファイル検索、
+     *         : またはカレントディレクトリ以外のドライブ、
+     *         : あるいはドライブをファイル名として
+     *         : パスと一緒に指定できます。
+     *         : 
+     *         : <tnFlag> 
+     *         : tnFlag は将来の互換性ために予約されています。
+     *         : このバージョンでは、ディスクにファイルがあるときは
+     *         : 常に true を返します。
+     * 返値    : <llReturnValue> 論理
+     *         : True ならばファイルはディスクにあります。
+     *         : False ならばファイルはディスクにありません。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frFileToStr() 関数
+
+frFileToStr() 関数
+==================
+
+.. code-block:: none
+
+     * 文法    : lcReturnValue = frFileToStr(tcFileName)
+     * 説明    : ファイルの内容を文字列として返します。
+     *         :
+     * 引数    : <tcFileName>
+     *         : ファイルの内容を文字列として返したい
+     *         : ファイル名を指定します。
+     *         : ファイル現在のデフォルトディレクトリ以外の
+     *         : ディレクトリにある場合は、
+     *         : ファイル名と一緒にパスを指定してください。
+     *         :
+     * 返値    : <lcReturnValue> 
+     *         : 指定されたファイル内容がある文字列。
+     *         :
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frStr() 関数
+
+frStr() 関数
+============
+
+.. code-block:: none
+
+     * 文法    : lcReturnValue = frStr(tnValue, tnLen, tnDec)
+     * 説明    : 数値の式と等価な文字を返します。
+     *         :
+     * 引数    : <tnValue>
+     *         : 評価する数値の式を指定します。
+     *         : 
+     *         : <tnLen>
+     *         : 返された文字列の長さを指定します。
+     *         : tnLen が 0 ならば、デフォルトは 10 文字になります。
+     *         : tnLen < 0 ならば、 文字列の長さは数値と同じです。
+     *         : 
+     *         : 注意  
+     *         : 式に小数点がある場合は、小数点は1文字として、
+     *         : そして、文字列の各桁も1文字として長さに算入されます。
+     *         : 
+     *         : <tnDec> 
+     *         : 返された文字列にある小数位の桁数の数値を指定します。
+     *         : 
+     *         : tnDec を使って小数位の桁数の数字を指定するには、
+     *         : nLength を有する必要があります。nDecimalPlaces を省略した場合、
+     *         : 小数位の桁数の数字はゼロ (0) がデフォルトになります。
+     *         : 
+     * 返値    : 文字列データ型。 frStr() は指定された数値の式と
+     *         : 等価な文字列を返します。 
+     *         : 
+     *         : 特定の条件により、 frStr() は次のことを返すことがあります:
+     *         : tnValue よりも少ない小数位の桁数を指定した場合は返値は切り上げられます。
+     *         : 丸め込みの処理結果が近似小数位の桁数でなく上方ならば、
+     *         : ROUND( ) による処理が入ります。
+     *         : 詳細情報は、 ROUND( ) 関数を参照してください。
+     *         : 
+     *         : nExpression が整数であり、nExpression の桁数が
+     *         : nLength 以下ならば、frStr( ) は数値の
+     *         : 桁あふれを示すためにアスタリスク文字列を返します。
+     *         : 
+     *         : nExpression が小数点であり、nExpression の残り小数点の桁数が
+     *         : nLength 以下または等しいならば、frStr() は
+     *         : 数値の桁あふれを示すためにアスタリスク文字列を返します。
+     *         : 
+     *         : nLength が nExpression で評価された値の長さよりも長いならば、
+     *         : frStr() は先頭を空白文字で桁揃えした文字列を返します。
+     *         : 
+     *         : nExpression が数値あるいは浮動小数点数型を有しており、
+     *         : nLength が nExpression の桁数以下ならば、
+     *         : frStr() は指数表現を用いた値を返します。
+     *         : 
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frSetIfEmpty() 関数
+
+frSetIfEmpty() 関数
+===================
+
+.. code-block:: none
+
+     * 文法    : tuReturnValue = frSetIfEmpty(tuValue, tuNewValue)
+     * 説明    : 変数の値が空、 NULL または 0 ならば
+     *         : 変数の値を設定します。
+     * 引数    : <tuValue>
+     *         : 評価を行う値。
+     *         :
+     *         : <tuNewValue>
+     *         : tuValue が空ならば変数の値を設定します。
+     *         :
+     * 返値    : tuValue が空ならば tuNewValue を、
+     *         : それ以外は元値を返します。
+     * 注釈    : この関数は Visual FoxPro にはありません。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frSpace() 関数
+
+frSpace() 関数
+==============
+
+.. code-block:: none
+
+     * 文法    : lcReturnValue = frSpace(tnSpaces)
+     * 説明    : 指定された個数の空白文字で構成されている文字列を返します。
+     *         : 
+     * 引数    : <tnSpaces>
+     *         : frSpace() は指定された個数の空白文字を返します。
+     *         :
+     * 返値    : <lcReturnValue> 
+     *         : 文字
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frInList() 関数
+
+frInList() 関数
+===============
+
+.. code-block:: none
+
+     * 文法    : llReturnValue = frInList(tuExpression, taList)
+     * 説明    : 式が別式にある式集合と一致する
+     *         : 式であるかどうか決定します。
+     * 引数    : <tuExpression>
+     *         : リストで検索する式を frInList() へ指定します。
+     *         :
+     *         : <taList>
+     *         : 検索する式のリストを指定します。
+     *         : リストには最低でも1要素が存在する必要があります。
+     *         : 式のリストにある式は同一データ型である
+     *         : 必要はありません。
+     *         :
+     * 返値    : <luReturnValue> Null または論理値。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frForcePath() 関数
+
+frForcePath() 関数
+==================
+
+.. code-block:: none
+
+     * 文法    : lcReturnValue = frForcePath(tcFileName, tcPath)
+     * 説明    : 古いものの代わりに置換された新しい
+     *         : パス名を使用したファイル名を返します。
+     * 引数    : <tcFileName>
+     *         : 新しいパスを取得するファイル名 (パスあるいは拡張子の
+     *         : 有無にかかわらず) を指定します。
+     *         : <tcPath>
+     *         : tcFileName の新しいパスを指定します。
+     *         :
+     * 返値    : <lcReturnValue> 
+     *         : 古いものの代わりに置換された新しい
+     *         : パス名を使用したファイル名を返します。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frAllTrim() 関数
+
+frAllTrim() 関数
+================
+
+.. code-block:: none
+
+       文法  : lcReturnValue = frAllTrim(tcExpression, tcCharacter)
+
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frLTrim() 関数
+
+frLTrim() 関数
+==============
+
+.. code-block:: none
+
+       文法  : lcRet = frLTrim(tcExpression, tcCharacter)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frJustDrive() 関数
+
+frJustDrive() 関数
+==================
+
+.. code-block:: none
+
+        * 文法       : lcReturnValue = frJustDrive(tcPath)
+        * 説明       : 絶対パスからドライブ文字を返します。
+        *              :
+        * 引数       : <tcPath>
+        *              : ドライブ文字を求めたい絶対パス名を指定します。
+        *              : 
+        * 返値       : <lcReturnValue> 
+        *              : 絶対パスからドライブ文字を返します。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frJustExt() 関数
+
+frJustExt() 関数
+================
+
+.. code-block:: none
+
+        * 文法       : lcReturnValue = frJustExt(tcPath)
+        * 説明       : 絶対パスからファイル拡張子の文字列を返します。
+        *              : 
+        * 引数       : <tcPath>
+        *              : 拡張子を求めたいファイルのあるフルパスを指定します。
+        *              : 
+        * 返値       : <lcReturnValue> 
+        *              : 絶対パスからファイル拡張子の文字列を返します。
+        *              : 
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frJustStem() 関数
+
+frJustStem() 関数
+=================
+
+.. code-block:: none
+
+        * 文法       : lcReturnValue = frJustStem(tcPath)
+        * 説明       : 絶対パスとファイル名からステム名 (拡張子の前のファイル名) を
+        *              : 返します。
+        * 引数       : <tcPath>
+        *              : ステムを求めたいファイル名 (パスを含む)を指定します。
+        *              : 
+        * 返値       : <lcReturnValue> 
+        *              : 絶対パスからファイル名のステム名を返します。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frRTrim() 関数
+
+frRTrim() 関数
+==============
+
+.. code-block:: none
+
+        文法 : lcRet = frRTrim(tcExpression, tcCharacter)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frJustPath() 関数
+
+frJustPath() 関数
+=================
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frJustPath(tcExpression)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frForceExt() 関数
+
+frForceExt() 関数
+=================
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frForceExt(tcFileName, tcNewExtension)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frALines() 関数
+
+frALines() 関数
+===============
+
+.. code-block:: none
+
+       文法  : tnReturnValue = frALines(taList, tcExpression, tcSeparator)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frJustFName() 関数
+
+frJustFName() 関数
+==================
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frJustFName(tcExpression)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frPadL() 関数
+
+frPadL() 関数
+=============
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frPadL(tcString, tnLen, tcChar)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frPadR() 関数
+
+frPadR() 関数
+=============
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frPadR(tcString, tnLen, tcChar)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frProper() 関数
+
+frProper() 関数
+===============
+
+.. code-block:: none
+
+     * 文法    : tcReturnValue = frProper(tcExpression)
+     * 説明    : 文字式から固有名詞として適切に
+     *         : 大文字へ変換した文字列を返します。
+     * 引数    : <tcExpression>
+     *         :  frProper() には大文字へ変換したい
+     *         : 文字列を文字式を指定します。
+     * 返値    : <tcReturnValue> 
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frReplicate() 関数
+
+frReplicate() 関数
+==================
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frReplicate(tcString, tnTimes)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frLen() 関数
+
+frLen() 関数
+============
+
+.. code-block:: none
+
+       文法  : tnReturnValue = frLen(tcString)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frStuff() 関数
+
+frStuff() 関数
+==============
+
+.. code-block:: none
+
+     * 文法    : tcReturnValue = frStuff(tcExpression, tnStartRep,
+                                         tnCharRep,    tcToReplace)
+     * 説明    : 式の文字数を指定することにより
+     *         : 別の文字式を新しい文字列で置換したものを返します。
+     *         :
+     * 引数    : <tcExpression>
+     *         : 置換対象の文字式を指定します。
+     *         : 
+     *         : <tnStartRep>
+     *         : <tcExpression> の置換開始位置を指定します。
+     *         : 
+     *         : <tnCharRep>
+     *         : 置換文字数を指定します。
+     *         : <tnCharRep> が0 ならば、変換文字列 <tcToReplace> には
+     *         : <tcExpression>が挿入されます。
+     *         : 
+     *         : <tcToReplace>
+     *         : 置換文字式を指定します。
+     *         : <tcToReplace> が空文字列ならば、指定された文字数により 
+     *         : <tnCharRep> は <tcExpression> から削除されます。
+     *         :
+     * 返値    : 文字
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frSubStr() 関数
+
+frSubStr() 関数
+===============
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frSubStr(tcString, tnInitialPosition, tnNumberBytes)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frStrTran() 関数
+
+frStrTran() 関数
+================
+
+.. code-block:: none
+
+       文法  : tcReturnValue = frStrTran(tcString, tcOldString, tcNewString)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frListToString() 関数
+
+frListToString() 関数
+=====================
+
+.. code-block:: none
+
+        * 文法       : lcRet = frListToString(taList)
+        * 注釈       : この関数は Visual FoxPro にはありません。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frInt() 関数
+
+frInt() 関数
+============
+
+.. code-block:: none
+
+       文法          : lnInt = frInt(tnExpression)
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frStringToList() 関数
+
+frStringToList() 関数
+=====================
+
+.. code-block:: none
+
+        * 文法       : laList = frStringToList(tcExpression)
+        * 注釈       : この関数は Visual FoxPro にはありません。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frIIf() 関数
+
+frIIf() 関数
+============
+
+.. code-block:: none
+
+     * 文法    : luReturnValue = frIIf(tlExpression, tuReturnIfTrue, tuReturnIfFalse)
+     * 説明    : 論理式の値により2つの値のうち1つを返します。
+     *         : 
+     * 引数    : <tlExpression>
+     *         : frIIf() で評価する論理式を指定します。
+     *         :
+     *         : <tuReturnTrue>, <tuReturnFalse>
+     *         : tlExpression の評価が True ならば tuReturnIfTrue を、
+     *         : 未評価ならば tuReturnIfFalse が返されます。
+     *         : tlExpression の評価が False または Null ならば tuReturnIfFalse を、
+     *         : 未評価ならば tuReturnIfTrue が返されます。
+     *         : 
+     * 返値    : <luReturnValue> は <tuReturnIfTrue> または <tuReturnIfFalse> により定義済み。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frVal() 関数
+
+frVal() 関数
+============
+
+.. code-block:: none
+
+     * 文法    : luReturnValue = frVal(tcExpression)
+     * 説明    : 数字で構成された文字式から数値を返します。
+     *         : 
+     * 引数    : <tcExpression>
+     *         : 16 までの数字で構成された文字式を指定します。
+     *         :
+     * 返値    : <tnValue>
+     *         : 数値を返します。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frBetween() 関数
+
+frBetween() 関数
+================
+
+.. code-block:: none
+
+     * 文法    : luReturnValue = frBetween(tuTestValue, tuLowValue, tuHighValue)
+     * 説明    : 式値が同一型の二式値の間にあるかどうかを確認します。
+     *         : 
+     *         : 
+     *         : 
+     * 引数    : <tuTestValue>
+     *         : 評価する式を指定します。
+     *         :
+     *         : <tuLowValue>
+     *         : 低い範囲値を指定します。
+     *         :
+     *         : <tuHighValue>
+     *         : 高い範囲値を指定します。
+     *         :
+     * 返値    : <luReturnValue>
+     *         : 論理順序の NULL 値を返します。
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frSetSeparatorTo() 関数
+
+frSetSeparatorTo() 関数
+=======================
+
+.. code-block:: none
+
+     * 文法    : frSetSeparatorTo(tuExpression)
+     * 説明    : 数値位置分離記号として使用する文字を指定します。
+     *         :
+     * 引数    : <tuExpression>
+     *         : 数値位置分離記号として使用する文字を指定します。 
+     *         :
+     *         : frSetSeparatorTo() は数値位置分離記号を
+     *         : デフォルトからの変更で使用します。
+     *         : 例えば、空白文字 " "  またはカンマ "," です。
+     *         : デフォルト値へ戻すには frSetSeparatorTo(Null) を指定します
+     *         :
+     * 返値    : なし
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frTransform() 関数
+
+frTransform() 関数
+==================
+
+.. code-block:: none
+
+     * 文法    : tcReturnValue = frTransform(tuExpression, tcFormatCodes)
+     * 説明    : 書式コードにより決定された書式で式から文字列を返します。
+     *         : 
+     * 引数    : <tuExpression>
+     *         : 式の書式を指定します。
+     *         :
+     *         : <tcFormatCodes>       
+     *         : 式の書式処理方法を決定するために
+     *         : 1つ以上の書式コードを指定します。
+     *         : 
+     * 返値    : <tcReturnValue>
+
+これは tcFormatCodes で利用できる書式コードのリスト表です。
+
+.. csv-table::
+       :header: "書式コード", "説明"
+       :widths:       20,     80
+
+       "@!",   "文字列にある文字を全て大文字へ変換します。"
+       "@T",   "文字の値から先頭と文末にある空白文字を除去します。"
+       "@B",   "数値データを表示範囲内で左揃えします。"
+       "@L",   "数値の文字列データに対して先頭を 0 で桁合わせします。"
+       "@C",   "掛け売りを示すために正数値に CR を追加します。"
+       "@X",   "借り方を示すために負数値に DB を追加します。"
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; frVarType() 関数
+
+frVarType() 関数
+================
+
+.. code-block:: none
+
+     * 文法    : lcRet = frVarType(tuExpression)
+     * 説明    : 式のデータ型を返します。
+     *         :
+     * 引数    : <tuExpression>
+     *         : データ型を返したい式を指定します。
+     *         : frVartype() は式のデータ型を示す一文字を返します。
+     *         : 
+     *         : この表は frVarType() が返すデータ型のリストです。
+     *         : 
+     *         :
+     *         : -------------------   -------------------------------------
+     *         : 返値                  データ型
+     *         : -------------------   -------------------------------------
+     *         : C                     文字
+     *         : N                     数値
+     *         : A                     リスト 
+     *         : O                     オブジェクト 
+     *         : U                     未定義型
+     *         : -------------------   -------------------------------------
+     *         :
+     * 返値    : 文字
+
+.. index:: 
+     pair: FoxRing 関数リファレンス; 用例
+
+用例
+====
+
+.. code-block:: ring
+
+       Load "foxring.ring"
+
+
+       mf = new frFunctions
+
+       /*----------------------------------------------------------*/
+        * frProper() サンプル
+       /*----------------------------------------------------------*/
+
+       lcStr1 = "ring is a good language"
+       ?mf.frProper(lcStr1)
+       ?mf.frProper(Upper(lcStr1))
+
+
+       /*----------------------------------------------------------*/
+        * frStuff() サンプル
+       /*----------------------------------------------------------*/
+
+       lcStr1 = "abcdefghijklm"
+       lcStr2 = "12345" 
+
+       // 挿入
+       ?mf.frStuff(lcStr1, 4, 0, lcStr2)     
+       // 置換
+       ?mf.frStuff(lcStr1, 4, 3, lcStr2)     
+       // 削除
+       ?mf.frStuff(lcStr1, 4, 6, "")     
+       // 置換と挿入
+       ?mf.frStuff(lcStr1, 4, 1, lcStr2)     
+       // 置換と削除
+       ?mf.frStuff(lcStr1, 4, 4, lcStr2)     
+       // 置換、残りを削除
+       ?mf.frStuff(lcStr1, 4, Len(lcStr1), lcStr2)   
+
+       /*----------------------------------------------------------*/
+
+
+
+       ?mf.frAbs(-45)      
+       ?mf.frAbs(10-30)    
+       ?mf.frAbs(30-10)    
+
+       lcNumber1 = 40
+       lcNumber2 = 2
+
+       ?mf.frAbs(lcNumber2-lcNumber1)  
+
+
+
+
+       lcCompletFileName = "C:\ring\docs\source\contribute.txt"
+
+       ?mf.frFile(lcCompletFileName, Null)
+       if mf.frFile(lcCompletFileName, Null) {
+         ?mf.frFileToStr(lcCompletFileName)
+       else
+         ?"File does not exist"
+       }
+
+       lcNewPath = "C:\ring_2\docs\source\"
+       ?mf.frJustExt(lcCompletFileName)
+       ?mf.frJustDrive(lcCompletFileName)
+       ?mf.frJustStem(lcCompletFileName)
+       ?mf.frForcePath(lcCompletFileName, lcNewPath)
+       ?mf.frTransform("    Ring is a good language    ", 
+                       "@! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") 
+       ?mf.frAllTrim("    Ring is a good language    ", Null) 
+       ?mf._version
+       lnValue = 3125.54
+       ?mf.frTransform(lnValue, "@B")+ "Euros"
+       ?mf.frTransform(lnValue, "@C 9999,999,999,999.999")
+       mf.frSetSeparatorTo(" ")
+       ?mf.frTransform(lnValue, "9999,999,999,999.999")
+       ?mf.frInt(lnValue)
+       ?mf.frForceExt("teste", "dbf")
+       // 書式コード "@L" を frTransform() 関数へ追加
+       ?mf.frTransform("123", "@L 999999")
+       ?mf.frTransform(123, "@L 999999")
+
diff --git a/docs/ja-jp/source/fp.txt b/docs/ja-jp/source/fp.txt
new file mode 100644 (file)
index 0000000..699569d
--- /dev/null
@@ -0,0 +1,300 @@
+.. index:: 
+       single: 関数型プログラミング; はじめに
+
+====================
+関数型プログラミング
+====================
+
+以前の章では関数と再帰について学びました。
+
+関数型プログラミング (FP) の概念についてより詳しく学びます。
+
+* 純粋関数
+* 第一級関数
+* 高階関数
+* 無名関数と入れ子関数
+* 等式関数
+
+.. index:: 
+       pair: 関数型プログラミング; 純粋関数
+
+
+純粋関数
+========
+
+代入演算子により、関数への参照で渡される元データを処理する代わりに、
+変数の値 (リストとオブジェクト)をコピーして新しい変数を作成することで
+純粋関数 (状態を変更しない関数) を作成できます。
+
+
+用例:
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3,4,5]
+               aList2 = square(aList)
+               see "aList" + nl
+               see aList
+               see "aList2" + nl
+               see aList2
+
+       Func Square aPara
+               a1 = aPara              # リストのコピー
+               for x in a1
+                       x *= x
+               next
+               return a1               # 新しいリストを返します。
+               
+実行結果:
+
+.. code-block:: ring
+
+       aList
+       1
+       2
+       3
+       4
+       5
+       aList2
+       1
+       4
+       9
+       16
+       25
+
+
+.. index:: 
+       pair: 関数型プログラミング; 第一級関数
+
+第一級関数
+==========
+
+Ring の関数は第一級オブジェクトです。関数を仮引数として渡したり、
+変数として格納、または値を返せます。
+
+例えば、関数名を "関数名" または :関数名 のようにリテラルとして記述することで、関数の渡したり、返せます。
+
+関数名を有する変数を用いると、関数を渡したり返せます。
+
+Call 命令で関数名を有する変数から関数を呼び出します。
+
+文法:
+
+.. code-block:: ring
+
+       [関数の返値を代入するための変数] = Call 変数名([仮引数])
+
+用例:
+
+.. code-block:: ring
+
+       Func Main
+               see "before test2()" + nl
+               f = Test2(:Test)
+               see "after test2()" + nl
+               call f()
+
+       Func Test
+               see "Message from test!" + nl
+
+       Func Test2 f1
+               call f1()
+               See "Message from test2!" + nl
+               return f1       
+
+実行結果:
+
+.. code-block:: ring
+
+       before test2()
+       Message from test!
+       Message from test2!
+       after test2()
+       Message from test!
+
+.. index:: 
+       pair: 関数型プログラミング; 高階関数
+
+高階関数
+========
+
+高階関数は、ほかの関数を仮引数として扱う関数です。
+
+用例:
+
+.. code-block:: ring
+
+       Func Main
+               times(5,:test)
+
+       Func Test
+               see "Message from the test function!" + nl
+
+       Func Times nCount,F
+
+               for x = 1 to nCount
+                       Call F()
+               next    
+
+実行結果:
+
+.. code-block:: ring
+
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+       Message from the test function!
+
+.. index:: 
+       pair: 関数型プログラミング; 無名関数と入れ子関数
+
+無名関数と入れ子関数
+====================
+
+無名関数は、名前を持たない関数であり、ほかの関数へ仮引数として渡したり、変数へ格納できます。
+
+文法:
+
+.. code-block:: ring
+
+       Func [仮引数] { [ステートメント] }
+
+用例:
+
+.. code-block:: ring
+
+       test( func x,y { 
+                               see "hello" + nl
+                               see "Sum : " + (x+y) + nl
+                      } )
+
+       new great { f1() }
+
+       times(3, func { see "hello world" + nl } )
+
+       func test x
+               call x(3,3)
+               see "wow!" + nl
+
+       func times n,x
+               for t=1 to n
+                       call x()
+               next
+
+       Class great
+               func f1
+                       f2( func { see "Message from f1" + nl } )
+
+               func f2 x
+                       call x()
+
+実行結果:
+
+.. code-block:: ring
+
+       hello
+       Sum : 6
+       wow!
+       Message from f1
+       hello world
+       hello world
+       hello world
+
+用例:
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3,4]
+               Map (aList , func x { 
+                                       return x*x 
+                                   } )
+               see aList
+               aList = [4,9,14,25]
+               Map(aList, :myfilter )
+               see aList
+               aList = [11,12,13,14]
+               Map (aList , func x {
+                       if x%2=0
+                               return "even"
+                       else
+                               return "odd"
+                       ok
+               })
+               see aList
+
+       Func myfilter x
+               if x = 9
+                       return "True"
+               else
+                       return "False"
+               ok
+
+       Func Map aList,cFunc
+               for x in aList
+                       x = call cFunc(x)
+               next
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       4
+       9
+       16
+       False
+       True
+       False
+       False
+       odd
+       even
+       odd
+       even
+
+.. index:: 
+       pair: 関数型プログラミング; 等式関数
+
+等式関数
+========
+
+if 関数 = 関数、または演算子‘=’や‘!=’を用いずにテストできます (この機能は関数の等価性、あるいは Equality of functions とも言います)。
+
+用例:
+
+.. code-block:: ring
+
+       f1 = func { see "hello" + nl }
+
+       f2 = func { see "how are you?" + nl }
+
+       f3 = f1
+
+       call f1()
+       call f2()
+       call f3()
+
+       see (f1 = f2) + nl
+       see (f2 = f3) + nl
+       see (f1 = f3) + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       hello
+       how are you?
+       hello
+       0
+       0
+       1
+
+.. index:: 
+       pair: 関数型プログラミング; 参考文献
+
+参考文献
+========
+
+* How is the equality of functions defined? - Quora : https://www.quora.com/How-is-the-equality-of-functions-defined
diff --git a/docs/ja-jp/source/freeglutshot1.png b/docs/ja-jp/source/freeglutshot1.png
new file mode 100644 (file)
index 0000000..51d4040
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot1.png differ
diff --git a/docs/ja-jp/source/freeglutshot2.png b/docs/ja-jp/source/freeglutshot2.png
new file mode 100644 (file)
index 0000000..e054661
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot2.png differ
diff --git a/docs/ja-jp/source/freeglutshot3.png b/docs/ja-jp/source/freeglutshot3.png
new file mode 100644 (file)
index 0000000..66d9fc3
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot3.png differ
diff --git a/docs/ja-jp/source/freeglutshot4.png b/docs/ja-jp/source/freeglutshot4.png
new file mode 100644 (file)
index 0000000..5bdf74c
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot4.png differ
diff --git a/docs/ja-jp/source/freeglutshot5.png b/docs/ja-jp/source/freeglutshot5.png
new file mode 100644 (file)
index 0000000..79b7697
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot5.png differ
diff --git a/docs/ja-jp/source/freeglutshot6.png b/docs/ja-jp/source/freeglutshot6.png
new file mode 100644 (file)
index 0000000..b1f5134
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot6.png differ
diff --git a/docs/ja-jp/source/freeglutshot7.png b/docs/ja-jp/source/freeglutshot7.png
new file mode 100644 (file)
index 0000000..3314f08
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot7.png differ
diff --git a/docs/ja-jp/source/freeglutshot8.png b/docs/ja-jp/source/freeglutshot8.png
new file mode 100644 (file)
index 0000000..3a62168
Binary files /dev/null and b/docs/ja-jp/source/freeglutshot8.png differ
diff --git a/docs/ja-jp/source/functions.txt b/docs/ja-jp/source/functions.txt
new file mode 100644 (file)
index 0000000..48031a8
--- /dev/null
@@ -0,0 +1,230 @@
+.. index:: 
+       single: 関数 - 第一形式; はじめに
+
+===============
+関数 - 第一形式
+===============
+
+第一形式による関数の用法を学びます。
+
+* 関数の定義
+
+* 関数の呼び出し
+
+* 仮引数の宣言
+
+* 仮引数の送信
+
+* メイン関数
+
+* 変数のスコープ
+
+* 返値
+
+* 再帰処理
+
+.. index:: 
+       pair: 関数 - 第一形式; 関数の定義
+
+
+関数の定義
+==========
+
+新しい関数を定義するには
+
+文法:
+
+.. code-block:: ring
+
+       func <関数名> [仮引数]
+               ステートメント・ブロック
+       [end]
+
+.. note:: 関数の定義において end キーワードはオプション扱いです。
+
+
+用例:
+
+.. code-block:: ring
+
+       func hello
+               see "Hello from function" + nl
+
+
+.. index:: 
+       pair: 関数 - 第一形式; 関数の呼び出し
+
+関数の呼び出し
+==============
+
+仮引数を指定せずに関数を呼び出すには、関数名末尾に () を入力します。
+
+.. tip:: 関数の定義、および関数のコードの記述前に関数を呼び出せます。
+
+用例:
+
+.. code-block:: ring
+
+       hello()
+
+       func hello
+               see "Hello from function" + nl
+
+
+用例:
+
+.. code-block:: ring
+
+       first()  second()
+
+       func first   see "message from the first function" + nl
+
+       func second  see "message from the second function" + nl
+
+.. index:: 
+       pair: 関数 - 第一形式; 仮引数の宣言
+
+仮引数の宣言
+============
+
+関数へ仮引数を宣言するには、関数名末尾に仮引数リストとしてカンマで区切った
+識別子のグループを記述します。
+
+用例:
+
+.. code-block:: ring
+
+       func sum x,y
+               see x+y+nl
+
+.. index:: 
+       pair: 関数 - 第一形式; 仮引数の送信
+
+仮引数の送信
+============
+
+関数へ仮引数を送信するには、関数名末尾に () の内側で仮引数を入力します。
+
+文法:
+
+.. code-block:: ring
+
+       関数名(仮引数)
+
+用例:
+
+.. code-block:: ring
+
+       /* 実行結果
+       ** 8
+       ** 3000
+       */
+
+       sum(3,5) sum(1000,2000)
+
+       func sum x,y see x+y+nl
+
+.. index:: 
+       pair: 関数 - 第一形式; Main 関数
+
+Main 関数
+=========
+
+Ring では、 Main (メイン) 関数はオプション扱いです。 Main 関数が定義された場合は、
+ほかのステートメント実行後にメイン関数が実行されます。
+
+ほかのステートメントが存在しない場合に限り、メイン関数は最初の `エントリーポイント <https://ja.wikipedia.org/wiki/エントリーポイント>`_ となります。
+
+用例:
+
+.. code-block:: ring
+
+       # このプログラムは、 Hello World メッセージを表示した後にメイン関数を実行します。
+
+       See "Hello World!" + nl
+
+       func main
+               see "Message from the main function" + nl
+
+.. index:: 
+       pair: 関数 - 第一形式; 変数のスコープ
+
+変数のスコープ
+==============
+
+Ring は変数のスコープの決定で `静的スコープ <https://ja.wikipedia.org/wiki/静的スコープ>`_ を使用します。
+関数の内側で定義される変数は、ローカル変数になります (関数の仮引数も該当します)。
+関数の外側で定義される変数は、グローバル変数になります (関数の前にあるのは全て該当します)。
+
+この関数内で定義されたグローバル変数は、別の関数内にある変数としてもアクセスできます。
+
+用例:
+
+.. code-block:: ring
+
+       # このプログラムでは 1 ~ 10 までの数値を表示します。
+
+       x = 10                          # x はグローバル変数です。
+
+       func main
+
+               for t = 1 to 10         # t はローカル変数です。
+                       mycounter()     # 関数の呼び出し
+               next
+
+       func mycounter
+               see x + nl              # グローバル変数の値を表示します。
+               x--                     # 減分します。
+
+
+.. note:: for ループの変数 t をローカル変数として宣言する前に、 Main 関数を使用してください。
+         つまり、新しい変数のスコープをローカルとして設定するために、命令を直接入力するのではなく、
+         Main 関数では自動的にローカルとして設定することが推奨されます。
+
+.. index:: 
+       pair: 関数 - 第一形式; 返値
+
+返値
+====
+
+Return 命令は、関数の値を返します。
+
+文法:
+
+.. code-block:: ring
+
+       Return [式]
+
+.. tip:: Return 命令の後にある式はオプションであり、
+         Return 命令で値を返さずに関数の実行を終了することもできます。
+        
+.. note:: 関数が明示的な値を返さない場合は、 NULL (空の文字列 = \"\") を返します。
+
+用例:
+
+.. code-block:: ring
+
+       if novalue() = NULL     
+               See "the function doesn't return a value" + nl
+       ok
+
+       func novalue
+
+.. index:: 
+       pair: 関数 - 第一形式; 再帰処理
+
+再帰処理
+=========
+
+Ring は `再帰 <https://ja.wikipedia.org/wiki/再帰>`_
+に対応しており、異なる引数を使用して関数が関数自身を再帰的に呼び出せます。
+
+用例:
+
+.. code-block:: ring
+
+       see fact(5)     # 実行結果 = 120
+
+       func fact x if x = 0 return 1 else return x * fact(x-1) ok
+
diff --git a/docs/ja-jp/source/functions2.txt b/docs/ja-jp/source/functions2.txt
new file mode 100644 (file)
index 0000000..efbe320
--- /dev/null
@@ -0,0 +1,233 @@
+.. index:: 
+       single: 関数 - 第二形式; はじめに
+
+===============
+関数 - 第二形式
+===============
+
+第二形式による関数の用法を学びます。
+
+* 関数の定義
+
+* 関数の呼び出し
+
+* 仮引数の宣言
+
+* 仮引数の送信
+
+* メイン関数
+
+* 変数のスコープ
+
+* 返値
+
+* 再帰処理
+
+.. index:: 
+       pair: 関数 - 第二形式; 関数の定義
+
+
+関数の定義
+==========
+
+新しい関数を定義するには
+
+文法:
+
+.. code-block:: ring
+
+       def <関数名> [仮引数]
+               ステートメント・ブロック
+       [end]
+
+.. note:: 関数の定義において end キーワードはオプション扱いです。
+
+
+用例:
+
+.. code-block:: ring
+
+       def hello
+               put "Hello from function" + nl
+       end
+
+
+.. index:: 
+       pair: 関数 - 第一形式; 関数の呼び出し
+
+関数の呼び出し
+==============
+
+仮引数を指定せずに関数を呼び出すには、関数名末尾に () を入力します。
+
+.. tip:: 関数の定義、および関数のコードの記述前に関数を呼び出せます。
+
+用例:
+
+.. code-block:: ring
+
+       hello()
+
+       def hello
+               put "Hello from function" + nl
+       end
+
+
+用例:
+
+.. code-block:: ring
+
+       first()  second()
+
+       def first   put "message from the first function" + nl
+
+       def second  put "message from the second function" + nl
+
+.. index:: 
+       pair: 関数 - 第二形式; 仮引数の宣言
+
+仮引数の宣言
+============
+
+関数へ仮引数を宣言するには、関数名末尾に仮引数のリストとしてカンマで区切った
+識別子のグループを記述します。
+
+用例:
+
+.. code-block:: ring
+
+       def sum x,y
+               put x+y+nl
+       end
+
+.. index:: 
+       pair: 関数 - 第二形式; 仮引数の送信
+
+仮引数の送信
+============
+
+関数へ仮引数を送信するには、関数名末尾に () の内側で仮引数を入力します。
+
+文法:
+
+.. code-block:: ring
+
+       関数名(仮引数)
+
+用例:
+
+.. code-block:: ring
+
+       /* 実行結果
+       ** 8
+       ** 3000
+       */
+
+       sum(3,5) sum(1000,2000)
+
+       def sum x,y put x+y+nl
+
+.. index:: 
+       pair: 関数 - 第二形式; Main 関数
+
+Main 関数
+=========
+
+Ring では、 Main (メイン) 関数はオプション扱いです。 Main 関数が定義された場合は、
+ほかのステートメント実行後にメイン関数が実行されます。
+
+ほかのステートメントが存在しない場合に限り、メイン関数は最初の `エントリーポイント <https://ja.wikipedia.org/wiki/エントリーポイント>`_ となります。
+
+用例:
+
+.. code-block:: ring
+
+       # このプログラムは、 Hello World メッセージを表示した後にメイン関数を実行します。
+
+       put "Hello World!" + nl
+
+       def main
+               put "Message from the main function" + nl
+       end
+
+.. index:: 
+       pair: 関数 - 第二形式; 変数のスコープ
+
+変数のスコープ
+==============
+
+Ring は変数のスコープの決定で `静的スコープ <https://ja.wikipedia.org/wiki/静的スコープ>`_ を使用します。
+関数の内側で定義される変数は、ローカル変数になります (関数の仮引数も該当します)。
+関数の外側で定義される変数は、グローバル変数になります (関数の前にあるのは全て該当します)。
+
+この関数内で定義されたグローバル変数は、別の関数内にある変数としてもアクセスできます。
+
+用例:
+
+.. code-block:: ring
+
+       # このプログラムでは 1 ~ 10 までの数値を表示します。
+
+       x = 10                          # x はグローバル変数です。
+
+       def main
+               for t = 1 to 10         # t はローカル変数です。
+                       mycounter()     # 関数の呼び出し
+               end
+       end
+
+       def mycounter
+               put x + nl              # グローバル変数の値を表示します。
+               x--                     # 減分します。
+       end
+
+.. note:: for ループの変数 t をローカル変数として宣言する前に、 Main 関数を使用してください。
+         つまり、新しい変数のスコープをローカルとして設定するために、命令を直接入力するのではなく、
+         Main 関数では自動的にローカルとして設定することが推奨されます。
+
+.. index:: 
+       pair: 関数 - 第二形式; 返値
+
+返値
+====
+
+Return 命令は、関数の値を返します。
+
+文法:
+
+.. code-block:: ring
+
+       Return [式]
+
+.. tip:: Return 命令の後にある式はオプションであり、
+         Return 命令で値を返さずに関数の実行を終了することもできます。
+        
+.. note:: 関数が明示的な値を返さない場合は、 NULL (空の文字列 = \"\") を返します。
+
+用例:
+
+.. code-block:: ring
+
+       if novalue() = NULL     
+               put "the function doesn't return a value" + nl
+       end
+
+       def novalue
+
+.. index:: 
+       pair: 関数 - 第二形式; 再帰処理
+
+再帰処理
+=========
+
+Ring は `再帰 <https://ja.wikipedia.org/wiki/再帰>`_
+に対応しており、異なる引数を使用して関数が関数自身を再帰的に呼び出せます。
+
+用例:
+
+.. code-block:: ring
+
+       put fact(5)     # 実行結果 = 120
+
+       def fact x if x = 0 return 1 else return x * fact(x-1) end
diff --git a/docs/ja-jp/source/functions3.txt b/docs/ja-jp/source/functions3.txt
new file mode 100644 (file)
index 0000000..3b18a5b
--- /dev/null
@@ -0,0 +1,247 @@
+.. index:: 
+       single: 関数 - 第三形式; はじめに
+
+===============
+関数 - 第三形式
+===============
+
+第三形式による関数の用法を学びます。
+
+* 関数の定義
+
+* 関数の呼び出し
+
+* 仮引数の宣言
+
+* 仮引数の送信
+
+* メイン関数
+
+* 変数のスコープ
+
+* 返値
+
+* 再帰処理
+
+.. index:: 
+       pair: 関数 - 第三形式; 関数の定義
+
+
+関数の定義
+==========
+
+新しい関数を定義するには
+
+文法:
+
+.. code-block:: ring
+
+       func <関数名> [仮引数] ['{']
+               ステートメント・ブロック
+       ['}']
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       func hello {
+               print("Hello from function \n")
+       }
+
+
+.. index:: 
+       pair: 関数 - 第三形式; 関数の呼び出し
+
+関数の呼び出し
+==============
+
+仮引数を指定せずに関数を呼び出すには、関数名末尾に () を入力します。
+
+.. tip:: 関数の定義、および関数のコードの記述前に関数を呼び出せます。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       hello()
+
+       func hello {
+               print("Hello from function \n")
+       }
+
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       first()  second()
+
+       func first {  print("message from the first function \n")  }
+
+       func second { print("message from the second function \n") }
+
+.. index:: 
+       pair: 関数 - 第三形式; 仮引数の宣言
+
+仮引数の宣言
+============
+
+関数へ仮引数を宣言するには、関数名末尾に仮引数のリストとしてカンマで区切った
+識別子のグループを記述します。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       func sum(x,y) {
+               print(x+y)
+       }
+
+.. index:: 
+       pair: 関数 - 第三形式; 仮引数の送信
+
+仮引数の送信
+============
+
+関数へ仮引数を送信するには、関数名末尾に () の内側で仮引数を入力します。
+
+文法:
+
+.. code-block:: ring
+
+       関数名(仮引数)
+
+用例:
+
+.. code-block:: ring
+
+       /* 実行結果
+       ** 8
+       ** 3000
+       */
+
+       load "stdlib.ring"
+
+       sum(3,5) sum(1000,2000)
+
+       func sum(x,y) { print(x+y) } 
+
+.. index:: 
+       pair: 関数 - 第三形式; Main 関数
+
+Main 関数
+=========
+
+Ring では、 Main (メイン) 関数はオプション扱いです。 Main 関数が定義された場合は、
+ほかのステートメント実行後にメイン関数が実行されます。
+
+ほかのステートメントが存在しない場合に限り、メイン関数は最初の `エントリーポイント <https://ja.wikipedia.org/wiki/エントリーポイント>`_ となります。
+
+用例:
+
+.. code-block:: ring
+
+       # このプログラムは、 Hello World メッセージを表示した後にメイン関数を実行します。
+
+       load "stdlib.ring"
+
+       print("Hello, World! \n")
+
+       func main {
+               print("Message from the main function \n")
+       }
+
+.. index:: 
+       pair: 関数 - 第三形式; 変数のスコープ
+
+変数のスコープ
+==============
+
+Ring は変数のスコープの決定で `静的スコープ <https://ja.wikipedia.org/wiki/静的スコープ>`_ を使用します。
+関数の内側で定義される変数は、ローカル変数になります (関数の仮引数も該当します)。
+関数の外側で定義される変数は、グローバル変数になります (関数の前にあるのは全て該当します)。
+
+この関数内で定義されたグローバル変数は、別の関数内にある変数としてもアクセスできます。
+
+用例:
+
+.. code-block:: ring
+
+       # このプログラムでは 1 ~ 10 までの数値を表示します。
+       
+       load "stdlib.ring"
+
+       x = 10                          # x はグローバル変数です。
+
+       func main {
+               for t = 1 to 10 {       # t はローカル変数です。
+                       mycounter()     # 関数の呼び出し
+               }
+       }
+
+       func mycounter {
+               print("#{x}\n")         # グローバル変数の値を表示します。
+               x--                     # 減分します。
+       }
+
+.. note:: for ループの変数 t をローカル変数として宣言する前に、 Main 関数を使用してください。
+         つまり、新しい変数のスコープをローカルとして設定するために、命令を直接入力するのではなく、
+         Main 関数では自動的にローカルとして設定することが推奨されます。
+
+.. index:: 
+       pair: 関数 - 第三形式; 返値
+
+返値
+====
+
+Return 命令は、関数の値を返します。
+
+文法:
+
+.. code-block:: ring
+
+       Return [式]
+
+.. tip:: Return 命令の後にある式はオプションであり、
+         Return 命令で値を返さずに関数の実行を終了することもできます。
+        
+.. note:: 関数が明示的な値を返さない場合は、 NULL (空の文字列 = \"\") を返します。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       if novalue() = NULL {
+               print("the function doesn't return a value\n")
+       }
+
+       func novalue { }
+
+.. index:: 
+       pair: 関数 - 第三形式; 再帰処理
+
+再帰処理
+=========
+
+Ring は `再帰 <https://ja.wikipedia.org/wiki/再帰>`_
+に対応しており、異なる引数を使用して関数が関数自身を再帰的に呼び出せます。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       print( fact(5) )        # 実行結果 = 120
+
+       func fact(x) { if x = 0 { return 1 else return x * fact(x-1) } }
diff --git a/docs/ja-jp/source/functionslist.png b/docs/ja-jp/source/functionslist.png
new file mode 100644 (file)
index 0000000..2b7d9d5
Binary files /dev/null and b/docs/ja-jp/source/functionslist.png differ
diff --git a/docs/ja-jp/source/game2048_shot1.png b/docs/ja-jp/source/game2048_shot1.png
new file mode 100644 (file)
index 0000000..7a7defd
Binary files /dev/null and b/docs/ja-jp/source/game2048_shot1.png differ
diff --git a/docs/ja-jp/source/gameengine.txt b/docs/ja-jp/source/gameengine.txt
new file mode 100644 (file)
index 0000000..b7c0854
--- /dev/null
@@ -0,0 +1,2447 @@
+.. index:: 
+       single: 2D ゲームエンジン; はじめに
+
+====================================
+デモプロジェクト - 2D ゲームエンジン
+====================================
+
+シンプルな 2D ゲームエンジンの作成を通じて、多種多様なプログラミングパラダイムをプロジェクトで併用する方法を学びます。
+
+これでデスクトップ、またはモバイル用 2D ゲームを作成できます。
+
+.. index:: 
+       pair: 2D ゲームエンジン; プロジェクトの階層
+
+プロジェクトの階層
+==================
+
+このような階層をプロジェクトで使用しています。
+
+* ゲームの階層 (宣言型プログラミング)
+* ゲームエンジンのクラス (オブジェクト指向プログラミングのパラダイム)
+* グラフィックスライブラリへのインタフェース (手続き型プログラミング)
+* グラフィックスライブラリへのバインディング (RingAllegro と RingLibSDL)
+
+.. index:: 
+       pair: 2D ゲームエンジン; グラフィックスライブラリのバインディング
+
+グラフィックスライブラリのバインディング
+========================================
+
+Allegro ゲームプログラミング・ライブラリ用の RingAllegro と
+LibSDL ゲームプログラミング・ライブラリ用の RingLibSDL があります。
+
+RingAllegro と RingLibSDL は Ring コード生成器の支援により
+C を使用して拡張機能として作成されています。
+
+RingAllegro と RingLibSDL はシンプルな設定ファイルを記述した後に生成される
+10,000 行以上の C コードからなります (コード生成器による処理)。
+
+RingAllegro と RingLibSDL の設定ファイルで関数名、構造体情報、および定数を決定後、
+この設定ファイルを生成器で処理して C コードと
+Ring コードから読み込み可能なライブラリを生成します。
+
+RingAllegro と RingLibSDL を使用することは同一関数を有する C コードから
+Allegro および LibSDL を使用することと非常に類似していますが Ring の機能を使用して構築できます。
+
+* RingAllegro のソースコード : https://github.com/ring-lang/ring/tree/master/extensions/ringallegro
+* RingLibSDL のソースコード : https://github.com/ring-lang/ring/tree/master/extensions/ringsdl
+
+.. index:: 
+       pair: 2D ゲームエンジン; グラフィックスライブラリへのインタフェース
+
+グラフィックスライブラリへのインタフェース
+==========================================
+
+この階層には gl_allegro.ring および gl_libsdl.ring があります。
+
+グラフィックスライブラリとの相互作用により、ライブラリ間で同一関数を使えます。
+
+この階層は RingAllegro と RingLibSDL の詳細と差異を吸収します。
+
+同一関数で Allegro と LibSDL を何時でも切り替えて使えます。
+
+なぜですか?
+
+Allegro は非常に単純明快であり Windows, Linux および macOS 用の 2D ゲームを手軽に作成できます。
+
+Ring 1.0 から Allegro へ対応しました。
+
+また LibSDL は非常に強力かつ普及しており、モバイル開発では非常に簡単に使えます。
+
+Ring 1.1 から LibSDL へ対応しているため、モバイル用のゲームを手軽に作成できます。
+
+.. note:: このライブラリだけで、デスクトップとモバイル開発ができます。
+
+* gl_allegro.ring のソースコード : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gl_allegro.ring
+* gl_libsdl.ring のソースコード : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gl_libsdl.ring
+
+.. index:: 
+       pair: 2D ゲームエンジン; ゲームエンジンのクラス
+
+ゲームエンジンのクラス
+======================
+
+このクラスがエンジンにあります。
+
+* GameBase クラス
+* Resources クラス
+* Game クラス
+* GameObject クラス
+* Sprite クラス
+* Text クラス
+* Animate クラス
+* Sound クラス
+* Map クラス
+
+* ソースコード : https://github.com/ring-lang/ring/blob/master/ringlibs/gameengine/gameengine.ring
+
+.. index:: 
+       pair: 2D ゲームエンジン; ゲームの階層
+
+ゲームの階層
+============
+
+この階層では、ゲームエンジンのクラスを使用してゲームを作成します。
+
+宣言型プログラミングでクラスの設計を行っています。
+
+このクラスをゲームで使用しています。
+
+* Game クラス
+* Sprite クラス
+* Text クラス
+* Animate クラス
+* Sound クラス
+* Map クラス
+
+.. note:: エンジンに実装されている上記以外のクラスは、エンジンの内部処理用です。
+
+三種類のゲームと用例を紹介します:
+
+* Stars Fighter ゲーム
+* Flappy Bird 3000 ゲーム
+* Super Man 2016 ゲーム
+
+.. index:: 
+       pair: 2D ゲームエンジン; Game クラス
+
+Game クラス
+===========
+
+この表はクラスの属性です。
+
+============   =================================================================================
+属性                         説明
+============   =================================================================================
+FPS                    数値により毎秒ごとの draw() メソッドの呼び出し回数を決定します。
+FixedFPS               数値により毎秒ごとの animate() メソッドの呼び出し回数を決定します。
+Title                  文字列によりゲームのウィンドウタイトルを決定します。
+aObjects               ゲーム内の全てのオブジェクトを有するリストです。
+shutdown               True/False 値によりゲームのループを終了します。
+============   =================================================================================
+
+この表はクラスのメソッドです。
+
+================       =================================================================================
+メソッド                   説明
+================       =================================================================================
+refresh()                      オブジェクトを削除します。
+settitle(cTitle)       文字列による仮引数でウィンドウのタイトルを設定します。
+shutdown()                     アプリケーションを閉じます。
+find(cName)            オブジェクト名でオブジェクトを検索します。
+remove(nID)            オブジェクト ID でオブジェクトを削除します。
+================       =================================================================================
+
+この表はクラスで定義されているキーワードのグループです。
+
+================       =================================================================================
+キーワード                        説明
+================       =================================================================================
+sprite                                 新しい Sprite オブジェクトを作成後に Game オブジェクトへ追加します。
+text                           新しい Text オブジェクトを作成後に Game オブジェクトへ追加します。
+animate                        新しい Animate オブジェクトを作成後に Game オブジェクトへ追加します。
+sound                          新しい Sound オブジェクトを作成後に Game オブジェクトへ追加します。
+map                            新しい Map オブジェクトを作成後に Game オブジェクトへ追加します。
+================       =================================================================================
+
+.. index:: 
+       pair: 2D ゲームエンジン; GameObject クラス
+
+GameObject クラス
+=================
+
+この表はクラスの属性です。
+
+============   =====================================================================================
+属性                         説明
+============   =====================================================================================
+enabled                True/False によりオブジェクトの状態 (活動または休止) を決定します
+x                              数値によりオブジェクトの x 位置を決定します。
+y                              数値によりオブジェクトの y 位置を決定します。
+width                  数値によりオブジェクトの幅を決定します。
+height                         数値によりオブジェクトの高さを決定します。
+nIndex                 数値によりオブジェクトの ID を決定します。
+name                   文字列によりオブジェクト名を決定します。
+animate                True/False によりオブジェクトのアニメーションを行うかどうか決定します。
+move                   True/False によりキーボードでオブジェクトの画像を移動するかどうか決定します。
+Scaled                         True/False によりオブジェクトの画像の寸法を変更するかどうか決定します。
+draw                   オブジェクトの描画時に呼び出される関数です。
+state                  オブジェクトのアニメーションで呼び出される関数です。
+keypress               キーが押し下げられた時に呼び出される関数です。
+mouse                  マウスイベント発生時に呼び出される関数です。 
+============   =====================================================================================
+
+この表はクラスのメソッドです。
+
+============================== ================================================================
+メソッド                                           説明
+============================== ================================================================
+keyboard(oGame,nkey)                   キーボードイベントを返します。
+mouse(oGame,nType,aMouseList)  マウスイベントを確認します。
+rgb(r,g,b)                                             RBG (赤色、緑色、および青色) 値を使用して新しい色を返します。
+============================== ================================================================
+
+.. index:: 
+       pair: 2D ゲームエンジン; Sprite クラス
+
+Sprite クラス
+=============
+
+親クラス : GameObject クラス
+
+この表はクラスの属性です。
+
+============   =================================================================================
+属性                         説明
+============   =================================================================================
+image                  画像ファイル名を文字列で決定します。
+point                  数値によりオブジェクトにおける自動移動の制限を決定します。
+direction              数値により移動方向を決定します。
+nstep                  数値により移動中の増分または減分を決定します。
+type                   数値によりゲームでのオブジェクトの種類を決定します (オプション扱い)。
+transparent    True/False の値により画像の透過を決定します。
+============   =================================================================================
+
+この表はクラスのメソッドです。
+
+================       =================================================================================
+メソッド                   説明
+================       =================================================================================
+Draw(oGame)            オブジェクトを描画します。
+================       =================================================================================
+
+.. index:: 
+       pair: 2D ゲームエンジン; Text クラス
+
+Text クラス
+===========
+
+親クラス : Sprite クラス
+
+この表はクラスの属性です。
+
+============   =================================================================================
+属性                         説明
+============   =================================================================================
+size                   数値によりフォントの寸法を決定します。
+font                   文字列によりフォントのファイル名を決定します。
+text                   文字列により表示されるテキストを決定します。
+color                  数値により色を決定します。
+============   =================================================================================
+
+この表はクラスのメソッドです。
+
+================       =================================================================================
+メソッド                   説明
+================       =================================================================================
+Draw(oGame)                    オブジェクトを描画します。
+================       =================================================================================
+
+
+.. index:: 
+       pair: 2D ゲームエンジン; Animate クラス
+
+Animate クラス
+==============
+
+親クラス : Sprite クラス
+
+この表はクラスの属性です。
+
+============   =================================================================================
+属性                         説明
+============   =================================================================================
+frames                         数値によりフレーム数を決定します。
+frame                  数値により有効なフレームを決定します。
+framewidth             数値によりフレームの幅を決定します。
+animate                True/False によりアニメーションの使用を決定します。
+scaled                         True/False により画像の尺度変更を決定します。
+============   =================================================================================
+
+この表はクラスのメソッドです。
+
+================       =================================================================================
+メソッド                   説明
+================       =================================================================================
+Draw(oGame)            オブジェクトを描画します。
+================       =================================================================================
+
+.. index:: 
+       pair: 2D ゲームエンジン; Sound クラス
+
+Sound クラス
+============
+
+親クラス : GameObject クラス
+
+この表はクラスの属性です。
+
+============   =================================================================================
+属性                         説明
+============   =================================================================================
+file                   音声ファイル名を文字列で決定します。
+once                   True/False によりファイルを一回またはループ再生するかどうかを決定します。
+============   =================================================================================
+
+この表はクラスのメソッドです。
+
+================       =================================================================================
+メソッド                   説明
+================       =================================================================================
+playsound()            音声ファイルを再生します。
+================       =================================================================================
+
+.. index:: 
+       pair: 2D ゲームエンジン; Map クラス
+
+Map クラス
+==========
+
+親クラス : Sprite クラス
+
+この表はクラスの属性です。
+
+============   =================================================================================
+属性                         説明
+============   =================================================================================
+aMap                   数値でマップの中身をリストで決定します。
+aImages                マップの各番号で使用されている画像をリストで決定します。
+BlockWidth             ブロックの幅を数値で決定します (デフォルト = 32)。
+BlockHeight    ブロックの高さを数値で決定します (デフォルト = 32)。
+Animate                アニメーションの状態を True/False で決定します。
+============   =================================================================================
+
+この表はクラスのメソッドです。
+
+================       =================================================================================
+メソッド                   説明
+================       =================================================================================
+getvalue(x,y)          項目の値でマップの可視部分を返します。
+================       =================================================================================
+
+.. index:: 
+       pair: 2D ゲームエンジン; ゲームエンジンの用法 - ゲームウィンドウの作成
+
+ゲームエンジンの用法 - ゲームウィンドウの作成
+=============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # ゲームエンジンへ制御権を与えます。
+
+       func main               # ゲームエンジンから呼び出されます。
+
+               oGame = New Game        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+               }                       # イベントループの開始
+
+.. note:: この命令でゲームエンジンに制御権を委譲します。よって、グローバル変数の定義は "gameengine.ring" を読み込む前に行う必要があります。
+
+スクリーンショット:
+
+.. image:: gameengineshot1.png
+       :alt: スクリーンショット
+
+.. index:: 
+       pair: 2D ゲームエンジン; テキストの描画
+
+ゲームエンジンの用法 - テキストの描画
+=====================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # ゲームエンジンへ制御権を与えます。
+
+       func main               # ゲームエンジンから呼び出されます。
+
+               oGame = New Game        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      
+                       }
+               }               # イベントループの開始
+
+
+スクリーンショット:
+
+.. image:: gameengineshot2.png
+       :alt: スクリーンショット
+
+.. index:: 
+       pair: 2D ゲームエンジン; テキストの移動
+
+ゲームエンジンの用法 - テキストの移動
+=========================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # ゲームエンジンへ制御権を与えます。
+
+       func main               # ゲームエンジンから呼び出されます。
+
+               oGame = New Game        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # 配色 = 黒色
+                       }
+                       text {
+                               x = 10  y=150
+                               # アニメーション部分 =================================
+                               animate = true                  # アニメーションの使用
+                               direction = GE_DIRECTION_INCVERTICAL    # y の増分
+                               point = 400                     # y=400 になるまで継続
+                               nStep = 3                       # 毎回 y+= 3 を行う
+                               #=====================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)            # 配色 = 青色
+                       }
+               }                                       # イベントループの開始
+
+スクリーンショット:
+
+.. image:: gameengineshot3.png
+       :alt: スクリーンショット
+
+.. index:: 
+       pair: 2D ゲームエンジン; 音声の再生
+
+ゲームエンジンの用法 - 音声の再生
+=====================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # ゲームエンジンへ制御権を与えます。
+
+       func main               # ゲームエンジンから呼び出されます。
+
+               oGame = New Game        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # 配色 = 黒色
+                       }
+                       text {
+                               x = 10  y=150
+                               # アニメーション部分 ======================================
+                               animate = true                          # アニメーションの使用
+                               direction = GE_DIRECTION_INCVERTICAL    # y の増分
+                               point = 400             # y=400 になるまで継続
+                               nStep = 3               # 毎回 y+= 3 を行う
+                               #==========================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)    # 配色 = 青色
+                       }
+                       Sound {                                 # 音声の再生
+                               file = "sound/music1.wav"       # イベントループの開始
+                       }               
+               }                                       # イベントループの開始
+
+.. index:: 
+       pair: 2D ゲームエンジン; アニメーション
+
+ゲームエンジンの用法 - アニメーション
+=========================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # ゲームエンジンへ制御権を与えます。
+
+       func main               # ゲームエンジンから呼び出されます。
+
+         oGame = New Game      # Game オブジェクトの作成
+         {
+               title = "My First Game"
+
+               animate {
+                 file = "images/fire.png"
+                 x = 100
+                 y = 200
+                 framewidth = 40
+                 height = 42
+                 nStep = 3      # ディレイで使用
+                 transparent = true
+                 state = func oGame,oSelf {  # エンジンの各フレームで呼び出されます
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13      # 13 フレームから構成されるアニメーション
+                                 frame++   # 次のフレームへ移動
+                               else
+                                 oGame.remove(oself.nIndex)   # オブジェクトの削除
+                               ok
+                         ok
+                       }
+                 }
+                }    
+               
+
+         }          # イベントループの開始
+
+
+.. image:: gameengineshot5.png
+       :alt: スクリーンショット
+
+.. index:: 
+       pair: 2D ゲームエンジン; アニメーションと関数
+
+ゲームエンジンの用法 - アニメーションと関数
+===============================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # ゲームエンジンへ制御権を与えます。
+
+       func main               # ゲームエンジンから呼び出されます。
+
+         oGame = New Game      # Game オブジェクトの作成
+         {
+               title = "My First Game"
+               for x = 70 to 700 step 50
+                 for y = 70 to 500 step 50
+                       showfire(oGame,x,y)
+                 next
+               next
+
+         }          # イベントループの開始
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3      # ディレイで使用
+                 transparent = true
+                 state = func oGame,oSelf {  # エンジンの各フレームで呼び出されます
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13      # 13 フレームから構成されるアニメーション
+                                 frame++   # 次のフレームへ移動
+                               else
+                                 frame=1
+                               ok
+                         ok
+                       }
+                 }
+                }  
+         }
+
+.. image:: gameengineshot6.png
+       :alt: スクリーンショット
+
+
+.. index:: 
+       pair: 2D ゲームエンジン; キーボードによる自動移動
+
+ゲームエンジンの用法 - スプライト - キーボードによる自動移動
+============================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # ゲームエンジンへ制御権を与えます。
+
+       func main                                       # ゲームエンジンから呼び出されます。
+
+               oGame = New Game                        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # 用法
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=true       # キーボードの矢印キーで移動できます。
+                               Scaled=true
+                       }
+               }                                       # イベントループの開始
+
+.. image:: gameengineshot7.png
+       :alt: スクリーンショット
+
+
+.. index:: 
+       pair: 2D ゲームエンジン; スプライト - キー入力イベント
+
+ゲームエンジンの用法 - スプライト - キー入力イベント
+====================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # ゲームエンジンへ制御権を与えます。
+
+       func main                                       # ゲームエンジンから呼び出されます。
+
+               oGame = New Game                        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # 用法
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # カスタム移動
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+               }                                       # イベントループの開始
+
+.. index:: 
+       pair: 2D ゲームエンジン; スプライト - マウスイベント
+
+ゲームエンジンの用法 - スプライト - マウスイベント
+======================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # ゲームエンジンへ制御権を与えます。
+
+       func main                                       # ゲームエンジンから呼び出されます。
+
+               oGame = New Game                        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # 用法
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # カスタム移動
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                               mouse = func oGame,oSelf,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               oSelf {
+                                                       x = aMouseList[GE_MOUSE_X]
+                                                       y = aMouseList[GE_MOUSE_Y]
+                                               }
+                                       ok
+                               }
+                       }
+               }                                       # イベントループの開始
+
+.. index:: 
+       pair: 2D ゲームエンジン; スプライト - ステートイベント
+
+ゲームエンジンの用法 - スプライト - ステートイベント
+========================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # ゲームエンジンへ制御権を与えます。
+
+       func main                                       # ゲームエンジンから呼び出されます。
+
+               oGame = New Game                        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER           # 用法
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=false                      # カスタム移動
+                               Scaled=true
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                               mouse = func oGame,oSelf,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               oSelf {
+                                                       x = aMouseList[GE_MOUSE_X]
+                                                       y = aMouseList[GE_MOUSE_Y]
+                                               }
+                                       ok
+                               }
+                               state = func oGame,oSelf {
+                                       oself {
+                                               if x < 0 x = 0 ok
+                                               if y < 0 y = 0 ok
+                                               if x > ogame.width-width  
+                                                       x= ogame.width - width ok
+                                               if y > ogame.height-height 
+                                                       y=ogame.height - height ok
+                                       }
+                               }
+                       }
+               }                                       # イベントループの開始
+
+
+.. index:: 
+       pair: 2D ゲームエンジン; アニメーション - イベント
+
+ゲームエンジンの用法 - アニメーション - イベント
+====================================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # ゲームエンジンへ制御権を与えます。
+
+       func main                                       # ゲームエンジンから呼び出されます。
+
+               oGame = New Game                        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+
+                       animate {
+
+                               file = "images/fbbird.png"
+                               x = 10
+                               y = 10
+                               framewidth = 20
+                               scaled = true
+                               height = 50
+                               width = 50
+                               nStep = 3
+                               transparent = true
+
+                               state = func oGame,oSelf {
+                                       oSelf {
+
+                                               # アニメーション
+                                                       nStep--
+                                                       if nStep = 0
+                                                               nStep = 3
+                                                               if frame < 3
+                                                                       frame++
+                                                               else
+                                                                       frame=1
+                                                               ok
+                                                       ok
+
+                                               # 下へ移動
+                                                       y += 3
+                                                       if y > 550 y=550 ok
+
+                                       }
+
+                               }
+
+                               keypress = func ogame,oself,nKey {
+                                       oself {
+                                               if nkey = key_space
+                                                       y -= 55
+                                                       if y<=0 y=0 ok
+                                               ok
+                                       }
+                               }
+
+                               mouse = func ogame,oself,nType,aMouseList {
+                                       if nType = GE_MOUSE_UP
+                                               cFunc = oself.keypress
+                                               call cFunc(oGame,oSelf,Key_Space)
+                                       ok
+                               }
+                       }
+               }                                       # イベントループの開始
+
+スクリーンショット:
+
+.. image:: gameengineshot11.png
+       :alt: スクリーンショット
+
+.. index:: 
+       pair: 2D ゲームエンジン; マップ
+
+
+ゲームエンジンの用法 - マップ
+=================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"        # ゲームエンジンへ制御権を与えます。
+
+       func main          # ゲームエンジンから呼び出されます。
+
+       oGame = New Game      # Game オブジェクトの作成
+       {
+         title = "My First Game"
+
+         Map {
+
+               blockwidth = 80
+               blockheight = 80
+
+               aMap = [
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                       [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+               ]
+
+               aImages = ["images/fbwall.png",
+                        "images/fbwallup.png",
+                        "images/fbwalldown.png"]
+
+               state = func oGame,oSelf {
+                 oSelf {
+                       x -= 3
+                       if x < - 2100  x = 0  ok
+                 }
+               }
+
+         }
+       }          # イベントループの開始
+
+
+スクリーンショット:
+
+.. image:: gameengineshot12.png
+       :alt: スクリーンショット
+
+
+.. index:: 
+       pair: 2D ゲームエンジン; マップイベント
+
+ゲームエンジンの用法 - マップイベント
+=========================================
+
+.. code-block:: ring
+
+       Load "gameengine.ring"        # ゲームエンジンへ制御権を与えます。
+
+       func main          # ゲームエンジンから呼び出されます。
+
+         oGame = New Game      # Game オブジェクトの作成
+         {
+               title = "My First Game"
+
+               Map {
+
+                 blockwidth = 80
+                 blockheight = 80
+
+                 aMap = [
+                          [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+                 ]
+
+                 aImages = ["images/fbwall.png",
+                                "images/fbwallup.png",
+                                "images/fbwalldown.png"]
+
+                 state = func oGame,oSelf {
+                       oSelf {
+                         x -= 3
+                         if x < - 2100  x = 0  ok
+                       }
+                 }
+
+                 mouse = func ogame,oself,nType,aMouseList {
+                       if nType = GE_MOUSE_UP
+                         oSelf {
+                               mX = aMouseList[GE_MOUSE_X]
+                               mY = aMouseList[GE_MOUSE_Y]
+                               nValue = GetValue(mX,mY)
+                               nRow = GetRow(mX,mY)
+                               nCol = GetCol(mX,mY)
+                               Switch nValue
+                               On 1  aMap[nRow][nCol] = 0
+                               On 2  aMap[nRow][nCol] = 0
+                               On 3  aMap[nRow][nCol] = 0
+                               On 0  aMap[nRow][nCol] = 1
+                               Off
+                         }
+                       ok
+                 }
+
+               }
+         }          # イベントループの開始
+
+スクリーンショット:
+
+.. image:: gameengineshot13.png
+       :alt: スクリーンショット
+
+.. index:: 
+       pair: 2D ゲームエンジン; オブジェクトと描画処理
+
+ゲームエンジンの用法 - オブジェクトと描画処理
+=============================================
+
+GameObject クラスからオブジェクトを作成するには、 Object キーワード (ゲームエンジンで定義済み) を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # ゲームエンジンへ制御権を与えます。
+
+       func main                                       # ゲームエンジンから呼び出されます。
+
+               oGame = New Game                        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       Object {
+                               x = 0 y=300 width = 200 height=200
+                               draw = func oGame,oSelf {
+                                       oSelf {
+                                               for t = 1 to 210
+                                                       gl_draw_circle(x,y,t,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                               next
+                                       }
+                               }
+                               state = func oGame,oSelf {
+                                       oSelf { 
+                                               if x <= 800 
+                                                       x+= 3 
+                                               else
+                                                       x=0
+                                               ok
+                                       }
+                               }
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+
+               }                                       # イベントループの開始
+
+スクリーンショット:
+
+.. image:: gameengineshot14.png
+       :alt: スクリーンショット
+
+用例:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                          # ゲームエンジンへ制御権を与えます。
+
+       func main                                       # ゲームエンジンから呼び出されます。
+
+               oGame = New Game                        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       Object {
+                               x = 400 y=300 width = 200 height=200
+                               draw = func oGame,oSelf {
+                                       oSelf {
+                                               for t = 1 to 210
+                                                       gl_draw_rectangle(x+t,y+t,
+                                                       x+t*2,y+t*2,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                                       gl_draw_rectangle(x+t*2,y+t*2,
+                                                       x-t*2,y-t*2,
+                                                       gl_map_rgb(t*random(255),
+                                                       t*2,t*3),1)
+                                               next
+                                       }
+                               }
+                               keypress = func oGame,oSelf,nKey {
+                                       oSelf { 
+                                               Switch nKey     
+                                               on KEY_LEFT     
+                                                       x -= 10                 
+                                               on KEY_RIGHT
+                                                       x += 10
+                                               on KEY_UP
+                                                       y -= 10
+                                               on KEY_DOWN
+                                                       y += 10
+                                               off
+                                       }
+                               }
+                       }
+
+               }                                       # イベントループの開始
+
+
+スクリーンショット:
+
+.. image:: gameengineshot15.png
+       :alt: スクリーンショット
+
+.. index:: 
+       pair: 2D ゲームエンジン; Stars Fighter ゲーム
+
+Stars Fighter ゲーム
+====================
+
+Stars Fighter ゲームのソースコード
+
+.. code-block:: ring
+
+       # Ring 標準ライブラリ
+       # 2D ゲームエンジン
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       load "gameengine.ring"
+
+       func main
+
+         oGame = New Game
+
+         while true
+
+                 oGameState = new GameState
+
+                 oGame {
+                       title = "Stars Fighter!"
+                       sprite
+                       {
+                         file = "images/menu1.jpg"
+                         x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                         keypress = func ogame,oself,nKey {
+                               if nkey = key_esc or nKey = GE_AC_BACK
+                                 ogame.shutdown()
+                               but nKey = key_space
+                                 oGameState.startplay=true
+                                 ogame.shutdown=true
+                               ok
+                         }
+                         mouse = func ogame,oself,nType,aMouseList {
+                               if nType = GE_MOUSE_UP
+                                 oGameState.startplay=true
+                                 ogame.shutdown=true
+                               ok
+                         }
+                       }
+                       text {
+                         animate = false
+                         size = 35
+                         file = "fonts/pirulen.ttf"
+                         text = "Stars Fighter"
+                         x = 10  y=50
+                       }
+                       text {
+                         animate = false
+                         size = 25
+                         file = "fonts/pirulen.ttf"
+                         text = "Version 1.0"
+                         x = 80  y=100
+                       }
+                       text {
+                         animate = false
+                         size = 16
+                         file = "fonts/pirulen.ttf"
+                         text = "(C) 2016, Mahmoud Fayed"
+                         x = 45  y=140
+                       }
+
+                       text {
+                         animate = false
+                         size = 25
+                         file = "fonts/pirulen.ttf"
+                         text = "Press Space to start"
+                         x = 190  y=470
+                       }
+                       text {
+                         animate = false
+                         size = 20
+                         file = "fonts/pirulen.ttf"
+                         text = "Press Esc to Exit"
+                         x = 260  y=510
+                       }
+                       Sound {
+                         file = "sound/music1.wav"
+                       }
+                 }
+
+                 if oGameState.startplay
+                       oGame.refresh()
+                       playstart(oGame)
+                       oGame.refresh()
+                 ok
+
+         end
+
+       func playstart oGame
+
+         oSound = New Sound {
+               file = "sound/music2.wav"
+         }
+
+         while true
+               play(oGame)
+               if ogame.shutdown = true and oGameState.value = 0
+                 exit
+               ok
+               ogame.refresh()
+         end
+
+         oSound.Delete()
+
+       func play oGame
+
+         oGame
+         {
+               FPS = 60
+               FixedFPS = 120
+               title = "Stars Fighter!"
+               sprite
+               {
+                 file = "images/stars.jpg"
+                 x = 0
+                 y = 0
+                 point = -370
+                 direction = ge_direction_dec
+                 type = ge_type_background
+                 state = func ogame,oself {
+                         oself {
+                               if x < -350
+                                 direction = ge_direction_inc
+                                 point = 370
+                               but x = 0 and direction = ge_direction_inc
+                                 direction = ge_direction_dec
+                                 point = -370
+                               ok
+                         }
+                       }
+               }
+               sprite
+               {
+                 file = "images/player.png"
+                 transparent = true
+                 type = ge_type_player
+                 x = 400 y =400 width=100 height=100
+                 animate=false move=true Scaled=true
+                 mouse = func ogame,oself,nType,aMouseList {
+
+                       if not ( aMouseList[GE_MOUSE_X] >= oSelf.x and 
+                                        aMouseList[GE_MOUSE_X] <= oSelf.x+oSelf.width and
+                                        aMouseList[GE_MOUSE_Y] >= oself.y and 
+                                        aMouseList[GE_MOUSE_Y] <= oSelf.y+oSelf.height )
+
+                         if nType = GE_MOUSE_DOWN
+                               if aMouseList[1] < oSelf.X  # 左
+                                 oSelf.X -= 100
+                               else
+                                 oSelf.X += 100
+                               ok
+                               if aMouseList[2] < oSelf.Y  # 上
+                                 oSelf.Y -= 100
+                               else
+                                 oSelf.Y += 100
+                               ok
+                         ok
+
+                       else
+                         if nType = GE_MOUSE_UP
+                               cFunc = oself.keypress
+                               call cFunc(oGame,oSelf,Key_Space)
+                         ok
+                       ok
+                 }
+                 keypress = func oGame,oself,nkey {
+                       if nkey = key_space
+                         ogame {
+                               sprite {
+                                 type = ge_type_fire
+                                 file  = "images/rocket.png"
+                                 transparent = true
+                                       x = oself.x + 30
+                                 y = oself.y - 30
+                                 width = 30
+                                 height = 30
+                                 point = -30
+                                 nstep = 20
+                                 direction = ge_direction_decvertical
+                                 state = func oGame,oSelf {
+                                       for x in oGame.aObjects
+                                         if x.type = ge_type_enemy
+                                               if oself.x >= x.x and oself.y >= x.y and
+                                                 oself.x <= x.x + x.width and
+                                                 oself.y <= x.y + x.height
+                                                 showfire(oGame,x.x+40,x.y+40)
+                                                 ogame.remove(x.nindex)
+                                                 oGameState.score+=10
+                                                 oGameState.enemies--
+                                                 checkwin(oGame)
+                                                 exit
+                                               ok
+                                         ok
+                                       next
+                                 }
+                               }
+                         }
+                       but nkey = key_esc or nKey = GE_AC_BACK ogame.shutdown()
+                       ok
+                 }
+                 state = func oGame,oSelf {
+                       oself {
+                         if x < 0 x = 0 ok
+                         if y < 0 y = 0 ok
+                         if x > ogame.screen_w-width  x= ogame.screen_w - width ok
+                         if y > ogame.screen_h-height y=ogame.screen_h-height ok
+                       }
+                 }
+               }
+               for g = 1 to oGameState.enemies
+                 sprite
+                 {
+                       type = ge_type_enemy
+                       file = "images/enemy.png"
+                       transparent = true
+                       x = g*random(50) y =g width=100 height=100
+                       animate=true Scaled=true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oself {
+                               if x < 0 x = 0 ok
+                               if y < 0 y = 0 ok
+                               if x > ogame.screen_w-width  x= ogame.screen_w - width ok
+                               if y > ogame.screen_h-height y=ogame.screen_h-height ok
+                         }
+                         if random(100) = 1
+                               ogame {
+                                 sprite {
+                                       type = ge_type_fire
+                                       file  = "images/rocket2.png"
+                                       transparent = true
+                                       x = oself.x + 30
+                                       y = oself.y + oself.height+ 30
+                                       width = 30
+                                       height = 30
+                                       point = ogame.screen_h+30
+                                       nstep = 10
+                                       direction = ge_direction_incvertical
+                                       state = func oGame,oSelf {
+                                         x =  oGame.aObjects[oGameState.playerindex]
+                                         if oself.x >= x.x and oself.y >= x.y and
+                                                oself.x <= x.x + x.width and
+                                                oself.y <= x.y + x.height
+                                                if oGameState.value > 0
+                                                  oGameState.value-=10
+                                                ok
+                                                ogame.remove(oself.nindex)
+                                                checkgameover(oGame)
+                                         ok
+                                       }
+                                 }
+                               }
+                         ok
+                       }
+                 }
+               next
+               text {
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Destroy All Enemies!"
+                 nstep = 3
+                 color = GE_COLOR_GREEN
+                 x = 100  y=50
+                 direction = ge_direction_incvertical
+                 point = 500
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=10
+                 state = func oGame,oSelf { oSelf { text = "Score : " + oGameState.score } }
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Energy : " + oGameState.value
+                 x = 500  y=50
+                 state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } }
+               }
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Level : " + oGameState.level
+                 x = 500  y=90
+               }
+         }
+
+
+       func checkwin ogame
+         if oGameState.gameresult  return ok
+         if oGameState.enemies = 0
+               oGameState.gameresult = true
+               oGame {
+                 if oGameState.level < 30
+                 text {
+                       point = 400
+                       size = 30
+                       file = "fonts/pirulen.ttf"
+                       text = "Level Completed!"
+                       nStep = 3
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.level++
+                               oGameState.enemies = oGameState.level
+                               oGameState.gameresult = false
+                         ok
+                       }
+                 }
+                 else
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "You Win !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.value = 0
+                         ok
+                       }
+                 }
+                 ok
+               }
+         ok
+
+       func checkgameover ogame
+         if oGameState.gameresult  return ok
+         if oGameState.value <= 0
+               oGameState.gameresult = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "Game Over !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                         ok
+                       }
+                 }
+               }
+               showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40,
+                                oGame.aObjects[oGameState.PlayerIndex].y+40)
+               oGame.aObjects[oGameState.PlayerIndex].enabled = false
+               oGame.remove(oGameState.PlayerIndex)
+         ok
+
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13
+                                 frame++
+                               else
+                                 frame=1
+                                 oGame.remove(oself.nIndex)
+                               ok
+                         ok
+                       }
+                 }
+               }
+         }
+
+
+       class gamestate
+         score = 0
+         level = 1
+         enemies = 1
+         value = 100
+         playerindex = 2
+         gameresult = false
+         startplay=false
+
+スクリーンショット:
+
+.. image:: starsfighter.png
+       :alt: Stars Fighter
+
+
+.. index:: 
+       pair: 2D ゲームエンジン; Flappy Bird 3000 ゲーム
+
+Flappy Bird 3000 ゲーム
+=======================
+
+Flappy Bird 3000 ゲームのソースコード
+
+.. code-block:: ring
+
+       # Ring 標準ライブラリ
+       # 2D ゲームエンジン
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       Load "gameengine.ring"
+
+       func main
+
+         oGame = New Game  
+
+
+         while true
+
+               oGameState = New GameState
+
+               oGame {
+                 title = "Flappy Bird 3000"
+                 sprite
+                 {
+                       file = "images/fbback.png"
+                       x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                       keypress = func ogame,oself,nKey {
+                         if nkey = key_esc or nKey = GE_AC_BACK
+                               ogame.shutdown()
+                         but nKey = key_space
+                               oGameState.startplay=true
+                               ogame.shutdown=true
+                         ok
+                       }
+                       mouse = func ogame,oself,nType,aMouseList {
+                         if nType = GE_MOUSE_UP
+                               cFunc = oself.keypress
+                               call cFunc(oGame,oSelf,Key_Space)
+                         ok
+                       }
+                 }
+                 text {
+                       animate = false
+                       size = 35
+                       file = "fonts/pirulen.ttf"
+                       text = "Flappy Bird 3000"
+                       x = 150  y=50
+                 }
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Version 1.0"
+                       x = 280  y=100
+                 }
+                 text {
+                       animate = false
+                       size = 16
+                       file = "fonts/pirulen.ttf"
+                       text = "(C) 2016, Mahmoud Fayed"
+                       x = 245  y=140
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "To Win Get Score = 3000"
+                       x = 150  y=270
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Space to start"
+                       x = 190  y=470
+                 }
+                 text {
+                       animate = false
+                       size = 20
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Esc to Exit"
+                       x = 260  y=510
+                 }
+
+                 animate {
+                       file = "images/fbbird.png"
+                       x = 200
+                       y = 200
+                       framewidth = 20
+                       scaled = true
+                       height = 50
+                       width = 50
+                       nStep = 3
+                       transparent = true
+                       animate = true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oSelf {
+                               nStep--
+                               if nStep = 0
+                                 nStep = 3
+                                 if frame < 3
+                                       frame++
+                                 else
+                                       frame=1
+                                 ok
+                               ok
+                               if x <= 0 x=0 ok
+                               if y <= 0 y=0 ok
+                               if x >= 750 x= 750 ok
+                               if y > 550 y=550 ok
+                         }
+                       }
+                 }
+
+                 Sound {
+                       file = "sound/music2.wav"
+                 }
+               }
+               if oGameState.startplay
+                 oGame.refresh()
+                 playstart(oGame)
+                 oGame.refresh()
+               ok
+
+         end
+
+
+       func playstart oGame
+
+         oGame {
+               FPS = 60
+               FixedFPS = 120
+               Title = "Flappy Bird 3000"
+               Sprite {
+                 file = "images/fbback.png"
+                 x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                 keypress = func ogame,oself,nKey {
+                       if nkey = key_esc or nKey = GE_AC_BACK
+                         ogame.shutdown()
+                       ok
+                 }
+               }
+
+               Map {
+                 blockwidth = 80
+                 blockheight = 80
+                 aMap = [
+                          [0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]
+                       ]
+                 newmap(aMap)
+                 aImages = ["images/fbwall.png","images/fbwallup.png",
+                         "images/fbwalldown.png"]
+                 state = func oGame,oSelf {
+                       if oGameState.gameresult = false
+                         px = oGame.aObjects[3].x
+                         py = oGame.aObjects[3].y
+                         oSelf {
+                               x -=  3
+                               if x < - 2100
+                                 x = 0
+                                 newmap(aMap)
+                               ok
+                               nCol =  getcol(px,0)
+                               if nCol=11 or nCol=15 or nCol=19 or nCol=23 or nCol=27
+                                 if nCol != oGameState.lastcol
+                                       oGameState.lastcol = nCol
+                                       oGameState.Score += 100
+                                       oGame { Sound {
+                                         once = true
+                                         file = "sound/sfx_point.wav"
+                                       } }
+                                       checkwin(oGame)
+                                 ok
+                               ok
+                         }
+                         if  oSelf.getvalue(px+40,py) != 0 or
+                                 oSelf.getvalue(px+40,py+40) != 0 or
+                                 oSelf.getvalue(px,py) != 0 or
+                                 oSelf.getvalue(px,py+40) != 0
+                               oGameState.gameresult = true
+                               oGame {
+                                 text {
+                                       point = 550
+                                       size = 30
+                                       nStep = 3
+                                       file = "fonts/pirulen.ttf"
+                                       text = "Game Over !!!"
+                                       x = 500  y=10
+                                       state = func ogame,oself {
+                                         if oself.y >= 550
+                                                 ogame.shutdown = true
+                                         ok
+                                               if oself.y = 90
+                                               ogame {
+                                                 Sound {
+                                                       once = true
+                                                       file = "sound/sfx_die.wav"
+                                                 }
+                                               }
+                                         ok
+                                       }
+                                 }
+                                 Sound {
+                                       once = true
+                                       file = "sound/sfx_hit.wav"
+                                 }
+                               }
+                         ok
+                       ok
+                 }
+               }
+
+               animate {
+                 file = "images/fbbird.png"
+                 x = 10
+                 y = 10
+                 framewidth = 20
+                 scaled = true
+                 height = 50
+                 width = 50
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 3
+                                 frame++
+                               else
+                                 frame=1
+                               ok
+                         ok
+                       }
+
+                       if not oGameState.playerwin
+                         oGameState.down --
+                         if oGameState.down = 0
+                               oGameState.down = 3
+                               oself {
+                                 y += 25
+                                 if y > 550 y=550 ok
+                               }
+                         ok
+                       ok
+
+                 }
+                 keypress = func ogame,oself,nKey {
+                       if oGameState.gameresult = false
+                         oself {
+                               if nkey = key_space
+                                 y -= 55
+                                 oGameState.down = 60
+                                 if y<=0 y=0 ok
+                               ok
+                         }
+                       ok
+                 }
+                 mouse = func ogame,oself,nType,aMouseList {
+                       if nType = GE_MOUSE_UP
+                         cFunc = oself.keypress
+                         call cFunc(oGame,oSelf,Key_Space)
+                       ok
+                 }
+               }
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=10
+                 state = func oGame,oSelf {
+                       oSelf { text = "Score : " + oGameState.score }
+                 }
+               }
+
+         }
+
+       func newmap aMap
+         aV = [
+         [1,1,3,0,0,2,1,1],
+         [1,3,0,0,0,2,1,1],
+         [1,1,1,3,0,2,1,1],
+         [1,1,1,3,0,0,0,0],
+         [0,0,0,0,2,1,1,1],
+         [0,0,2,1,1,1,1,1],
+         [0,0,0,2,1,1,1,1],
+         [1,1,1,3,0,2,1,1],
+         [1,1,1,1,1,3,0,0],
+         [3,0,0,2,1,1,1,1],
+         [3,0,0,2,3,0,0,2]
+         ]
+         for x = 10 to 24 step 4
+               aVar = aV[ (random(10)+1) ]
+               for y = 1 to 8
+                 aMap[y][x] = aVar[y]
+               next
+         next
+
+       func checkwin ogame
+         if oGameState.score = 3000
+               oGameState.gameresult = true
+               oGameState.playerwin = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 3
+                       file = "fonts/pirulen.ttf"
+                       text = "You Win !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                               oGameState.value = 0
+                         ok
+                       }
+                 }
+               }
+         ok
+
+       Class GameState
+         down = 3
+         gameresult = false
+         Score = 0
+         startplay=false
+         lastcol = 0
+         playerwin = false
+
+スクリーンショット:
+
+.. image:: flappybird.png
+       :alt: Flappy Bird 300
+
+
+.. index:: 
+       pair: 2D ゲームエンジン; Super Man 2016 ゲーム
+
+Super Man 2016 ゲーム
+=====================
+
+Super Man 2016 ゲームのソースコード
+
+.. code-block:: ring
+
+       # Ring 標準ライブラリ
+       # 2D ゲームエンジン
+       # 2016, Mahmoud Fayed <msfclipper@yahoo.com>
+
+       oGameState = NULL
+
+       Load "gameengine.ring"
+
+       func main
+
+         oGame = New Game
+
+         while true
+
+               oGameState = new GameState
+
+               oGame {
+                 title = "Super Man 2016"
+                 sprite
+                 {
+                       file = "images/superman.jpg"
+                       x = 0 y=0 width=800 height = 600 scaled = true animate = false
+                       keypress = func ogame,oself,nKey {
+                         if nkey = key_esc or nKey = GE_AC_BACK
+                               ogame.shutdown()
+                         but nKey = key_space
+                               oGameState.startplay=true
+                               ogame.shutdown=true
+                         ok
+                       }
+                       mouse = func ogame,oself,nType,aMouseList {    
+                         if nType = GE_MOUSE_UP
+                               oGameState.startplay=true 
+                               ogame.shutdown=true 
+                         ok
+                       }
+                       state = func ogame,oself {
+                         oself {
+                               if x > -500
+                                 x-=1
+                                 y-=1
+                                 width +=1
+                                 height +=4
+                               ok
+                         }
+                       }
+                 }
+                 text {
+                       animate = false
+                       size = 35
+                       file = "fonts/pirulen.ttf"
+                       text = "Super Man 2016"
+                       x = 20  y=30
+                 }
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Version 1.0"
+                       x = 20  y=80
+                 }
+                 text {
+                       animate = false
+                       size = 16
+                       file = "fonts/pirulen.ttf"
+                       text = "(C) 2016, Mahmoud Fayed"
+                       x = 20  y=120
+                 }
+
+                 text {
+                       animate = false
+                       size = 25
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Space to start"
+                       x = 190  y=470
+                 }
+                 text {
+                       animate = false
+                       size = 20
+                       file = "fonts/pirulen.ttf"
+                       text = "Press Esc to Exit"
+                       x = 260  y=510
+                 }
+
+                 animate {
+                       file = "images/superman.png"
+                       x = 200
+                       y = 200
+                       framewidth = 68
+                       scaled = true
+                       height = 86
+                       width = 60
+                       nStep = 10
+                       transparent = true
+                       animate = true
+                       direction = ge_direction_random
+                       state = func oGame,oSelf {
+                         oSelf {
+                               nStep--
+                               if nStep = 0
+                                 nStep = 10
+                                 if frame < 1
+                                       frame++
+                                 else
+                                       frame=1
+                                 ok
+                               ok
+                               if x <= 0 x=0 ok
+                               if y <= 0 y=0 ok
+                               if x >= 750 x= 750 ok
+                               if y > 550 y=550 ok
+                         }
+                       }
+                 }
+
+                 Sound {
+                       file = "sound/music2.wav"
+                 }
+               }
+               if oGameState.startplay
+                 oGame.refresh()
+                 playstart(oGame)
+                 oGame.refresh()
+               ok
+
+         end
+
+
+       func playstart oGame
+
+         oGame {
+               FPS = 60
+               FixedFPS = 15
+               Title = "Super Man 2016"
+               Sprite {
+                 file = "images/supermancity.jpg"
+                 x = 0 y=0 width=800 height = 600 scaled = true animate = false
+               }
+               Map {
+                 blockwidth = 80
+                 blockheight = 80
+                 aMap = [
+                         [0,0,0,4,4,4,0,0,0,1,0,0,0,1,4,4,0,1,0,0,0,0,4,4,0,1,4,
+       4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0,0,0,1,0,0,0,1,0,3,3,3,5,3,3,3,3,0],
+                         [0,0,4,0,4,0,4,0,0,1,0,0,0,3,4,4,4,1,0,0,0,0,4,4,0,1,4,
+       4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,1,4,1,0,0,0,1,0,0,0,1,0,4,4,4,4,4,4,4,4,0],
+                         [0,0,0,4,4,4,0,0,0,1,0,0,0,4,4,4,4,1,0,0,0,0,0,0,0,3,4,
+       4,4,0,0,4,0,0,0,0,0,0,4,2,0,0,4,1,4,1,4,2,4,1,0,2,0,1,0,4,4,4,4,4,4,4,4,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
+       0,0,0,0,4,4,4,4,4,4,4,4,1,0,0,4,1,4,1,4,1,4,1,0,1,0,1,0,2,2,2,2,2,2,2,2,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
+       0,0,0,0,2,0,0,0,0,0,2,0,3,0,0,0,1,4,1,4,1,4,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,4,3,4,1,4,3,0,1,0,3,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,2,0,0,2,0,0,2,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0],
+                         [0,0,1,0,0,1,0,0,1,3,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0,0,
+       0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0]
+                       ]
+                 aImages = ["images/smwall.png","images/smwallup.png",
+                         "images/smwalldown.png","images/smstar.png",
+                         "images/smkey.png","images/smstar2.png"]
+               }
+
+               sprite {
+                 type = ge_type_enemy
+                 animate = false
+                 file  = "images/smhome.png"
+                 x = 5000
+                 y = 400
+                 width = 290
+                 height = 200
+                 transparent = true
+
+                 state = func oGame,oSelf {
+                       oself {
+                         x = 5000 +  oGame.aObjects[2].x
+                         if x < 0 or x > SCREEN_W return ok
+                       }
+                       if oGameState.gameresult or oGameState.DoorKey = false  return ok
+                       if oGame.aObjects[oGameState.playerindex].x > oself.x + 100 and
+                         oGame.aObjects[oGameState.playerindex].y > oself.y + 50
+                         oGameState.gameresult = true
+                         oGame {
+                               sprite {
+                                 file = "images/smwin.jpg"
+                                 x=0 y=0 width=800 height=600
+                                 scaled = true animate=false
+                                 state = func ogame,oself {
+                                       oself {
+                                         x-=5
+                                         y-=5
+                                         width +=10
+                                         height +=10
+                                         if x = -300
+                                               ogame.shutdown = true
+                                         ok
+                                       }
+                                 }
+                               }
+                         }
+                       ok
+                 }
+
+               }
+
+               animate {
+                 file = "images/superman.png"
+                 x = 0
+                 y = 0
+                 framewidth = 60
+                 scaled = true
+                 height = 86
+                 width = 60
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+
+                       checkstarskeycol(oGame,oSelf)
+
+                       if not oGameState.playerwin
+                               oself {
+                                 file = "images/superman.png"
+                                 height = 86
+                                 width = 60
+                                 for t=1 to 8
+                                       if checkwall2(oGame,oSelf,0,5,[2,1])
+                                         y += 5
+                                       else
+                                         exit
+                                       ok
+                                 next
+                                 if y > 500 y=500 ok
+                               }
+                       ok
+
+                 }
+                 keypress = func ogame,oself,nKey {
+                       if oGameState.gameresult = false
+
+                         oself {
+                               if nkey = key_up  and checkwall(oGame,oSelf,0,-40)
+                                 oGameState.value -= 1
+                                 checkgameover(oGame)
+                                 file = "images/supermanup.png"
+                                 height = 123
+                                 dotransparent()
+                                 y -= 40
+                                 oGameState.down = 10
+                                 if y<=0 y=0 ok
+                               but nkey = key_down and checkwall(oGame,oSelf,0,40)
+                                 file = "images/supermandown.png"
+                                 dotransparent()
+                                 y += 40
+                                 if y>=500 y=500 ok
+                               but nKey = key_right and checkwall(oGame,oSelf,10,0)
+                                 file = "images/supermanright.png"
+                                 dotransparent()
+                                 x += 10
+                                 if x >= 440
+                                       if oGame.aObjects[2].x > -4500
+                                         oGame.aObjects[2].x -= 50
+                                         callenemystate(oGame)
+                                       else
+                                         if x <= 750
+                                               if  checkwall(oGame,oSelf,10,0)
+                                                 x += 10
+                                               ok
+                                         else
+                                               if  checkwall(oGame,oSelf,-10,0)
+                                                 x -= 10
+                                               ok
+                                         ok
+                                         return
+                                       ok
+                                       x=400
+                                 ok
+                               but nKey = key_left and checkwall(oGame,oSelf,-10,0)
+                                 file = "images/supermanleft.png"
+                                 dotransparent()
+                                 x -= 10
+                                 if x <= 0
+                                       x += 10
+                                       if oGame.aObjects[2].x != 0
+                                         oGame.aObjects[2].x += 50
+                                         callenemystate(oGame)
+                                         x += 50
+                                       ok
+                                 ok
+                               but nkey = key_esc or nKey = GE_AC_BACK
+                                 ogame.shutdown()
+                               ok
+                         }
+                       ok
+                 }
+                 mouse = func ogame,oself,nType,aMouseList {  
+                       if nType = GE_MOUSE_DOWN
+                         oGameState.moveplayer = TRUE
+                       But nType = GE_MOUSE_UP
+                         oGameState.moveplayer = FALSE
+                       ok
+                       if oGameState.moveplayer = TRUE
+                         if aMouseList[GE_MOUSE_X] < oSelf.X  # 左
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_left)
+                         else
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_right)
+                         ok
+                         if aMouseList[GE_MOUSE_Y] < oSelf.Y  # 上
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_up)
+                         else
+                               cFunc = oself.keypress  
+                               call cFunc(oGame,oSelf,Key_down)
+                         ok
+                       ok        
+                 }
+               }
+
+               addenemy(oGame,600)
+               addenemy(oGame,900)
+               addenemy(oGame,1550)
+               addenemy(oGame,2350)
+               addenemy(oGame,3350)
+               addenemy(oGame,3500)
+               addenemy(oGame,3670)
+               addenemy(oGame,3840)
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Score : " + oGameState.score
+                 x = 500  y=0
+                 state = func oGame,oSelf {
+                       oSelf { text = "Score : " + oGameState.score }
+                 }
+               }
+
+               text {
+                 animate = false
+                 point = 400
+                 size = 30
+                 file = "fonts/pirulen.ttf"
+                 text = "Energy : " + oGameState.value
+                 x = 10  y=0
+                 state = func oGame,oSelf { oSelf { text = "Energy : " + oGameState.value } }
+               }
+         }
+
+
+       func inlist nValue,aList
+         for x in aList
+               if x = nValue
+                 return true
+               ok
+         next
+         return false
+
+       func checkwall oGame,oself,diffx,diffy
+         alist = [1,2,3]
+         return checkwall2(oGame,oself,diffx,diffy,aList)
+
+       func checkwall2 oGame,oself,diffx,diffy,aList
+         xPos = oSelf.x + diffx
+         yPos = oSelf.y + diffy
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx
+         yPos = oSelf.y + diffy + oSelf.height
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx + oSelf.width
+         yPos = oSelf.y + diffy
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         xPos = oSelf.x + diffx + oSelf.width
+         yPos = oSelf.y + diffy + oSelf.height
+         nValue = oGame.aObjects[2].getvalue(xPos,yPos)
+         nValue = inlist(nValue,aList)
+         nValue = not nValue
+         if nValue = 0 return nValue ok
+
+         return nValue
+
+       func checkopenwall oGame
+         if oGameState.score = 900
+               oGame.aObjects[2].aMap[3][10] = 3
+               oGame.aObjects[2].aMap[4][10] = 0
+               oGame.aObjects[2].aMap[5][10] = 0
+               oGame.aObjects[2].aMap[6][10] = 0
+               oGame.aObjects[2].aMap[7][10] = 0
+               oGame.aObjects[2].aMap[8][10] = 0
+         but oGameState.score = 1800
+               oGame.aObjects[2].aMap[3][18] = 3
+               oGame.aObjects[2].aMap[4][18] = 0
+               oGame.aObjects[2].aMap[5][18] = 0
+               oGame.aObjects[2].aMap[6][18] = 0
+               oGame.aObjects[2].aMap[7][18] = 0
+               oGame.aObjects[2].aMap[8][18] = 0
+         but oGameState.score = 5500
+               oGame.aObjects[2].aMap[1][44] = 0
+               oGame.aObjects[2].aMap[2][44] = 0
+               oGame.aObjects[2].aMap[3][44] = 2
+         ok
+
+
+       func checkgameover ogame
+         if oGameState.gameresult  return ok
+         if oGameState.value <= 0
+               oGameState.value = 0
+               oGameState.gameresult = true
+               oGame {
+                 text {
+                       point = 400
+                       size = 30
+                       nStep = 9
+                       file = "fonts/pirulen.ttf"
+                       text = "Game Over !!!"
+                       x = 500  y=10
+                       state = func ogame,oself {
+                         if oself.y >= 400
+                               ogame.shutdown = true
+                         ok
+                       }
+                 }
+               }
+               showfire(oGame,oGame.aObjects[oGameState.PlayerIndex].x+40,
+                        oGame.aObjects[oGameState.PlayerIndex].y+40)
+               oGame.aObjects[oGameState.PlayerIndex].enabled = false
+               oGame.remove(oGameState.PlayerIndex)
+         ok
+
+
+       func showfire oGame,nX,nY
+         oGame {
+               animate {
+                 file = "images/fire.png"
+                 x = nX
+                 y = nY
+                 framewidth = 40
+                 height = 42
+                 nStep = 3
+                 transparent = true
+                 state = func oGame,oSelf {
+                       oSelf {
+                         nStep--
+                         if nStep = 0
+                               nStep = 3
+                               if frame < 13
+                                 frame++
+                               else
+                                 frame=1
+                                 oGame.remove(oself.nIndex)
+                               ok
+                         ok
+                       }
+                 }
+               }
+         }
+
+       func addenemy oGame,xPos
+         oGame {
+               lbraceend = false
+               sprite {
+                       type = ge_type_enemy
+                       file = "images/smenemy.png"
+                       transparent = true
+                       x = xPos y =10 width=100 height=100
+                       animate=true Scaled=true
+                       direction = GE_DIRECTION_NOMOVE
+                       temp = xPos
+                       state = func oGame,oSelf {
+                         oself {
+                               x = oSelf.temp +  oGame.aObjects[2].x
+                               if y < 0 y = 0 ok
+                               if y > 100 y=100 ok
+                               if x > SCREEN_W or x < 0 return ok
+                         }
+
+                         if random(10) = 1
+                               if oGameState.gameresult return ok
+                               ogame {
+                                 sprite {
+                                       type = ge_type_fire
+                                       file  = "images/smrocket.png"
+                                       scaled  = true
+                                       transparent = true
+                                       x = oself.x + 30
+                                       y = oself.y + oself.height+ 30
+                                       width = 30
+                                       height = 30
+                                       point = ogame.screen_h+30
+                                       nstep = 30
+                                       direction = ge_direction_incvertical
+                                       xvalue =  oGame.aObjects[2].x
+                                       temp = oself.x + 30 - xvalue
+                                       state = func oGame,oSelf {
+                                         oself { x = oSelf.temp +  oGame.aObjects[2].x  }
+                                         x =  oGame.aObjects[oGameState.playerindex]
+                                         if oself.x >= x.x and oself.y >= x.y and
+                                                oself.x <= x.x + x.width and
+                                                oself.y <= x.y + x.height
+                                                if oGameState.value > 0
+                                                  oGameState.value-=1000
+                                                ok
+                                                ogame.remove(oself.nindex)
+                                                checkgameover(oGame)
+                                         ok
+                                       }
+                                 }
+                               }
+                         ok
+                       }
+                 }
+         }
+         ogame.lbraceend = true
+
+
+       func checkstarskey oGame,oSelf,nValue,nRow,nCol
+         switch nValue
+               on 4
+                 oGame.aObjects[2].aMap[nRow][nCol] = 6
+                 oGameState.Score += 100
+                 checkopenwall(oGame)
+                 oGame { Sound {
+                       once = true
+                       file = "sound/sfx_point.wav"
+                 } }
+               on 5
+                 oGame.aObjects[2].aMap[nRow][nCol] = 0
+                 oGameState.DoorKey = true
+                 oGameState.Score += 500
+                 checkopenwall(oGame)
+                 oGame { Sound {
+                       once = true
+                       file = "sound/sfx_point.wav"
+                 } }
+         off
+
+       func checkstarskeycol oGame,oSelf
+         nValue = oGame.aObjects[2].getvalue(oSelf.x,oSelf.y)
+         nRow = oGame.aObjects[2].getrow(oSelf.x,oSelf.y)
+         nCol = oGame.aObjects[2].getcol(oSelf.x,oSelf.y)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         nRow = oGame.aObjects[2].getrow(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         nCol = oGame.aObjects[2].getcol(oSelf.x+oSelf.width,oSelf.y+oSelf.height)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x+oSelf.width,oSelf.y)
+         nRow = oGame.aObjects[2].getrow(oSelf.x+oSelf.width,oSelf.y)
+         nCol = oGame.aObjects[2].getcol(oSelf.x+oSelf.width,oSelf.y)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+         nValue = oGame.aObjects[2].getvalue(oSelf.x,oSelf.y+oSelf.height)
+         nRow = oGame.aObjects[2].getrow(oSelf.x,oSelf.y+oSelf.height)
+         nCol = oGame.aObjects[2].getcol(oSelf.x,oSelf.y+oSelf.height)
+         checkstarskey(oGame,oSelf,nValue,nRow,nCol)
+
+       func callenemystate oGame
+         for t in oGame.aObjects
+               t {
+                 if type = GE_TYPE_ENEMY
+                       call state(oGame,t)
+                 ok
+               }
+         next
+
+       Class GameState
+
+         down = 3
+         gameresult = false
+         Score = 0
+         startplay=false
+         lastcol = 0
+         playerwin = false
+         DoorKey = false
+         playerindex = 4
+         value = 1000
+         moveplayer = false
+
+スクリーンショット:
+
+.. image:: superman.png
+       :alt: Super Man 2016
+
+
diff --git a/docs/ja-jp/source/gameengineandorid.txt b/docs/ja-jp/source/gameengineandorid.txt
new file mode 100644 (file)
index 0000000..4622b39
--- /dev/null
@@ -0,0 +1,110 @@
+.. index:: 
+       single: Android 用ゲームのビルド方法; はじめに
+
+============================
+Android 用ゲームのビルド方法
+============================
+
+モバイル用の RingLibSDL ゲームのビルド方法を学びます。
+
+これにより、 Ring の 2D ゲームエンジンで開発したアプリケーションのパッケージ (\*.apk) を作成できます。
+
+
+.. index:: 
+       pair: Android 用ゲームのビルド方法; Android SDK の要件と更新のダウンロード
+
+Android SDK の要件と更新のダウンロード
+======================================
+
+* Android SDK ツール
+
+       https://developer.android.com/studio/index.html
+
+* Android NDK (android-ndk-r10c で検証済み)
+
+               https://developer.android.com/ndk/index.html
+
+* Apache Ant v1.8 以降
+
+               http://ant.apache.org/bindownload.cgi
+
+* Java SE Development Kit (JDK) v6 以降
+
+               http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
+
+* Android SDK を更新して開発に必要な API とツールのパッケージを入手します。
+
+       Android 4.4.2 (API 19) で検証済み
+
+* Windows の場合 - システムにより次の環境変数を定義します。
+
+(1) JAVA_HOME
+
+.. code-block:: ring
+       
+       用例 : C:\Program Files (x86)\Java\jdk1.8.0_05 
+
+(2) ANDROID_HOME       
+
+.. code-block:: ring
+
+       用例 : B:\mahmoud\Tools\Java-Android\adt-bundle-windows-x86-20140702\sdk
+
+.. index:: 
+       pair: Android 用ゲームのビルド方法; プロジェクトのフォルダ
+
+プロジェクトのフォルダ
+======================
+
+プロジェクトのフォルダを開きます : ring/android/ringlibsdl/project
+
+.. image:: ringlibsdlandroid_shot1.png
+       :alt: Android 版の RingLibSDL
+
+アセットのフォルダへソースコード (\*.ring) および、画像、音声ファイルを追加できます。
+
+.. image:: ringlibsdlandroid_shot2.png
+       :alt: Android 版の RingLibSDL
+
+すぐにビルドできる Flappy Bird 3000 ゲームがあります。
+
+start.ring ファイルから実行開始します。
+
+.. code-block:: ring
+
+       load "game2.ring"
+
+.. index:: 
+       pair: Android 用ゲームのビルド方法; プロジェクトのビルド
+
+プロジェクトのビルド
+====================
+
+ring/android/ringlibsdl/project フォルダへ移動します。
+
+このコマンドでビルドします (一度だけ必ず実行してください)。
+
+.. code-block:: none
+
+       ndk-build
+
+このコマンドでパッケージ (\*.apk) を作成します。
+
+.. code-block:: none
+
+       ant debug
+
+プロジェクトのビルドにバッチファイル (build.bat) を使うこともできます。
+
+.. code-block:: none
+
+       rem このバッチファイルは、お使いの開発環境に合わせて書き換えてください。
+
+       set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.8.0_05
+       set ANDROID_HOME=B:\mahmoud\Tools\JavaAndroid\adt-bundle-windows-x86-20140702\sdk
+       set NDK_ROOT=B:\mahmoud\Tools\JavaAndroid\android-ndk-r10c
+
+       set path=%path%;B:\mahmoud\Tools\JavaAndroid\android-ndk-r10c
+       set path=%path%;B:\mahmoud\Tools\JavaAndroid\apache-ant-1.9.4\bin
+
+       ndk-build
diff --git a/docs/ja-jp/source/gameengineshot1.png b/docs/ja-jp/source/gameengineshot1.png
new file mode 100644 (file)
index 0000000..2259b19
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot1.png differ
diff --git a/docs/ja-jp/source/gameengineshot11.png b/docs/ja-jp/source/gameengineshot11.png
new file mode 100644 (file)
index 0000000..a77376e
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot11.png differ
diff --git a/docs/ja-jp/source/gameengineshot12.png b/docs/ja-jp/source/gameengineshot12.png
new file mode 100644 (file)
index 0000000..6511780
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot12.png differ
diff --git a/docs/ja-jp/source/gameengineshot13.png b/docs/ja-jp/source/gameengineshot13.png
new file mode 100644 (file)
index 0000000..611a642
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot13.png differ
diff --git a/docs/ja-jp/source/gameengineshot14.png b/docs/ja-jp/source/gameengineshot14.png
new file mode 100644 (file)
index 0000000..04a8127
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot14.png differ
diff --git a/docs/ja-jp/source/gameengineshot15.png b/docs/ja-jp/source/gameengineshot15.png
new file mode 100644 (file)
index 0000000..e4e3498
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot15.png differ
diff --git a/docs/ja-jp/source/gameengineshot2.png b/docs/ja-jp/source/gameengineshot2.png
new file mode 100644 (file)
index 0000000..15500e7
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot2.png differ
diff --git a/docs/ja-jp/source/gameengineshot3.png b/docs/ja-jp/source/gameengineshot3.png
new file mode 100644 (file)
index 0000000..1de7f0c
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot3.png differ
diff --git a/docs/ja-jp/source/gameengineshot5.png b/docs/ja-jp/source/gameengineshot5.png
new file mode 100644 (file)
index 0000000..b689297
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot5.png differ
diff --git a/docs/ja-jp/source/gameengineshot6.png b/docs/ja-jp/source/gameengineshot6.png
new file mode 100644 (file)
index 0000000..2a1c4c3
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot6.png differ
diff --git a/docs/ja-jp/source/gameengineshot7.png b/docs/ja-jp/source/gameengineshot7.png
new file mode 100644 (file)
index 0000000..41d3551
Binary files /dev/null and b/docs/ja-jp/source/gameengineshot7.png differ
diff --git a/docs/ja-jp/source/gameoflife.jpg b/docs/ja-jp/source/gameoflife.jpg
new file mode 100644 (file)
index 0000000..96050f4
Binary files /dev/null and b/docs/ja-jp/source/gameoflife.jpg differ
diff --git a/docs/ja-jp/source/generalinfo.txt b/docs/ja-jp/source/generalinfo.txt
new file mode 100644 (file)
index 0000000..9fea4a4
--- /dev/null
@@ -0,0 +1,227 @@
+.. index:: 
+       single: 一般情報; はじめに
+
+========
+一般情報
+========
+
+プログラミング言語 Ring の一般情報を記載しています。
+
+(1) Ring アーキテクチャ
+(2) メモリ管理
+(3) データ表現
+
+.. index:: 
+       pair: 一般情報; Ring アーキテクチャ
+
+Ring アーキテクチャ
+===================
+
+アーキテクチャの構成は、
+
+(1) Ring アプリケーション (自作コード) - Ring で記述 - ring/applications フォルダを参照してください。
+(2) Ring ライブラリ (StdLib, WebLib, GameEngine, など) - Ring で記述 - ring/ringlibs フォルダを参照してください。
+(3) Ring 拡張機能 (RingAllegro, RingQt, など) - C/C++ で記述 (Ring コードもあります) - ring/extensions フォルダを参照してください。
+(4) Ring 仮想機械 (Ring VM) - C 言語で記述
+(5) オペレーティングシステム (現在のプラットフォーム) - (Windows, Linux, macOS, Android, など)
+
+拡張機能の実態は動的ライブラリです (DLL, So, Dylib)。
+拡張機能の更新時、自作コードの更新は不要です。
+
+
+フォルダ (ring\libdepwin) ====> Windows プラットホーム用の Ring 拡張機能 (C 言語で記述) をビルドするために使用される C ライブラリ
+
+フォルダ (ring\ringlibs)  ====> Ring で記述した Ring ライブラリ (StdLib, WebLib, GameEngine, など)
+
+フォルダ (ring\rnoteexe)  ====> rnote.ring の起動用実行可能ファイルを作成用の C  ソースファイル
+
+フォルダ (ring\visualsrc) ====> Ring コンパイラと Ring VM のビジュアル版ソースコードは Programming Without Coding Technology (PWCT) で開発
+
+用語「Ring ライブラリ」の語釈は ─→ Ring で記述したライブラリのコード
+
+用語「Ring 拡張機能」の語釈は ─→ C または C++ で記述したライブラリのコード
+
+.. index:: 
+       pair: 一般情報; メモリ管理
+
+メモリ管理
+==========
+
+(1) 関数を呼び出し時、この関数で新しいスコープの取得を行い、このスコープ内へ変数を格納します。
+
+この関数で一時作業用メモリを取得します。 この一時作業用メモリ内へ一時作業用リストを格納します。
+
+これは関数呼び出し終了直後に全て削除されます (スコープの終了)。
+
+(2) Ring でメモリを削除するには、
+
+2.1 関数スコープの終了まで待機
+
+2.2 代入演算子の使用
+
+2.3 callgc() 関数の使用 (一時作業用メモリの削除、リストのみ)
+
+(3) Ring のガベージコレクターではエスケープ解析と参照カウントを使用
+
+90% の場合では、ガベージコレクターの実行を不要にするために `エスケープ解析 <https://ja.wikipedia.org/wiki/エスケープ解析>`_ が使用されます。
+メモリから削除、および残存対象を即時認識します。
+
+10% 以下の場合では Ring は参照カウントを使用します。
+
+例えば、関数へリストと部分リストを渡すとき、
+Ring はリストを参照渡しで渡しますが、親リストを削除してしまうとどうなりますか?
+
+この場合、部分リストは参照カウントを使用します。そして親リストの削除時は関数の終了までメモリに残存します。
+
+Ring では、参照、および代入演算子で値によるリストのコピーの回避を奨励していることを覚えておいてください。
+そして、 Ring で参照カウントを使うときは非常に限定された特別な場合です。ほとんどの場合はエスケープ解析で十分であり、非常に高速であることです。
+
+Ring 1.9 から参照カウントへの対応を Ring 拡張機能と低水準 C ポインタまで拡大しました。
+例えば、 fopen() の使用時に fclose()  の使用に関して注意深くなる必要はありません。また RingODBC, RingSQLite, RingMySQL, RingQt などの拡張機能でも同じことが言えます。
+
+使用完了後、割り当てられた全資源はガーベジコレクターにより整理されます (最後の参照を失ったとき)。
+
+
+.. index:: 
+       pair: 一般情報; データ表現
+
+データ表現
+==========
+
+(1) Ring において、文字列は「バイトから構成される配列」です。
+
+Ring は 8 ビットクリーン実装であり、文字列内の各文字列は 8 ビット(1 バイト) です。
+
+「Int2Bytes(), Float2Bytes() および Double2Bytes()」関数は文字列を返します。
+
+文字列にはバイナリデータも格納できます。
+
+.. code-block:: ring
+
+       mystring = read("myfile.exe")
+
+(2) 変数について考えるときは、このことを覚えておいてください
+
+* 値 ---> 内容物 (データとしてメモリに格納するもの) - 低水準概念
+* 型 ---> どう内容物を扱うことができるか、あるいは取り扱い方法 (単なる論理的概念)
+
+電子計算機のメモリ ----> [Bytes] (バイト) で格納 - 各バイトは 8 ビット - (ここでは単語「メモリ」の概念については扱いません)
+
+メモリとプロセッサのレジスタ間で移動処理が行われるとき、これらのバイトは一緒にされてからまとめられます。
+ここでは、例えば 32 ビットと 64 ビットの「レジスタの大きさ」は同じです。
+また、バイトオーダーもあります。
+
+プログラミング言語 ----> これらのバイトに型を追加 (単なる概念) することで取り扱いかたと処理方法について決定します。
+
+さらに、プログラミング言語では「型変換」ができます —> ほとんどの場合、型は論理的概念であるため、実際は単なるデータです (バイト、バイトカウント、バイトオーダーなど)。
+
+Ring 文字列 ----> これらのバイト (各バイトは 8 ビット) があるので、 Ring は文字列の大きさを認識します (数値として String構造体へ格納)。
+
+よって NULL 文字の確認をしたり、あるい文字列の終端へ NULL 文字を追加しません (不要です)。
+
+Ring VM 内部の処理全般では Ring データの大きさの確認を行い文字列をバイナリデータとして扱います (各文字は 8 ビット)。
+
+C 言語では ---> 通常は各文字列の終端へ NULL 文字 (\\0) を追加します。
+
+また、文字列関数は NULL 文字を確認するため、バイナリデータを処理するには不適切です。
+
+符号付き (Signed) vs 符号なし (Unsigned) ---> データの算術演算をするときに重要な論理的概念でありますが、データを格納するとき、格納されるデータが全て8 ビットの場合は一切考慮されません。 ---> よって注意する必要はありません。
+
+Ring では、これらの詳細について考えないでください。この件に関しては利用者側から見えないようになっています。このおかげでアプリケーションとしたいことのために開発に集中できます。
+
+C 言語で低水準コードの記述を行い、万物を支配したいならば (必要に応じて) C 言語を検討してください。
+----> 優れた処理能力とメモリ管理
+
+うんざりするような細かいことを考えず開発に専念して Ring コードを記述したいならぱ Ring を検討してください。
+-----> 優れた生産性と迅速なソフトウェアの開発完了
+
+吉報「プロジェクトで Ring と C を併用できます」
+
+
+(3) Int2Bytes(), Float2Bytes() および Double2Bytes() 関数
+
+これらの関数の入力値は数値を扱います。---> 数値型 (int|float|double) に基づきバイト集合を変換します。 ---> 結果として、これらのバイトがある Ring 文字列を返します。
+
+Int2Bytes() ---> Ring 文字列 (バイト集合) と文字列の大きさ = sizeof(int)
+
+Float2Bytes() ---> Ring 文字列 (バイト集合) と文字列の大きさ = sizeof(float)
+
+Double2Bytes() ---> Ring 文字列 (バイト集合) と文字列の大きさ = sizeof(double)
+
+用例:
+
+.. code-block:: ring
+
+       ? len( int2bytes(1) )
+       ? len( float2bytes(1) )
+       ? len( double2bytes(1) )
+
+実行結果:
+
+.. code-block:: none
+
+       4
+       4
+       8
+
+(4) 数値の格納
+
+数値使用時、 Ring はメモリの数値表現で Double データ型を常時使用します。
+数値への算術演算時、これを理解していることは重要です。
+
+"" + 数値で数値を文字列へ変換するとき、あるいは文字列 (数値) で文字列を取得すると数値ごとの 1 バイト表現となります (記憶領域では好ましくはない考えかたですが、文字列処理で便利です)。
+
+記憶領域の特定容量 (int|float|double) で数値表現をする必要があるならば、データをバイナリファイルとして書き出すときに bytes2int(), bytes2float() および bytes2double() を使用してください。
+
+Ring 数値 (double) ----> int2bytes()  - 数値を double から int へキャストしてバイトを返します ----> 4 バイト (Ring 文字列)
+
+Ring 数値 (double) ----> float2bytes()  - 数値を double から float へキャストしてバイトを返します ----> 4 バイト (Ring 文字列)
+
+Ring 数値 (double) ----> double2bytes()  - 数値 (double) でバイトを返します ----> 8 バイト (Ring 文字列)
+Ring の内部処理に限り int 型が使用されますが、 Ring アプリケーション、またはコードでは数値型 (double) のみ使用します。
+
+(5) Unsigned() 関数
+
+unsigned() 関数の第一と第二仮引数は数値を要求します。
+
+.. code-block:: ring
+
+       unsigned(nNumber1,nNumber2,cOperator)
+
+bytes2int() 関数はバイトを数値へ変換できます。
+
+用例:
+
+.. code-block:: ring 
+
+       B = list(4)
+
+       for k=1 to 4
+       {  
+               B[k]= Space(4)
+               for kk=1 to 4 { B[k][kk]= char(60+4*k +kk) }
+               ? " B" +k +": " +B[k]
+       }
+
+       A12= Space(4)     A12= bytes2int(B[1]) ^ bytes2int(B[2])                
+       ? "A12: " +string(A12)  
+       A34= Space(4)     A34= bytes2int(B[3]) ^ bytes2int(B[4])                
+       ? "A34: " +string(A34)
+       A12= space(4)     A12= Unsigned(bytes2int(B[1]),bytes2int(B[2]),"^")    
+       ? "unsigned A12: " +A12
+       A34= space(4)     A34= Unsigned(bytes2int(B[3]),bytes2int(B[4]),"^")    
+       ? "unsigned A34: " +A34
+
+実行結果:
+
+.. code-block:: none
+
+       B1: ABCD
+       B2: EFGH
+       B3: IJKL
+       B4: MNOP
+       A12: 201589764
+       A34: 470025220
+       unsigned A12: 201589764
+       unsigned A34: 470025220
diff --git a/docs/ja-jp/source/getinput.txt b/docs/ja-jp/source/getinput.txt
new file mode 100644 (file)
index 0000000..9c43ff1
--- /dev/null
@@ -0,0 +1,103 @@
+.. index:: 
+       single: 標準入力の取得; はじめに
+
+==============
+標準入力の取得
+==============
+
+標準入力 (キーボード) の用法を学びます。
+
+* Give 命令
+* GetChar() 関数
+* Input() 関数
+
+.. index:: 
+       pair: 標準入力の取得; Give 命令
+
+Give 命令
+=========
+
+Give 命令はユーザからの標準入力を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       Give 変数名
+
+用例:
+
+.. code-block:: ring
+
+       See "Enter the first number : " Give nNum1
+       See "Enter the second number : " Give nNum2
+       See "Sum : " + ( 0 + nNum1 + nNum2 )
+実行結果:
+
+.. code-block:: ring
+
+       Enter the first number : 3
+       Enter the second number : 4
+       Sum : 7
+
+.. index:: 
+       pair: 標準入力の取得; GetChar()
+
+GetChar() 関数
+==============
+
+GetChar() 関数は標準入力から一文字取得します。
+
+文法:
+
+.. code-block:: ring
+
+       GetChar() ---> 文字
+
+用例:
+
+.. code-block:: ring
+
+       While True
+               See "
+                       Main Menu
+                       (1) Say Hello
+                       (2) Exit
+                   " 
+               Option = GetChar()
+               GetChar() GetChar()  # 改行
+
+               # 前の二行は改行へ置換できます。
+               # Option を与えます。
+
+               if Option = 1
+                       see "Enter your name : " give cName 
+                       see "Hello " + cName
+               else
+                       bye
+               ok
+       End
+
+.. index:: 
+       pair: 標準入力の取得; Input()
+
+Input() 関数
+============
+
+Input() 関数はキーボードから標準入力を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       Input(nCount) ---> 文字列
+
+この関数は nCount 文字 (最低でも) を読み取るまで待機します。
+
+用例:
+
+.. code-block:: ring
+
+       See "Enter message (30 characters) : " cMsg = input(30)
+       See "Message : " + cMsg
diff --git a/docs/ja-jp/source/getquotesmac.png b/docs/ja-jp/source/getquotesmac.png
new file mode 100644 (file)
index 0000000..b30f3dc
Binary files /dev/null and b/docs/ja-jp/source/getquotesmac.png differ
diff --git a/docs/ja-jp/source/getting_started.txt b/docs/ja-jp/source/getting_started.txt
new file mode 100644 (file)
index 0000000..afc7ffd
--- /dev/null
@@ -0,0 +1,183 @@
+.. index:: 
+       single: 入門 - 第一形式; はじめに
+
+===============
+入門 - 第一形式
+===============
+
+.. index:: 
+       pair: 入門 - 第一形式; Hello World
+
+Hello World
+===========
+
+このプログラムは、 Hello World のメッセージを画面表示します (標準出力)。
+
+.. code-block:: ring
+
+       see "Hello World"
+
+.. index:: 
+       pair: 入門 - 第一形式; プログラムの実行
+
+プログラムの実行
+================
+
+プログラムを実行するには、ファイルにコードを保存します。例えば : hello.ring です。
+コマンドラインまたはターミナルから、 Ring でプログラムを実行します (事前に Ring/bin フォルダのパスへ追加してください)。
+
+.. code-block:: ring
+
+       ring hello.ring
+
+.. note:: Ring ノートパッドでもコードの記述と実行ができます (パスの設定は不要です)。
+
+.. index:: 
+       pair: 入門 - 第一形式; 実行可能ファイルの作成
+
+実行可能ファイルの作成
+======================
+
+Ring2EXE でアプリケーションの実行可能ファイルを作成します。
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+.. index:: 
+       pair: 入門 - 第一形式; 英数大小文字同一視
+
+英数大小文字同一視
+==================
+
+Ring は英数大小文字同一視です。同じプログラムを違う記法で書くこともできます。
+
+.. tip:: 全てのプログラムのソースコードで同じ記法を一つ選択することをお勧めします。
+
+.. code-block:: ring
+
+       SEE "Hello World"
+
+.. code-block:: ring
+
+       See "Hello World"
+
+
+.. index:: 
+       pair: 入門 - 第一形式; 複数行リテラル
+
+複数行リテラル
+==============
+
+Ring で複数行リテラルを記述できます。この用例を参照してください。
+
+.. code-block:: ring
+
+       See "
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           "
+
+また、変数 nl で改行の挿入、
+および + 演算子で文字列を連結できます。
+
+改行で NL があるように、同じく Tab (タブ) と CR (キャリッジリターン) もあります。
+
+.. note:: 値 nl は改行を意味しますが、改行に相当する文字コードは
+       オペレーティングシステムにより異なります。
+
+.. code-block:: ring
+
+       See "Hello" + nl + "Welcome to the Ring programming language" + 
+           nl + "How are you?"
+
+.. index:: 
+       pair: 入門 - 第一形式; 標準入力の取得
+
+標準入力の取得
+==============
+
+Give 命令でユーザからの標準入力を取得できます。
+
+.. code-block:: ring
+
+       See "What is your name? "
+       Give cName
+       See "Hello " + cName
+
+.. index:: 
+       pair: 入門 - 第一形式; 文末終端子は明示不要
+
+文末終端子は明示不要
+====================
+
+ステートメントを区切るために ‘;’ の記述、または ENTER を押さなくてもいいです。
+前述のプログラムは一行で記述できます。
+
+.. code-block:: ring
+
+       See "What is your name? " give cName see "Hello " + cName
+
+.. index:: 
+       pair: 入門 - 第一形式; 式の表示後に ? で改行するに
+
+式の表示後に ? で改行するには
+=============================
+
+表示後に改行を行うのは一般的ですが、その処理は演算子 ? でも行うことができます!
+
+用例:
+
+.. code-block:: ring
+
+       ? "Hello, World!"
+       for x = 1 to 10
+               ? x
+       next
+
+実行結果:
+
+.. code-block:: none
+
+       Hello, World!
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: 入門 - 第一形式; コメントの記述
+
+コメントの記述
+================
+
+一行コメントと複数行コメントを記述できます。
+
+一行コメントは # または // で始まります。
+
+複数行コメントは /* ~ \*/ です。
+
+.. code-block:: ring
+
+       /* 
+               プログラムの名前    : はじめての Ring プログラム
+               日付                : 2016.09.09
+               作者                : Mahmoud Fayed
+       */
+
+       See "What is your name? "   # 画面へメッセージを表示
+       give cName                  # ユーザからの標準入力を取得
+       see "Hello " + cName        # こんにちわ!
+
+       // See "Bye!"
+
+.. note:: // による一行コメントはコード記法のひとつです。
+
diff --git a/docs/ja-jp/source/getting_started2.txt b/docs/ja-jp/source/getting_started2.txt
new file mode 100644 (file)
index 0000000..c9773c1
--- /dev/null
@@ -0,0 +1,150 @@
+.. index:: 
+       single: 入門 - 第二形式; はじめに
+
+===============
+入門 - 第二形式
+===============
+
+.. index:: 
+       pair: 入門 - 第二形式; Hello World
+
+Hello World
+===========
+
+このプログラムは、 Hello World のメッセージを画面表示します (標準出力)。
+
+.. code-block:: ring
+
+       put "Hello World"
+
+.. index:: 
+       pair: 入門 - 第二形式; プログラムの実行
+
+プログラムの実行
+================
+
+プログラムを実行するには、ファイルにコードを保存します。例えば : hello.ring です。
+コマンドラインまたはターミナルから、 Ring でプログラムを実行します (事前に Ring/bin フォルダのパスへ追加してください)。
+
+.. code-block:: ring
+
+       ring hello.ring
+
+.. note:: Ring ノートパッドでもコードの記述と実行ができます (パスの設定は不要です)。
+
+.. index:: 
+       pair: 入門 - 第二形式; 実行可能ファイルの作成
+
+実行可能ファイルの作成
+======================
+
+Ring2EXE でアプリケーションの実行可能ファイルを作成します。
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+.. index:: 
+       pair: 入門 - 第二形式; 英数大小文字同一視
+
+英数大小文字同一視
+==================
+
+Ring は英数大小文字同一視です。同じプログラムを違う記法で書くこともできます。
+
+.. tip:: 全てのプログラムのソースコードで同じ記法を一つ選択することをお勧めします。
+
+.. code-block:: ring
+
+       PUT "Hello World"
+
+.. code-block:: ring
+
+       Put "Hello World"
+
+
+.. index:: 
+       pair: 入門 - 第二形式; 複数行リテラル
+
+複数行リテラル
+==============
+
+Ring で複数行リテラルを記述できます。この用例を参照してください。
+
+.. code-block:: ring
+
+       Put "
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           "
+
+また、変数 nl で改行の挿入、
+および + 演算子で文字列を連結できます。
+
+改行で NL があるように、同じく Tab (タブ) と CR (キャリッジリターン) もあります。
+
+.. note:: 値 nl は改行を意味しますが、改行に相当する文字コードは
+       オペレーティングシステムにより異なります。
+
+.. code-block:: ring
+
+       Put "Hello" + nl + "Welcome to the Ring programming language" + 
+           nl + "How are you?"
+
+.. index:: 
+       pair: 入門 - 第二形式; 標準入力の取得
+
+標準入力の取得
+==============
+
+Get 命令でユーザからの標準入力を取得できます。
+
+.. code-block:: ring
+
+       Put "What is your name? "
+       Get cName
+       Put "Hello " + cName
+
+.. index:: 
+       pair: 入門 - 第二形式; 文末終端子は明示不要
+
+文末終端子は明示不要
+====================
+
+ステートメントを区切るために ‘;’の使用、または ENTER を押さなくてもいいです。
+前述のプログラムは一行で記述できます。
+
+.. code-block:: ring
+
+       Put "What is your name? " get cName put "Hello " + cName
+
+.. index:: 
+       pair: 入門 - 第二形式; コメントの記述
+
+コメントの記述
+================
+
+一行コメントと複数行コメントを記述できます。
+
+一行コメントは # または // で始まります。
+
+複数行コメントは /* ~ \*/ です。
+
+.. code-block:: ring
+
+       /* 
+               プログラムの名前    : はじめての Ring プログラム
+               日付                : 2016.09.09
+               作者                : Mahmoud Fayed
+       */
+
+       Put "What is your name? "       # 画面へメッセージを表示
+       get cName                       # ユーザからの標準入力を取得
+       put "Hello " + cName            # こんにちわ!
+
+       // Put "Bye!"
+
+.. note:: // による一行コメントはコード記法のひとつです。
+
diff --git a/docs/ja-jp/source/getting_started3.txt b/docs/ja-jp/source/getting_started3.txt
new file mode 100644 (file)
index 0000000..56d5662
--- /dev/null
@@ -0,0 +1,179 @@
+.. index:: 
+       single: 入門 - 第三形式; はじめに
+
+===============
+入門 - 第三形式
+===============
+
+.. index:: 
+       pair: 入門 - 第三形式; Hello World
+
+Hello World
+===========
+
+このプログラムは、 Hello World のメッセージを画面表示します (標準出力)。
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       print("Hello World")
+
+.. index:: 
+       pair: 入門 - 第三形式; プログラムの実行
+
+プログラムの実行
+================
+
+プログラムを実行するには、ファイルにコードを保存します。例えば : hello.ring です。
+コマンドラインまたはターミナルから、 Ring でプログラムを実行します (事前に Ring/bin フォルダのパスへ追加してください)。
+
+.. code-block:: ring
+
+       ring hello.ring
+
+.. note:: Ring ノートパッドでもコードの記述と実行ができます (パスの設定は不要です)。
+
+.. index:: 
+       pair: 入門 - 第三形式; 実行可能ファイルの作成
+
+実行可能ファイルの作成
+======================
+
+Ring2EXE でアプリケーションの実行可能ファイルを作成します。
+
+.. code-block:: ring
+
+       ring2exe hello.ring -static
+
+-static オプションは ring.dll|ring.so|ring.dylib が不要になります。
+
+しかし stdlib.ring の読み込みがライブラリで必要になることがあります (LibCurl, OpenSSL, MySQL など)。
+
+その場合はライブラリが必要になります!
+
+これらのライブラリを不要にするためには (stdlib クラスが不要ならば)、
+
+この用例の通り stdlib.ring ではなく stdlibcore.ring を使用してください。
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       print("Hello World")
+
+stdlibcore.ring を使うと stdlib クラスではなく stdlib 関数へアクセスします。
+
+stdlib.ring を用いてアプリケーションを配布したい場合は、
+
+.. code-block:: ring
+
+       ring2exe hello.ring -dist -allruntime -noqt -noallegro
+
+.. index:: 
+       pair: 入門 - 第三形式; 英数大小文字同一視
+
+英数大小文字同一視
+==================
+
+Ring は英数大小文字同一視です。同じプログラムを違う記法で書くこともできます。
+
+.. tip:: 全てのプログラムのソースコードで同じ記法を一つ選択することをお勧めします。
+
+.. code-block:: ring
+
+       LOAD "stdlib.ring"
+       PRINT("Hello World")
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("Hello World")
+
+
+.. index:: 
+       pair: 入門 - 第三形式; 複数行リテラル
+
+複数行リテラル
+==============
+
+Ring で複数行リテラルを記述できます。この用例を参照してください。
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("
+               Hello 
+               Welcome to the Ring programming language
+               How are you?
+
+           ")
+
+また、 \\n で改行の挿入、
+および #{変数名} で変数の値を挿入できます。 
+
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print( "Hello\nWelcome to the Ring programming language\nHow are you?")
+
+.. index:: 
+       pair: 入門 - 第三形式; 標準入力の取得
+
+標準入力の取得
+==============
+
+getstring() 関数はユーザからの標準入力を取得します。
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("What is your name? ")
+       cName = GetString()
+       Print("Hello #{cName}")
+
+.. index:: 
+       pair: 入門 - 第三形式; 文末終端子は明示不要
+
+文末終端子は明示不要
+====================
+
+ステートメントを区切るために‘;’の使用、または ENTER を押さなくてもいいです。
+前述のプログラムは一行で記述できます。
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       Print("What is your name? ") cName=getstring() print("Hello #{cName}")
+
+.. index:: 
+       pair: 入門 - 第三形式; コメントの記述
+
+コメントの記述
+================
+
+一行コメントと複数行コメントを記述できます。
+
+一行コメントは # または // で始まります。
+
+複数行コメントは /* ~ \*/ です。
+
+.. code-block:: ring
+
+       /* 
+               プログラムの名前    : はじめての Ring プログラム
+               日付                : 2016.09.09
+               作者                : Mahmoud Fayed
+       */
+
+       Load "stdlib.ring"
+
+       Print("What is your name? ")    # 画面へメッセージを表示
+       cName=GetString()               # ユーザからの標準入力を取得
+       print("Hello #{cName}")         # こんにちわ!
+
+       // print("Bye!")
+
+.. note:: // による一行コメントはコード記法のひとつです。
+
diff --git a/docs/ja-jp/source/gm800lefd.png b/docs/ja-jp/source/gm800lefd.png
new file mode 100644 (file)
index 0000000..4252a81
Binary files /dev/null and b/docs/ja-jp/source/gm800lefd.png differ
diff --git a/docs/ja-jp/source/gmleveleditor.png b/docs/ja-jp/source/gmleveleditor.png
new file mode 100644 (file)
index 0000000..f0e76ef
Binary files /dev/null and b/docs/ja-jp/source/gmleveleditor.png differ
diff --git a/docs/ja-jp/source/gmshot1.png b/docs/ja-jp/source/gmshot1.png
new file mode 100644 (file)
index 0000000..88caabf
Binary files /dev/null and b/docs/ja-jp/source/gmshot1.png differ
diff --git a/docs/ja-jp/source/gmshot2.png b/docs/ja-jp/source/gmshot2.png
new file mode 100644 (file)
index 0000000..3c5e51a
Binary files /dev/null and b/docs/ja-jp/source/gmshot2.png differ
diff --git a/docs/ja-jp/source/gmshot3.png b/docs/ja-jp/source/gmshot3.png
new file mode 100644 (file)
index 0000000..527382b
Binary files /dev/null and b/docs/ja-jp/source/gmshot3.png differ
diff --git a/docs/ja-jp/source/go.png b/docs/ja-jp/source/go.png
new file mode 100644 (file)
index 0000000..dbbadb9
Binary files /dev/null and b/docs/ja-jp/source/go.png differ
diff --git a/docs/ja-jp/source/goldmagic800.txt b/docs/ja-jp/source/goldmagic800.txt
new file mode 100644 (file)
index 0000000..6bbfcd5
--- /dev/null
@@ -0,0 +1,104 @@
+.. index:: 
+       single: Gold Magic 800 ゲーム; はじめに
+
+=====================
+Gold Magic 800 ゲーム
+=====================
+
+この章では Gold Magic 800 ゲームについて解説します。
+
+このゲームは Ring, RingAllegro および RingOpenGL で開発しました。
+
+ゲーム本体は ring/applications/goldmagic800 フォルダにあります。
+
+.. index:: 
+       pair: Gold Magic 800 ゲーム; ゲームストーリー
+
+ゲームストーリー
+================
+
+7000 年前に世界中で最も偉大な魔法使いが制作したユニークで特別な箱を友人が発見しました。あなたが箱を閉じて移動すると、箱に隠されていた新しい黄金が現れました。それは無尽蔵の金鉱脈です。
+この箱は魔法で保護された特別な完全パズル環境にあるため侵入は不可能です。
+この問題を解決するために、遠隔操縦装置で箱を動かせるナノテクノロジー技術を応用したロボットを友人が発明しました。
+あなたの任務は、パズルをすべて解いて箱を入手し世界の大富豪の人々の仲間入りをすることです。
+
+.. index:: 
+       pair: Gold Magic 800 ゲーム; あそびかた
+
+あそびかた
+==========
+
+Gold Magic 800 は企業家思考を無意識に心へ教育するためのパズルゲームです。
+
+ゲームでは、最初の扉 (一つ目の箱) を開けるために箱を動かして付近にある黄金の得点 (=800) を得てから、
+扉の上に箱を置きます (次の扉を開きます)。
+そして、レベル内にある各扉へすべての箱を置いてください。一つ目の扉に限り 800 点が必要です。
+この条件は次のドアでは不要とはいえ、この方法では扉に箱を置くと黄金は壁に変わってしまうことです。
+よって、慎重に経路を選ぶことです。
+
+.. index:: 
+       pair: Gold Magic 800 ゲーム; 上達のコツ
+
+上達のコツ
+==========
+
+1- 最初に戦略を練ります。
+
+2- 対象へ移動して必要な資源を入手します。
+
+3- 様々な解決策を判断しながら数歩先を考えます。
+
+4- 失敗を避けるために悩みながら試行錯誤します。
+
+5- コストを考慮してください (800)。
+
+6- 集中して慎重に進めます。
+
+7- 忍耐強くお楽しみください。
+
+.. index:: 
+       pair: Gold Magic 800 ゲーム; スクリーンショット
+
+スクリーンショット
+==================
+
+レベルの選択ができます。
+
+.. image:: gmshot2.png
+       :alt: Gold Magic 800 - スクリーンショット 2
+
+このスクリーンショットはレベル (1) です。
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 - スクリーンショット 3
+
+Gold Magic 800 レベルエディタです。
+
+.. image:: gmleveleditor.png
+       :alt: Gold Magic 800 レベルエディタ
+
+
+.. index:: 
+       pair: Gold Magic 800 ゲーム; ソースコード
+
+ソースコード
+============
+
+このフォルダにレベルエディタのソースコードがあります。
+
+https://github.com/ring-lang/ring/tree/master/applications/goldmagic800/editor
+
+Ring フォームデザイナーでレベルエディタのユーザインターフェースをデザインしました。
+
+.. image:: gm800lefd.png
+       :alt: Gold Magic 800 レベルエディタ
+
+このファイルにはレベルエディタのコントロールクラスが収録されています。
+
+https://github.com/ring-lang/ring/blob/master/applications/goldmagic800/editor/editorController.ring
+
+このフォルダにゲームエンジンのソースコードがあります。
+
+https://github.com/ring-lang/ring/tree/master/applications/goldmagic800
+
+
diff --git a/docs/ja-jp/source/index.txt b/docs/ja-jp/source/index.txt
new file mode 100644 (file)
index 0000000..648f28e
--- /dev/null
@@ -0,0 +1,137 @@
+.. Ring documentation master file, created by
+   sphinx-quickstart on Sun May 03 10:07:42 2015.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+ようこそ Ring 取扱説明書へ!
+============================
+
+目次:
+
+.. toctree::
+   :maxdepth: 2
+
+   アプリケーション開発期間の短縮 <ringapps>
+   はじめに <introduction>
+   言語設計 <languagedesign>
+   Ring 1.12 の変更履歴 <whatisnew12>
+   Ring 1.11 の変更履歴 <whatisnew11>
+   Ring 1.10 の変更履歴 <whatisnew10>
+   Ring 1.9 の変更履歴 <whatisnew9>
+   Ring 1.8 の変更履歴 <whatisnew8>
+   Ring 1.7 の変更履歴 <whatisnew7>
+   Ring 1.6 の変更履歴 <whatisnew6>
+   Ring 1.5 の変更履歴 <whatisnew5>
+   Ring 1.4 の変更履歴 <whatisnew4>
+   Ring 1.3 の変更履歴 <whatisnew3>
+   Ring 1.2 の変更履歴 <whatisnew2>
+   Ring 1.1 の変更履歴 <whatisnew>
+   ソースコードからのビルド方法 <sourcecode>
+   開発に貢献するには? <contribute>
+   入門 - 第一形式 <getting_started>
+   入門 - 第二形式 <getting_started2>
+   入門 - 第三形式 <getting_started3>
+   Ring ノートパッドの用法 <ringnotepad>
+   テキストエディタの設定 <codeeditors>
+   変数 <variables>
+   演算子 <operators>
+   制御構造 - 第一形式 <controlstructures>
+   制御構造 - 第二形式 <controlstructures2>
+   制御構造 - 第三形式 <controlstructures3>
+   標準入力の取得 <getinput>
+   関数 - 第一形式 <functions>
+   関数 - 第二形式 <functions2>
+   関数 - 第三形式 <functions3>
+   プログラムの構造 <programstructure>
+   リスト <lists>
+   文字列 <strings>
+   日付と時刻 <dateandtime>
+   データ型の検査と変換 <checkandconvert>
+   算術関数 <mathfunc>
+   ファイル <files>
+   システム関数 <systemfunc>
+   Eval() とデバッグ <evaldebug>
+   デモプログラム <demo>
+   ODBC 関数 <odbc>
+   MySQL 関数 <mysql>
+   SQLite 関数 <sqlite>
+   PostgreSQL 関数 <postgresql>
+   セキュリティとインターネット関数 <secfunc>
+   オブジェクト指向プログラミング (OOP) <oop>
+   関数型プログラミング (FP) <fp>
+   リフレクションとメタプログラミング <metaprog>
+   Stdlib 関数 <stdlib>
+   Stdlib クラス <stdlibclasses>
+   入れ子構造の宣言型プログラミング <declarative>
+   自然言語プログラミング <natural>
+   自然言語ライブラリの用法 <naturallibrary>
+   ウェブ開発 (CGI ライブラリ) <web>
+   クラウド経由でのウェブアプリケーションの配布方法 <deployincloud>
+   RingLibCurl の用法 <libcurl>
+   RingZip の用法 <ringzip>
+   ZeroLib の用法 <zerolib>
+   RingAllegro によるグラフィックスと 2D ゲームプログラミング <allegro>   
+   RingLibSDL の用法 <libsdl>
+   Ringlibuv の用法 <libuv>
+   デモプロジェクト - 2D ゲームエンジン <gameengine>    
+   Android 用ゲームのビルド方法 <gameengineandorid>
+   RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス) <usingopengl>
+   RingOpenGL と RingAllegro の用法 (3D グラフィックス) <usingopengl2>
+   デモプロジェクト -  Gold Magic 800 ゲーム <goldmagic800>
+   RingRayLib の用法 <ringraylib>
+   RingQt を使用したデスクトップとモバイル開発 <qt>
+   モバイル用 RingQt アプリケーションのビルド方法 <qtmobile>
+   RingQt アプリケーション用のオブジェクトライブラリ <ringqtobjects>
+   フォームデザイナーの用法 <formdesigner>
+   多国語アプリケーション <multilanguage>
+   Qt3D の用法 <qt3d>
+   変数と属性のスコープ規則 <scope>
+   関数とメソッドのスコープ規則 <scope2>
+   シンタックスの柔軟性 <syntaxflexibility>
+   型ヒントライブラリについて <typehints>
+   コマンドラインオプション        <compiler>
+   性能改善に関する情報 <performancetips>
+   Ring アプリケーションの配布方法 <distribute>
+   Ring2EXE による Ring アプリケーションの配布方法 <distribute_ring2exe>
+   Ring パッケージ管理プログラム (RingPM) <ringpm>
+   低水準関数 <lowlevel>
+   トレースライブラリとインタラクティブデバッガ <debug>
+   Ring プログラムへ Ring を組み込むには <ringemb>
+   チュートリアル: C/C++ による拡張機能の開発方法 <extension_tutorial>
+   C/C++ による拡張機能の開発方法 <extension>
+   Ring を C/C++ プログラムへ組み込むには <embedding>
+   C/C++ ライブラリ接続用コード生成器 <codegenerator>
+   はじめての拡張機能開発 <ringbeep>
+   よくある質問と回答 (FAQ) <faq>
+   一般情報 <generalinfo>
+   言語リファレンス <reference>
+   RingQt クラスとメソッドリファレンス <qtclassesdoc>
+   RingMurmurHash 関数リファレンス <ringmurmurhashfuncsdoc>
+   FoxRing 関数リファレンス <foxringfuncsdoc>
+   BigNumber 関数リファレンス <bignumber>
+   RingLibCurl 関数リファレンス <ringlibcurlfuncsdoc>
+   RingLibZip 関数リファレンス <ringlibzipfuncsdoc>
+   RingConsoleColors 関数リファレンス <ringconsolecolorsfuncsdoc>
+   RingAllegro 関数リファレンス <ringallegrofuncsdoc>
+   RingLibSDL 関数リファレンス <ringlibsdlfuncsdoc>
+   RingLibuv 関数リファレンス <ringlibuvfuncsdoc>
+   RingFreeGLUT 関数リファレンス <ringfreeglutfuncsdoc>
+   RingOpenGL (OpenGL 1.1) 関数リファレンス <ringopengl11funcsdoc>
+   RingOpenGL (OpenGL 1.2) 関数リファレンス <ringopengl12funcsdoc>
+   RingOpenGL (OpenGL 1.3) 関数リファレンス <ringopengl13funcsdoc>
+   RingOpenGL (OpenGL 1.4) 関数リファレンス <ringopengl14funcsdoc>
+   RingOpenGL (OpenGL 1.5) 関数リファレンス <ringopengl15funcsdoc>
+   RingOpenGL (OpenGL 2.0) 関数リファレンス <ringopengl20funcsdoc>
+   RingOpenGL (OpenGL 2.1) 関数リファレンス <ringopengl21funcsdoc>
+   RingOpenGL (OpenGL 3.0) 関数リファレンス <ringopengl30funcsdoc>
+   RingOpenGL (OpenGL 3.1) 関数リファレンス <ringopengl31funcsdoc>
+   RingOpenGL (OpenGL 3.2) 関数リファレンス <ringopengl32funcsdoc>
+   RingOpenGL (OpenGL 3.3) 関数リファレンス <ringopengl33funcsdoc>
+   RingOpenGL (OpenGL 4.0) 関数リファレンス <ringopengl40funcsdoc>
+   RingOpenGL (OpenGL 4.1) 関数リファレンス <ringopengl41funcsdoc>
+   RingOpenGL (OpenGL 4.2) 関数リファレンス <ringopengl42funcsdoc>
+   RingOpenGL (OpenGL 4.3) 関数リファレンス <ringopengl43funcsdoc>
+   RingOpenGL (OpenGL 4.4) 関数リファレンス <ringopengl44funcsdoc>
+   RingOpenGL (OpenGL 4.5) 関数リファレンス <ringopengl45funcsdoc>
+   RingOpenGL (OpenGL 4.6) 関数リファレンス <ringopengl46funcsdoc>
+   情報源 <resources>
diff --git a/docs/ja-jp/source/introduction.txt b/docs/ja-jp/source/introduction.txt
new file mode 100644 (file)
index 0000000..6dcc91a
--- /dev/null
@@ -0,0 +1,300 @@
+.. index:: 
+       single: はじめに; はじめに
+
+========
+はじめに
+========
+
+.. image:: thering.jpg
+       :alt: プログラミング言語 Ring
+
+プログラミング言語 Ring へようこそ!
+
+Ring は画期的で実用性のある汎用マルチパラダイム言語です。 C/C++ プロジェクトへの組み込み、 
+C/C++ コードにより拡張・単体プログラミング言語にもなります。
+命令型、手続き型、オブジェクト指向、関数型、メタプログラミング、入れ子構造による宣言型、および自然言語のプログラミング・パラダイムに対応しています。
+Ring は移植性 (Windows, Linux, macOS, Android など) があり、小規模、柔軟かつ高速な設計の動的プログラミング言語 (動的型付け、および弱い型付け) です。コンソール、GUI、ウェブ、ゲーム、およびモバイル・アプリケーションを作成できます。
+ソースコードをバイトコードへコンパイル後に、
+Ring コンパイラで単体プログラムとして統合を行い、 Ring 仮想計算機で実行します。
+
+さて、 Ring 言語の設計と実装の背景における目標を議論しましょう。
+
+.. index:: 
+       pair: はじめに; 動機
+
+動機
+====
+
+2011年11月に、新しいバージョンの `Programming Without Coding Technology (PWCT) <http://doublesvsoop.sf.net/>`_ ソフトウェアを白紙段階から開発することを検討し始めました。
+
+ウェブとモバイル開発に対応したマルチプラットフォーム版 Programming Without Coding Technology (PWCT)  の作成に興味がありました。
+Programming Without Coding Technology (PWCT) のソースコードの大部分は Microsoft Visual FoxPro (VFP) で記述しています。
+ソフトウェアにはコンポーネント作成用スクリプト言語 RPWI が付属しており、
+Harbour, C, Supernova および Python などのプログラミング言語のコード生成に対応しています。
+
+求めているものは、新発想の異次元プログラミング言語です (画期的、即戦力、単純明快、柔軟。さらに知性的な実装)。
+マルチプラットフォーム対応、より優れた実行性能、コンポーネントを記述できるスクリプト言語であり、
+開発環境の構築にも耐え、多種多様なアプリケーションを開発できるものです。さらに、大規模アプリケーションの開発用に設計してあり、ガベージコレクター (GC) 制御の良くできている高速で生産性の高い小規模な動的プログラミング言語です。
+
+そのため、複数のプログラミング言語を併用するのではなく、開発環境の作成、
+コンポーネント用スクリプトの記述、およびアプリケーション作成用言語を一本に絞ることを決めました。
+
+C, C++, Java, C#, Lua, PHP, Python と Ruby などのプログラミング言語を調査しました。
+
+まず、 C, C++ は違います。初心者や専門家向けの使いやすいビジュアル・プログラミング環境、さらに上述の言語よりも高水準の生産性が欲しいのです。
+
+Java と C# (Mono) は違います。静的型付け、マルチプラットフォームですが、膨大なクラスとオブジェクト指向を強要する冗長なプログラミング言語は不適切です。
+
+Lua は小規模で高速ですが機能不足です。
+
+PHP は違います。シンタックスは C と非常に似ていますが、複雑怪奇なウェブ開発用言語です。
+
+Python と Ruby は惜しいのですが、規模、動作速度、生産性に不満があります。
+また、英数大小文字を区別します。リストのインデックス計数は 0 から始まり、関数は呼び出し前に定義する必要があります。
+Ruby はオブジェクト指向とメッセージパッシングを多用するため、必然的に実行性能は低下します。 Python のシンタックス (インデント、self の使用、pass & _) は目標としているものではありません。
+
+とはいえ、前述のプログラミング言語は、全て成功を収めたものであり、対象となる問題解決領域では非常に優れたものです。
+
+
+.. index:: 
+       pair: はじめに; Ring 以外のプログラミング言語
+
+Ring 以外のプログラミング言語
+=============================
+
+Ring は下記のプログラミング言語の影響を受けています。
+
+* Lua
+* Python
+* Ruby
+* C
+* C#
+* BASIC
+* QML
+* xBase
+* Supernova
+
+.. index:: 
+       pair: はじめ; Matz への心よりの感謝
+
+Matz への心よりの感謝
+=====================
+
+Matz (まつもとゆきひろ - プログラミング言語 Ruby の原作者) 様へ Ring について広めていただいたことを心より感謝します。
+
+.. image:: matzring.png
+       :alt: プログラミング言語 Ring に関するまつもとゆきひろ氏のツイート
+
+.. index:: 
+       pair: はじめに; 歴史
+
+歴史
+====
+
+2013年09月より Ring の設計と実装を開始し、21ヶ月後の2015年05月頃に Ring コンパイラと仮想計算機は完成しました。
+
+その後、再検証で三ヶ月間を費やしました。優れたテストを記述してから各種不具合の修正を続け、
+2015年08月末までに不具合の修正を完了しました。
+大量のテストを用意して自動化することは、製品の安定化で大いに役に立ちました。
+
+2015年09月12日に取扱説明書の大部分を執筆しました。
+Facebook ページへアラビア語の記事を投稿して、広報活動を開始しました (Ring の公開前に、手短な説明を読んでいただき、 Ring の考えに興味をもった貢献者を探すためです)。
+同日、開発貢献に興味がある開発者、そして友人たちから多数の電子メールを受け取りました!
+
+2016年01月25日に Ring 1.0 を公開しました。わずか数日で数千回のダウンロードを達成しました! そして、世界中の開発者が学習と使用をはじめました。Ring の発展と成功は、皆様から寄せられた声のお蔭でございます。また、皆様から Ring を用いて短時間で作成した素晴らしい用例をいただきました。
+
+2017年12月07日に Ring 1.6 取扱説明書の日本語訳作業が isVowel (旧名義: めぐみ発動機 / GreenWing) により開始されました。 Ring 1.0 の公開から約二年半後となる翌年の 2018年06月03日には、非公式ウェブサイト (Geocities Japan) と Ring 1.7 の日本語訳が公開されました。翌年の 2019年02月05日には OSDN への非公式ウェブサイト移転、同月10日には日本語キット化のテスト版が公開されました。そして、同月22日には、日本語サイトへのアクセス件数が 5,000件 を超えました。
+
+2018年10月06日に公開の Ring 1.9 では Heroku に対応し、クラウド・アプリケーションも開発可能です。
+
+2019年01月25日に公開の Ring 1.10 ではパッケージマネージャーが導入されました。
+
+2019年09月15日に公開の Ring 1.11 では Allegro, SDL に加えて 2D/3D ゲームプログラミングライブラリである `RayLib <https://www.raylib.com/>`_ に対応しました。また、ZeroLibの導入により、リストと文字列で 0 ベースのインデックスを使用できるようになりました。
+
+2020年01月25日に公開の Ring 1.12 では RayLib のサンプルソース集強化、 Load Again コマンドによるソースコードに記述された定数の動的再読み込みに対応しました。また、記念すべきことに Ring は初公開から今年で五周年となりました。今後ともご愛顧いただけますよう宜しくお願い致します。
+
+Ring は、今後広く使われるプログラミング言語と大成すべく着実に成長を続けています。
+
+公開履歴:
+
+* Ring 1.0  (2016年01月25日)
+
+* Ring 1.1  (2016年10月06日)
+
+* Ring 1.2  (2017年01月25日)
+
+* Ring 1.3  (2017年05月15日)
+
+* Ring 1.4  (2017年06月29日)
+
+* Ring 1.5  (2017年08月21日)
+
+* Ring 1.6  (2017年11月30日)
+
+* Ring 1.7  (2018年01月25日)
+
+* Ring 1.8  (2018年06月25日)
+
+* Ring 1.9  (2018年10月06日)
+
+* Ring 1.10 (2019年01月25日)
+
+* Ring 1.11 (2019年09月15日)
+
+* Ring 1.12 (2020年01月25日)
+
+.. index:: 
+       pair: はじめに; 特徴
+
+特徴
+====
+
+このような特徴が Ring にあります。
+
+.. tip:: Ring は即戦力です。今すぐ製品開発を行うことができます!
+
+* 自由なオープンソース (MIT ライセンス)
+* ハイブリッド実装 (コンパイラ + 仮想計算機)
+* オブジェクト指向プログラミングによる宣言型プログラミング
+* オブジェクト指向プログラミングによる自然言語プログラミング
+* 自然言語プログラミング・ライブラリ
+* 三種類の異なる記法によるコード記述、および記法を自作可能
+* 柔軟性のあるシンタックス (言語のキーワードと演算子は変更可能)
+* 言語キーワードは英語から他の外国語 (アラビア語、フランス語、日本語など) へ翻訳可能
+* ステートメントへの明示的な end が不要であるため、シンタックスは簡潔です (; や ENTER は不要)
+* 括弧 { } でオブジェクトへのアクセス、および変数、属性としてメソッド、関数を使えます。
+* 透過型実装 (プログラムごとに字句、構文、およびバイトコードを表示) 
+* ビジュアル実装 - ビジュアル言語 Programming Without Coding Technology (PWCT) で実装
+* ANSI C で記述  (コード生成 + 手書きのコードと同一記法)
+* 小規模プログラミング言語
+       * コンパイラ + 仮想計算機 (20,000 行の C コード)
+       * そのほか 500,000 行のコードはライブラリ関連です!
+* 移植性 (Windows, Linux および macOS, Android など)
+* コメント (一行と複数行)
+* 英数大小文字同一視
+* 動的型付け
+* 弱い型付け (数値と文字列間でのみ自動変換)
+* レキシカルスコープ (グローバル、ローカル、およびオブジェクトのステート)
+* 関数内変数のデフォルトスコープ (ローカル)
+* 関数外変数のデフォルトスコープ (グローバル)
+* ライブラリごと、またはサブプロジェクトで独立したグローバルスコープがあります。
+* ガベージコレクター - メモリの自動管理 (エスケープ解析と参照カウント)
+* ほとんどの場合 (90%)、エスケープ解析によりガベージコレクターの実行を不要にしています (高速です)。
+* 構造化プログラミング
+* 豪華な制御構造と演算子
+* For in では値ではなく参照により項目を取得するため、項目を読み書きできます
+* exit による一階層以上のループからの脱出 (小規模プログラミングに限り使用してください)
+* 手続き、関数
+* メイン関数 (オプション扱い - グローバルスコープの使用回避)
+* 定義前の関数呼び出し (トップダウンプログラミング)
+* 再帰処理
+* 複数行リテラル
+* インデックスによる文字列内の文字へのアクセス (読み書き)
+* リストのインデックスは 1 から開始
+* クラス、パッケージ、関数には end キーワードは不要
+* 範囲演算子。用例: 1:10 および \"a\":\"z\"
+* 第一級変数、リスト、オブジェクトと関数
+* 値による格納、リストのコピー、オブジェクト (深いコピー)
+* 参照によるリスト、オブジェクト渡し
+* オブジェクト指向への標準対応
+
+       * カプセル化
+       * Setter/Getter (オプション扱い)
+       * プライベートステート (オプション扱い)
+       * インスタンス化
+       * 多態性
+       * コンポジション
+       * 継承 (単一継承)
+       * 演算子のオーバーロード
+       * パッケージ
+
+* リフレクションとメタプログラミング
+* 明瞭なプログラム構造 (ステートメントの後に関数、そしてパッケージとクラス)
+* 例外処理
+* Eval() によるアプリケーション実行中のコード実行
+* 8-bit クリーン設計であるためバイナリデータは直接処理します。
+* I/O 命令
+* 算術関数
+* 文字列関数
+* リスト関数
+* ファイル処理関数
+* データベースへの対応 (ODBC, SQLite, MySQL および PostgreSQL)
+* セキュリティ関数 (OpenSSL)
+* インターネット関数 (LibCurl)
+* Zip ファイル処理関数
+* CGI ライブラリ (Ring にて記述)
+
+       * HTTP Get
+       * HTTP Post
+       * ファイルのアップロード
+       * クッキー
+       * URL エンコード
+       * HTML テンプレート
+       * HTML 特殊文字
+       * 関数を使用した HTML の生成
+       * クラスを使用した HTML の生成
+       * CRUD の用例 (MVC を使用)
+       * ユーザーによる用例 (登録、ログインと確認)
+
+* クラウド経由によるウェブアプリケーションの配布 (Heroku)
+* C/C++ による拡張機能の使用 (単純明快なAPI)
+* C/C++ プログラムへの組み込み
+* Ring プログラムへの Ring 組み込み
+* 手軽に C/C++ ライブラリと接続するためのコード生成器 (Ring にて記述) を標準装備。
+
+       * Allegro に対応するために RingAllegro の作成で使用
+       * LibSDL に対応するために RingLibSDL の作成で使用
+       * Qt に対応するために RingQt の作成で使用
+
+* デスクトップとモバイル用の 2D ゲーム作成 (Allegro ライブラリ)
+* RingLibSDL 拡張機能
+* シンプルな 2D ゲームエンジンを添付
+* RingOpenGL 拡張機能
+* RingFreeGLUT 拡張機能
+* RingRayLib 拡張機能
+* デスクトップとモバイル用の GUI アプリケーションの作成 (Qt フレームワーク)。
+* コードエディタ (Ring Notepad) とフォームデザイナーを搭載した統合開発環境 (IDE)
+* RingREPL (Read-Eval-Print-Loop)
+* トレースとデバッグ
+* 型ヒントライブラリ
+* アプリケーションの配布用に Ring2EXE を添付
+* RingLibuv 拡張機能
+* インタプリタ (VM) 全体の停止 (global interpreter (VM) lock) は起こりません (GIL なし) - これはスレッドと平行性において優れています (高速化)
+* RingPM (パッケージ管理プログラム)
+* 豊富なサンプルソースとアプリケーション
+* 完成度の高い取扱説明書
+
+.. index:: 
+       pair: はじめに; ライセンス
+
+ライセンス
+==========
+
+プログラミング言語 Ring
+
+http://ring-lang.net/
+
+Version 1.12
+
+MIT ライセンス (MIT)
+
+Copyright (c) Mahmoud Fayed
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/docs/ja-jp/source/juliancalendar.png b/docs/ja-jp/source/juliancalendar.png
new file mode 100644 (file)
index 0000000..39d9f40
Binary files /dev/null and b/docs/ja-jp/source/juliancalendar.png differ
diff --git a/docs/ja-jp/source/knighttour.png b/docs/ja-jp/source/knighttour.png
new file mode 100644 (file)
index 0000000..ca88832
Binary files /dev/null and b/docs/ja-jp/source/knighttour.png differ
diff --git a/docs/ja-jp/source/languagedesign.txt b/docs/ja-jp/source/languagedesign.txt
new file mode 100644 (file)
index 0000000..06c3a26
--- /dev/null
@@ -0,0 +1,669 @@
+.. index:: 
+       single: 言語設計; はじめに
+
+========
+言語設計
+========
+
+言語設計の背景にある基本概念を学びます。
+
+.. index:: 
+       pair: 言語設計; Ring を選ぶ理由は?
+
+Ring を選ぶ理由は?
+===================
+
+プログラミング言語 Ring には簡明、違和感の排除、組織化の奨励、
+および透過性とビジュアル実装があります。
+簡潔なシンタックス、そして自然なインタフェースの作成を可能にする機能群、
+短時間で作成・構築できる宣言型ドメイン特化言語機能を標準装備しています。
+非常に小規模、高速なスマートガベージコレクターにより、
+プログラマはメモリを制御下に置くことができます。
+また、多種多様なプログラミングパラダイムに対応しており、便利で実用的なライブラリが付属しています。
+Ring は生産性と拡張性に優れた高品質な解決方法の開発のために設計しました。
+
+.. index:: 
+       pair: 言語設計; 明確な設計目標
+
+明確な設計目標
+==============
+
+* アプリケーション開発用のプログラミング言語です。
+* ドメイン特化ライブラリ、フレームワーク、およびツールを作成できる汎用プログラミング言語です。
+* ビジュアル・プログラミング言語 Programming Without Coding Technology (PWCT) ソフトウェアの次世代版の開発用に設計した実用プログラミング言語です。 
+* 小規模・高速な言語で C/C++ プロジェクトへ組み込めます。
+* 学習と入門 (文教用途、およびコンパイラ・仮想計算機の概念) に使用できる単純明快な言語です。
+* 生産性と拡張性に優れた高品質な解決方法の開発。
+
+.. index:: 
+       pair: 言語設計; 簡明
+
+簡明
+====
+
+Ring は非常に簡明な言語であり、非常に単純明快なシンタックスで構成しています。プログラマには、ボイラープレートコードのないプログラムの記述を奨励しています。 
+
+'See' 命令はメッセージを標準出力へ表示します。
+
+.. code-block:: ring
+
+       See "Hello, World!" 
+
+Main 関数はオプション扱いであり、ステートメントの後に実行するため、ローカルスコープで便利です。
+
+.. code-block:: ring
+
+       Func Main
+               See "Hello, World!" 
+               
+動的型付け、およびレキシカルスコープを使用しています。変数名の先頭に $ は不要です!
+
+文字列の連結は‘+’演算子です。弱い型付け言語であり、文字列はコンテキストに基づいて数値と文字列との間で自動的に変換します。
+
+.. code-block:: ring
+
+       nCount = 10     # グローバル変数
+       Func Main
+               nID = 1 # ローカル変数
+               See "Count = " + nCount + nl + " ID = " + nID
+
+.. index:: 
+       pair: 言語設計; 違和感の排除
+
+違和感の排除
+============
+
+Ring は英数大小文字を区別しません。
+
+.. code-block:: ring
+
+
+       See "Enter your name ? " 
+       Give name
+       See "Hello " + Name     # Name は name と同じです。
+                       
+リストのインデックス (添字番号) は 1 から開始します。
+
+.. code-block:: ring
+
+       aList = ["one","two","three"]
+       See aList[1]    # one を表示
+                       
+定義前の関数呼び出し:
+
+.. code-block:: ring
+
+
+       one() 
+       two() 
+       three()
+       Func one 
+               See "One" + nl
+       Func two 
+               See "two" + nl
+       Func three 
+               See "three" + nl
+                       
+代入演算子は深いコピーを使用します (この操作は参照ではありません)。
+
+.. code-block:: ring
+
+       aList = ["one","two","three"]
+       aList2 = aList
+       aList[1] = 1
+       see alist[1]    # 1 を表示
+       see aList2[1]   # one を表示
+                               
+数値と文字列は値渡しですが、リストとオブジェクトは参照渡しです。 
+For in ループ でリストの項目 (アイテム、要素とも言います) を更新できます。
+
+.. code-block:: ring
+
+       Func Main
+               aList = [1,2,3]
+               update(aList)
+               see aList       # one two three を表示
+
+       Func update aList
+               for x in aList
+                       switch x
+                       on 1 x = "one"
+                       on 2 x = "two"
+                       on 3 x = "three"
+                       off
+               next
+                       
+定義時のリスト使用:
+
+.. code-block:: ring
+
+       aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
+       see aList       # 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 を表示
+                       
+一階層以上のループから脱出
+
+.. code-block:: ring
+
+       for x = 1 to 10
+                       for y = 1 to 10
+                                       see "x=" + x + " y=" + y + nl
+                                       if x = 3 and y = 5
+                                                       exit 2     # 二階層のループから脱出
+                                       ok
+                       next
+       next
+       
+.. index:: 
+       pair: 言語設計; 組織化の奨励
+
+組織化の奨励
+============
+
+Ring ではプログラムの組織化を奨励しています。まずは関数、次にクラス、
+そして、関数とヘンテコなモノと組み合わせるプログラミング言語を使用していた悪夢の日々を忘却の彼方へ追いやります! 
+
+ソースファイルの構造は:
+
+* ファイルの読み込み
+* ステートメントとグローバル変数
+* 関数
+* パッケージとクラス
+
+これにより、構成要素で end キーワードを記述しなくてもパッケージ、
+クラスと関数を使えます。
+
+一行コメント、または複数行コメントを使えます。
+一行コメントは # あるいは // で始まります。
+複数行コメントは /* ~ \*/ の間に記述します。
+
+.. code-block:: ring
+
+       /* 
+               プログラムの名前    : はじめての Ring プログラム
+               日付                : 2015.05.08
+       */
+
+       See "What is your name? "   # 画面へメッセージを表示
+       give cName                  # ユーザからの標準入力を取得
+       see "Hello " + cName        # こんにちわ!
+
+       // See "Bye!"
+                               
+
+.. index:: 
+       pair: 言語設計; 簡潔なシンタックス
+
+簡潔なシンタックス
+==================
+
+行の区別はしませんので、ステートメントの後に ; は不要です。または ENTER や TAB の打鍵は不要ですので、このようなコードを記述可能です。
+
+.. code-block:: ring
+
+
+       See "The First Message" See " Another message in the same line! " + nl
+       See "Enter your name?" Give Name See "Hello " + Name
+                       
+このコードは三種類の属性 X, Y および Z を有する Point クラスを作成します。クラス、パッケージ、関数の定義を終了するために end キーワードは使用していません。また、クラス名の直下に属性名を書くことができます。
+
+.. code-block:: ring
+
+       Class Point X Y Z
+                       
+定義前にクラスと関数を使えます。
+この用例では、オブジェクトの新規作成と属性の設定、および値を表示します。
+
+.. code-block:: ring
+
+       o1 = New point  o1.x=10    o1.y=20   o1.z=30    See O1  Class Point X Y Z
+                       
+ドット演算子‘.’でオブジェクトの属性とメソッドへアクセスするのではなく、括弧 { } でオブジェクトへアクセスできます。その後にオブジェクトの属性とメソッドを使えます。
+
+.. code-block:: ring
+
+       o1 = New point { x=10 y=20 z=30 } See O1  Class Point X Y Z
+                        
+メソッドの呼出し後に { } でオブジェクトへアクセスします。
+
+.. code-block:: ring
+
+        
+       oPerson = new Person
+       {
+               Name = "Somebody"
+               Address = "Somewhere"
+               Phone = "0000000"
+               Print()                 # ここでは Print() メソッドを呼び出します。
+       }
+       Class Person Name Address Phone
+               Func Print
+                       See "Name :" + name + nl +
+                               "Address :" + Address + nl +
+                               "Phone : " + phone + nl
+
+{ } で、オブジェクトへアクセスしてからオブジェクト名を記述するとき、自動的に呼び出される全ての setter/getter メソッドに対してクラスを検査します。
+
+.. code-block:: ring
+
+
+       New Number {
+                       See one         # GetOne() の実行
+                       See two         # GetTwo() の実行
+                       See three       # GetThree() の実行
+       }
+       Class Number one two three
+               Func GetOne
+                       See "Number : One" + nl
+                       return 1
+               Func GetTwo
+                       See "Number : Two" + nl
+                       return 2
+               Func GetThree
+                       See "Number : Three" + nl
+                       return 3        
+                       
+.. index:: 
+       pair: 言語設計; 自然言語ステートメントの定義
+
+自然言語ステートメントの定義
+============================
+
+{ } でオブジェクトへアクセス後に、クラスに BraceEnd() メソッドがあれば BraceEnd() メソッドを実行します!
+
+.. code-block:: ring
+
+
+       TimeForFun = new journey
+       # あっと驚く!
+       TimeForFun {
+               Hello it is me          # なんと美しいプログラミングの世界でしょう!
+       }
+       # クラス本体
+       Class journey
+               hello=0 it=0 is=0 me=0
+               func GetHello
+                       See "Hello" + nl
+               func braceEnd
+                       See "Goodbye!" + nl
+
+Eval() 関数は、文字列に記述されたコードを実行します。
+
+.. code-block:: ring
+
+
+       cCode = "See 'Code that will be executed later!' "
+       Eval(cCode)     # コードを実行してメッセージを表示します。
+
+リストの作成後に、実行用のコードをリストから生成できます。
+
+.. code-block:: ring
+
+       aWords = ["hello","it","is","me"]
+       for word in aWords cCode=word+"=0" eval(cCode) next
+
+Read(cFileName) 関数は、テキストファイルを読み取ります。また Write(cFileName,cString) 関数はファイルへ書き込みます。
+
+.. code-block:: ring
+
+       See "Enter File Name:" Give cFileName See Read(cFileName) # ファイルの内容を表示
+
+この用例は、二つの命令を定義するクラスの作成方法です。
+
+* 最初の命令は : I want window
+
+* 次の命令は : Window title = <式>
+
+* ‘the’キーワードなどは無視されます。
+
+.. code-block:: ring
+
+
+       New App
+       {
+               I want window
+               The window title = "hello world"
+       }
+
+       Class App
+
+               # I want window 命令の属性
+                       i want window
+                       nIwantwindow = 0
+               # Window title 命令の属性
+               # ここでは window 属性を再定義しません。
+                       title
+                       nWindowTitle = 0
+               # 値を与えると、キーワードを無視します。
+                       the=0
+
+               func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+               func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+               func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+               func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+               
+前述の用例を完了するには read() でファイルの内容を取得します。
+
+.. code-block:: ring
+
+       I want window
+       The window title = "hello world"
+
+そして eval() でファイルの内容を実行します!
+
+また、 GUI ライブラリでウィンドウを作成するには GetWindow() と SetTitle() メソッドを更新します。
+
+
+.. index:: 
+       pair: 言語設計; 宣言型言語の定義
+
+宣言型言語の定義
+================
+
+
+自然言語ステートメントによるコードの実行、および入れ子構造によるコードの実行方法について既に学んでいます。
+
+この用例は Web ライブラリからの引用です。 Bootstrap ライブラリで HTML ドキュメントを生成します。
+この用例では、 HTML コードを直接記述せずに、類似言語を作成しています (ただの用例です)。その後、宣言型言語を使用するために入れ子構造で HTML ドキュメントを生成しています。この用例での考えかたとして GetDiv() および GetH1() メソッドは { } でアクセスできるオブジェクトを返します。各オブジェクトへのアクセス後に BraceEnd() メソッドが実行されると、生成された HTML を BraceEnd() の出力表示がルートに到達するまで親オブジェクトへ送信します。
+
+.. code-block:: ring
+
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+
+         BootStrapWebPage()
+         {
+               div
+               {
+                 classname = :container
+                 div
+                 {
+                       classname = :jumbotron
+                       H1 {   text("Bootstrap Page")   }
+                 }
+                 div
+                 {
+                       classname = :row
+                       for x = 1 to 3
+                         div
+                         {
+                           classname = "col-sm-4"
+                           H3 { html("Welcome to the Ring programming language") }
+                           P  { html("Using a scripting language is very fun!") }
+                         }
+                       next
+                 }
+               }
+         }
+
+このようなクラスで宣言型インタフェースを強化します。
+
+.. code-block:: ring
+
+       Class Link from ObjsBase
+               title  link
+               Func braceend                   
+                       cOutput = nl+GetTabs() + "<a href='" + 
+                                 Link + "'> "+ Title + " </a> " + nl                   
+
+       Class Div from ObjsBase 
+               Func braceend
+                       cOutput += nl+'<div'
+                       addattributes()
+                       AddStyle()
+                       getobjsdata()
+                       cOutput += nl+"</div>" + nl
+                       cOutput = TabMLString(cOutput)
+
+.. index:: 
+       pair: 言語設計; 柔軟性のあるシンタックス
+
+柔軟性のあるシンタックス
+========================
+
+様々なソースコードの記法があります!
+
+また、言語のキーワードと演算子を変更することで、お好みの記法を作成できます!
+
+        
+.. index:: 
+       pair: 言語設計; 透過型実装
+
+透過型実装
+==========
+
+Ring は透過型実装です。 コンパイラの処理段階、および仮想計算機による実行中の処理内容を把握できます。
+
+例えば : ring helloworld.ring -tokens -rules -ic
+
+.. code-block:: ring
+
+       See "Hello, World!" 
+                       
+実行結果
+
+.. code-block:: ring
+
+
+       ==================================================================
+       Tokens - Generated by the Scanner
+       ==================================================================
+
+          Keyword : SEE
+          Literal : Hello, World!
+          EndLine
+
+       ==================================================================
+
+       ==================================================================
+       Grammar Rules Used by The Parser
+       ==================================================================
+
+       Rule : Program --> {Statement}
+
+       Line 1
+       Rule : Factor --> Literal
+       Rule : Range --> Factor
+       Rule : Term --> Range
+       Rule : Arithmetic --> Term
+       Rule : BitShift --> Arithmetic
+       Rule : BitAnd --> BitShift
+       Rule : BitOrXOR -->  BitAnd
+       Rule : Compare --> BitOrXOR
+       Rule : EqualOrNot --> Compare
+       Rule : LogicNot -> EqualOrNot
+       Rule : Expr --> LogicNot
+       Rule : Statement  --> 'See' Expr
+
+       ==================================================================
+
+
+
+       ==================================================================
+       Byte Code - Before Execution by the VM
+       ==================================================================
+
+                PC      OPCode        Data
+
+                 1     FuncExE
+                 2       PushC   Hello, World!
+                 3       Print
+                 4  ReturnNull
+
+       ==================================================================
+
+       Hello, World!
+                               
+.. index:: 
+       pair: 言語設計; ビジュアル実装
+
+ビジュアル実装
+==============
+
+Ring は、ビジュアル・プログラミングツール Programming Without Coding Technology (PWCT) で設計しました。
+Ring のビジュアルソースは、 “visualsrc” フォルダの \*.ssf ファイルにあります。
+生成された C 言語ソースコードは src フォルダ、
+および include フォルダにあります。
+
+このスクリーンショットは、 ring_vm.ssf ファイルからの引用です (ring_vm.c および ring_vm.h が生成されます)。
+
+.. image:: visualsrc1.jpg
+
+このスクリーンショットは、 ring_list.ssf ファイルからの引用です (ring_list.c および ring_list.h が生成されます)。
+
+.. image:: visualsrc2.jpg
+
+.. index:: 
+       pair: 言語設計; スマートガベージコレクター
+
+スマートガベージコレクター
+==========================
+
+わずらわしいメモリ操作関連の問題から解放します。
+
+* メモリへの不正アクセス
+* メモリリーク
+* 未初期化メモリへのアクセス
+* ダングリングポインタ
+
+規則:
+
+* グローバル変数は、代入ステートメントで削除するまでメモリに存在し続けます。
+* 関数の処理終了後に、ローカル変数を削除します。
+* プログラマは、代入ステートメントでメモリから変数を削除する時期を完全に制御できます。
+
+
+用例:
+
+.. code-block:: ring
+
+       aList = [1,2,3,4,5]
+       aList = "nice"
+                       
+二行目の直後、リスト [1,2,3,4,5] はメモリから削除され、文字列 “nice” が残ります。
+
+* プログラマは callgc() 関数を呼び出すことで、ガベージコレクターを強制実行できます。
+* 変数参照時 (関数へオブジェクト、およびリストを渡すとき)、参照カウントに基づいて変数を削除します。未参照では全て削除されますが、参照しているときはデータはメモリに残ります。
+
+
+.. index:: 
+       pair: 言語設計; インタプリタ (VM) 全体の停止なし (GIL なし)
+
+インタプリタ (VM) 全体の停止なし (GIL なし)
+===========================================
+
+アプリケーションでスレッドを使うとき、インタプリタ (VM) 全体の停止 (global interpreter (VM) lock) は起こりません (GIL なし)。
+
+よって、スレッドは並列動作可能であり、Ring 命令は同時実行されます。
+
+これは、スレッドと平行性において最良のものです (さらなる高速化が実現できます!)
+
+
+.. index:: 
+       pair: 言語設計; ほとんどのアプリケーションで十分に高速動作します
+
+ほとんどのアプリケーションで十分に高速動作します
+================================================
+
+プログラミング言語 Ring は単純明快、小規模、柔軟性のある最先端の設計です。また、ほとんどのアプリケーションで十分に高速動作します。 
+
+これまで、市販の電子計算機で Ring を使用してきました。下記の処理は約1秒で完了します。
+
+(1) 100,000 行コードのコンパイル
+(2) 1 ~ 10,000,000 まで数え上げる空ループの実行
+(3) 100,000 項目から成るリストで最後の項目を見つけようとして、線形検索で 1000 回の検索処理を実行 (最悪値)
+(4) 1,000,000 項目から成るリストを作成後にリスト全項目の合計を計算
+(5) GUI アプリケーションで ListWidget へ 20,000 アイテムを追加
+(6) GUI アプリケーションで TreeWidget へ 5,000 ノードを追加
+(7) ターミナルのコンソールアプリケーションで 10,000 メッセージを表示 
+
+さらなる高速化を求めるならば C/C++ 拡張機能を使えます!
+
+用例:
+
+.. code-block:: ring
+
+       ? "Create list contains 100,000 items"
+       aList = 1:100000
+
+       ? "Do 1000 search operation - Find the last item (Worst Case!)"
+       c = clock() 
+
+       for t = 1 to 1000
+               find(alist,100000)
+       next
+
+       ? "Time: " + ( clock() - c ) / clockspersecond() + " seconds"
+
+実行結果:
+
+.. code-block:: none
+
+       Create list contains 100,000 items
+       Do 1000 search operation - Find the last item (Worst Case!)
+       Time: 0.87 seconds
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       func main
+
+       new qApp {
+               win = new qWidget() { 
+                       move(100,100) resize(500,500)
+                       setWindowTitle("Many Tree Items - Testing Performance")
+                       tree = new qTreeWidget(win) { 
+                               blocksignals(True) setUpdatesEnabled(False)
+                               root = new qTreeWidgetItem()
+                               root.setText(0,"The Root Node")
+                               t1 = clock()
+                               for t = 1 to 5000
+                                       oItem = new qTreeWidgetItem()
+                                       oItem.settext(0,"Item " + t)
+                                       root.addchild(oItem)
+                               next
+                               cTime = (clock()-t1)/clockspersecond()
+                               setHeaderLabel("Creating 5000 nodes in " + cTime + " seconds.")
+                               addTopLevelItem(root)
+                               expanditem(root)
+                               blocksignals(False) setUpdatesEnabled(True)
+                       }
+                       oLayout = new qVBoxLayout() {
+                               addWidget(tree)
+                       }
+                       setLayout(oLayout)
+                       show() 
+               }
+               exec()
+       }
+       
+
+実行結果:
+
+.. image:: manytreeitems.png
+       :alt: 大量のツリー項目
diff --git a/docs/ja-jp/source/libcurl.txt b/docs/ja-jp/source/libcurl.txt
new file mode 100644 (file)
index 0000000..7e9465b
--- /dev/null
@@ -0,0 +1,209 @@
+.. index:: 
+       single: RingLibCurl; はじめに
+
+==================
+RingLibCurl の用法
+==================
+
+RingLibCurl の用法を学びます。
+
+.. index:: 
+       pair: RingLibCurl; Get リクエスト
+
+Get リクエスト
+==============
+
+用例:
+
+.. code-block:: ring
+
+       load "libcurl.ring"     
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_URL, "http://ring-lang.sf.net")
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+
+.. index:: 
+       pair: RingLibCurl; Post リクエスト
+
+Post リクエスト
+===============
+
+用例:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       cPostThis = "page=4&Number1=4&Number2=5"
+       curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3")
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+.. index:: 
+       pair: RingLibCurl; Facebook へのログイン
+
+Facebook へのログイン
+=====================
+
+用例:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       see "Enter Email : " give $login_email 
+       See "Enter Password : " give $login_pass
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_URL, 'https://www.facebook.com/login.php')
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS,'charset_test=j u s t a t e s t'+
+       ' &email='+urlencode($login_email)+'&pass='+
+       urlencode($login_pass)+'&login=Login')
+       curl_easy_setopt(curl, CURLOPT_POST, 1)
+       curl_easy_setopt(curl, CURLOPT_HEADER, 0)
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt")
+       curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt")
+       curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U;"+
+       " Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3")
+       curl_easy_setopt(curl, CURLOPT_REFERER, "http://www.facebook.com")
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE)
+       curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2)
+
+       mylist = curl_slist_append(NULL,'Accept-Charset: utf-8')
+       curl_slist_append(mylist,'Accept-Language: en-us,en;q=0.7,bn-bd;q=0.3')
+       curl_slist_append(mylist,'Accept: text/xml,application/xml,'+
+       'application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5')
+       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, mylist)
+
+       curl_easy_setopt(curl, CURLOPT_COOKIESESSION, false)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+       Func URLEncode cStr
+               cOut = ""
+               for x in cStr
+                       if isalnum(x)
+                               cOut += x
+                       but x = " "
+                               cOut += "+"
+                       else
+                               cOut += "%"+str2hex(x)
+                       ok
+               next
+               return cOut     
+
+.. index:: 
+       pair: RingLibCurl; 実行結果を文字列で保存
+
+実行結果を文字列で保存
+======================
+
+用例:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+       curl_easy_setopt(curl, CURLOPT_URL, "http://ring-lang.sf.net")
+
+       cOutput = curl_easy_perform_silent(curl)
+
+       See "Output:" + nl
+       see cOutput
+
+       curl_easy_cleanup(curl)
+
+.. index:: 
+       pair: RingLibCurl; Yahoo! から株式情報を取得
+
+Yahoo! から株式情報を取得
+=========================
+
+用例:
+
+.. code-block:: ring
+
+       Load "libcurl.ring"
+
+       ### 第一部 --- 断片とクッキーの取得 -----------------------------------------
+
+       See "Start curl_easy_init(): "+ nl
+       curl = curl_easy_init()                     ### >>> HANDLE >>> 01006BD0  CURL  0
+
+               curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1)
+               curl_easy_setopt(curl, CURLOPT_COOKIEJAR,  "cookies.txt")
+               curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt")
+               curl_easy_setopt(curl, CURLOPT_URL, "https://finance.yahoo.com/quote/AMZN/history")
+
+               ###  HTML データ >>> STDOUT Window では curl_easy_perform_silent >>> String を使用。
+
+       cOutput = curl_easy_perform_silent(curl)    ### データの取得 >>> String
+
+
+       ###   データから断片 (Crumb) を抽出します。
+       ###  "CrumbStore":{"crumb":"abcdefghijk"},
+
+       if cOutput != NULL
+
+               newStr1     = substr(cOutput, substr(cOutput, '"CrumbStore":{"crumb":"' ), 48 )
+                       nPosS   = substr(newStr1, ':"' ) ;  ### crumb -2 の始点
+                       nPosE   = substr(newStr1, '"}' ) ;  ### crumb の終点
+                       nCount  = nPosE - nPosS -2          ### crumb の大きさ
+               myCrumb     = substr(newStr1, nPosS +2, nCount)
+
+               See "myCrumb.: |"+ myCrumb +"|" +nl
+               
+               ### UniCode の "\u002F" を "/" へ置換します。
+                       if substr( myCrumb, "\u002F")
+                          myCrumb = substr( myCrumb, "\u002F", "/")
+                          See "myCrumb2: |"+ myCrumb +"|"+ nl
+                       ok
+
+       else
+               See "No Connectivity to Yahoo. Looking for Cookie and Crumb." +nl +nl
+       ok
+
+                                       
+       ### 第二部 --- URL へ断片とクッキーを送信 ----------------------------------------------
+
+               ### Yahoo! へ URL+断片を送信して最初の株式履歴情報を取得します。
+
+               $url = "https://query1.finance.yahoo.com/v7/finance/download/AMZN"+
+                       "?period1=1277856000&period2=1498777545&interval=1wk" + 
+                       "&events=history&crumb=" + myCrumb
+
+               curl_easy_setopt(curl, CURLOPT_URL, $url);
+               cStr = curl_easy_perform_silent(curl)
+               See cStr 
+
+       curl_easy_cleanup(curl)  ### cURL を閉じるのを忘れないように。
+
+
+実行結果:
+
+.. code-block:: ring
+
+       myCrumb.: |sEEeW97mxvN|
+       Date,Open,High,Low,Close,Adj Close,Volume
+       2010-07-05,110.650002,117.480003,109.000000,117.260002,117.260002,21000400
+       2010-07-12,117.809998,124.879997,117.320000,118.489998,118.489998,29407300
+       2010-07-19,118.379997,121.250000,105.800003,118.870003,118.870003,74252100
diff --git a/docs/ja-jp/source/libsdl.txt b/docs/ja-jp/source/libsdl.txt
new file mode 100644 (file)
index 0000000..998a89f
--- /dev/null
@@ -0,0 +1,403 @@
+.. index:: 
+       single: RingLibSDL; はじめに
+
+=================
+RingLibSDL の用法
+=================
+
+LibSDL, SDLImage, SDLTTF および SDLMixer ライブラリをベースとした
+RingLibSDL の用法を学びます。
+
+
+.. tip:: Ring 1.5.4 以前では、デスクトップ用の RingLibSDL バイナリ版は配布していないため RingAllegro を使用してください。
+
+.. note:: RingLibSDL の用法は ring/android/ringlibsdl フォルダをご確認ください。
+
+
+.. index:: 
+       pair: RingLibSDL; ライブラリの読み込み
+
+ライブラリの読み込み
+====================
+
+この関数を使うには、 libsdl.ring ライブラリを読み込みます (Ring 1.6 以降)。
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+       # RingLibSDL ライブラリ関数の使用
+
+.. index:: 
+       pair: RingLibSDL; ウィンドウの作成
+
+ウィンドウの作成
+================
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       SDL_Delay(2000)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; 画像の表示
+
+画像の表示
+==========
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = SDL_LoadBMP("hello.bmp")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy2(ren,tex)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyTexture(tex)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; 二枚の画像切り替え
+
+二枚の画像切り替え
+==================
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = SDL_LoadBMP("hello.bmp")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       bmp = SDL_LoadBMP("hello2.bmp")
+       tex2 = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+
+       for x = 1 to 10 showtex(tex) showtex(tex2) next
+
+       SDL_DestroyTexture(tex)
+       SDL_DestroyTexture(tex2)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+       func showtex oTex
+               SDL_RenderClear(ren)
+               SDL_RenderCopy2(ren,oTex)
+               SDL_RenderPresent(ren)
+               SDL_Delay(200)
+
+.. index:: 
+       pair: RingLibSDL; 長方形の描画
+
+長方形の描画
+============
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       SDL_RenderClear(ren)
+       rect = sdl_new_sdl_rect()
+       sdl_set_sdl_rect_x(rect,10)
+       sdl_set_sdl_rect_y(rect,10)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_SetRenderDrawColor(ren,255,255,255,255)
+       SDL_RenderDrawRect(ren,rect)
+       sdl_destroy_sdl_rect(rect)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; PNG 画像の表示
+
+PNG 画像の表示
+==============
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       bmp = IMG_Load("hello3.png")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy2(ren,tex)
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyTexture(tex)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; TTF フォントの使用
+
+TTF フォントの使用
+==================
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+       SDL_RenderClear(ren)
+
+       TTF_Init()
+       font = TTF_OpenFont("pirulen.ttf", 16)
+       color = sdl_new_sdl_color()
+       sdl_set_sdl_color_r(color,0)
+       sdl_set_sdl_color_g(color,255)
+       sdl_set_sdl_color_b(color,0)
+       text = TTF_RenderText_Solid(font,"Welcome to the Ring language",color)
+       surface = SDL_GetWindowSurface(win)
+       SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+       SDL_UpdateWindowSurface(win)
+       SDL_Delay(2000)
+
+       SDL_Destroy_SDL_Color(color)
+       SDL_FreeSurface(text)
+       TTF_CloseFont(font)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; 透過画像の表示
+
+透過画像の表示
+==============
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+
+       flags = IMG_INIT_JPG | IMG_INIT_PNG
+       IMG_Init(flags)
+
+       win = SDL_CreateWindow("Hello World!", 100, 100, 800, 600, SDL_WINDOW_SHOWN)
+       ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
+
+       bmp = IMG_Load("stars.jpg")
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       SDL_RenderClear(ren)
+       SDL_RenderCopy(ren,tex,nullpointer(),nullpointer())
+       SDL_DestroyTexture(tex)
+
+       bmp = IMG_Load("player.png")
+       # 画像 - 透過色の設定 (白色)
+       myformat = sdl_get_sdl_surface_format(bmp)
+       white = SDL_MapRGB(myformat, 255, 255, 255)
+       SDL_SetColorKey(bmp, SDL_True, white)
+
+       tex = SDL_CreateTextureFromSurface(ren,bmp)
+       SDL_FreeSurface(bmp)
+       rect = sdl_new_sdl_rect()
+       sdl_set_sdl_rect_x(rect,0)
+       sdl_set_sdl_rect_y(rect,0)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_RenderCopy(ren,tex,nullpointer(),rect)
+
+       SDL_SetTextureBlendMode(tex,2)
+       SDL_SetTextureAlphaMod(tex,255)
+       sdl_set_sdl_rect_x(rect,200)
+       sdl_set_sdl_rect_y(rect,200)
+       sdl_set_sdl_rect_w(rect,100)
+       sdl_set_sdl_rect_h(rect,100)
+       SDL_RenderCopy(ren,tex,nullpointer(),rect)
+
+       SDL_DestroyTexture(tex)
+       SDL_Destroy_SDL_Rect(rect)
+
+       SDL_RenderPresent(ren)
+       SDL_Delay(2000)
+       SDL_DestroyRenderer(ren)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; ウィンドウを閉じるためのイベント
+
+ウィンドウを閉じるためのイベント
+================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               thevent = sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on sdl_get_sdl_quit()
+                               exit
+                       on sdl_get_sdl_keydown()
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok
+                               
+               off
+       end
+
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+.. index:: 
+       pair: RingLibSDL; マウスのイベント
+
+マウスのイベント
+================
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+
+       win = SDL_CreateWindow("Mouse Events ", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+
+       TTF_Init()
+       font = TTF_OpenFont("pirulen.ttf", 16)
+       color = sdl_new_sdl_color()
+       sdl_set_sdl_color_r(color,0)
+       sdl_set_sdl_color_g(color,255)
+       sdl_set_sdl_color_b(color,0)
+
+       surface = SDL_GetWindowSurface(win)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               cMsg = ""
+               sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on SDL_QUIT
+                               exit
+                       on SDL_KEYDOWN
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok
+                       on SDL_MOUSEBUTTONDOWN
+                               if sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_LEFT
+                                       SDL_SETWINDOWTITLE(win, " Button_Left_Down " )
+                               but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_MIDDLE
+                                       SDL_SETWINDOWTITLE(win,  " Button_Middle_Down " )
+                               but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_RIGHT
+                                       SDL_SETWINDOWTITLE(win,  " Button_Right_Down " )
+                               ok
+                       on SDL_MOUSEMOTION
+                               sdl_fillrect(surface,nullpointer(),0)
+                               if sdl_get_sdl_event_motion_xrel(myevent) < 0
+                                       cMsg += " Left "
+                               else
+                                       cMsg += " Right "
+                               ok                      
+                               if sdl_get_sdl_event_motion_yrel(myevent) < 0
+                                       cMsg += " Up "
+                               else
+                                       cMsg += " Down "
+                               ok      
+                               cMsg += " x = " + sdl_get_sdl_event_motion_x(myevent)
+                               cMsg += " y = " + sdl_get_sdl_event_motion_y(myevent)
+                               showmsg(cMsg)   
+               off
+       end
+
+       SDL_Destroy_SDL_Color(Color)
+       TTF_CloseFont(font)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+       func showmsg mymsg
+               text = TTF_RenderText_Solid(font,mymsg,color)
+               SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+               SDL_UpdateWindowSurface(win)
+               SDL_FreeSurface(text)
+
+.. index:: 
+       pair: RingLibSDL; 音声の再生
+
+音声の再生
+==========
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT , 2, 10000)
+       Mix_AllocateChannels(4)
+       sound = Mix_LoadWav( "sound.wav" )
+       Mix_VolumeChunk(sound,1)
+       Mix_PlayChannel(1,sound,0)
+
+       myevent = sdl_new_sdl_event()
+       while true
+               thevent = sdl_pollevent(myevent)
+               switch sdl_get_sdl_event_type(myevent)
+                       on sdl_get_sdl_quit()
+                               exit
+                       on sdl_get_sdl_keydown()
+                               Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
+                               if key = 27 exit ok                     
+               off
+       end
+
+       Mix_FreeChunk( sound )
+       Mix_CloseAudio()
+       Mix_Quit()
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
diff --git a/docs/ja-jp/source/libuv.txt b/docs/ja-jp/source/libuv.txt
new file mode 100644 (file)
index 0000000..79ed30f
--- /dev/null
@@ -0,0 +1,508 @@
+.. index:: 
+       single: RingLibuv; はじめに
+
+================
+RingLibuv の用法
+================
+
+RingLibuv の用法を学びます。
+
+.. note:: RingLibuv の用法は ring/extensions/ringlibuv フォルダをご確認ください。
+
+ライブラリのウェブサイトからの情報: http://libuv.org/
+
+Libuv は非同期 I/O に主眼を置いたマルチプラットフォーム対応ライブラリです。
+
+特筆すべき機能
+
+* epoll, kqueue, IOCP, イベントポートによる完全機能のイベントループへの対応。
+* 非同期 TCP および UDP ソケット
+* 非同期 DNS 解決
+* 非同期ファイル、およびファイルシステム操作
+* ファイルシステムのイベント
+* TTY 制御による ANSI エスケープコード
+* Unix ドメインソケットまたは名前つきパイプ (Windows) による IPC ソケット共有
+* 子プロセス
+* スレッドプール
+* シグナル処理
+* 高分解能クロック
+* スレッド処理と同期基本命令
+
+
+.. index:: 
+       pair: RingLibuv; RingLibuv によるはじめてのアプリケーション
+
+RingLibuv によるはじめてのアプリケーション
+==============================================
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       func main
+
+               myloop = new_uv_loop_t()
+               uv_loop_init(myloop)
+               ? "Now quitting"
+               uv_run(myloop, UV_RUN_DEFAULT)
+               uv_loop_close(myloop)
+               destroy_uv_loop_t(myloop)
+
+実行結果:
+
+.. code-block:: none
+
+       Now quitting
+
+
+.. index:: 
+       pair: RingLibuv; イベントループ
+
+イベントループ
+==============
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       counter = 0
+       idler = NULL 
+
+       func main
+               idler = new_uv_idle_t()
+               uv_idle_init(uv_default_loop(), idler)
+               uv_idle_start(idler, "wait()")
+               ? "Idling..."
+               uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+               uv_loop_close(uv_default_loop());
+               destroy_uv_idle_t(idler)
+
+       func wait
+               counter++
+               if counter >= 100000
+                       uv_idle_stop(idler)
+               ok
+
+実行結果:
+
+.. code-block:: none
+
+       Idling...
+
+.. index:: 
+       pair: RingLibuv; サーバーの用例
+
+サーバーの用例
+==============
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Server Side"
+
+       DEFAULT_PORT    = 13370
+       DEFAULT_BACKLOG = 1024
+
+       addr    = new_sockaddr_in()
+       server  = NULL
+       client  = NULL
+       myloop  = NULL
+
+       func main
+               myloop = uv_default_loop()
+               server = new_uv_tcp_t()
+               uv_tcp_init(myloop, server)
+               uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+               uv_tcp_bind(server, addr, 0)
+               r = uv_listen(server, DEFAULT_BACKLOG, "newconnection()")
+               if r 
+                       ? "Listen error " + uv_strerror(r)
+                       return 1
+               ok
+               uv_run(myloop, UV_RUN_DEFAULT)
+               destroy_uv_tcp_t(server)
+               destroy_uv_sockaddr_in(addr)
+
+       func newconnection
+               ? "New Connection"
+               aPara   = uv_Eventpara(server,:connect)
+               nStatus = aPara[2]
+               if nStatus < 0
+                       ? "New connection error : " + nStatus 
+                       return 
+               ok
+               client = new_uv_tcp_t()
+               uv_tcp_init(myloop, client)
+               if uv_accept(server, client) = 0 
+                               uv_read_start(client, uv_myalloccallback(), "echo_read()")
+               ok
+
+       func echo_read 
+               aPara = uv_Eventpara(client,:read)
+               nRead = aPara[2]
+               buf   = aPara[3]
+               if nRead > 0
+                       req = new_uv_write_t()
+                               wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                       uv_write(req, client, wrbuf, 1, "echo_write()")
+                       ? uv_buf2str(wrbuf)
+                       message = "message from the server to the client"
+                       buf = new_uv_buf_t()
+                       set_uv_buf_t_len(buf,len(message))
+                       set_uv_buf_t_base(buf,varptr("message","char *"))
+                       uv_write(req, client, buf, 1, "echo_write()")
+               ok
+
+       func echo_write
+               aPara = uv_Eventpara(client,:read)
+               req   = aPara[1]
+
+実行結果:
+
+クライアントを実行すると、“New Connection”メッセージが表示されます。
+
+そして “hello from the client” メッセージが表示されます。
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side
+       New Connection
+       hello from the client
+
+.. index:: 
+       pair: RingLibuv; クライアントの用例
+
+クライアントの用例
+==================
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Client Side"
+
+       DEFAULT_PORT    = 13370
+       DEFAULT_BACKLOG = 1024
+
+       addr    = new_sockaddr_in()
+       connect = NULL
+       buffer  = null
+       socket  = null
+
+       func main
+               myloop  = uv_default_loop()
+               Socket  = new_uv_tcp_t()
+               connect = new_uv_connect_t()
+               uv_tcp_init(myloop, Socket)
+               uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+               uv_tcp_connect(connect,Socket, addr, "connect()")
+               uv_run(myloop, UV_RUN_DEFAULT)
+               destroy_uv_tcp_t(socket)
+               destroy_uv_connect_t(connect)
+
+       func connect 
+               ? "Client: Start Connection"
+               aPara   = uv_Eventpara(connect,:connect)
+               req     = aPara[1]
+               nStatus = aPara[2]
+               if nStatus = -1
+                       ? "Error : on_write_end "
+                       return 
+               ok
+               buf = new_uv_buf_t()
+               message = "hello from the client"
+               set_uv_buf_t_len(buf,len(message))
+               set_uv_buf_t_base(buf,varptr("message","char *"))
+               tcp       = get_uv_connect_t_handle(req)
+               write_req = new_uv_write_t()
+               buf_count = 1
+               uv_write(write_req, tcp, buf, buf_count, "on_write_end()")
+
+       func on_write_end
+                       uv_read_start(socket, uv_myalloccallback(), "echo_read()")
+
+       func echo_read 
+               aPara = uv_Eventpara(socket,:read)
+               nRead = aPara[2]
+               buf   = aPara[3]
+               if nRead > 0
+                               wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread);
+                       ? uv_buf2str(wrbuf)
+               ok
+
+実行結果:
+
+サーバーの後にクライアントを実行します。
+
+.. code-block:: none
+
+       Testing RingLibuv - Client Side
+       Client: Start Connection
+       hello from the client
+       message from the server to the client
+
+.. index:: 
+       pair: RingLibuv; クラスによるサーバーの用例
+
+クラスによるサーバーの用例
+============================
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Server Side - Using Classes"
+
+       open_object(:MyServer)
+
+       class MyServer from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               server  = NULL
+               client  = NULL
+               myloop  = NULL
+               
+               func start
+                       myloop = uv_default_loop()
+                       server = new_uv_tcp_t()
+                       uv_tcp_init(myloop, server)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_bind(server, addr, 0)
+                       r = uv_listen(server, DEFAULT_BACKLOG, Method(:newconnection) )
+                       if r 
+                               ? "Listen error " + uv_strerror(r)
+                               return 1
+                       ok
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(server)
+                       destroy_uv_sockaddr_in(addr)
+               
+               func newconnection
+                       ? "New Connection"
+                       aPara   = uv_Eventpara(server,:connect)
+                       nStatus = aPara[2]
+                       if nStatus < 0
+                               ? "New connection error : " + nStatus 
+                               return 
+                       ok
+                       client = new_uv_tcp_t()
+                       uv_tcp_init(myloop, client)
+                       if uv_accept(server, client) = 0 
+                                       uv_read_start(client, uv_myalloccallback(), 
+                                                               Method(:echo_read))
+                       ok
+               
+               func echo_read 
+                       aPara = uv_Eventpara(client,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                               req = new_uv_write_t()
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                               uv_write(req, client, wrbuf, 1, Method(:echo_write))
+                               ? uv_buf2str(wrbuf)
+                               message = "message from the server to the client"
+                               buf = new_uv_buf_t()
+                               set_uv_buf_t_len(buf,len(message))
+                               set_uv_buf_t_base(buf,varptr("message","char *"))
+                               uv_write(req, client, buf, 1, Method(:echo_write))
+                       ok
+               
+               func echo_write
+                       aPara = uv_Eventpara(client,:read)
+                       req   = aPara[1]
+       
+
+実行結果:
+
+クライアントを実行すると、“New Connection”メッセージが表示されます。
+
+そして“hello from the client”メッセージが表示されます。
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side - Using Classes
+       New Connection
+       hello from the client
+
+
+.. index:: 
+       pair: RingLibuv; クラスによるクライアントの用例
+
+クラスによるクライアントの用例
+==============================
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Client Side - Using Classes"
+
+       open_object(:MyClient)
+
+       Class MyClient from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               connect = NULL
+               buffer  = null
+               socket  = null
+               
+               func start
+                       myloop  = uv_default_loop()
+                       Socket  = new_uv_tcp_t()
+                       connect = new_uv_connect_t()
+                       uv_tcp_init(myloop, Socket)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_connect(connect,Socket, addr, Method(:connect))
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(socket)
+                       destroy_uv_connect_t(connect)
+               
+               func connect 
+                       ? "Client: Start Connection"
+                       aPara   = uv_Eventpara(connect,:connect)
+                       req     = aPara[1]
+                       nStatus = aPara[2]
+                       if nStatus = -1
+                               ? "Error : on_write_end "
+                               return 
+                       ok
+                       buf = new_uv_buf_t()
+                       message = "hello from the client"
+                       set_uv_buf_t_len(buf,len(message))
+                       set_uv_buf_t_base(buf,varptr("message","char *"))
+                       tcp       = get_uv_connect_t_handle(req)
+                       write_req = new_uv_write_t()
+                       buf_count = 1
+                       uv_write(write_req, tcp, buf, buf_count, Method(:on_write_end))
+               
+               func on_write_end
+                               uv_read_start(socket, uv_myalloccallback(), Method(:echo_read))
+               
+               func echo_read 
+                       aPara = uv_Eventpara(socket,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread);
+                               ? uv_buf2str(wrbuf)
+                       ok
+
+実行結果:
+
+サーバーの後にクライアントを実行します。
+
+.. code-block:: none
+
+       Testing RingLibuv - Client Side - Using Classes
+       Client: Start Connection
+       hello from the client
+       message from the server to the client
+
+
+       
+
+.. index:: 
+       pair: RingLibuv; スレッドの用例
+
+スレッドの用例
+==============
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       ? "Testing RingLibuv - Threads"
+
+       func main
+               one_id = new_uv_thread_t()
+               two_id = new_uv_thread_t()
+               uv_thread_create(one_id, "one()")
+               uv_thread_create(two_id, "two()")
+               uv_thread_join(one_id)
+               uv_thread_join(two_id)
+               destroy_uv_thread_t(one_id)
+               destroy_uv_thread_t(two_id)
+
+       func one
+               ? "Message from the First Thread!"
+
+       func two
+               ? "Message from the Second Thread!"
+
+実行結果:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads
+       Message from the First Thread!
+       Message from the Second Thread!
+    
+
+.. index:: 
+       pair: RingLibuv; スレッドの用例 - クラスの使用
+
+スレッドの用例 - クラスの使用
+===============================
+
+用例:
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Threads - Using Classes"
+
+       open_object(:MyThreads)
+
+       class MyThreads from ObjectControllerParent
+
+               func Start
+                       one_id = new_uv_thread_t()
+                       two_id = new_uv_thread_t()
+                       uv_thread_create(one_id, Method(:One))
+                       uv_thread_create(two_id, Method(:Two))
+                       uv_thread_join(one_id)
+                       uv_thread_join(two_id)
+                       destroy_uv_thread_t(one_id)
+                       destroy_uv_thread_t(two_id)
+               
+               func one
+                       ? "Message from the First Thread!"
+               
+               func Two
+                       ? "Message from the Second Thread!"
+               
+
+実行結果:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads - Using Classes
+       Message from the First Thread!
+       Message from the Second Thread!
+
diff --git a/docs/ja-jp/source/linuxmint.png b/docs/ja-jp/source/linuxmint.png
new file mode 100644 (file)
index 0000000..d18b9a5
Binary files /dev/null and b/docs/ja-jp/source/linuxmint.png differ
diff --git a/docs/ja-jp/source/lists.txt b/docs/ja-jp/source/lists.txt
new file mode 100644 (file)
index 0000000..c66e56e
--- /dev/null
@@ -0,0 +1,751 @@
+.. index:: 
+       single: リスト; はじめに
+
+======
+リスト
+======
+
+この章ではリストの用法を学びます。
+
+.. index:: 
+       pair: リスト; リストの作成
+
+リストの作成
+============
+
+角括弧の内側にリストを定義することで、新しいリストを作成できます。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [1,2,3,4,5]
+
+また : 演算子や、
+
+
+用例:
+
+.. code-block:: ring
+
+       aList = 1:5
+       aList2 = "a":"z"
+
+用例:
+
+.. code-block:: ring
+
+       aList = 5:1
+       aList2 = "z":"a"
+
+list() 関数でも新しいリストを作成できます。
+
+文法:
+
+.. code-block:: ring
+
+       list = list(size)
+
+用例:
+
+.. code-block:: ring
+
+       aList = list(10)        # aList は 10 項目を有しています。
+
+.. note:: リストのインデックスは 1 が始点となります。
+
+.. index:: 
+       pair: リスト; リスト項目の追加
+
+項目の追加
+==========
+
+Add() 関数はリストへ新しい項目を追加します。
+
+文法:
+
+.. code-block:: ring
+
+       Add(List,Item)
+
+
+用例:
+
+.. code-block:: ring
+
+       aList = ["one","two"]
+       add(aList,"three")
+       see aList
+
+\+ 演算子を使用することもできます。
+
+文法:
+
+.. code-block:: ring
+
+       リスト + 項目
+
+用例:
+
+.. code-block:: ring
+
+       aList = 1:10    # 1 ~ 10 までの数値を有するリストを作成します。
+       aList + 11      # リストへ数値 11 を追加
+       see aList       # リストを表示
+
+.. index:: 
+       pair: リスト; リストのサイズ取得
+
+リストのサイズ取得
+==================
+
+len() 関数はリストのサイズを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       Len(List)
+
+用例:
+
+.. code-block:: ring
+
+       aList = 1:20  see len(aList)  # 20 を表示
+
+.. index:: 
+       pair: リスト; リスト項目の削除
+
+リスト項目の削除
+================
+
+del() 関数はリストから項目を削除します。
+
+文法:
+
+.. code-block:: ring
+
+       del(list,index)
+
+用例:
+
+.. code-block:: ring
+
+       aList = ["one","two","other","three"]
+       Del(aList,3)    # 3 番目の項目を削除
+       see aList       # one two three を表示
+
+
+.. index:: 
+       pair: リスト; リスト項目の取得
+       
+リスト項目の取得
+================
+
+リストから項目を取得するには、この文法を使用します。
+
+.. code-block:: ring
+
+       List[Index]
+
+用例:
+
+.. code-block:: ring
+
+       aList = ["Cairo","Riyadh"]
+       see "Egypt : " + aList[1] + nl +
+           "KSA   : " + aList[2] + nl
+
+.. index:: 
+       pair: リスト; リスト項目への代入
+
+リスト項目への代入
+==================
+
+リストの項目へ値を代入するには、この文法を使用します。
+
+.. code-block:: ring
+
+       List[Index] = Expression
+
+用例:
+
+.. code-block:: ring
+
+       aList = list(3) # 三項目を有するリストを作成します。
+       aList[1] = "one" aList[2] = "two" aList[3] = "three"
+       see aList
+
+.. index:: 
+       pair: リスト; 検索
+
+検索
+====
+
+Find() 関数はリスト内の項目を検索します。
+
+文法:
+
+.. code-block:: ring
+
+       Find(List,ItemValue)                    ---> 項目のインデックス
+       Find(List,ItemValue,nColumn)            ---> nColumn を検索して項目のインデックスを返します。
+       Find(List,ItemValue,nColumn,cAttribute) ---> 項目のインデックス
+
+用例:
+
+.. code-block:: ring
+
+       aList = ["one","two","three","four","five"]
+       see find(aList,"three")         # 3 を表示
+
+用例:
+
+.. code-block:: ring
+
+       mylist = [["one",1],
+                 ["two",2],
+                 ["three",3]]
+
+       see find(mylist,"two",1) + nl           # 2 を表示
+       see find(mylist,2,2) + nl               # 2 を表示
+
+また binarysearch() 関数は整列されたリストを検索します。
+
+文法:
+
+.. code-block:: ring
+
+       BinarySearch(List,ItemValue)         ---> 項目のインデックス
+       BinarySearch(List,ItemValue,nColumn) ---> nColumn を検索して項目のインデックスを返します。
+
+用例:
+
+.. code-block:: ring
+
+       aList = ["one","two","three","four","five"]
+       aList = sort(aList)
+       see binarysearch(aList,"three")
+
+実行結果:
+
+.. code-block:: ring
+
+       five
+       four
+       one
+       three
+       two
+       4
+
+.. index:: 
+       pair: リスト; 整列
+
+整列
+====
+
+Sort() 関数はリストを整列します。
+
+文法:
+
+.. code-block:: ring
+
+       Sort(List)                    ---> 整列されたリスト
+       Sort(List,nColumn)            ---> nColumn に基づいて整理されたリスト
+       Sort(List,nColumn,cAttribute) ---> 属性に基づいて整列されたリスト
+
+用例:
+
+.. code-block:: ring
+
+       aList = [10,12,3,5,31,15]
+       aList = sort(aList) see aList # 3 5 10 12 15 31 を表示
+
+文字列の整列もできます。
+
+用例:
+
+.. code-block:: ring
+
+       mylist = ["mahmoud","samir","ahmed","ibrahim","mohammed"]
+       see mylist                # 整列前のリストを表示
+       mylist = sort(mylist)     # リストの整列
+       see "list after sort"+nl
+       see mylist                # ahmed ibrahim mahmoud mohammed samir を表示
+
+特定の列に基づいてリストを整列できます。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [ ["mahmoud",15000] ,
+                 ["ahmed", 14000 ] ,
+                 ["samir", 16000 ] ,
+                 ["mohammed", 12000 ] ,
+                 ["ibrahim",11000 ] ]
+
+       aList2 = sort(aList,1)
+       see aList2
+
+実行結果:
+
+.. code-block:: ring
+
+       ahmed
+       14000
+       ibrahim
+       11000
+       mahmoud
+       15000
+       mohammed
+       12000
+       samir
+       16000
+
+
+.. index:: 
+       pair: リスト; 反転
+
+反転
+====
+
+Reverse() 関数はリストを反転します。
+
+文法:
+
+.. code-block:: ring
+
+       Reverse(List) ---> 反転されたリスト
+
+用例:
+
+.. code-block:: ring
+
+       aList = [10,20,30,40,50]
+       aList = reverse(aList)
+       see aList       # 50 40 30 20 10 を表示
+
+.. index:: 
+       pair: リスト; リスト項目の挿入
+
+リスト項目の挿入
+================
+
+Insert() 関数はリストへ項目を挿入します。
+
+文法:
+
+.. code-block:: ring
+
+       Insert(List,Index,Item)
+
+**\インデックスの後**\ に項目を挿入します。
+
+用例:
+
+.. code-block:: ring
+
+       aList = ["A","B","D","E"]
+       insert(aList,2,"C")    # インデックス 2 の後に位置 3 へ "C" を挿入します。
+       see aList              # A B C D E を表示
+
+
+また、 insert(aList, 0 ,Value) で **\リストの先頭位置 (最初)**\に項目を挿入します
+
+.. code-block:: ring
+
+       aList = 1:5
+       insert(aList,0,0)  // リスト、先頭位置 (0)、挿入する項目のデータ
+       See aList # 0 ~ 5 までの数値を表示します。
+
+
+.. index:: 
+       pair: リスト; 入れ子リスト
+
+入れ子リスト
+============
+
+リストは他のリストを有しています。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [ 1 , [10,20,30] , 5 , [100,1000,5000] ]
+       aList2 = [
+       "one","two", 
+       [3,4],
+       [20,30], ["three",
+                 "four",
+                 "five",[100,200,300]
+                 ]
+       ]
+       
+       see aList[2]            # 10 20 30 を表示
+       see aList[4][3] + nl    # 5000 を表示
+       see aList2[5][2] + nl   # four を表示
+       see aList2[5][4][3]     # 300 を表示
+
+.. index:: 
+       pair: リスト; リストのコピー
+
+リストのコピー
+==============
+
+代入演算子はリスト (入れ子リストも含む) をコピーします。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [
+       "one","two", 
+       [3,4],
+       [20,30], ["three",
+                 "four",
+                 "five",[100,200,300]
+                 ]
+       ]
+
+       aList2 = aList          # aList から aList2 へコピー
+       aList2[5] = "other"     # 項目番号 five を変更
+       see aList2[5] + nl      # other を表示
+       see aList[5]            # three four five 100 200 300 を表示
+
+
+.. index:: 
+       pair: リスト; 第一級リスト
+
+第一級リスト
+============
+
+リストは `第一級オブジェクト <https://ja.wikipedia.org/wiki/第一級オブジェクト>`_ であるため、リストへ変数を格納したり、関数へリストを渡したり、さらに関数からリストを返せます。
+
+用例:
+
+.. code-block:: ring
+
+       aList = duplicate( [1,2,3,4,5] )
+       see aList[10] + nl                # 5 を表示
+
+       see mylist()                      # 10 20 30 40 50 を表示
+       
+       func duplicate list
+               nMax = len(list)
+               for x = 1 to nMax
+                       list + list[x]
+               next
+               return list
+
+       func mylist return [10,20,30,40,50]
+
+.. index:: 
+       pair: リスト; リストを定義時に使用するには
+               
+リストを定義時に使用するには
+============================
+
+初回にリストを定義するときに、リスト項目を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [ [1,2,3,4,5] , aList[1] , aList[1] ]
+       see aList       # 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 を表示
+       
+       
+.. index:: 
+       pair: リスト; リストを関数へ渡すには
+
+リストを関数へ渡すには
+======================
+
+リストは参照渡しにより関数へ渡されるため、呼び出された関数側でリストの処理や変更ができます。
+
+用例:
+
+.. code-block:: ring
+
+       func main
+               aList = [1,2,3,4,5]     # Main 関数内でローカルなリストを作成します。
+               myfunc(aList)           # リストを参照渡しにすることで、関数を呼び出します。
+               see aList               # 1 2 3 4 5 6 7 8 9 10 を表示します。
+
+       func myfunc list
+               list + [6,7,8,9,10]
+
+
+.. index:: 
+       pair: リスト; 文字列インデックスによるリストへのアクセス
+
+文字列インデックスによるリストへのアクセス
+==========================================
+
+項目のインデックスを数値で決定することで、項目の値の設定または項目を取得できますが、
+二つの項目を有するリストであり、かつ最初の項目が文字列から構成されている項目ならば、
+文字列インデックスで項目へアクセスできます。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [ ["one",1] , ["two",2] , ["three",3] ]
+       see aList["one"] + nl +
+           aList["two"] + nl +
+           aList["three"]      # 1 2 3 の表示
+
+この種類のリストは演算子 : および = で定義したほうがより優れたシンタックスになります。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [ :one = 1 , :two = 2 , :three = 3 ]
+       see aList["one"] + nl +
+           aList["two"] + nl +
+           aList["three"] + nl # 1 2 3 の表示
+       see aList[1]            # one 1 表示
+
+.. tip:: 識別子 (単語) の先頭に : (コロン) を付けるとリテラルとして扱われます。
+
+.. note:: = で二つの項目を有するリストを定義すると最初の項目は左辺となり、
+       次の項目は右辺となるリストを作成します。
+
+文字列インデックスでリストへ新しい項目を追加できます。
+
+用例:
+
+.. code-block:: ring
+       
+       aList = []
+       aList["Egypt"] = "Cairo"
+       aList["KSA"] = "Riyadh"
+       see aList["Egypt"] + nl +       # Cairo を表示
+       aList["KSA"] + nl               # Riyadh を表示
+
+.. index:: 
+       pair: リスト; リストを使用した仮引数または実引数の渡しかた
+
+リストを使用した仮引数または実引数の渡しかた
+============================================
+       
+この種類のリストでは、仮引数の順序は重要ではないため、 
+関数へ渡すための仮引数としては非常に優れています (順序の変更ができます)。
+
+仮引数は、オプション扱いの場合があります。
+
+用例:
+
+.. code-block:: ring
+
+       myconnect (  [ :server = "myserver.com" , :port = 80 , 
+                       :username = "mahmoud" , :password = "password" ] ) 
+
+       func myconnect mypara
+       
+               # 接続の詳細を表示
+               see "User Name : " + mypara[:username] + nl +
+                   "Password  : " + mypara[:password] + nl +
+                    "Server    : " + mypara[:server] + nl +
+                    "Port      : " + mypara[:port]
+.. index:: 
+       pair: リスト; リスト配列を使用した仮引数または実引数の渡しかた
+
+リスト配列を使用した仮引数または実引数の渡しかた
+================================================
+       
+配列形式により、関数へ仮引数また実引数を渡します。
+
+用例:
+
+.. code-block:: ring
+
+     myList = [5,7,3,9]    ### 配列は実引数または仮引数のリストです。
+     result = sum(myList)
+     See "Sum result: "+ result +n
+
+     func sum(aList)
+       acc = 0
+       sizeList = len(aList)
+   
+       for i = 1 to sizeList
+          See aList[i] +nl
+          acc = acc + aList[i]
+       next
+     return acc
+
+.. index:: 
+       リスト: リストまたはハッシュテーブルを引数として返すには
+
+リストまたはハッシュテーブルを引数として返すには
+================================================
+       
+関数から配列またはハッシュ形式で引数を返します。
+
+用例:
+
+.. code-block:: ring
+
+       sudoku = [  [2,9,0],
+                   [0,0,1],
+                   [0,0,0] ]
+
+       aOutput = myFunctionArray(sudoku)
+               See "Return Array: T/F: "+ aOutput[1] +" Row: "+ aOutput[2] +" Col: "+ aOutput[3] +nl
+
+       aOutput = myFunctionHash(sudoku)
+               See "Return Hash.: T/F: "+ aOutput[:lValue] +" Row: "+ aOutput[:nRow] +" Col: "+ aOutput[:nCol] +nl
+
+       ###--------------------------------
+       ### isSolvedSoduku - 配列を返します
+
+       Func myFunctionArray(sudoku)
+           for Row = 1 to 9
+               for Col = 1 to 9
+                   if sudoku[Row][Col] = 0
+
+                       //-----------------------------
+                       // 三要素から成る配列を返します
+                       return [False, Row, Col]                    
+                   ok
+               next
+           next
+       return [True, Row, Col]
+
+       ###------------------------------------
+       ### isSolvedSoduku - ハッシュを返します
+
+       Func myFunctionHash(sudoku)
+           for Row = 1 to 3
+               for Col = 1 to 3
+                   if sudoku[Row][Col] = 0
+
+                       //-----------------------------------------
+                       // 三要素から成るハッシュテーブルを返します
+                       return  [   :lValue = False, 
+                                   :nRow   = Row, 
+                                   :nCol   = Col   
+                               ]
+                   ok
+               next
+           next
+
+       return  [ :lValue = False, :nRow = Row, :nCol = Col ]           
+
+       ###-----------------------------
+
+.. index:: 
+       pair: リスト; リストと再帰を使用した多次元配列の作成方法
+
+リストと再帰を使用した多次元配列の作成方法
+==========================================
+       
+指定の大きさによる多次元配列でも関数の再帰で作成できます。
+
+用例:
+
+.. code-block:: ring
+
+        ###---------------------------------------------------------------------------------
+        ### 配列の作成 -- 指定の大きさの次元:  三次元、四次元、五次元など
+
+        dimList = [4,3,4]
+        bList   = createDimList(dimList)
+       
+        ###---------------------------------------------------------------------------------
+        ### 1 のカウンタを使用して配列へ代入 ,  4x4x4 = 256 , 2x3x4x5x6 = 720
+
+        Counter = 1
+
+        for Col=1 to dimList[1]
+          for Row=1 to dimList[2]
+            for Dep=1 to dimList[3]
+                    blist[Col][Row][Dep] = Counter
+                    Counter++
+            next
+          next
+        next
+
+        ###---------------------------------------------------------------------------------
+        ### ブロック形式で配列の要素を表示します。
+
+        for Col=1 to dimList[1]
+          for Row=1 to dimList[2]
+            for Dep=1 to dimList[3]
+                    See bList[Col][Row][Dep] See " "
+            next
+           See nl
+          next
+            See nl
+        next
+
+        ###=================================================================================
+        ### 関数
+
+        ###---------------------------------------------------------------------------------
+        ### 次元をもつ配列を再帰的に作成します。
+        ### 配列の次元を渡すことで呼び出します: dimList = [2,3,4,5]
+        ### 最初のエントリーで全ての反復呼び出しの降下を行い newParms を作成します。
+        ###
+        ### 用例:
+        ###    dimList = [4,2,3,2]                <<< 配列形式による次元の大きさと数値です。
+        ###    bList   = createDimList(dimList)   <<< 入力からの配列を使用して呼び出します。
+
+        func createDimList(dimArray)
+
+             sizeList = len(dimArray)
+
+             newParms = []
+             for i = 2 to sizeList
+                Add(newParms, dimArray[i])
+             next
+
+             alist = list(dimArray[1])
+
+             if sizeList = 1
+                return aList
+             ok
+
+             for t in alist
+                 t = createDimList(newParms)
+             next
+
+        return alist
+       
+     
+.. index:: 
+       pair: リスト; 項目の交換
+
+項目の交換
+==========
+
+Swap() 関数はリスト項目を交換します。
+
+用例:
+
+.. code-block:: ring
+
+       aList = [:one,:two,:four,:three]
+       see aList
+       see copy("*",50) + nl
+       swap(aList,3,4)
+       see aList
+
+実行結果:
+
+.. code-block:: ring
+
+       one
+       two
+       four
+       three
+       **************************************************
+       one
+       two
+       three
+       four
+
+
diff --git a/docs/ja-jp/source/lowlevel.txt b/docs/ja-jp/source/lowlevel.txt
new file mode 100644 (file)
index 0000000..25b100f
--- /dev/null
@@ -0,0 +1,1382 @@
+.. index:: 
+       single: 低水準関数; はじめに
+
+==========
+低水準関数
+==========
+
+低水準関数を学びます。
+
+* callgc()
+* varptr()
+* space()
+* nullpointer()
+* object2pointer()
+* pointer2object()
+* ispointer()
+* ptrcmp()
+* ringvm_cfunctionslist() 
+* ringvm_functionslist() 
+* ringvm_classeslist() 
+* ringvm_packageslist() 
+* ringvm_memorylist() 
+* ringvm_calllist() 
+* ringvm_fileslist()
+* ringvm_settrace()
+* ringvm_tracedata()
+* ringvm_traceevent()
+* ringvm_tracefunc()
+* ringvm_scopescount()
+* ringvm_evalinscope() 
+* ringvm_passerror()
+* ringvm_hideerrorMsg()
+* ringvm_callfunc()
+* ringvm_see()
+* ringvm_give()
+* ringvm_info()
+
+.. index:: 
+       pair: 低水準関数; callgc()
+
+callgc() 関数
+=============
+
+この関数は、関数実行中に代入操作では解放されない一時作業用変数を用いるループで強制的にガベージコレクター呼び出すために使用します。
+
+この関数が必要になることは非常に稀なことですが、ゲームエンジンでイベントループなどを作成して、
+関数を呼び出して即席でリストの作成を開始するときに便利です。
+
+用例
+
+.. code-block:: ring
+
+       While True
+
+               # イベントの処理
+               # 一時作業領域を使用した関数の呼び出し。 myfunc(["temp list"]) などのリストです。
+
+               # ガベージコレクターの呼び出し
+               callgc()
+       End
+
+.. tip:: Ring のガベージコレクターは関数の実行終了後または、
+        代入ステートメントを使用したときに自動的に動作します。
+
+.. index:: 
+       pair: 低水準関数; varptr()
+
+varptr() 関数
+=============
+
+varptr() 関数は C / C++ 関数へポインタを渡します。
+
+文法:
+
+.. code-block:: ring
+
+       varptr(cVariableName, cPointerType) ---> 低水準オブジェクト (C ポインタ)
+
+用例:
+
+.. code-block:: ring
+
+       r = 10
+       z = 20
+       see r + nl
+       see varptr("r","int") 
+       see varptr("z","int")
+
+実行結果:
+
+.. code-block:: ring
+
+       10
+       00E3C740
+       int
+       2
+       00E3BEC0
+       int
+       2
+
+.. note:: 低水準オブジェクトのリストには三つの項目 (ポインタ、型、ステータス) を有しています。
+
+
+.. index:: 
+       pair: 低水準関数; space()
+
+space() 関数
+============
+
+space() 関数は指定されたバイト数のメモリ領域を確保します。
+
+文法:
+
+.. code-block:: ring
+
+       Space(nBytesCount) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       mystring = space(200)
+       See "String Size : " + len(mystring) + nl
+       See "String : " + mystring + nl
+       See "String Pointer : " 
+       See varptr("mystring","char *")
+
+実行結果:
+
+.. code-block:: ring
+
+       String Size : 200
+       String :                                                                                                                                                        
+       String Pointer : 00FF8FE8
+       char *
+       2
+
+.. note:: C 関数へバッファを渡すは space() と VarPtr() 関数が必要です。
+
+.. index:: 
+       pair: 低水準関数; nullpointer()
+
+nullpointer() 関数
+==================
+
+仮引数でポインタを扱うことを想定しており、オプション扱いの仮引数に NULL ポインタを受け入れる場合は C 関数へ NULL ポインタを必ず渡してください。
+
+用例:
+
+この用例は LibSDL ライブラリから RingSDL にある SDL_BlitSurface() 関数を使用しています。
+この関数は第二仮引数、および最後の仮引数で SDL_Rect ポインタを受け入れます。
+また、関数は NULL ポインタを受け入れるために、 NULLPointer() 関数で NULL ポインタを渡せます。
+
+.. code-block:: ring
+
+       SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
+
+.. note:: 前述のコードは単体では動作しません。最初に RingSDL の用法を学ぶ必要があります。
+
+.. tip:: NULLPointer() 関数の代わりに NULL を仮引数として渡せます。
+
+.. index:: 
+       pair: 低水準関数; object2pointer()
+
+object2pointer() 関数
+=====================
+
+この関数は Ring リスト用の C ポインタとオブジェクトを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       object2pointer(リスト|オブジェクト) --> 低水準オブジェクト (C ポインタ)
+
+.. index:: 
+       pair: 低水準関数; pointer2object()
+
+pointer2object() 関数
+=====================
+
+この関数は低水準オブジェクト (C ポインタ) から Ring のリスト、および / またはオブジェクトを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       pointer2object(Low Level Object) ---> リスト|オブジェクト
+
+
+用例:
+
+.. code-block:: ring
+
+       # リストの作成
+       mylist = 1:5
+
+       # リストのポインタを作成
+       x = object2pointer(mylist)
+       see x
+
+       see nl
+
+       # リストへ項目を追加
+       mylist + "welcome"
+
+       # リストの項目を表示
+       y = pointer2object(x)
+       see y 
+
+実行結果:
+
+.. code-block:: ring
+
+       0069A5D8
+       OBJECTPOINTER
+       0
+
+       1
+       2
+       3
+       4
+       5
+       welcome
+
+.. note:: Ring の代入演算子は値によりリストとオブジェクトをコピーします。
+       参照によりコピーするには object2pointer() および pointer2object() 関数を使用します。
+
+.. tip:: object2pointer() および pointer2object() は stdlib で使用されています。
+       Tree クラスの実装では子ノード (別オブジェクト) は親ノード (オブジェクト) を参照して作成します。
+
+.. index:: 
+       pair: 低水準関数; ispointer()
+
+ispointer() 関数
+================
+
+仮引数がポインタ (C オブジェクト) であるか検査します。
+
+文法:
+
+.. code-block:: none
+
+       IsPointer(vPara) ---> True|False
+
+用例:
+
+.. code-block:: ring
+
+       fp = fopen(filename(),"r")
+
+       ? type(fp)
+
+       ? ispointer(fp)
+
+実行結果:
+
+.. code-block:: none
+
+       file
+       1
+
+.. index:: 
+       pair: 低水準関数; ptrcmp()
+
+ptrcmp() 関数
+=============
+
+ptrcmp() 関数は二つのポインタ (C オブジェクト) 間で比較します。
+
+文法:
+
+.. code-block:: ring
+
+       ptrcmp(oObject1,oObject2) ---> oObject1 と oObject2 が等しいならば値は 1
+                                      oObject1 と oObject2 が等しくないならば値は 0
+
+用例:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp.ring","r")
+       fp2 = fp
+       fp3 = fopen("ptrcmp.ring","r")
+
+       see ptrcmp(fp,fp2) + nl
+       see ptrcmp(fp,fp3) + nl
+
+       fclose(fp)
+       fclose(fp3)
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       0
+
+.. index:: 
+       pair: 低水準関数; RingVM_CFunctionsList()
+
+ringvm_cfunctionslist() 関数
+============================
+
+C で記述された関数のリストを返す Ring 低水準関数です。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_CFunctionsList() ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       See RingVM_CFunctionsList()
+
+.. index:: 
+       pair: 低水準関数; RingVM_FunctionsList()
+
+ringvm_functionslist() 関数
+===========================
+
+Ring で記述された関数のリストを返す関数です。
+
+各リストメンバは次の項目のリストを有しています。
+
+* 関数名
+* プログラムカウンタ (PC) - バイトコードによる関数の位置
+* ソースコードファイル名
+* プライベートフラグ (クラスにあるプライベートメソッドならば)
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_FunctionsList() ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       test()
+
+       func test
+               see ringvm_functionslist()
+
+実行結果:
+
+.. code-block:: ring
+
+       test
+       8
+       B:/ring/tests/scripts/functionslist.ring
+       0
+
+.. index:: 
+       pair: 低水準関数; RingVM_ClassesList()
+
+ringvm_classeslist() 関数
+=========================
+
+クラスのリストを返す関数です。
+
+各リストメンバは次の項目のリストを有しています。
+
+* クラス名
+* プログラムカウンタ (PC) - バイトコードによるクラスの位置
+* 親クラス名
+* メソッドのリスト
+* フラグ (親クラス情報の収集)
+* パッケージへのポインタ (または未使用のパッケージならば NULL)
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_ClassesList() ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       see ringvm_classeslist()
+
+       class class1
+               func f1
+       class class2 from class1
+       class class3 from class1
+
+実行結果:
+
+.. code-block:: ring
+
+       class1
+       9
+
+       f1
+       13
+       B:/ring/tests/scripts/classeslist.ring
+       0
+       0
+       00000000
+       class2
+       16
+       class1
+       0
+       00000000
+       class3
+       20
+       class1
+       0
+       00000000
+
+.. index:: 
+       pair: 低水準関数; RingVM_PackagesList()
+
+ringvm_packageslist() 関数
+==========================
+
+パッケージのリストを返す関数です。
+
+各リストメンバは次の項目のリストを有しています。
+
+* パッケージ名
+* クラスのリスト
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_PackagesList() ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       see ringvm_packageslist()
+
+       package package1
+               class class1
+
+       package package2
+               class class1
+
+       package package3
+               class class1
+
+実行結果:
+
+.. code-block:: ring
+
+       package1
+       class1
+       11
+
+       0
+       00FEF838
+       package2
+       class1
+       17
+
+       0
+       00FEF978
+       package3
+       class1
+       23
+
+       0
+       00FEFF68
+
+.. index:: 
+       pair: 低水準関数; RingVM_MemoryList()
+
+ringvm_memorylist() 関数
+========================
+
+メモリのスコープと変数のリストを返す関数です。
+
+各リストメンバには、次の異なるスコープにある変数のリストを有しています。
+
+スコープリストにある各項目のリストには次の項目があります。
+
+* 変数の名前
+* 変数の型
+* 変数の値
+* 値がリストの場合はポインタの型 (リスト/項目)
+* プライベートフラグ (変数がクラスの属性ならば)
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_MemoryList() ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       x = 10
+       test()
+       func test
+               y = 20
+               see ringvm_memorylist()
+
+実行結果:
+
+.. code-block:: ring
+
+       true
+       2
+       1
+       0
+       0
+       false
+       2
+       0
+       0
+       0
+       nl
+       1
+
+
+       0
+       0
+       null
+       1
+
+       0
+       0
+       ring_gettemp_var
+       4
+       00000000
+       0
+       0
+       ccatcherror
+       1
+       NULL
+       0
+       0
+       ring_settemp_var
+       4
+       00000000
+       0
+       0
+       ring_tempflag_var
+       2
+       0
+       0
+       0
+       stdin
+       3
+       50512DB8
+       file
+       0
+       0
+       0
+       stdout
+       3
+       50512DD8
+       file
+       0
+       0
+       0
+       stderr
+       3
+       50512DF8
+       file
+       0
+       0
+       0
+       this
+       4
+       00000000
+       0
+       0
+       sysargv
+       3
+       B:/ring/bin/ring
+       B:/ring/tests/scripts/memorylist.ring
+       0
+       0
+       x
+       2
+       10
+       0
+       0
+       y
+       2
+       20
+       0
+       0
+
+.. index:: 
+       pair: 低水準関数; RingVM_CallList()
+
+ringvm_calllist() 関数
+======================
+
+関数呼び出しリストのリストを返す関数です。
+
+各リストメンバは次の項目のリストを有しています。
+
+* 関数の型
+* 関数の名前
+* プログラムカウンタ (PC)
+* スタックポインタ (SP)
+* 一時作業用。メモリのリスト
+* メソッドまたは関数のフラグ
+* 呼び出し元のプログラムカウンタ (PC)
+* FuncExec フラグ
+* ListStart フラグ
+* 入れ子リストのポインタ
+* ステートリスト
+
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_CallList() ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       hello()
+       func hello
+               test()
+
+       func test
+               mylist = ringvm_calllist()
+               for t in mylist see t[2] + nl next
+
+実行結果:
+
+.. code-block:: ring
+
+       function hello() in file B:/ring/tests/scripts/calllist.ring
+       called from line 1
+       function test() in file B:/ring/tests/scripts/calllist.ring
+       called from line 3
+       ringvm_calllist
+
+
+.. index:: 
+       pair: 低水準関数; RingVM_FilesList()
+
+ringvm_fileslist() 関数
+=======================
+
+Ring ファイルのリストを返す関数です。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_FilesList() ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see ringvm_fileslist()
+
+実行結果:
+
+.. code-block:: ring
+
+       B:/ring/tests/scripts/fileslist.ring
+       B:\ring\bin\stdlib.ring
+       eval
+       stdlib.ring
+       stdlib.rh
+       stdclasses.ring
+       stdfunctions.ring
+       stdbase.ring
+       stdstring.ring
+       stdlist.ring
+       stdstack.ring
+       stdqueue.ring
+       stdmath.ring
+       stddatetime.ring
+       stdfile.ring
+       stdsystem.ring
+       stddebug.ring
+       stddatatype.ring
+       stdconversion.ring
+       stdodbc.ring
+       stdmysql.ring
+       stdsecurity.ring
+       stdinternet.ring
+       stdhashtable.ring
+       stdtree.ring
+
+.. index:: 
+       pair: 低水準関数; ringvm_settrace()
+
+ringvm_settrace() 関数
+======================
+
+ringvm_settrace() はトレース関数名を決定する関数です。
+
+トレース関数は Ring
+関数でありイベントごとに呼び出されます。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_SetTrace(cCode)
+
+.. index:: 
+       pair: 低水準関数; ringvm_tracedata()
+
+ringvm_tracedata() 関数
+=======================
+
+関数の内側でイベントをトレースします。
+
+ringvm_tracedata() 関数はイベントデータを取得します。
+
+イベントデータのリストには次の項目があります。
+
+* ソースコードの行番号
+* ソースファイル名
+* 関数またはメソッド名
+* メソッドまたは関数 (Bool : True=メソッド、 False=関数またはファイル)
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_TraceData() ---> aDataList
+
+.. index:: 
+       pair: 低水準関数; ringvm_traceevent()
+
+ringvm_traceevent() 関数
+========================
+
+関数の内側でイベントをトレースします。
+
+ringvm_traceevent() 関数はイベントの種類を検出します。
+
+* 改行
+* 関数の前
+* 関数の後
+* ランタイムエラー
+* C 関数の前
+* C 関数の後
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_TraceEvent() ---> nTraceEvent
+
+.. index:: 
+       pair: 低水準関数; ringvm_tracefunc()
+
+ringvm_tracefunc() 関数
+=======================
+
+この関数はイベントのトレースで使用する関数名を返します。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_TraceEvent() ---> cCode
+
+.. index:: 
+       pair: 低水準関数; ringvm_scopescount()
+
+ringvm_scopescount() 関数
+=========================
+
+RingVM_ScopesCount() 関数は、
+アプリケーションで使用されているスコープの本数を検出します。
+
+プログラムの開始時において、スコープは存在します (グローバルスコープのみ)。
+
+関数の呼び出し時に、新しいスコープが作成されます。
+
+関数実行終了後は、関数のスコープは削除されます。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_ScopesCount() ---> nScopes
+
+.. index:: 
+       pair: 低水準関数; ringvm_evalinscope()
+
+ringvm_evalinscope() 関数
+=========================
+
+ringvm_evalinscope() は eval() 関数と類似する関数です。
+
+eval() とは異なり、現在のスコープにあるコードを実行します。
+
+RingVM_EvalInScope() は指定されたスコープにあるスコープを実行します。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_EvalInScope(nScope,cCode)
+
+.. index:: 
+       pair: 低水準関数; ringvm_passerror()
+
+ringvm_passerror() 関数
+=======================
+
+ランタイムエラーが発生した時はエラーメッセージを表示後に
+Ring はプログラムの実行を終了します。
+
+ringvm_passerror() 関数を使うと、
+前述の動作を回避してプログラムの実行を継続できます。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_PassError()
+
+.. index:: 
+       pair: 低水準関数; ringvm_hideerrorMsg()
+
+ringvm_hideerrormsg() 関数
+==========================
+
+RingVM_HideErrorMsg() 関数は、
+ランタイムエラーメッセージの表示を有効または無効化します。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_HideErrorMsg(lStatus)
+
+.. index:: 
+       pair: 低水準関数; ringvm_callfunc()
+
+ringvm_callfunc() 関数
+======================
+
+eval() 関数ではなく ringvm_callfunc() 関数を使うと、
+文字列から関数を呼び出します。
+
+文法:
+
+.. code-block:: ring
+
+       RingVM_CallFunc(cFuncName)
+
+
+.. index:: 
+       pair: 低水準関数; 用例 - トレース関数の用法
+       
+用例 - トレース関数の用法
+=============================
+
+この用例では、プログラムのイベントをトレースするためにトレース関数を使用しています!
+
+トレースライブラリは低水準関数よりも実用的です!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       ringvm_settrace("mytrace()")
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+       mytest()
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       func mytrace
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+実行結果:
+
+.. code-block:: none
+
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 3
+       File Name   : test1.ring
+       Function Name : ringvm_settrace
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 5
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Hello, world!
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 6
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Welcome
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 7
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       How are you?
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 12
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       Message from mytest
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 14
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 43
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 44
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       Message from mymethod
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 11
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+
+
+.. index:: 
+       pair: 低水準関数; 用例 - トレースライブラリ
+       
+用例 - トレースライブラリ
+===========================
+
+この用例では、トレースライブラリ作成用のトレース関数を使用します。
+
+トレースライブラリにより、
+すばらしいトレースツールとインタラクティブデバッガを利用できます。
+
+.. code-block:: ring
+
+       # イベントのトレース
+       TRACEEVENT_NEWLINE      = 1
+       TRACEEVENT_NEWFUNC      = 2
+       TRACEEVENT_RETURN       = 3
+       TRACEEVENT_ERROR        = 4
+       TRACEEVENT_BEFORECFUNC  = 5
+       TRACEEVENT_AFTERCFUNC   = 6
+
+       # データのトレース
+       TRACEDATA_LINENUMBER    = 1
+       TRACEDATA_FILENAME      = 2
+       TRACEDATA_FUNCNAME      = 3
+       TRACEDATA_METHODORFUNC  = 4
+
+       # 関数のメソッド
+       TRACEDATA_METHODORFUNC_METHOD           = TRUE
+       TRACEDATA_METHODORFUNC_NOTMETHOD        = FALSE
+
+       TRACE_BREAKPOINTS = TRUE
+
+       TRACE_TEMPLIST = []
+
+       func Trace cType
+               switch trim(lower(cType))
+               on :AllEvents
+                       ringvm_settrace("TraceLib_AllEvents()")
+               on :Functions 
+                       ringvm_settrace("TraceLib_Functions()")
+               on :PassError
+                       ringvm_settrace("TraceLib_PassError()")
+               on :Debugger 
+                       ringvm_settrace("TraceLib_Debugger()")
+               on :LineByLine
+                       ringvm_settrace("TraceLib_LineByLine()")
+               off
+
+       func TraceLib_AllEvents
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       func TraceLib_Functions
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on TRACEEVENT_NEWFUNC
+                               see "Open Func : " + 
+                               ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+                       on TRACEEVENT_RETURN
+                               see "Return to Func : " + 
+                               ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+               off
+
+       func TraceLib_PassError
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on  TRACEEVENT_ERROR
+                               see nl
+                               see "TraceLib : After Error !" + nl
+                               ringvm_passerror()
+               off
+
+       func TraceLib_Debugger
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+                       return 
+               ok
+               switch ringvm_TraceEvent() 
+                       on  TRACEEVENT_ERROR
+                               _BreakPoint()
+               off
+
+       func TraceLib_LineByLine
+               if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring" or
+                       ringvm_TraceEvent() != TRACEEVENT_NEWLINE
+                       return 
+               ok
+               aList = ringvm_tracedata()
+               see "Before Line : " + aList[TRACEDATA_LINENUMBER] + nl 
+               _BreakPoint()
+
+       func BreakPoint
+               if not TRACE_BREAKPOINTS
+                       return 
+               ok
+               _BreakPoint()
+
+       func _BreakPoint 
+               see nl+nl+Copy("=",60) + nl +
+               Copy(" ",20)+"Interactive Debugger" + nl +
+               Copy("=",60) + nl +
+               "Command (Exit)        : End Program" + nl +
+               "Command (Cont)        : Continue Execution" + nl +
+               "Command (Locals)      : Print local variables names" + nl +
+               "Command (LocalsData)  : Print local variables data" + nl +
+               "Command (Globals)     : Print global variables names" + nl +
+               "We can execute Ring code" + nl +
+               Copy("=",60) + nl 
+               while true
+                               see nl + "code:> "
+                               give cCode
+                       cmd = trim(lower(cCode))
+                       if cmd = "exit" or cmd = "bye"
+                               shutdown()
+                       ok 
+                       nScope = ringvm_scopescount()-2
+                       switch cmd
+                               on "locals"                     
+                                       ringvm_EvalInScope(nScope,"see locals() callgc()")
+                                       loop
+                               on "localsdata"
+                                       PrintLocalsData(nScope)
+                                       loop
+                               on "globals"                    
+                                       ringvm_EvalInScope(nScope,"see globals() callgc()")
+                                       loop
+                               on "cont"
+                                       ringvm_passerror()
+                                       exit
+                       off
+                       Try
+                               ringvm_EvalInScope(nScope,cCode)
+                               catch
+                                               see cCatchError
+                               done
+               end
+
+       func NoBreakPoints
+               TRACE_BREAKPOINTS = FALSE
+
+
+       func PrintLocalsData nScope
+               if nScope = 1   # グローバル
+                       ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = globals()')
+               else
+                       ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = locals() callgc()')
+               ok
+               see nl 
+               aTempList = TRACE_TEMPLIST
+               TRACE_TEMPLIST = []
+               nSpaces = 5
+               for TRACE_ITEM in aTempList
+                       if len(TRACE_ITEM) + 5 > nSpaces
+                               nSpaces = len(TRACE_ITEM) + 5
+                       ok
+               next
+               for TRACE_ITEM in aTempList
+                       see "Variable : " +  TRACE_ITEM
+                       cVarName = TRACE_ITEM
+                       see copy(" ",nSpaces-len(cVarName)) + " Type : " 
+                       ringvm_Evalinscope(nScope,"see type(" +  TRACE_ITEM +")")
+                       ringvm_Evalinscope(nScope,"see Copy(' ',fabs(15-len(type(" +
+                                                 TRACE_ITEM +"))))")
+                       see " Value : " 
+                       ringvm_Evalinscope(nScope,"see " +  TRACE_ITEM)
+                       see nl
+               next
+
+
+.. index:: 
+       pair: 低水準関数; ringvm_see()
+
+ringvm_see() 関数
+=================
+
+ringvm_see() 関数は See 命令の挙動を変更します。
+
+また ring_see() 関数は元の挙動を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       see "Hello world" + nl
+       see 123 + nl
+       see ["one","two","three"]
+       see new point {x=10 y=20 z=30} 
+
+       func ringvm_see t
+               ring_see("We want to print: ")
+               ring_See(t)
+
+       class point x y z
+
+実行結果:
+
+.. code-block:: none
+
+       We want to print: Hello world
+       We want to print: 123
+       We want to print: one
+       two
+       three
+       We want to print: x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+.. index:: 
+       pair: 低水準関数; ringvm_give()
+
+ringvm_give() 関数
+==================
+
+ringvm_give() 関数は Give 命令の挙動を変更します。
+
+また ring_give() 関数は元の挙動を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       see "Name: " give name
+       see "Hello " + name
+
+       func ringvm_give
+               see "Mahmoud" + nl
+               return "Mahmoud"
+
+実行結果:
+
+.. code-block:: ring
+
+       Name: Mahmoud
+       Hello Mahmoud
+
+.. index:: 
+       pair: 低水準関数; ringvm_info()
+
+ringvm_info() 関数
+==================
+
+ringvm_info () は Ring VM 構造体に関する情報をリストとして返す内部関数です。
+
+この関数は Ring チームが VM の状態を調査するための高度な検証に限り使用されています。
+
+文法:
+
+.. code-block:: ring
+
+       ringvm_info() ---> VM 構造体に関する情報のリスト
+
diff --git a/docs/ja-jp/source/manycubes.png b/docs/ja-jp/source/manycubes.png
new file mode 100644 (file)
index 0000000..1af41df
Binary files /dev/null and b/docs/ja-jp/source/manycubes.png differ
diff --git a/docs/ja-jp/source/manytreeitems.png b/docs/ja-jp/source/manytreeitems.png
new file mode 100644 (file)
index 0000000..c3cc5a5
Binary files /dev/null and b/docs/ja-jp/source/manytreeitems.png differ
diff --git a/docs/ja-jp/source/mathfunc.txt b/docs/ja-jp/source/mathfunc.txt
new file mode 100644 (file)
index 0000000..47ea913
--- /dev/null
@@ -0,0 +1,352 @@
+.. index:: 
+       single: 算術関数; はじめに
+
+========
+算術関数
+========
+
+算術関数の用法を学びます。
+
+.. index:: 
+       pair: 算術関数; 関数のリスト
+
+関数のリスト
+============
+
+このような算術関数が Ring にあります。
+
+=============== ============================================================================================
+関数            説明
+=============== ============================================================================================
+sin(x)          ラジアン x のサイン角度を返します。
+cos(x)          ラジアン x のコサイン角度を返します。
+tan(x)          ラジアン x のタンジェント角度を返します。
+asin(x)         ラジアン表記によるアークサインの x の主値を返します。
+acos(x)         ラジアン表記によるアークコサインの x の主値を返します。
+atan(x)         ラジアン表記によるアークタンジェントの x の主値を返します。
+atan2(y,x)      ラジアン [-pi,+pi] の区間にある、ラジアン表記によるアークタンジェントの x の主値を返します。
+sinh(x)         ラジアン x の双曲線サインを返します。
+cosh(x)         ラジアン x の双曲線コサインを返します。
+tanh(x)         ラジアン x の双曲線タンジェントを返します。
+exp(x)          e の x 乗値を返します。
+log(x)          x の常用対数を返します。
+log10(x)        x の常用対数を返します (基数 10 の対数)。
+ceil(x)         x 以上の最短整数値を返します。
+floor(x)        x 以下の最大整数値を返します。
+fabs(x)         x の絶対値を返します。
+pow(x,y)        x に対する y の累乗を返します。
+sqrt(x)         x の平方根を返します。
+random(x)       [0,x] の範囲による乱数を返します。
+srandom(x)             乱数生成器を初期化します。
+unsigned(n,n,c) 符号なし数値で演算を実行します。
+decimals(n)     浮動小数点数、倍精度数の小数点の後にある小数点以下の数値を決定します。
+=============== ============================================================================================
+
+.. index:: 
+       pair: 算術関数; 用例
+
+用例
+====
+
+.. code-block:: ring
+
+       See "Mathematical Functions" + nl
+       See "Sin(0) = " + sin(0) + nl
+       See "Sin(90) radians = " + sin(90) + nl
+       See "Sin(90) degree = " + sin(90*3.14/180) + nl
+
+       See "Cos(0) = " + cos(0) + nl
+       See "Cos(90) radians = " + cos(90) + nl
+       See "Cos(90) degree = " + cos(90*3.14/180) + nl
+
+       See "Tan(0) = " + tan(0) + nl
+       See "Tan(90) radians = " + tan(90) + nl
+       See "Tan(90) degree = " + tan(90*3.14/180) + nl
+
+       See "asin(0) = " + asin(0) + nl
+       See "acos(0) = " + acos(0) + nl
+       See "atan(0) = " + atan(0) + nl
+       See "atan2(1,1) = " + atan2(1,1) + nl
+
+       See "sinh(0) = " + sinh(0) + nl
+       See "sinh(1) = " + sinh(1) + nl
+       See "cosh(0) = " + cosh(0) + nl
+       See "cosh(1) = " + cosh(1) + nl
+       See "tanh(0) = " + tanh(0) + nl
+       See "tanh(1) = " + tanh(1) + nl
+
+       See "exp(0) = " + exp(0) + nl
+       See "exp(1) = " + exp(1) + nl
+       See "log(1) = " + log(1) + nl
+       See "log(2) = " + log(2) + nl
+       See "log10(1) = " + log10(1) + nl
+       See "log10(2) = " + log10(2) + nl
+       See "log10(10) = " + log10(10) + nl
+
+       See "Ceil(1.12) = " + Ceil(1.12) + nl
+       See "Ceil(1.72) = " + Ceil(1.72) + nl
+
+       See "Floor(1.12) = " + floor(1.12) + nl
+       See "Floor(1.72) = " + floor(1.72) + nl
+
+       See "fabs(1.12) = " + fabs(1.12) + nl
+       See "fabs(1.72) = " + fabs(1.72) + nl
+
+       See "pow(2,3) = " + pow(2,3) + nl
+
+       see "sqrt(16) = " + sqrt(16) + nl
+
+
+プログラムの出力:
+
+.. code-block:: ring
+
+       Mathematical Functions
+       Sin(0) = 0
+       Sin(90) radians = 0.89
+       Sin(90) degree = 1.00
+       Cos(0) = 1
+       Cos(90) radians = -0.45
+       Cos(90) degree = 0.00
+       Tan(0) = 0
+       Tan(90) radians = -2.00
+       Tan(90) degree = 1255.77
+       asin(0) = 0
+       acos(0) = 1.57
+       atan(0) = 0
+       atan2(1,1) = 0.79
+       sinh(0) = 0
+       sinh(1) = 1.18
+       cosh(0) = 1
+       cosh(1) = 1.54
+       tanh(0) = 0
+       tanh(1) = 0.76
+       exp(0) = 1
+       exp(1) = 2.72
+       log(1) = 0
+       log(2) = 0.69
+       log10(1) = 0
+       log10(2) = 0.30
+       log10(10) = 1
+       Ceil(1.12) = 2
+       Ceil(1.72) = 2
+       Floor(1.12) = 1
+       Floor(1.72) = 1
+       fabs(1.12) = 1.12
+       fabs(1.72) = 1.72
+       pow(2,3) = 8
+       sqrt(16) = 4
+
+.. index:: 
+       pair: 算術関数; Random()
+
+Random() 関数
+=============
+
+Random() 関数は乱数を生成します。また最大値の指定もできます (オプション扱い)。
+
+文法:
+
+.. code-block:: ring
+
+       Random(x) ---> [0,x] の範囲による乱数。
+
+用例:
+
+.. code-block:: ring
+
+       for x = 1 to 20
+               see  "Random number : " + random() + nl +
+                    "Random number Max (100) : " + random(100) + nl
+       next
+
+プログラムの出力:
+
+.. code-block:: ring
+
+       Random number : 31881
+       Random number Max (100) : 80
+       Random number : 5573
+       Random number Max (100) : 63
+       Random number : 2231
+       Random number Max (100) : 43
+       Random number : 12946
+       Random number Max (100) : 39
+       Random number : 22934
+       Random number Max (100) : 48
+       Random number : 4690
+       Random number Max (100) : 52
+       Random number : 13196
+       Random number Max (100) : 65
+       Random number : 30390
+       Random number Max (100) : 87
+       Random number : 4327
+       Random number Max (100) : 77
+       Random number : 12456
+       Random number Max (100) : 17
+       Random number : 28438
+       Random number Max (100) : 13
+       Random number : 30503
+       Random number Max (100) : 6
+       Random number : 31769
+       Random number Max (100) : 94
+       Random number : 8274
+       Random number Max (100) : 65
+       Random number : 14390
+       Random number Max (100) : 90
+       Random number : 28866
+       Random number Max (100) : 12
+       Random number : 24558
+       Random number Max (100) : 70
+       Random number : 29981
+       Random number Max (100) : 77
+       Random number : 12847
+       Random number Max (100) : 63
+       Random number : 6632
+       Random number Max (100) : 60
+
+.. index:: 
+       pair: 算術関数; SRandom()
+
+SRandom() 関数
+==============
+
+SRandom() 関数は乱数生成器を初期化します。
+
+文法:
+
+.. code-block:: ring
+
+       SRandom(x) 
+
+.. index:: 
+       pair: 算術関数; Unsigned()
+
+Unsigned() 関数
+===============
+
+Unsigned() 関数により符号なし整数を使えます。
+
+文法:
+
+.. code-block:: ring
+
+       Unsigned(nNum1,nNum2,cOperator)
+               --> nNum1,nNum2 における cOperator の演算結果。
+
+用例:
+
+.. code-block:: ring
+
+       see oat_hash("hello") + nl
+
+       # ジェンキンス法によるハッシュ関数 - https://en.wikipedia.org/wiki/Jenkins_hash_function
+       func oat_hash cKey      
+               h = 0
+               for x in cKey
+                       h = unsigned(h,ascii(x),"+")
+                       h = unsigned(h,unsigned(h,10,"<<"),"+")
+                       r = unsigned(h,6,">>")
+                       h = unsigned(h, r,"^")
+               next
+               h = unsigned(h,unsigned(h,3,"<<"),"+")
+               h = unsigned(h,unsigned(h,11,">>"),"^")
+               h = unsigned(h,unsigned(h,15,"<<"),"+")
+               return h  
+
+実行結果:
+
+.. code-block:: ring
+
+       3372029979.00
+
+.. index:: 
+       pair: 算術関数; Decimals()
+
+Decimals() 関数
+===============
+
+Decimals() により浮動小数点数、倍精度数の小数点の後にある小数点以下の数値を決定できます。
+
+文法:
+
+.. code-block:: ring
+
+       Decimals(nDecimalsCount)
+
+用例:
+
+.. code-block:: ring
+
+       x = 1.1234567890123
+       for d = 0 to 14
+               decimals(d)
+               see x + nl
+       next
+
+
+実行結果:
+
+.. code-block:: ring
+
+
+       1
+       1.1
+       1.12
+       1.123
+       1.1235
+       1.12346
+       1.123457
+       1.1234568
+       1.12345679
+       1.123456789
+       1.1234567890
+       1.12345678901
+       1.123456789012
+       1.1234567890123
+       1.12345678901230
+
+
+.. index:: 
+       pair: 算術関数; 数値の桁間に _ を使うには
+
+数値の桁間に _ を使うには
+=========================
+
+数値の桁間に‘_’を使うことができます。
+
+用例:
+
+.. code-block:: ring
+
+       x = 1_000_000
+       see type(x)+nl
+       see x+1+nl
+
+実行結果:
+
+.. code-block:: ring
+
+       NUMBER
+       100000001
+
+.. index:: 
+       pair: 算術関数; 数値の末尾に f を使うには
+
+数値の末尾に f を使うには
+=========================
+
+数値の末尾に‘f’を使うことができます。
+
+用例:
+
+.. code-block:: ring
+
+       x = 19.99f
+       see type(x) + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       NUMBER
diff --git a/docs/ja-jp/source/matzring.png b/docs/ja-jp/source/matzring.png
new file mode 100644 (file)
index 0000000..0691352
Binary files /dev/null and b/docs/ja-jp/source/matzring.png differ
diff --git a/docs/ja-jp/source/maze.png b/docs/ja-jp/source/maze.png
new file mode 100644 (file)
index 0000000..9853d18
Binary files /dev/null and b/docs/ja-jp/source/maze.png differ
diff --git a/docs/ja-jp/source/menubardesigner.png b/docs/ja-jp/source/menubardesigner.png
new file mode 100644 (file)
index 0000000..3a5740f
Binary files /dev/null and b/docs/ja-jp/source/menubardesigner.png differ
diff --git a/docs/ja-jp/source/metaprog.txt b/docs/ja-jp/source/metaprog.txt
new file mode 100644 (file)
index 0000000..87a9e35
--- /dev/null
@@ -0,0 +1,1264 @@
+.. index:: 
+       single: リフレクションとメタプログラミング; はじめに
+
+==================================
+リフレクションとメタプログラミング
+==================================
+
+Ring は動的プログラミング言語であり、プログラムのコードに関する応答を得られます。
+さらに、実行中にコードを変更できます。
+
+本題、および利用可能な関数の用法を学びます。
+
+* locals()
+* globals()
+* functions()
+* cfunctions()
+* islocal()
+* isglobal()
+* isfunction()
+* iscfunction()
+* packages()
+* ispackage()
+* classes()
+* isclass()
+* packageclasses()
+* ispackageclass()
+* classname()
+* objectid()
+* isobject() 
+* attributes()
+* methods()
+* isattribute()
+* isprivateattribute()
+* ismethod()
+* isprivatemethod()
+* addattribute()
+* addmethod()
+* getattribute()
+* setattribute()
+* mergemethods()
+* packagename()
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; locals()
+
+locals() 関数
+=============
+
+locals() 関数は現在のスコープにある変数名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       locals() --> 現在のスコープにある変数名のリスト
+
+用例:
+
+.. code-block:: ring
+
+       test("hello")
+
+       func test cMsg
+
+               see cMsg + nl
+
+               x = 10
+               y = 20
+               z = 30
+
+               see locals()
+
+実行結果:
+
+.. code-block:: ring
+
+       hello
+       cmsg
+       x
+       y
+       z
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; globals()
+
+globals() 関数
+==============
+
+globals() 関数はグローバルスコープにある変数名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+       
+       globals() --> グローバルスコープにある変数名のリスト
+
+用例:
+
+.. code-block:: ring
+
+       x=10 y=20 z=30
+       test()
+
+       func test
+               see "message from test()" + nl +
+                   "Global Variables:" + nl
+               see globals()
+
+実行結果:
+
+.. code-block:: ring
+
+
+       message from test()
+       Global Variables:
+       x
+       y
+       z
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; functions()
+
+functions() 関数
+================
+
+functions() 関数は Ring で記述された関数名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       functions() --> Ring 関数名のリスト
+
+用例:
+
+.. code-block:: ring
+
+       see functions()
+
+       func f1
+               see "f1" + nl
+
+       func f2
+               see "f2" + nl
+
+       func f3 
+               see "f3" + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       f1
+       f2
+       f3
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; cfunctions()
+
+cfunctions() 関数
+=================
+
+cfunctions() 関数は C 言語で記述された関数名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       cfunctions() --> C 関数名のリスト
+
+用例:
+
+.. code-block:: ring
+
+       aList =  cfunctions()
+       See "Count : " + len(aList) + nl
+       for x in aList
+               see x + "()" + nl
+       next
+
+実行結果:
+
+.. code-block:: ring
+
+       Count : 210
+       len() 
+       add() 
+       del() 
+       get() 
+       clock()
+       ...
+
+.. note:: 前述の実行結果から完全なリストは割愛されています。
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; islocal()
+
+islocal() 関数
+==============
+
+islocal() 関数はローカルスコープで定義済みの変数であるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       islocal(cVariableName) --> 変数がローカルスコープで定義されているならば 1 を返します。
+                                  変数がローカルスコープで定義されていないならば 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       test()
+
+       func test
+               x=10 y=20
+               see islocal("x") + nl + 
+                   islocal("y") + nl + 
+                   islocal("z") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; isglobal()
+
+isglobal() 関数
+===============
+
+isglobal() 関数はグローバルスコープで定義済みの変数であるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       isglobal(cVariableName) --> 変数がグローバルスコープで定義されているならば 1 を返します。
+                                   変数がグローバルスコープで定義されていないならば 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       x=10 y=20
+
+       test()
+
+       func test
+               see isglobal("x") + nl + 
+                   isglobal("y") + nl + 
+                   isglobal("z") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; isfunction()
+
+isfunction() 関数
+=================
+
+isfunction() 関数は定義済みの Ring 関数であるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       isfunction(cFunctionName) --> Ring 関数が定義されているならば 1 を返します。
+                                     Ring 関数が定義されていないならば 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       see isfunction("f1") + nl + 
+           isfunction("f2") + nl + 
+           isfunction("f3") + nl
+
+       func f1
+               see "message from f1()" + nl
+
+       func f2
+               see "message from f2()" + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; iscfunction()
+
+iscfunction() 関数
+==================
+
+iscfunction() 関数は定義済みの C 関数であるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       iscfunction(cFunctionName) --> C 関数が定義されているならば 1 を返します。
+                                      C 関数が定義されていないならば 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       see iscfunction("len") + nl + 
+           iscfunction("add") + nl + 
+           iscfunction("test") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; packages()
+
+packages() 関数
+===============
+
+packages() 関数はパッケージ名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       packages() --> パッケージ名のリスト
+
+用例:
+
+.. code-block:: ring
+
+       See packages()
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+
+       Package Package3
+               Class class1
+                       Func f1
+
+       Package Package4
+               Class class1
+                       Func f1
+
+実行結果:
+
+.. code-block:: ring
+
+       package1
+       package2
+       package3
+       package4
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; ispackage()
+
+ispackage() 関数
+================
+
+ispackage() 関数は定義済みのパッケージであるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       ispackage(cPackageName) --> パッケージが定義されているならば 1 を返します。
+                                   パッケージが定義されていないならば 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       See ispackage("package1") + nl + 
+           ispackage("package4") + nl + 
+           ispackage("package5") + nl +
+           ispackage("package3") + nl
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+
+       Package Package3
+               Class class1
+                       Func f1
+
+       Package Package4
+               Class class1
+                       Func f1
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       1
+       0
+       1
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; classes()
+
+classes() 関数
+==============
+
+classes() 関数はクラス名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       classes() --> クラス名のリスト
+
+用例:
+
+.. code-block:: ring
+
+       See classes()
+
+       Class class1
+               Func f1
+
+       Class class2
+               Func f1
+
+       Class class3
+               Func f1
+
+実行結果:
+
+.. code-block:: ring
+
+       class1
+       class2
+       class3
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; isclass()
+
+isclass() 関数
+==============
+
+isclass() 関数は定義済みのクラスであるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       isclass(cClassName) -->  クラスが定義されているならば 1 を返します。
+                                クラスが定義されていないならば 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       see isclass("class4") + nl + 
+           isclass("class3") + nl +
+           isclass("class2") + nl
+
+       Class class1
+               func f1
+
+       class class2
+               func f1
+
+       class class3
+               func f1
+
+実行結果:
+
+.. code-block:: ring
+
+       0
+       1
+       1
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; packagesclasses()
+
+packageclasses() 関数
+=====================
+
+packageclasses() 関数はパッケージにあるクラス名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       packageclasses(cPackageName) --> パッケージにあるクラス名のリスト
+
+用例:
+
+.. code-block:: ring
+
+       see "classes in Package1" + nl
+       see packageclasses("Package1")
+       see "classes in Package2" + nl
+       see packageclasses("Package2")
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+               Class class2
+                       Func f1
+               Class class3
+                       func f1
+
+
+実行結果:
+
+.. code-block:: ring
+
+       classes in Package1
+       class1
+       classes in Package2
+       class1
+       class2
+       class3
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; ispackagesclass()
+
+ispackageclass() 関数
+=========================
+
+ispackageclass() 関数はパッケージで定義済みのクラスであるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       ispackageclass(cPackageName,cClassName) -->  クラスが定義されているならば 1 を返します。
+                                                    クラスが定義されていないならば 0 を返します。
+
+用例:
+
+.. code-block:: ring
+
+       see ispackageclass("package1","class1") + nl +
+           ispackageclass("package1","class2") + nl +
+           ispackageclass("package2","class1") + nl +
+           ispackageclass("package2","class2") + nl
+
+       Package Package1
+               Class class1
+                       Func f1
+
+       Package Package2
+               Class class1
+                       Func f1
+               Class class2
+                       Func f1
+               Class class3
+                       func f1
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       0
+       1
+       1
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; classname()
+
+classname() 関数
+====================
+               
+classname() 関数はオブジェクトのクラス名を検査します。 
+
+文法:
+
+.. code-block:: ring
+
+       classname(object) --> オブジェクトのクラス名を返します。
+
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point
+       o2 = new rect
+
+       see classname(o1) + nl          # point を表示
+       see classname(o2) + nl          # rect  を表示
+
+       class point
+       class rect
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; objectid()
+
+objectid() 関数
+===================
+
+objectid() 関数はオブジェクトの識別子 (ID) を検査します。
+
+文法:
+
+.. code-block:: ring
+
+       objectid(object) --> オブジェクトの識別子 (ID) を返します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point
+       see objectid(o1) + nl
+       test(o1)
+
+       func test v
+               see objectid(v) + nl
+
+       Class point x y z
+
+実行結果:
+
+.. code-block:: ring
+
+       021B5808
+       021B5808
+               
+.. index:: 
+       pair: リフレクションとメタプログラミング; isobject()
+
+isobject() 関数
+===================
+
+isobject() 関数は変数がオブジェクトであるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       isobject(variable) --> オブジェクトならば True を、そうでなければ False を返します。
+
+               
+.. index:: 
+       pair: リフレクションとメタプログラミング; attributes()
+
+attributes() 関数
+=====================
+
+attributes() 関数はオブジェクトの属性を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       attributes(object) --> オブジェクトの属性リストを返します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point
+       aList = attributes(o1)          # see attributes(o1) を使えます。
+       for t in aList see t next       # xyz の表示
+       Class Point x y z
+               
+.. index:: 
+       pair: リフレクションとメタプログラミング; methods()
+
+methods() 関数
+==================
+
+methods() 関数はオブジェクトのメソッドを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       methods(object) --> オブジェクトのメソッドのリストを返します。
+
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new test
+       aList = methods(o1)
+
+       for x in aList
+               cCode = "o1."+x+"()"
+               eval(cCode)
+       next
+
+       Class Test
+               func f1
+                       see "hello from f1" + nl
+               func f2
+                       see "hello from f2" + nl
+               func f3
+                       see "hello from f3" + nl
+               func f4
+                       see "hello from f4" + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       hello from f1
+       hello from f2
+       hello from f3
+       hello from f4
+
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; isattribute()
+
+isattribute() 関数
+==================
+
+isattribute() 関数はオブジェクトに属性があるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       isattribute(object,cAttributeName)
+               --> オブジェクトが属性を有しているならば True を返します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see isattribute(o1,"x") + nl    # 1 の表示
+       see isattribute(o1,"t") + nl    # 0 の表示
+       see isattribute(o1,"y") + nl    # 1 の表示
+       see isattribute(o1,"z") + nl    # 1 の表示
+
+       class point x y z
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; isprivateattribute()
+
+isprivateattribute() 関数
+=========================
+
+isprivateattribute() 関数はオブジェクトにプライベート属性があるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       isprivateattribute(object,cAttributeName)
+               --> オブジェクトにプライベート属性があるならば True を返します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new person
+
+       see isprivateattribute(o1,"name") + nl + 
+           isprivateattribute(o1,"address") + nl + 
+           isprivateattribute(o1,"phone") + nl + 
+           isprivateattribute(o1,"job") + nl + 
+           isprivateattribute(o1,"salary")
+
+       Class Person
+               name address phone
+               private
+                       job salary
+
+実行結果:
+
+.. code-block:: ring
+
+       0
+       0
+       0
+       1
+       1
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; ismethod()
+       
+ismethod() 関数
+===================
+
+ismethod() 関数はオブジェクトのクラスにメソッドがあるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       ismethod(object,cMethodName)
+               --> オブジェクトのクラスにメソッドがあるならば True を返します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see ismethod(o1,"print") + nl           # 1 の表示
+
+       mylist = []
+       mylist + new point
+
+       see ismethod(mylist[1],"print") + nl    # 1 の表示
+
+       class point x y z
+               func print
+                       see x + nl + y + nl + z + nl
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; isprivatemethod()
+
+isprivatemethod() 関数
+==========================
+
+isprivatemethod() 関数はオブジェクトのクラスにプライベートメソッドがあるかを検査します。
+
+文法:
+
+.. code-block:: ring
+
+       isprivatemethod(object,cMethodName)
+               --> オブジェクトのクラスにプライベートメソッドあるならば True を返します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new Test
+
+       see isprivatemethod(o1,"f1") + nl +
+           isprivatemethod(o1,"f2") 
+
+       Class Test
+               func  f1
+                       see "message from f1()" + nl
+               private
+                       func f2
+                               see "message from f2()" + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       0
+       1
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; addattribute()
+
+addattribute() 関数
+===================
+
+addattribute() 関数はオブジェクトの状態 (クラスではなく) へ属性 (または属性のグループ) を追加します。
+
+文法:
+
+.. code-block:: ring
+
+       AddAttribute(object,cAttributeName|aAttributesList)
+
+用例①:
+
+.. code-block:: ring
+
+       see new point {x=10 y=20 z=30}
+       Class Point 
+               AddAttribute(self,["x","y","z"])
+
+用例②:
+
+.. code-block:: ring
+
+       o1 = new point
+       addattribute(o1,"x")
+       addattribute(o1,"y")
+       addattribute(o1,"z")
+       see o1 {x=10 y=20 z=30}
+       class point
+
+
+実行結果:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; addmethod()
+
+
+addmethod() 関数
+====================
+
+addmethod() 関数はオブジェクトのクラスへメソッドを追加します。
+このメソッドは同一クラスにあるオブジェクトでも使えます。
+
+文法:
+
+.. code-block:: ring
+
+       AddMethod(Object,cNewMethodName,cMethodName|AnonymousFunction)
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+
+       Class point
+               x y z
+       
+実行結果:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+
+無名関数ではなく関数名により、新規メソッドをクラスへ追加できます
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+
+       myfunc = func { see x + nl + y + nl + z + nl }
+
+       addmethod(o1,"print", myfunc )
+       addmethod(o1,"display", myfunc )
+       addmethod(o1,"show", myfunc )
+
+       o1.print()
+       o1.display()
+       o1.show()
+
+       Class point
+               x y z
+
+
+実行結果:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+       10
+       20
+       30
+       10
+       20
+       30
+
+クラスへメソッドを追加するため、このメソッドでは対象のクラスにあるメソッドを使用します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point { x=10 y=20 z=30 }
+       o2 = new point { x=100 y=200 z=300 }
+       o3 = new point { x=50 y=150 z=250 }
+
+       addmethod(o1,"print", func { see x + nl + y + nl + z + nl } )
+
+       o1.print()
+       o2.print()
+       o3.print()
+
+       Class point
+               x y z
+
+実行結果:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+       100
+       200
+       300
+       50
+       150
+       250
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; getattribute()
+
+getattribute() 関数
+===================
+
+getattribute() 関数はオブジェクトの属性値を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       GetAttribute(oObject,cAttributeName) ---> 属性の値
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point
+
+       see getattribute(o1,"name") + nl +
+           getattribute(o1,"x") + nl +
+           getattribute(o1,"y") + nl + 
+           getattribute(o1,"z") + nl
+
+       Class Point
+               x=10 y=20 z=30
+               name = "3D-Point"
+       
+実行結果:
+
+.. code-block:: ring
+
+       3D-Point
+       10
+       20
+       30
+       
+
+用例:
+
+findclass() 関数から GetAttribute() を呼び出してクラスリストのメンバを検索します。検索には桁の位置よりもメンバ名を優先して使用します。
+
+.. code-block:: ring
+
+       myList =
+                 [new Company {position=3 name="Mahmoud" symbol="MHD"},
+                  new Company {position=2 name="Bert" symbol="BRT"},
+                  new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+       
+       see myList
+       see nl +"=====================" + nl + nl
+       
+       for i = 1 to len(myList)
+            see  "Pos: "+ i +" | "+ myList[i].position +" | "+ myList[i].name +
+                 " | "+  myList[i].symbol    +" | "+ nl
+       next
+       
+       
+       See findclass(myList, "MHD", "symbol") +nl   ### メンバのクラス名を指定
+       
+       ###---------------------------------------
+       
+       func findclass classList, cValue, classMember
+       
+              See nl + "FindClass: "  +" "+ cValue + nl + nl
+       
+              for i = 1 to len(classList)
+                   result = getattribute( classList[i], classMember )
+                  
+                  See "Result-Attr: " + i +" "+  result +nl
+                  if result = cValue
+                      j = i
+                   ok      
+              next
+       return j
+       
+       ###--------------------------------------
+       
+       class company position name symbol
+
+実行結果:
+
+.. code-block:: ring
+
+       Pos: 1 | 3 | Mahmoud | MHD |
+       Pos: 2 | 2 | Bert | BRT |
+       Pos: 3 | 1 | Ring | RNG |
+       
+       FindClass:  MHD
+       
+       Result-Attr: 1 MHD
+       Result-Attr: 2 BRT
+       Result-Attr: 3 RNG
+       
+       1
+
+       
+.. index:: 
+       pair: リフレクションとメタプログラミング; setattribute()
+
+setattribute() 関数
+===================
+
+setattribute() 関数はオブジェクトの属性値を設定します。
+
+文法:
+
+.. code-block:: ring
+
+       SetAttribute(oObject,cAttributeName,Value)
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new person
+       setattribute(o1,"cName","Mahmoud")
+       setattribute(o1,"nSalary",1000000)
+       setattribute(o1,"aColors",["white","blue","yellow"])
+
+       see o1
+       see o1.aColors
+
+       Class Person
+               cName
+               nSalary
+               aColors
+
+実行結果:
+
+.. code-block:: ring
+
+       cname: Mahmoud
+       nsalary: 1000000.000000
+       acolors: List...
+       white
+       blue
+       yellow
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; mergemethods()
+
+mergemethods() 関数
+===================
+
+MergeMethods() 関数は継承を行わずにクラスとメソッドを共有します。
+
+この関数は別のクラスへクラスのメソッドを併合します。
+
+文法:
+
+.. code-block:: ring
+
+       MergeMethods(cClassNameDestination,cClassNameSource)
+
+用例:
+
+.. code-block:: ring
+
+       mergemethods("count","share")
+       mergemethods("count2","share")
+
+       o1 = new count  { test() }
+       o1 = new count2 { test() }
+
+       Class Share
+               func one
+                       see "one" + nl
+               func two
+                       see "two" + nl
+               func three
+                       see "three" + nl
+
+       Class Display
+               Func printline
+                       see copy("*",20) + nl
+
+       Class Count from Display
+               Func test
+                       printline()
+                       one()
+                       two()
+                       three()
+                       printline()
+
+       Class Count2 from Display
+               Func test
+                       three()
+                       two()
+                       one()
+                       printline()     
+
+実行結果:
+
+.. code-block:: ring
+
+       ********************
+       one
+       two
+       three
+       ********************
+       three
+       two
+       one
+       ********************
+
+.. index:: 
+       pair: リフレクションとメタプログラミング; packagename()
+
+packagename() 関数
+==================
+
+packagename() 関数は import 命令が成功した最近のパッケージ名を検査します。
+
+文法:
+
+.. code-block:: ring
+
+       packagename() --> import 命令が成功した最近のパッケージ名を返します。
+
+
+用例:
+
+.. code-block:: ring
+
+       load "weblib.ring"
+       import System.web
+       see packagename()       # system.web
+
diff --git a/docs/ja-jp/source/minesweeper.png b/docs/ja-jp/source/minesweeper.png
new file mode 100644 (file)
index 0000000..57fc298
Binary files /dev/null and b/docs/ja-jp/source/minesweeper.png differ
diff --git a/docs/ja-jp/source/more3dsamples.jpg b/docs/ja-jp/source/more3dsamples.jpg
new file mode 100644 (file)
index 0000000..1f264be
Binary files /dev/null and b/docs/ja-jp/source/more3dsamples.jpg differ
diff --git a/docs/ja-jp/source/more3dsamples2.jpg b/docs/ja-jp/source/more3dsamples2.jpg
new file mode 100644 (file)
index 0000000..115494a
Binary files /dev/null and b/docs/ja-jp/source/more3dsamples2.jpg differ
diff --git a/docs/ja-jp/source/multilanguage.txt b/docs/ja-jp/source/multilanguage.txt
new file mode 100644 (file)
index 0000000..67a9a38
--- /dev/null
@@ -0,0 +1,122 @@
+.. index:: 
+     single: 多国語アプリケーション; はじめに
+
+======================
+多国語アプリケーション
+======================
+
+多国語 Ring アプリケーションを実現する方法は色々あります!
+
+String2Constant ツールの用法を学びます。
+
+.. index:: 
+     pair: 多国語アプリケーション; String2Constant の用法
+
+String2Constant の用法
+======================
+
+Ring 1.8 より String2Constant アプリケーションがあります。
+
+このツールは ring/samples/tools/string2constant フォルダにあります。
+
+このツールは文字列リテラルではなく、定数を用いたソースコードへ変換します。
+
+これにより、定数を様々な言語を翻訳して言語ごとにソースコードのファイルへ格納できます。
+
+Arabic.ring, English.ring, Japanese.ring など言語ごとに特殊なファイルを扱うことができます。
+
+このツールの採用事例としては、アラビア語へ翻訳したフォームデザイナーがあります。
+
+.. image:: string2constant.png
+       :alt: String2Constant 
+
+.. index:: 
+     pair: 多国語アプリケーション; フォームデザイナーの翻訳
+
+フォームデザイナーの翻訳
+========================
+
+フォームデザイナーのアプリケーションは ring/applications/formdesigner フォルダにあります。
+
+翻訳用のファイルは ring/applications/formdesinger/translation フォルダにあります。
+
+三種類のファイルがあります。
+
+* Arabic.ring
+* English.ring
+* Japanese.ring
+
+定数定義の考えかたを理解するには前述のファイルを確認します。
+
+これは Japanese.ring ファイルからの引用です。
+
+.. code-block:: ring
+
+       T_LANGUAGE = "english"
+       T_LAYOUTDIRECTION = 0                   # 左から右へ
+
+       T_FORMDESIGNER_FORMDESIGNER     = "フォームデザイナー"
+       T_FORMDESIGNER_FORMTITLE                = "Form1"
+
+       T_FORMDESIGNER_FILE                     = "ファイル(&F)"
+       T_FORMDESIGNER_NEW                              = "新規作成(&N)"
+       T_FORMDESIGNER_OPEN                     = "開く(&O)"
+       T_FORMDESIGNER_SAVE                     = "保存(&S)"
+       T_FORMDESIGNER_SAVEAS                   = "名前を付けて保存(&A)"
+       T_FORMDESIGNER_CLOSE                    = "閉じる(&C)"
+
+フォームデザイナーのソースコードのファイルでは、文字列リテラル型ではなく定数を使用しています。
+
+これは formdesigner/mainwindow/formdesignerview.ring ファイルからの引用です。
+
+.. code-block:: ring
+
+               # メインウィンドウの作成と MDI 領域の使用
+                       win = new qMainwindow() {
+                               setWindowTitle(T_FORMDESIGNER_FORMDESIGNER) # "Form Designer"
+                               setcentralWidget(this.oArea)
+                               setLayoutDirection(T_LAYOUTDIRECTION)
+                       }
+
+* コメントで文字列リテラルを記述すると、コードの可読性向上になります。
+
+* setLayoutDirection() メソッドで、ウィンドウの方向を左から右へ設定できます。
+
+* 使用する翻訳ファイルをLoad 命令で指定します。
+
+.. index:: 
+     pair: 多国語アプリケーション; フォームの翻訳
+
+フォームの翻訳
+==============
+
+フォームデザイナーでフォームを作成した後に View クラスが生成されます。
+
+View クラスの修正は行わずに Controller クラスから翻訳を追加します。
+
+例えば、このようなフォームファイルがあります : ring/formdesigner/selobjects/selobjects.rform
+
+.. image:: formtranslation1.png
+       :alt: フォームの翻訳
+
+
+このコードを使って Controller クラスから翻訳を追加します。
+
+そして、定数は Arabic.ring, English.ring と Japanese.ring で定義します。
+
+.. code-block:: ring 
+
+       class selobjectsController from windowsControllerParent
+
+               oView = new selobjectsView  {
+                       ListObjects.setselectionmode(QAbstractItemView_MultiSelection)
+                       win.setwindowmodality(2)
+                       # 翻訳
+                               win.setWindowTitle(T_FORMDESIGNER_SELOBJECTS_TITLE)
+                               win.setLayoutDirection(T_LAYOUTDIRECTION)
+                               labelobjects.setText(T_FORMDESIGNER_SELOBJECTS_OBJECTS)
+                               btnSelect.setText(T_FORMDESIGNER_SELOBJECTS_SELECT)
+                               btnClose.setText(T_FORMDESIGNER_SELOBJECTS_CLOSE)
+               }
+
+
diff --git a/docs/ja-jp/source/mysql.txt b/docs/ja-jp/source/mysql.txt
new file mode 100644 (file)
index 0000000..fa1275f
--- /dev/null
@@ -0,0 +1,624 @@
+.. index:: 
+       single: MySQL 関数; はじめに
+
+==========
+MySQL 関数
+==========
+
+MySQL 関数の用法を学びます。
+
+* MySQL_Info()
+* MySQL_Init()
+* MySQL_Error()
+* MySQL_Connect()
+* MySQL_Close()
+* MySQL_Query()
+* MySQL_Insert_ID()
+* MySQL_Result()
+* MySQL_Next_Result()
+* MySQL_Columns()
+* MySQL_Result2()
+* MySQL_Escape_String()
+* MySQL_AutoCommit()
+* MySQL_Commit()
+* MySQL_Rollback()
+
+この関数の使用前に mysqllib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "mysqllib.ring"
+       # MySQL 関数の使用
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Info()
+
+MySQL_Info() 関数
+=================
+
+MySQL_Info() 関数は MySQL クライアントのバージョンを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Info() ---> MySQL のバージョン文字列
+
+用例:
+
+.. code-block:: ring
+
+       see "MySQL Client Version : " + mysql_info()
+
+実行結果:
+
+.. code-block:: ring
+
+       MySQL Client Version : 6.1.5
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Init()
+
+MySQL_Init() 関数
+=====================
+
+MySQL_Init() 関数により MySQL クライアントを使用します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Init() ---> MySQL ハンドル
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Error()
+
+MySQL_Error() 関数
+======================
+
+MySQL_Error() 関数は MySQL クライアントからエラーメッセージを取得します。
+
+文法: 
+
+.. code-block:: ring
+
+       MySQL_Error(MySQL ハンドル) ---> エラーメッセージの文字列
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Connect()
+
+MySQL_Connect() 関数
+========================
+
+MySQL_Connect() 関数は MySQL データベースのサーバーへ接続します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Connect(MySQL ハンドル, cServer, cUserName, cPassword) ---> lStatus
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Close()
+
+MySQL_Close() 関数
+======================
+
+MySQL_Close() 関数は MySQL データベースの接続を閉じます。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Close(MySQL ハンドル)
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Query()
+
+MySQL_Query() 関数
+======================
+
+MySQL_Query() 関数は SQL のクエリを実行します。
+
+文法:
+
+.. code-block:: ring
+       
+       MySQL_Query(MySQL ハンドル, cSQLQuery)
+
+.. index:: 
+       pair: MySQL 関数; データベースの作成
+
+データベースの作成
+==================
+
+この用例は MySQL サーバーへ接続後に新しいデータベースを作成します。
+
+.. code-block:: ring
+
+       See "MySQL Test - Create Database" + nl
+       con = mysql_init()
+
+       See "Connect" + nl
+       if mysql_connect(con,"localhost","root","root") = 0
+               see "Cann't connect" + nl
+               see "Error : " + mysql_error(con) + nl
+               mysql_close(con)
+               bye
+       ok
+
+       See "Create Database..." + nl
+       mysql_query(con,"CREATE DATABASE mahdb")
+
+       See "Close Connection" + nl
+       mysql_close(con)
+
+実行結果:
+
+.. code-block:: ring
+
+       MySQL Test - Create Database
+       Connect
+       Create Database...
+       Close Connection
+
+.. index:: 
+       pair: MySQL 関数; テーブルの作成とデータの挿入
+
+テーブルの作成とデータの挿入
+============================
+
+この用例は新しいテーブルの作成、およびレコードの挿入を行います。
+
+.. code-block:: ring
+
+       func main
+               see "Create Table and Insert Records" + nl
+               con = mysql_init()
+
+               see "Connect" + nl
+               if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
+                       system_error(con) 
+               ok
+
+               see "Drop table" + nl
+               if mysql_query(con, "DROP TABLE IF EXISTS Employee")  system_error(con) ok
+  
+               see "Create table" + nl
+               if mysql_query(con, "CREATE TABLE Employee(Id INT, Name TEXT, Salary INT)") 
+                  system_error(con) ok
+               see "Insert data" + nl 
+               if mysql_query(con, "INSERT INTO Employee VALUES(1,'Mahmoud',15000)") 
+                  system_error(con) ok
+  
+               if mysql_query(con, "INSERT INTO Employee VALUES(2,'Samir',16000)") 
+                  system_error(con) ok
+
+               if mysql_query(con, "INSERT INTO Employee VALUES(3,'Fayed',17000)")  
+                  system_error(con) ok
+
+               see "Close connection" + nl
+               mysql_close(con) 
+
+       func system_error con
+               see mysql_error(con)  mysql_close(con)  bye
+
+
+実行結果:
+
+.. code-block:: ring
+
+       Create Table and Insert Records
+       Connect
+       Drop table
+       Create table
+       Insert data
+       Close connection
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Inser_ID()
+
+MySQL_Insert_ID() 関数
+======================
+
+MySQL_Insert_ID() 関数は挿入された列の ID を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Insert_ID() ---> 数値により挿入された列の ID
+
+用例:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "connect to database" + nl
+       mysql_connect(con,"localhost","root","root","mahdb")
+       see "drop table" + nl
+       mysql_query(con, "DROP TABLE IF EXISTS Customers")
+       see "create table" + nl
+       mysql_query(con, "CREATE TABLE Customers(Id INT PRIMARY KEY AUTO_INCREMENT, Name TEXT)")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Mahmoud')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Samir')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Fayed')")
+       see "insert record" + nl
+       mysql_query(con, "INSERT INTO Customers(Name) VALUES('Test 2015')")
+
+       see "inserted row id : " + mysql_insert_id(con) + nl
+       see "close database" + nl
+       mysql_close(con)
+
+実行結果:
+
+.. code-block:: ring
+
+       connect to database
+       drop table
+       create table
+       insert record
+       insert record
+       insert record
+       insert record
+       inserted row id : 4
+       close database
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Result()
+
+MySQL_Result() 関数
+===================
+
+MySQL_Result() 関数はクエリの結果 (カラム名を除くデータ) を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Result(MySQL ハンドル) ---> クエリの結果を有するリスト
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Next_Result()
+
+MySQL_Next_Result() 関数
+========================
+
+MySQL_Next_Result() 関数は次のクエリの結果を移動します。
+この関数は同じクエリで複数の SQL ステートメントがあるときに使用します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Next_Result(MySQL ハンドル)
+
+.. index:: 
+       pair: MySQL 関数; クエリの結果を表示するには
+
+クエリの結果を表示するには
+==========================
+
+この用例はデータベースでクエリを実行後に結果を表示します。
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT Name FROM Employee WHERE Id=1;"+
+                        "SELECT Name FROM Employee WHERE Id=3")
+       see "Print Result" + nl 
+       see mysql_result(con)
+       mysql_next_result(con)
+       see mysql_result(con)
+       see "close database" + nl
+       mysql_close(con)
+
+実行結果:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Print Result
+       Mahmoud
+       Fayed
+       close database
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Columns()
+
+MySQL_Columns() 関数
+====================
+
+MySQL_Columns() 関数はカラム名のリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Columns(MySQL ハンドル) ---> カラムの情報を有するリスト
+
+用例:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT * FROM Employee")
+       see "Result" + nl 
+       see mysql_columns(con)
+       see "Close database" + nl
+       mysql_close(con)
+
+実行結果:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Result
+       Id
+       11
+       3
+       32768
+       Name
+       65535
+       252
+       16
+       Salary
+       11
+       3
+       32768
+       Close database
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Result2()
+
+MySQL_Result2() 関数
+========================
+
+MySQL_Result() でカラム名がないデータの結果を取得するのではなく MySQL_Result2() は、
+カラム名を全て取得した後にクエリの結果を一つのリストにします。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Result2(MySQL ハンドル) ---> リスト (カラム名を除いたクエリの結果)
+
+用例:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       see "Connect to database" + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       see "Execute Query" + nl
+       mysql_query(con, "SELECT * FROM Employee")
+       see "Print Result" + nl 
+       see mysql_result2(con)
+       see "Close database" + nl
+       mysql_close(con)
+
+実行結果:
+
+.. code-block:: ring
+
+       Connect to database
+       Execute Query
+       Print Result
+       Id
+       Name
+       Salary
+       1
+       Mahmoud
+       15000
+       2
+       Samir
+       16000
+       3
+       Fayed
+       17000
+       Close database
+
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Escape_String()
+
+MySQL_Escape_String() 関数
+==========================
+
+MySQL_Escape_String() 関数は処理後に、
+バイナリデータまたは特殊文字をデータベースへ格納します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Escape_String(MySQL ハンドル, cString) ---> 処理後の文字列
+
+.. index:: 
+       pair: MySQL 関数; データベースのイメージを保存するには
+
+データベースのイメージを保存するには
+====================================
+
+用例:
+
+.. code-block:: ring
+
+       See "Read file" + nl
+       cFile = read("tests\mahmoud.jpg")
+       con = mysql_init()
+       See "Connect to database..." + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       See "Escape string..." + nl
+       cFile = mysql_escape_string(con,cFile)
+       stmt = "INSERT INTO photo(id, data) VALUES(1, '" + cFile + "')"
+       See "Insert data..." + nl
+       mysql_query(con,stmt)
+       See "Close database..." + nl
+       mysql_close(con)
+
+実行結果:
+
+.. code-block:: ring
+
+       Read file
+       Connect to database...
+       Escape string...
+       Insert data...
+       Close database...
+
+.. index:: 
+       pair: MySQL 関数; データベースからイメージを復元するには
+
+データベースからイメージを復元するには
+======================================
+
+用例:
+
+.. code-block:: ring
+
+       con = mysql_init()
+       See "Connect to database..." + nl
+       mysql_connect(con, "localhost", "root", "root","mahdb")
+       See "Read data from database..." + nl
+       mysql_query(con,"SELECT data FROM photo WHERE id=1")
+       See "Write new file" + nl
+       result = mysql_result(con)
+       write("tests\mahmoud2.jpg",result[1][1])
+       See "Close database..." + nl
+       mysql_close(con)
+
+実行結果:
+
+.. code-block:: ring
+
+       Connect to database...
+       Read data from database...
+       Write new file
+       Close database...
+
+
+.. index:: 
+       pair: MySQL 関数; MySQL_AutoCommit()
+
+MySQL_AutoCommit() 関数
+=======================
+
+MySQL_AutoCommit() 関数は自動コミット機能の有効、または無効化を指定します。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_AutoCommit(MySQL ハンドル, lStatus)  # lStatus には True または False を指定します。
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Commit()
+
+MySQL_Commit() 関数
+=======================
+
+MySQL_Commit() 関数はデータベースへ更新をコミットします。
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Commit(MySQL ハンドル)
+
+.. index:: 
+       pair: MySQL 関数; MySQL_Rollback()
+
+MySQL_Rollback() 関数
+=========================
+
+MySQL_Rollback() 関数はデータベースのロールバックを更新します。 
+
+文法:
+
+.. code-block:: ring
+
+       MySQL_Rollback(MySQL ハンドル)
+
+.. index:: 
+       pair: MySQL 関数; トランザクションの用例
+
+トランザクションの用例
+======================
+
+この用例では、 MySQL_Autocommit(), MySQL_Commit() および、
+MySQL_RollBack() の用法です。
+
+用例:
+
+.. code-block:: ring
+
+       func main
+       
+               con = mysql_init()
+
+               see "Connect" + nl
+               if mysql_connect(con, "localhost", "root", "root","mahdb") = 0 
+                       system_error(con) ok
+
+               see "Drop table" + nl
+               if mysql_query(con, "DROP TABLE IF EXISTS Employee2") 
+                       system_error(con) ok
+  
+               see "Create table" + nl
+               if mysql_query(con, "CREATE TABLE Employee2(Id INT, Name TEXT, Salary INT)")
+                       system_error(con) ok
+               see "Insert data" + nl 
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(1,'Mahmoud',15000)") 
+                       system_error(con) ok
+  
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(2,'Samir',16000)")
+                       system_error(con) ok
+
+               if mysql_query(con, "INSERT INTO Employee2 VALUES(3,'Fayed',17000)") 
+                       system_error(con) ok
+
+               mysql_autocommit(con,False)
+               mysql_query(con, "INSERT INTO Employee2 VALUES(4,'Ahmed',5000)")
+               mysql_query(con, "INSERT INTO Employee2 VALUES(5,'Ibrahim',50000)")
+               mysql_query(con, "INSERT INTO Employee2 VALUES(6,'Mohammed',50000)")
+               See "Save transaction (y/n) " give nChoice
+               if upper(nChoice) = "Y"
+                       mysql_commit(con)
+               else
+                       mysql_rollback(con)
+               ok
+
+               see "Close connection" + nl
+               mysql_close(con) 
+
+       func system_error con
+
+               see mysql_error(con)
+               mysql_close(con)
+               bye
+
+実行結果:
+
+.. code-block:: ring
+
+       Connect
+       Drop table
+       Create table
+       Insert data
+       Save transaction (y/n) y
+       Close connection
+
diff --git a/docs/ja-jp/source/natural.txt b/docs/ja-jp/source/natural.txt
new file mode 100644 (file)
index 0000000..ca064a0
--- /dev/null
@@ -0,0 +1,626 @@
+.. index:: 
+       single: 自然言語プログラミング; はじめに
+
+======================
+自然言語プログラミング
+======================
+
+プログラミング言語 Ring でクラスとオブジェクトを土台にした自然プログラミング言語を作成できます。
+
+.. index:: 
+       pair: 自然言語プログラミング; 沿革
+
+沿革
+====
+
+2010年にプログラミング言語 Supernova の新規開発で Programming Without Coding Technology (PWCT) を使用しました。
+Supernova は自然言語ステートメントと類似の記法によるコードで GUI アプリケーションを簡単に作成できます。 
+五年後、いまでは同様の成果を Ring で得ることができます。さらに好みや必要に応じて、
+どのような問題領域であっても自然言語ステートメントに類似したコードの作成、使用する能力があります。
+
+Ring は Supernova の精神を受け継いでおり、そのほかにも多種様々な汎用プログラミング言語の精神を受け継いでいます。
+
+.. index:: 
+       pair: 自然言語プログラミング; 用例
+
+用例
+====
+
+この用例は、二つの命令を定義するクラスの作成方法です。
+
+最初の命令は : I want window
+
+次の命令は : Window title = <式>
+
+また ‘the’ などのキーワードは無視します。
+
+.. code-block:: ring
+
+       New App 
+       {
+               I want window   
+               The window title = "hello world"
+       }
+
+       Class App
+
+               # I want window 命令の属性
+                       i want window 
+                       nIwantwindow = 0
+               # Window title 命令の属性
+               # ここで window 属性の再定義を行いません。
+                       title 
+                       nWindowTitle = 0
+               # 値を与えると、キーワードを無視します。
+                       the=0   
+
+               func geti
+                       if nIwantwindow = 0
+                               nIwantwindow++
+                       ok
+
+               func getwant
+                       if nIwantwindow = 1
+                               nIwantwindow++
+                       ok
+
+               func getwindow
+                       if nIwantwindow = 2
+                               nIwantwindow= 0
+                               see "Instruction : I want window" + nl
+                       ok
+                       if nWindowTitle = 0
+                               nWindowTitle++
+                       ok
+       
+               func settitle cValue
+                       if nWindowTitle = 1
+                               nWindowTitle=0
+                               see "Instruction : Window Title = " + cValue + nl
+                       ok
+               
+
+実行結果:
+
+.. code-block:: ring
+
+       Instruction : I want window
+       Instruction : Window Title = hello world
+
+
+.. index:: 
+       pair: 自然言語プログラミング; キーワード‘And’の変更'
+
+キーワード‘And’の変更
+=======================
+
+‘and’で二つの命令同士をつなげたい場合があります。
+
+‘and’ は Ring のキーワードであるため、問題がありますが、
+
+ChangeRingKeyword 命令により変更できます。
+
+文法:
+
+.. code-block:: ring
+       
+       ChangeRingKeyword  <変更元のキーワード>  <変更先のキーワード>
+
+.. note:: キーワードの復元をお忘れなく。
+
+.. tip:: ChangeRingKeyword 命令はコンパイラにより、字句解析段階で実行されます (構文解析の前に)。
+       
+用例:
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+
+       New App
+       {
+                       I want window and the window title = "hello world"
+       }
+
+       Class App
+
+                       # I want window 命令の属性
+                                       i want window
+                                       nIwantwindow = 0
+                       # Window title 命令の属性
+                       # ここで window 属性の再定義を行いません。
+                                       title
+                                       nWindowTitle = 0
+                       # 値を与えると、キーワードは無視されます。
+                                       the=0  and=0
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+                       func getand
+                               see "Using : and" + nl
+
+
+
+実行結果:
+
+.. code-block:: ring
+
+       Instruction : I want window
+       Using : and
+       Instruction : Window Title = hello world
+                       
+
+.. index:: 
+       pair: 自然言語プログラミング; 演算子 ‘+’ の変更
+
+演算子 ‘+’ の変更
+===================
+
+“+”演算子などの演算子へ新しい動作を定義したいときがあります。
+
+この変更は、 ChangeRingOperator 命令を使用することにより、演算子を隠せます (名前自体の変更)。
+
+そして、演算子を識別子としたものを動作として扱うことができます。
+
+文法:
+
+.. code-block:: ring
+       
+       ChangeRingOperator  <変更前の演算子>  <変更後の演算子>
+
+.. note:: キーワードの復元をお忘れなく。
+
+.. tip:: ChangeRingOperator 命令はコンパイラにより、字句解析段階で実行されます (構文解析の前に)。
+       
+用例:
+
+.. code-block:: ring
+
+       ChangeRingOperator + _+
+
+       New App {
+               +
+       }
+
+       Class App
+               + 
+               func get+
+                       see "Plus operator" 
+
+       ChangeRingOperator _+ +
+
+実行結果:
+
+.. code-block:: ring
+
+       Plus operator
+
+.. index:: 
+       pair: 自然言語プログラミング; ‘=’ 演算子を ‘is’ へ変更するには
+
+‘=’ 演算子を ‘is’ へ変更するには
+====================================
+       
+用例:
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+       ChangeRingOperator      =    is
+
+       New App
+       {
+                       I want window and the window title is "hello world"
+       }
+
+       ChangeRingOperator      is    =
+
+       Class App
+
+                       # I want window 命令の属性
+                                       i want window
+                                       nIwantwindow = 0
+                       # Window title 命令の属性
+                       # ここで window 属性の再定義を行いません。
+                                       title
+                                       nWindowTitle = 0
+                       # 値を与えると、キーワードは無視されます。
+                                       the=0  and=0
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func settitle cValue
+                               if nWindowTitle = 1
+                                       nWindowTitle=0
+                                       see "Instruction : Window Title = " + cValue + nl
+                               ok
+
+
+.. index:: 
+       pair: 自然言語プログラミング; Natural コードで Eval() を使うには
+
+自然言語コードで Eval() を使うには
+==================================
+
+用例:
+
+.. code-block:: ring
+
+       func Main
+
+         cProgram = ' I want window and the window title is "hello world" '
+
+         MyLanguage(cProgram)
+
+       Func MyLanguage cCode
+
+         # キーワードと演算子を変更する命令をコードへ追加します。
+         # 理由は Eval() はコンパイラの新しいオブジェクトとして使用されるからです (元のキーワードと演算子)。
+         
+         cCode = '
+               ChangeRingKeyword  and  _and
+               ChangeRingOperator  =    is
+         ' + cCode
+
+         New App
+         {
+                 eval(cCode)
+         }
+
+
+         Class App
+
+                 # I want window 命令の属性
+                         i want window
+                         nIwantwindow = 0
+                 # Window title 命令の属性
+                 # ここで window 属性の再定義を行いません。
+                         title
+                         nWindowTitle = 0
+                 # 値を与えると、キーワードは無視されます。
+                         the=0  
+
+                 ChangeRingKeyword  and  _and
+                         and=0
+                 ChangeRingKeyword  _and  and
+
+                 func geti
+                       if nIwantwindow = 0
+                         nIwantwindow++
+                       ok
+
+                 func getwant
+                       if nIwantwindow = 1
+                         nIwantwindow++
+                       ok
+
+                 func getwindow
+                       if nIwantwindow = 2
+                         nIwantwindow= 0
+                         see "Instruction : I want window" + nl
+                       ok
+                       if nWindowTitle = 0
+                         nWindowTitle++
+                       ok
+
+                 func settitle cValue
+                       if nWindowTitle = 1
+                         nWindowTitle=0
+                         see "Instruction : Window Title = " + cValue + nl
+                       ok
+
+               
+.. index:: 
+       pair: 自然言語プログラミング; BraceStart と BraceEnd メソッド
+
+BraceStart と BraceEnd メソッド
+===============================
+
+{ } の使用前後で実行されるコードを記述できます。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new test {
+               see "Hello" + nl
+       }
+
+       o1 {}
+
+       class test
+
+               func bracestart
+                       see "start" + nl
+
+               func braceend
+                       see "end" + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       start
+       Hello
+       end
+       start
+       end
+
+
+.. index:: 
+       pair: 自然言語プログラミング; BraceExprEval メソッド
+
+BraceExprEval メソッド
+======================
+
+この用例は、 “BraceExprEval”メソッドで自然言語コードの式を取得するための用法です。
+
+用例:
+
+.. code-block:: ring
+
+       new natural {
+               create 5
+       }
+
+       class natural
+               create=0
+               lkeyword = false
+               func braceexpreval r            
+                       if lkeyword lkeyword=false return ok
+                       see "expr eval" + nl
+                       see "type: " + type(r) see nl
+                       see "value : " see r see nl
+               func getcreate
+                       lkeyword = true
+                       see "create" + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       create
+       expr eval
+       type: NUMBER
+       value : 5
+
+.. index:: 
+       pair: 自然言語プログラミング; 本物の自然言語コード
+
+本物の自然言語コード
+====================
+
+この用例は、より高度です。
+
+.. code-block:: ring
+
+       # 自然言語コード
+       new program {
+               Accept 2 numbers then print the sum
+       }
+
+       # 自然言語コードの実装
+       class program
+               # キーワード
+                       Accept=0 numbers=0 then=0 print=0 the=0 sum=0
+
+               # 実行
+               func braceexpreval x
+                       value = x
+               func getnumbers
+                       for x=1 to value
+                               see "Enter Number ("+x+") :" give nNumber
+                               aNumbers + nNumber
+                       next
+               func getsum
+                       nSUm = 0
+                       for x in aNumbers nSum+= x next
+                       see "The Sum : " + nSum
+               private
+                       value=0 aNumbers=[]
+               
+実行結果: 
+
+.. code-block:: ring
+
+       Enter Number (1) :3
+       Enter Number (2) :4
+       The Sum : 7
+
+.. index:: 
+       pair: 自然言語プログラミング; BraceError() メソッド
+
+BraceError() メソッド
+=====================
+
+この用例は、 “BraceError” メソッドで括弧 { } を用いてオブジェクトへアクセスした時の
+エラー処理の用法です。
+
+用例:
+
+.. code-block:: ring
+
+       func main
+               o1 = new point {
+                       x=10 y=20 z=30
+                       TEST
+                       SEE test
+               }
+
+       class point x y z
+               func braceerror
+                       see "Handle Error!" + nl
+                       SEE "Message :" + cCatchError + nl
+                       if ( left(cCatchError,11) = "Error (R24)" ) and not isattribute(self,"test")
+                               see "add attribute" + nl
+                               addattribute(self,"test")
+                               test = 10
+                       ok
+                       see "done" + nl
+                       return 
+                       
+実行結果:
+
+.. code-block:: ring
+
+       Handle Error!
+       Message :Error (R24) : Using uninitialized variable : test
+       add attribute
+       done
+       10
+       
+用例:
+
+.. code-block:: ring
+
+       new point {
+               x=10 y=20 z=30
+               test()
+               see "mmm..." + NL
+       }
+
+       class point x y z
+               func braceerror
+                       see "Handle Error!" + nl
+                       see "Message :" + cCatchError + nl
+                       see self
+                       see "Done" + NL
+                       
+実行結果:
+
+.. code-block:: ring
+
+       Handle Error!
+       Message :Error (R3) : Calling Function without definition !: test
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       Done
+       mmm...
+       
+.. index:: 
+       pair: 自然言語プログラミング; 美しい自然言語コード
+
+美しい自然言語コード
+====================
+
+“literal”としてリテラルを入力する代わりに直接単語を受け入れることができます。
+
+用例:
+
+この用例では、“hello world”の代わりに hello world を受け入れます。
+
+この用例では、命令の終了を確認するために braceend() を使用しています。
+
+このクラスではリテラルで終了する自然言語命令のみ処理します。
+
+.. code-block:: ring
+
+       ChangeRingKeyword       and  _and
+
+       New App
+       {
+                       I want window and the window title is hello world
+       }
+
+       Class App
+
+                       # I want window 命令の属性
+                                       i want window
+                                       nIwantwindow = 0
+                       # Window title 命令の属性
+                       # ここで window 属性の再定義を行いません。
+                                       title is 
+                                       nWindowTitle = 0
+                       # 値を与えると、キーワードは無視されます。
+                                       the=0  and=0
+                       # データ
+                                       literal = ""
+
+       ChangeRingKeyword       _and  and
+
+                       func geti
+                               if nIwantwindow = 0
+                                       nIwantwindow++
+                               ok
+
+                       func getwant
+                               if nIwantwindow = 1
+                                       nIwantwindow++
+                               ok
+
+                       func getwindow
+                               if nIwantwindow = 2
+                                       nIwantwindow= 0
+                                       see "Instruction : I want window" + nl
+                               ok
+                               if nWindowTitle = 0
+                                       nWindowTitle++
+                               ok
+
+                       func gettitle
+                               if nWindowTitle = 1
+                                       nWindowTitle=2
+                               ok
+                       
+                       func getis
+                               if nWindowTitle = 2
+                                       nWindowTitle=3
+                               ok                      
+
+                       func braceend
+                               if nWindowTitle = 3
+                                       see "Instruction : Window Title = " + literal + nl
+                                       nWindowTitle = 0
+                               ok
+
+                       func braceerror
+                               c= substr(cCatchError,":")
+                               while c > 0 
+                                       c= substr(cCatchError,":") 
+                                       cCatchError=substr(cCatchError,c+1)  
+                               end
+                               literal += substr(cCatchError,1)
diff --git a/docs/ja-jp/source/naturallibrary.txt b/docs/ja-jp/source/naturallibrary.txt
new file mode 100644 (file)
index 0000000..0a74f5e
--- /dev/null
@@ -0,0 +1,444 @@
+.. index:: 
+       single: 自然言語ライブラリの用法; はじめに
+
+========================
+自然言語ライブラリの用法
+========================
+
+命令グループのある言語を手軽に定義するために、自然言語ライブラリの用法を学びます。
+
+自然言語ライブラリの使用前に naturallib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "naturallib.ring"
+
+ライブラリの読み込み後、このメソッドで自然言語を使えます。
+
+* SetLanguageName(cLanguageName)
+* setCommandsPath(cFolder)
+* SetPackageName(cPackageName)
+* UseCommand(cCommandName)
+* SetOperators(cOperators)
+* RunFile(cFileName)
+* RunString(cString)
+
+.. index:: 
+       pair: 自然言語ライブラリの用法; 自然言語ライブラリ - デモプログラム
+
+自然言語ライブラリ - デモプログラム
+===================================
+
+例えば、テキストファイル program.txt に自然言語コードを記述します。
+
+ファイル: program.txt
+
+.. code-block:: none
+
+       Welcome to the Ring programming language!
+       What you are reading now is not comments, I swear!
+
+       After many years of programming I decided to think different about
+       programming and solve the problems in a better way. 
+
+       We are writing commands or code and the Ring language is reading
+       it to understand us! Sure, What you are seeing now is
+       just ***part of the code - Not the Complete Program***
+       You have to write little things before and after this 
+       part to be able to run it!
+
+       It is the natural part of our code where we can write in English, 
+       Arabic or any Natural Language Then we will tell the computer 
+       through the Ring language what must happens! in a way that we can scale 
+       for large frameworks and programs.
+
+       Just imagine what will happens to the world of programming once
+       we create many powerful frameworks using the Ring language that
+       uses this way (Natural Programming).
+
+       For example When we say Hello to the Machine, It can reply! and when we
+       say count from 1 to 5 it will understand us, Also if 
+       we said count from 5 to 1 it will
+       understand us too! You can see the Output window!
+
+       This Goal is not new, but the Ring language comes
+       with an innovative solution to this problem.    
+
+実行結果:
+
+.. code-block:: none
+
+       Hello, Sir!
+
+
+       The Numbers!
+
+       1
+
+       2
+
+       3
+
+       4
+
+       5
+
+       I will count Again!
+
+       5
+
+       4
+
+       3
+
+       2
+
+       1
+
+
+自然言語コードを実行するには start.ring が必要です。
+
+start.ring には言語と命令を定義します。
+
+ファイル: start.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               SetCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               RunFile("program.txt")
+       }
+
+
+これで MyLanguage 言語名は定義済みになり、言語命令用のフォルダが指定されます。
+
+各命令は MyLanguage.Natural パッケージにあるクラスとして定義されています。
+
+Hello と Count の二つの命令を定義しています。
+
+CurrentDir()+”/../command” フォルダで命令を定義するために二つのファイルが必要です。
+
+ファイル: hello.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeyword([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :hello, 
+               :Function = func {
+                       See  "Hello, Sir!" + nl + nl
+               }
+       ])
+
+ファイル: count.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordNumberNumber([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :count, 
+               :Function = func {
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
+               }
+       ])
+
+
+.. index:: 
+       pair: 自然言語ライブラリの用法; 命令の定義
+
+命令の定義
+==========
+
+DefineNaturalCommand オブジェクトで新しい命令を定義します。
+
+このオブジェクトでは、下記のメソッドが使えます。
+
+* SyntaxIsKeyword(aPara)
+* SyntaxIsKeywordNumber(aPara)
+* SyntaxIsKeywordNumberNumber(aPara)
+* SyntaxIsKeywordNumbers(aPara,nCount)
+* SyntaxIsKeywordString(aPara)
+* SyntaxIsKeywordStringString(aPara)
+* SyntaxIsKeywordStrings(aPara,nCount)
+* SyntaxIsKeywordExpression(aPara)
+* SyntaxIsKeywordExpressionExpression(aPara)
+* SyntaxIsKeywordExpressions(aPara,nCount)
+* SyntaxIsCommand(aPara)
+* SyntaxIsCommandNumber(aPara)
+* SyntaxIsCommandNumberNumber(aPara)
+* SyntaxIsCommandNumbers(aPara,nCount)
+* SyntaxIsCommandString(aPara)
+* SyntaxIsCommandStringString(aPara)
+* SyntaxIsCommandStrings(aPara,nCount)
+* SyntaxIsCommandExpression(aPara)
+* SyntaxIsCommandExpressionExpression(aPara)
+* SyntaxIsCommandExpressions(aPara,nCount)
+
+ファイル: mylanguage.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       MyLanguage = New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               SetCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               UseCommand(:Print)
+               UseCommand(:IWantWindow)
+               UseCommand(:WindowTitleIs)
+               UseCommand(:IWantButton)
+       }
+
+
+用例①
+
+この用例では、 Print 命令を定義します。
+
+SyntaxIsKeywordExpression() メソッドを使用します。
+
+メソッドにはリスト (ハッシュとして) を渡します。
+実行するパッケージ名、キーワード、および関数を決定します。
+
+この関数の内側で使用する Expr(nExprNumber) 関数はユーザがキーワードの後に記述する式の値を取得します。
+
+ファイル: print.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordExpression([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :print, 
+               :Function = func {
+                       See  Expr(1)  
+               }
+       ])
+
+用法:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               print "Hello, World!"
+       ')
+
+実行結果:
+
+.. code-block:: none
+
+       Hello, World!
+
+用例②
+
+ファイル: iwantwindow.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsCommand([
+               :Package = "MyLanguage.Natural",
+               :Command = "i want window", 
+               :Function = func {
+                       See  "Command: I want window" + nl
+               }
+       ])
+
+用法:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               i want window
+       ')
+
+実行結果:
+
+.. code-block:: none
+
+       Command: I want window
+
+用例③
+
+ファイル: windowtitleis.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsCommandString([
+               :Package = "MyLanguage.Natural",
+               :Command = "window title is", 
+               :Function = func {
+                       See  "Command: Window title is " + Expr(1) + nl
+               }       
+       ])
+
+用法:
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString('
+               I want window and the window title is "Hello World"
+       ')
+
+実行結果:
+
+.. code-block:: none
+
+       Command: I want window
+       Command: Window title is Hello World
+
+
+.. index:: 
+       pair: 自然言語ライブラリの用法; 演算子
+
+自然言語ライブラリ - 演算子
+===========================
+
+この用例は演算子ではなく Count 命令を使用しています。
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString("
+               Hello   
+               Count 1 5
+               Count 5 1
+       ")
+
+詳述すると、
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage.RunString("
+               Hello, Please   Count from 1 to 5 then count from 5 to 1
+       ")
+
+また、命令は “(” や ”)” などの演算子で囲むことができます。
+
+.. code-block:: ring
+
+       load "mylanguage.ring"
+
+       MyLanguage {
+               SetOperators("()")
+               RunString("
+                       Here we will play and will try something
+                       that looks like Lisp Syntax
+                       (count  (count 1 5)  (count 20 15))
+                       Just for fun!
+               ")
+       }
+
+
+.. index:: 
+       pair: 自然言語ライブラリの用法; クラスによる命令の定義
+
+クラスによる命令の定義
+======================
+
+本章は詳細な実装と関係があります。
+
+新しい命令を定義するとき、各命令は自然言語ライブラリにより、クラスとして定義されます。
+
+DefineNaturalCommand オブジェクト、またはこの用例のように、新しいクラスの定義することで使える単純明快なインタフェースでコマンドを定義する選択肢があります。
+
+DefineNaturalCommand (最も簡単な方法) は実行時にクラスを定義します。
+
+ファイル: hello.ring
+
+.. code-block:: ring
+
+       Package MyLanguage.Natural
+
+       class Hello
+
+               func AddAttributes_Hello        
+                       AddAttribute(self,:hello)
+
+               func GetHello   
+                       See  "Hello, Sir!" + nl + nl
+
+
+ファイル: count.ring
+
+.. code-block:: ring
+
+       Package MyLanguage.Natural
+
+       class Count
+           
+               func Getcount
+                       StartCommand()
+                       CommandData()[:name] = :Count
+                       CommandData()[:nExpr] = 0
+                       CommandData()[:aExpr] = []
+
+               func BraceExprEval_Count nValue
+                       if isCommand() and CommandData()[:name] = :Count {
+                               if isNumber(nValue) {
+                                       CommandData()[:nExpr]++     
+                                       CommandData()[:aExpr] + nValue
+                                       if CommandData()[:nExpr] = 2 {
+                                               Count_Execute()
+                                       }
+                               }
+                       }
+
+               func AddAttributes_Count        
+                       AddAttribute(self,:count)
+       
+               func Count_Execute
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
diff --git a/docs/ja-jp/source/newcalc.png b/docs/ja-jp/source/newcalc.png
new file mode 100644 (file)
index 0000000..f355727
Binary files /dev/null and b/docs/ja-jp/source/newcalc.png differ
diff --git a/docs/ja-jp/source/newcalc2.png b/docs/ja-jp/source/newcalc2.png
new file mode 100644 (file)
index 0000000..ee536ed
Binary files /dev/null and b/docs/ja-jp/source/newcalc2.png differ
diff --git a/docs/ja-jp/source/number2words.png b/docs/ja-jp/source/number2words.png
new file mode 100644 (file)
index 0000000..9ec07c6
Binary files /dev/null and b/docs/ja-jp/source/number2words.png differ
diff --git a/docs/ja-jp/source/objects.inv b/docs/ja-jp/source/objects.inv
new file mode 100644 (file)
index 0000000..1cffc9c
Binary files /dev/null and b/docs/ja-jp/source/objects.inv differ
diff --git a/docs/ja-jp/source/objectslib1.png b/docs/ja-jp/source/objectslib1.png
new file mode 100644 (file)
index 0000000..9325d2b
Binary files /dev/null and b/docs/ja-jp/source/objectslib1.png differ
diff --git a/docs/ja-jp/source/objectslib2.png b/docs/ja-jp/source/objectslib2.png
new file mode 100644 (file)
index 0000000..7c697a5
Binary files /dev/null and b/docs/ja-jp/source/objectslib2.png differ
diff --git a/docs/ja-jp/source/odbc.txt b/docs/ja-jp/source/odbc.txt
new file mode 100644 (file)
index 0000000..6134db4
--- /dev/null
@@ -0,0 +1,565 @@
+.. index:: 
+       single: ODBC 関数; はじめに
+
+=========
+ODBC 関数
+=========
+
+ODBC 関数の用法を学びます。
+
+* odbc_init()
+* odbc_drivers()
+* odbc_datasources()
+* odbc_close()
+* odbc_connect()
+* odbc_disconnect()
+* odbc_execute()
+* odbc_colcount()
+* odbc_fetch()
+* odbc_getdata()
+* odbc_tables()
+* odbc_columns()
+* odbc_autocommit()
+* odbc_commit()
+* odbc_rollback()
+
+この関数の使用前に odbclib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "odbclib.ring"
+       # ODBC 関数の使用
+
+.. index:: 
+       pair: ODBC 関数; odbc_init()
+
+odbc_init() 関数
+================
+
+odbc_init() 関数はハンドルを作成します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_init() ---> ODBC ハンドル
+
+.. index:: 
+       pair: ODBC 関数; odbc_drivers()
+
+odbc_drivers() 関数
+===================
+
+odbc_drivers() 関数は ODBC ドライバのリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_drivers(ODBC ハンドル) ---> ドライバのリスト
+
+.. index:: 
+       pair: ODBC 関数; odbc_datasources()
+
+odbc_datasources() 関数
+=======================
+
+odbc_datasources() 関数は ODBC データソースのリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_datasources(ODBC ハンドル) ---> データソースのリスト
+
+.. index:: 
+       pair: ODBC 関数; odbc_close()
+
+odbc_close() 関数
+=================
+
+ODBC_Close() 関数は ODBC 関数の使用終了後にリソースを解放します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_close(ODBC ハンドル)
+
+.. index:: 
+       pair: ODBC 関数; ODBC ドライバのリストを表示
+
+ODBC ドライバのリストを表示
+===========================
+
+この用例は ODBC ドライバのリストを表示します。
+
+.. code-block:: ring
+
+       See "ODBC test 1" + nl
+       oODBC = odbc_init()
+       See "Drivers " + nl
+       see odbc_drivers(oODBC)
+       odbc_close(oODBC)
+
+実行結果:
+
+.. code-block:: ring
+
+       ODBC test 1
+       Drivers
+       Microsoft Access-Treiber (*.mdb) - SQLLevel=0
+       Driver do Microsoft Paradox (*.db ) - SQLLevel=0
+       Driver do Microsoft Excel(*.xls) - SQLLevel=0
+       Microsoft Text Driver (*.txt; *.csv) - SQLLevel=0
+       Driver da Microsoft para arquivos texto (*.txt; *.csv) - SQLLevel=0
+       Microsoft dBase-Treiber (*.dbf) - SQLLevel=0
+       SQL Server - CPTimeout=60
+       Microsoft Excel Driver (*.xls) - SQLLevel=0
+       Driver do Microsoft dBase (*.dbf) - SQLLevel=0
+       Microsoft Paradox-Treiber (*.db ) - SQLLevel=0
+       Microsoft ODBC for Oracle - CPTimeout=120
+       Microsoft Text-Treiber (*.txt; *.csv) - SQLLevel=0
+       Microsoft Excel-Treiber (*.xls) - SQLLevel=0
+       Microsoft Access Driver (*.mdb) - SQLLevel=0
+       Driver do Microsoft Access (*.mdb) - SQLLevel=0
+       Microsoft Paradox Driver (*.db ) - SQLLevel=0
+       Microsoft dBase Driver (*.dbf) - SQLLevel=0
+       Microsoft Access Driver (*.mdb, *.accdb) - UsageCount=3
+       Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) - UsageCount=3
+       Microsoft Access Text Driver (*.txt, *.csv) - UsageCount=3
+       SQL Server Native Client 10.0 - UsageCount=1
+       SQL Server Native Client 11.0 - UsageCount=1
+       Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) - UsageCount=3
+       Microsoft Access Paradox Driver (*.db) - UsageCount=3
+       MySQL ODBC 5.3 ANSI Driver - UsageCount=1
+       MySQL ODBC 5.3 Unicode Driver - UsageCount=1
+       ODBC Driver 11 for SQL Server - UsageCount=1
+       Lianja ODBC Driver - CPTimeout=60
+       Microsoft Visual FoxPro Driver - UsageCount=1
+       Microsoft Visual FoxPro-Treiber - UsageCount=1
+       Driver para o Microsoft Visual FoxPro - UsageCount=1
+       Microsoft FoxPro VFP Driver (*.dbf) - UsageCount=1
+
+.. index:: 
+       pair: ODBC 関数; ODBC データソースのリストを表示
+
+ODBC データソースのリストを表示
+===============================
+
+この用例は ODBC データソースのリストを表示します。
+
+.. code-block:: ring
+
+       See "ODBC test 2" + nl
+       pODBC = odbc_init()
+       See "Data Sources " + nl
+       see odbc_datasources(pODBC)
+       odbc_close(pODBC)
+
+実行結果:
+
+.. code-block:: ring
+
+       ODBC test 2
+       Data Sources
+       Excel Files - Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
+       MS Access Database - Microsoft Access Driver (*.mdb, *.accdb)
+       Customer - Microsoft Access Driver (*.mdb)
+       IdCardData - Microsoft Access Driver (*.mdb)
+       MyProjectData2 - Microsoft Access Driver (*.mdb)
+       MyData - Microsoft Access Driver (*.mdb)
+       MonprojetData - Microsoft Access Driver (*.mdb)
+       dBASE Files - Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)
+       myvfpdata - Microsoft Visual FoxPro Driver
+       FACTORYDATA - Microsoft Access Driver (*.mdb)
+       TRAININGSYSDATA - Microsoft Access Driver (*.mdb)
+       RVCSYSDATASQLDB - SQL Server Native Client 11.0
+       PWCTRVCDATA - Microsoft Access Driver (*.mdb)
+       MyCompany - Microsoft Access Driver (*.mdb)
+       HCS - Microsoft Access Driver (*.mdb)
+       HCS2 - Microsoft Access Driver (*.mdb, *.accdb)
+       MyProjectData - Microsoft Access Driver (*.mdb)
+       Xtreme Sample Database 2008 - Microsoft Access Driver (*.mdb)
+       Lianja_Southwind - Lianja ODBC Driver
+       Visual FoxPro Database - Microsoft Visual FoxPro Driver
+       Visual FoxPro Tables - Microsoft Visual FoxPro Driver
+
+.. index:: 
+       pair: ODBC 関数; odbc_connect()
+
+odbc_connect() 関数
+===================
+
+odbc_connect() 関数はデータベースへ接続します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_connect(ODBC ハンドル, cConnectionString)
+
+.. index:: 
+       pair: ODBC 関数; odbc_disconnect()
+
+odbc_disconnect() 関数
+======================
+
+odbc_disconnect() 関数はデータベースの接続を閉じます。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_disconnect(ODBC ハンドル)
+
+.. index:: 
+       pair: ODBC 関数; 接続の開始と終了
+
+接続の開始と終了
+================
+
+この用例はデータベースへ接続後にデータベースへの接続を閉じます。
+
+.. code-block:: ring
+
+       See "ODBC test 3" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "disconnect" + nl
+       odbc_disconnect(pODBC)
+       See "Close database..." + nl
+       odbc_close(pODBC)
+
+実行結果:
+
+.. code-block:: ring
+
+       ODBC test 3
+       Connect to database
+       1
+       disconnect
+       Close database...
+
+.. index:: 
+       pair: ODBC 関数; odbc_execute()
+
+odbc_execute() 関数
+===================
+
+odbc_execute() 関数はデータベースで SQL ステートメントを実行します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_execute(ODBC ハンドル, cSQLStatement)
+
+.. index:: 
+       pair: ODBC 関数; odbc_colcount()
+
+odbc_colcount() 関数
+====================
+
+odbc_colcount() 関数はクエリの結果にあるカラム数を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_colcount(ODBC ハンドル) ---> 数値によるカラム数
+
+.. index:: 
+       pair: ODBC 関数; odbc_fetch()
+
+odbc_fetch() 関数
+=================
+
+odbc_fetch() 関数はクエリ結果から列をフェッチします。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_fetch(ODBC ハンドル)
+
+.. index:: 
+       pair: ODBC 関数; odbc_getdata()
+
+odbc_getdata() 関数
+===================
+
+odbc_getdata() 関数はフェッチ済みの列からカラム値を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_getdata(ODBC ハンドル, nColumnNumber) ---> カラムの値
+
+.. index:: 
+       pair: ODBC 関数; クエリの実行と結果の表示
+
+クエリの実行と結果の表示
+========================
+
+この用例はクエリの実行後にクエリの結果を表示します。
+
+.. code-block:: ring
+
+       See "ODBC test 4" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from person") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               See "Row data:" + nl
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) + " - "
+               next
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+.. index:: 
+       pair: ODBC 関数; odbc_tables()
+
+odbc_tables() 関数
+==================
+
+odbc_tables() 関数はテーブル内にあるテーブルのリストを取得します。
+
+この関数の結果はクエリ結果を取得するときにアクセスできます。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_tables(ODBC ハンドル)
+
+用例:
+
+.. code-block:: ring
+
+       See "ODBC test - Get Database Tables" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       odbc_tables(pODBC) + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       while odbc_fetch(pODBC)
+               for x = 1 to nMax
+                       see odbc_getdata(pODBC,x) 
+                       if x != nMax see " - " ok
+               next
+               See nl
+       end
+       See "Close database..." 
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+実行結果:
+
+.. code-block:: ring
+
+       ODBC test - Get Database Tables
+       Connect to database
+       Select data
+       Columns Count : 5
+       .\test - NULL - Customer - TABLE - NULL
+       .\test - NULL - employee - TABLE - NULL
+       .\test - NULL - person - TABLE - NULL
+       .\test - NULL - tel - TABLE - NULL
+       Close database...
+
+.. index:: 
+       pair: ODBC 関数; odbc_columns()
+
+odbc_columns() 関数
+===================
+
+odbc_columns() 関数はテーブル内にあるカラムのリストを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_columns(ODBC ハンドル, cTableName)
+
+用例:
+
+.. code-block:: ring
+
+       See "ODBC test - Get Table Columns" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Get Columns inside the Person Table" + nl
+       odbc_columns(pODBC,"person") + nl
+       while odbc_fetch(pODBC)
+               see odbc_getdata(pODBC,4) + nl
+       end
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+実行結果:
+
+.. code-block:: ring
+
+       ODBC test - Get Table Columns
+       Connect to database
+       Get Columns inside the Person Table
+       FIRST
+       LAST
+       STREET
+       CITY
+       STATE
+       ZIP
+       HIREDATE
+       MARRIED
+       AGE
+       SALARY
+       NOTES
+       Close database...
+
+.. index:: 
+       pair: ODBC 関数; odbc_autocommit()
+
+odbc_autocommit() 関数
+======================
+
+odbc_autocommit() 関数は自動コミット機能を有効または無効化します。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_autocommit(ODBC ハンドル, lStatus)   # lStatus には True または False を指定できます。
+
+
+.. index:: 
+       pair: ODBC 関数; odbc_commit()
+
+odbc_commit() 関数
+======================
+
+odbc_commit() 関数はデータベースのコミット更新をします。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_commit(ODBC ハンドル)
+
+.. index:: 
+       pair: ODBC 関数; odbc_rollback()
+
+odbc_rollback() 関数
+====================
+
+odbc_rollback() 関数はデータベースのロールバック更新をします。
+
+文法:
+
+.. code-block:: ring
+
+       odbc_rollback(ODBC ハンドル)
+
+.. index:: 
+       pair: ODBC 関数; トランザクションおよびコミットとロールバックの用法
+
+トランザクションおよびコミットとロールバックの用法
+======================================================
+
+用例:
+
+.. code-block:: ring
+
+       See "ODBC Test - Transactions and using Commit and Rollback" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       see "insert data..." + nl
+       odbc_autocommit(pODBC,0)
+       for x = 1 to 10000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'mahmoud')")
+       next
+       for x = 10001 to 15000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'samir')")
+       next
+       odbc_commit(pODBC)
+
+       for x = 15001 to 20000
+               odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
+       next
+
+       ODBC_ROLLBACK(pODBC)
+       odbc_execute(pODBC,"insert into tel values (" + x + ",'fayed')")
+       odbc_commit(pODBC)
+
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+実行結果:
+
+.. code-block:: ring
+
+       ODBC Test - Transactions and using Commit and Rollback
+       Connect to database
+       1
+       insert data...
+       Close database...
+
+.. index:: 
+       pair: ODBC 関数; イメージの保存と復元
+
+イメージの保存と復元
+====================
+
+この用例ではデータベースのイメージを保存します。
+
+.. code-block:: ring
+
+       See "ODBC test - Save image in the database" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       see "Read Image File..." + nl
+       cFile = str2hex(read("tests\mahmoud.jpg"))
+       see "size " + len(CFile)+nl
+       see "Save image in the database..." + nl
+       stmt = "insert into tel values (20000,'mahmoud','" + cFile + "');"
+       odbc_execute(pODBC,stmt)
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
+この用例ではデータベースのイメージを復元します。
+
+.. code-block:: ring
+
+       See "ODBC Test - Restore image from the database" + nl
+       pODBC = odbc_init()
+       See "Connect to database" + nl
+       see odbc_connect(pODBC,"DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+       See "Select data" + nl
+       see odbc_execute(pODBC,"select * from tel where id = 20000") + nl
+       nMax = odbc_colcount(pODBC)
+       See "Columns Count : " + nMax + nl
+       if odbc_fetch(pODBC)
+               See "Write image file" + nl
+               write("tests\great.jpg",hex2str( odbc_getdata(pODBC,3) ) )
+       ok
+       See "Close database..." + nl
+       odbc_disconnect(pODBC)
+       odbc_close(pODBC)
+
diff --git a/docs/ja-jp/source/oop.txt b/docs/ja-jp/source/oop.txt
new file mode 100644 (file)
index 0000000..90c922e
--- /dev/null
@@ -0,0 +1,1050 @@
+.. index:: 
+       single: オブジェクト指向プログラミング (OOP); はじめに
+
+====================================
+オブジェクト指向プログラミング (OOP)
+====================================
+
+Ring でオブジェクト指向プログラミングのパラダイムを扱う方法を学びます。
+
+* クラスとオブジェクト
+* 括弧を用いたオブジェクトへのアクセス
+* コンポジション
+* Setter と Getter
+* プライベート属性とメソッド
+* 演算子のオーバーロード
+* 継承
+* 動的属性
+* パッケージ
+* オブジェクトの表示
+* Find() とオブジェクトのリスト
+* Sort() とオブジェクトのリスト
+* Self.属性 および Self.メソッド() の用法
+* This.属性 および This.メソッド() の用法
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); クラスとオブジェクト
+
+
+クラスとオブジェクト
+====================
+
+このシンタックスで新しいクラスを定義できます。
+
+文法:
+
+.. code-block:: ring
+
+       Class <クラス名> [From|<|: <親クラス名>]
+               [属性]
+               [メソッド]
+               [Private
+                 [属性]
+                 [メソッド]
+                ]
+
+また、このシンタックスでオブジェクトを作成できます。
+
+文法:
+
+.. code-block:: ring
+
+       New <オブジェクト名> [ (init メソッドの仮引数) ] |
+       [ { オブジェクトのデータ、およびメソッドへのアクセス } ]   ---> オブジェクト
+
+用例:
+
+.. code-block:: ring
+
+       New point { x=10  y=20  z=30  print() }
+       Class Point x y z func print see x + nl + y + nl + z + nl 
+
+.. note:: { } でオブジェクトのデータとメソッドへアクセスできます。
+
+.. tip:: クラス名の直後にクラスの属性を宣言できます。
+
+実行結果:
+
+.. code-block:: ring
+
+       10
+       20
+       30
+
+別の記法で同じプログラムを書き直せます。
+
+.. code-block:: ring
+
+       New point                       # point クラスで新しいオブジェクトを作成
+       {                               # 新しいオブジェクトの属性、およびメソッドへのアクセス
+               x = 10                  # 属性 x へ 10 を設定
+               y = 20                  # 属性 y へ 20 を設定
+               z = 30                  # 属性 z へ 30 を設定
+               print()                 # print メソッドの呼び出し
+       }                               # オブジェクトのアクセスを終了
+       
+       
+       Class Point                    # Point クラスの定義
+               x y z                   # クラスには属性 x, y および z があります。
+               func print             # print メソッドの定義
+                       see x + nl +   # 属性 x の表示
+                       y + nl +       # 属性 y の表示
+                       z + nl         # 属性 z の表示
+
+
+また、別の方法で同じプログラムを書くことができます。
+
+.. code-block:: ring
+
+       P1 = New Point
+       P1.x = 10
+       P1.y = 20
+       P1.z = 30
+       P1.Print()
+       Class Point x y z func print see x + nl + y + nl + z + nl       
+
+.. note:: オブジェクト名の直後にドット演算子を用いるとオブジェクトのメンバへアクセスできます。
+
+また、別の方法で同じプログラムを書くことができます。
+
+.. code-block:: ring
+
+       new point { print() }   
+       Class Point
+               x = 10  y = 20  z = 30
+               func print see x + nl + y + nl + z + nl
+
+.. note:: クラスの属性を宣言する時にクラスの属性へデフォルトの値を設定できます。
+
+また、別の方法で同じプログラムを書くことができます。
+
+.. code-block:: ring
+
+       new point(10,20,30)
+       Class Point
+               x y z 
+               func init p1,p2,p3 x=p1 y=p2 z=p3 print()
+               func print see x + nl + y + nl + z + nl
+
+.. note:: 新しいオブジェクトを作成するときに () を用いる init メソッドを直接呼び出せます。
+
+また、別の方法で同じプログラムを書くことができます。
+
+.. code-block:: ring
+
+       new point( [ :x = 10 , :y = 20 , :z = 30 ] )
+       Class Point x y z
+             func init aPara x = aPara[:x] y = aPara[:y] z = aPara[:z] print()
+             func print see x + nl + y + nl + z + nl
+
+.. tip:: メソッドの仮引数を渡すためにハッシュを使用する場合は、
+         オプションの仮引数の作成時、およびハッシュへ追加時は仮引数の順序を変更できます。
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); 括弧を用いたオブジェクトへのアクセス
+
+括弧を用いたオブジェクトへのアクセス
+====================================
+
+括弧 { } で、いつでもオブジェクトへアクセスできます。
+
+括弧内ではオブジェクトの属性とメソッドを直接使えます。
+
+これは New キーワードによるオブジェクトの作成、またはこのシンタックスを必要なときに使えます。
+
+.. code-block:: ring
+
+       オブジェクト名 { オブジェクトのデータ、およびメソッドへのアクセス }
+
+用例:
+
+.. code-block:: ring
+
+       See "Creating the Object" + nl
+       o1 = new Point
+       See "Using the Object" + nl
+       o1 {
+               x=5     
+               y=15
+               z=25    
+               print()
+       }
+       Class Point x y z func print see x + nl + y + nl + z 
+
+括弧は関数、またはメソッドの呼び出し時にオブジェクトへアクセスするために使えます。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new Point
+
+       print( o1 { x=10 y=20 z=30 } )
+       
+       func print object
+               see object.x + nl + 
+                   object.y + nl + 
+                   object.z 
+
+       Class Point x y z
+
+括弧とドット演算子を併用して同じ式のオブジェクトへアクセスできます。
+
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new Point
+
+       O1 { x=10 y=20 z=30 }.print()
+       
+       Class Point x y z
+               func print see x + nl + y + nl + z
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); コンポジション
+
+コンポジション
+==============
+
+オブジェクトでは、ほかのオブジェクトの属性を所有できます。
+
+アクセスしたいオブジェクトを括弧で入れ子にすることで実現できます。
+
+用例:
+
+.. code-block:: ring
+
+       R1 = New Rectangle 
+       {
+
+               Name = "Rectangle 1"
+
+               P1 
+               {
+                       X = 10
+                       Y = 20
+               }
+
+               P2 
+               {
+                       X = 200
+                       Y = 300
+               }       
+
+               Color = "Blue"
+
+       }
+       
+       see "Name : " + R1.Name + nl +
+           "Color: " + R1.Color + nl +
+           "P1   : (" + R1.P1.X + "," + R1.P1.Y + ")" + nl + 
+           "P2   : (" + R1.P2.X + "," + R1.P2.Y + ")"  
+
+       Class Rectangle
+               name  color
+               p1 = new Point
+               p2 = new Point
+
+       Class Point x y 
+
+実行結果:
+
+.. code-block:: ring
+
+       Name : Rectangle 1
+       Color: Blue
+       P1   : (10,20)
+       P2   : (200,300)
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); Setter と Getter
+
+Setter と Getter
+=================
+
+オブジェクトの属性を設定 (Setter)、または取得 (Getter) 時に用いるメソッドを定義できます。
+
+文法:
+
+.. code-block:: ring
+
+       Class [クラス名]
+
+               [属性名]
+               ...
+
+               Func Set[属性名]
+                       ...
+
+               Func Get[属性名]
+                       ...
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new person
+
+       o1.name = "Mahmoud"  see o1.name + nl
+
+       o1 { name = "Ahmed"  see name }
+
+       Class Person
+
+               name family = "Fayed"
+
+               func setname value
+                       see "Message from SetName() Function!" + nl
+                       name = value + " " + family
+
+               func getname
+                       see "Message from GetName() Function!" + nl
+                       return "Mr. " + name
+
+実行結果:
+
+.. code-block:: ring
+
+       Message from SetName() Function!
+       Message from GetName() Function!
+       Mr. Mahmoud Fayed
+       Message from SetName() Function!
+       Message from GetName() Function!
+       Mr. Ahmed Fayed
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); プライベート属性とメソッド
+
+プライベート属性とメソッド
+==========================
+
+クラスの本体内では private キーワードの後にプライベートな属性とメソッドを定義できます。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new person {
+               name = "Test"
+               age = 20
+               print()
+               o1.printsalary()
+       }
+
+       try
+               see o1.salary
+       catch
+               see cCatchError + nl
+       done
+
+       try
+               o1.increasesalary(1000)
+       catch
+               see cCatchError + nl
+       done
+
+       Class Person
+
+               name age 
+
+               func print
+                       see "Name   : " + name + nl + 
+                           "Age    : " + age + nl 
+
+               func printsalary
+                       see "Salary : " + salary + nl 
+
+               private
+
+               salary = 15000
+
+               func increasesalary x
+                       salary += x
+
+実行結果:
+
+.. code-block:: ring
+
+       Name   : Test
+       Age    : 20
+       Salary : 15000
+       Error (R27) : Using private attribute from outside the class : salary
+       Error (R26) : Calling private method from outside the class : increasesalary
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); 演算子のオーバーロード
+
+演算子のオーバーロード
+======================
+
+クラスオブジェクトで演算子を使用可能にするには、クラスへ **operator** メソッドを追加します。
+
+文法:
+
+.. code-block:: ring
+
+       Class ClassName
+
+               ...
+
+               Func operator cOperator,Para
+
+                       ...
+
+関数の演算子は二種類の仮引数を扱います。一つ目は演算子を、二つ目は演算子の後にある第二仮引数を意味します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new point { x = 10 y = 10 print("P1    : ") }
+       o2 = new point { x = 20 y = 40 print("P2    : ") }
+
+       o3 = o1 + o2
+       o3.print("P1+P2 : ")
+
+       class point x y
+
+               func operator cOperator,Para
+                       result = new point      
+                       switch cOperator
+                       on "+"
+                               result.x = x + Para.x
+                               result.y = y + Para.y
+                       on "-"
+                               result.x = x - Para.x
+                               result.y = y - Para.y
+                       off
+                       return result
+
+               func print cPoint
+                       see cPoint + "X : " + x + " Y : " + y + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       P1    : X : 10 Y : 10
+       P2    : X : 20 Y : 40
+       P1+P2 : X : 30 Y : 50
+
+
+この用例は stdlib.ring にある List クラスからの引用です。
+
+.. code-block:: ring
+
+       Func operator cOperator,Para
+               result = new list
+               switch cOperator
+                       on "+"
+                               if isobject(para)
+                                       for t in Para.vValue
+                                               vValue + t
+                                       next
+                               but islist(para)
+                                       for t in Para
+                                               vValue + t
+                                       next
+                               ok
+                       on "len"
+                               return len( vValue )
+                       on "[]"
+                               return &vValue[para]
+               off
+               return result
+
+“len” 演算子は制御構造 (for in) で使用されます。
+
+“[]” 演算子はリスト項目のアクセスをするときに使用されます。
+この場合、 & 演算子は数値による参照で文字列などの項目の値を返すときに使用します。
+よって、項目へアクセスするときに項目の更新ができます。
+
+
+用例2
+
+.. code-block:: ring
+
+       func main 
+
+       See "----1"+nl
+           a1 = new BigNumber( "123" )
+           a2 = new BigNumber( "456" )
+           a3 = new BigNumber( "789" )
+       See nl+"----2"+nl  
+               a1.print()
+               a2.print()
+               a3.print()
+       See nl+"----3"+nl      
+           a2 = a1 + "45"  
+       See nl+"----4"+nl  
+           a2.print()      
+       See nl+"----5"+nl  
+           a3 = a1 + a2    
+       See nl+"----6"+nl  
+           a3.print()      
+       See nl+"----7"+nl
+
+       ###==================================
+       Func FuncAdd( num1, num2)
+          Sum = 0 + num1 + num2    ### Para.aData isNumber
+          Sum = "" +Sum            ### Para.adata isString
+       return Sum                  ### クラスからの返値
+       ###===================================
+
+       class BigNumber 
+
+           ### 変数
+           aData = "468"
+
+           ### INIT 関数のデフォルト値
+           func init aPara 
+               ? "INIT aPara: " ? aPara
+               if isString(aPara)
+                   aData = aPara 
+               else 
+                   aData = "" + aPara
+               ok
+
+           ### そのほかの関数
+           func operator cOperator, Para
+                   whatType = Type(Para)
+                   ? nl+"WhatType-PARA: "+ whatType ? Para 
+                   ? nl+"Operator: " ? cOperator  ? nl+"PARA: " ? Para ? "    ______" ? nl
+                                   if whatType = "STRING"
+                                      dataInfo = Para
+                                      ? "dataInfo String: " ? dataInfo
+                                   but whatType = "NUMBER"
+                                      datinfo  = "" + Para
+                                      ? "dataInfo Number: " ? dataInfo
+                                   else whatType = "OBJECT"
+                                      dataInfo = "" + para.aData  
+                                      ? "dataInfo OBJECT: " ? dataInfo
+                                   ok
+                                 ? "dataInfo USING: " ? dataInfo  
+                   ### Para.aData は初めて渡されたときには存在しません (メンバのオブジェクト)。
+                   ### "self" が代入されたときの結果は isObject です。
+                   result = self   
+                   switch cOperator
+                       on "+"
+                            answer = FuncAdd( aData, dataInfo )
+                            ? nl+"AnswerString - FunAdd aData, dataInfo: " ? answer  
+                            ### result = Self はオブジェクトであるため、 aData メンバへオブジェクトを代入します
+                            result.aData = answer
+                       off
+                   ### Result = Self はオブジェクトです
+                   return result   
+
+           func print 
+               ? nl+"ClassPrint aData: " ? aData       
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); 継承
+
+継承
+====
+
+From キーワードを使用したクラスの定義で別のクラスからクラスを作成できます。
+
+文法:
+
+.. code-block:: ring
+
+       Class <クラス名> [From <親クラスの名前>]
+
+super オブジェクトで子クラスから親クラスのメソッドを呼び出せます。
+
+文法:
+
+.. code-block:: ring
+
+       func methodname
+               ...
+               super.methodname()
+               ...
+
+用例:
+
+.. code-block:: ring
+
+       Func main
+               e1 = new Employee {
+                       Name = "test"
+                       age = 20
+                       job = "programmer"
+                       salary = 20000000
+                       print()
+               }
+       
+
+       Class Human 
+               Name Age
+               func print
+                       see "Name : " + name + nl + "Age  : " + age + nl
+
+       Class Employee from Human
+               Job Salary
+               func print
+                       super.print()
+                       see "Job  : " + job + nl + "Salary : " + salary + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       Name : test
+       Age  : 20
+       Job  : programmer
+       Salary : 20000000
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); 動的属性
+
+動的属性
+========
+
+クラス名末尾に命令を記述すると、新しいオブジェクトが作成されたときに実行します。
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new dynamicClass
+       see o1.var5 + nl        # 5 を出力
+
+       Class DynamicClass
+               for x = 1 to 10
+                       cStr = "var" + x + " = " + x
+                       eval(cStr)
+               next
+
+.. tip:: 前述の用例では var1, var2, ..., var10 は属性として定義されています。
+
+.. tip:: 前述の用例における問題は x および cStr が同じ属性として定義されていることです!
+
+.. note:: 文字列内にクラスの定義を記述できます。
+          また、 eval() 関数で文字列を実行するとクラスを定義できます。
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); パッケージ
+
+パッケージ
+==========
+
+このシンタックスでパッケージ (共通の名前によるクラスのグループ) を作成できます。
+
+.. code-block:: ring
+
+       package PackageName
+               Class Class1
+                       ...
+               Class Class2
+                       ...
+               Class Class3
+                       ...
+               ...
+
+用例:
+
+.. code-block:: ring
+
+       o1 = new System.output.console
+       o1.print("Hello World")
+       
+       Package System.Output
+               Class Console
+                       Func Print cText
+                               see cText + nl
+
+.. note:: パッケージ名にドット演算子を使えます。
+
+パッケージ.クラス名 (PackageName.ClassName) という長い名前を入力する代わりに import 命令を使えます。
+
+パッケージをインポートする場合は、このパッケージを指定のクラスで直接使えます。 
+
+用例:
+
+.. code-block:: ring
+
+       import system.output
+       o1 = new console {
+               print("Hello World")
+       }
+       Package System.Output
+               Class Console
+                       Func Print cText
+                               see cText + nl
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); オブジェクトの表示
+
+オブジェクトの表示
+==================
+
+see 命令はオブジェクトの状態 (属性と値) を表示します。
+
+用例:
+
+.. code-block:: ring
+
+       see new point { x=10 y=20 z=30 }
+       class point x y z
+
+実行結果:
+
+.. code-block:: ring
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); Find() とオブジェクトのリスト
+
+Find() とオブジェクトのリスト
+=============================
+
+Find() 関数はオブジェクトのリスト内部を検索します。
+
+文法:
+
+.. code-block:: ring
+
+       Find(List,ItemValue,nColumn,cAttribute) ---> 項目のインデックス
+
+用例:
+
+.. code-block:: ring
+
+       myList1 = [new Company {position=3 name="Mahmoud" symbol="MHD"},
+                  new Company {position=2 name="Bert" symbol="BRT"},
+                  new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+
+       see find(mylist1,"Bert",1,"name") + nl
+       see find(mylist1,"Ring",1,"name") + nl
+       see find(mylist1,"Mahmoud",1,"name") + nl
+       see find(mylist1,"RNG",1,"symbol") + nl
+       see find(mylist1,"MHD",1,"symbol") + nl
+       see find(mylist1,"BRT",1,"symbol") + nl
+       see find(mylist1,3,1,"position") + nl
+       see find(mylist1,1,1,"position") + nl
+       see "Other" + nl
+       see find(mylist1,"test",1,"name") + nl
+       see find(mylist1,"test",0,"name") + nl
+       see find(mylist1,"test",5,"name") + nl
+
+       class company position name symbol
+
+実行結果:
+
+.. code-block:: ring
+
+       2
+       3
+       1
+       3
+       1
+       2
+       1
+       3
+       Other
+       0
+       0
+       0
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); Sort() とオブジェクトのリスト
+
+Sort() とオブジェクトのリスト
+=============================
+
+Sort() 関数はオブジェクトの属性に基づきオブジェクトのリストを整列します。
+
+文法:
+
+.. code-block:: ring
+
+       Sort(List,nColumn,cAttribute) ---> オブジェクトの属性に基づいて整列されたリスト
+
+用例:
+
+.. code-block:: ring
+
+       myList1 = [
+                       new Company {position=3 name="Mahmoud" symbol="MHD"},
+                       new Company {position=2 name="Bert" symbol="BRT"},
+                       new Company {position=8 name="Charlie" symbol="CHR"},
+                       new Company {position=6 name="Easy" symbol="FEAS"},
+                       new Company {position=7 name="Fox" symbol="EFOX"},
+                       new Company {position=5 name="Dog" symbol="GDOG"},
+                       new Company {position=4 name="George" symbol="DGRG"},
+                       new Company {position=1 name="Ring" symbol="RNG"}
+                 ]
+
+       see sort(mylist1,1,"name")
+       see copy("*",70) + nl
+       see sort(mylist1,1,"symbol")
+       see copy("*",70) + nl
+       see sort(mylist1,1,"position")
+
+       class company position name symbol
+
+実行結果:
+
+.. code-block:: ring
+
+
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       **********************************************************************
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       **********************************************************************
+       position: 1.000000
+       name: Ring
+       symbol: RNG
+       position: 2.000000
+       name: Bert
+       symbol: BRT
+       position: 3.000000
+       name: Mahmoud
+       symbol: MHD
+       position: 4.000000
+       name: George
+       symbol: DGRG
+       position: 5.000000
+       name: Dog
+       symbol: GDOG
+       position: 6.000000
+       name: Easy
+       symbol: FEAS
+       position: 7.000000
+       name: Fox
+       symbol: EFOX
+       position: 8.000000
+       name: Charlie
+       symbol: CHR
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); Self.属性 と Self.メソッド() の用法
+
+Self.属性 と Self.メソッド() の用法
+==============================================
+
+クラスの範囲内 (クラス名末尾、およびメソッドの前) ならびに、クラスのメソッドは Self.属性 と Self.メソッド() を使えます。
+
+.. code-block:: ring
+
+       Class Point
+               self.x = 10
+               self.y = 20
+               self.z = 30
+               func print
+                       see self.x + nl + self.y + nl + self.z + nl
+
+.. note:: クラスの属性を定義するために、クラスの範囲内で Self.属性 を使うとクラスの属性はグローバル変数との名前衝突から保護されます。
+
+.. tip:: Self.属性 でクラスの属性を定義するときに、同名のグローバル変数が存在する場合は属性の定義は行われずにグローバル変数が使用されます。
+
+グローバル変数名と属性名の間で起こる名前衝突については「スコープの規則」をご確認ください。
+
+これは何が起きているのですか?
+
+理由
+
+* クラスの範囲内ではグローバル変数へアクセスできます。
+* 変数定義前に Ring は変数の検索を行い、見つかれば使用します。
+
+.. note:: グローバル変数を避けるために Main 関数の使用、および名前を $ から始めてください。
+
+.. tip:: 大規模プログラムでは Self.属性 でクラスの保護、およびメンバの定義してください。
+
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); This.属性 と This.メソッド() の用法
+
+This.属性 と This.メソッド() の用法
+=======================================
+
+クラス内にあるメソッドはオブジェクトのスコープへ直接的なアクセスできます。
+属性の読み書き、またはメソッドの呼び出しでは Self.属性 あるいは Self.メソッド() の使用は不要です。
+
+また、括弧 { } でメソッドの内側から別のオブジェクトへアクセスできます。
+この場合は、現在のオブジェクトの有効範囲は括弧内へ変更されます。
+
+括弧内のクラスの属性、およびメソッドへのアクセスする方法はありますか?
+
+これは This.属性 と This.メソッド() で実現できます。
+
+用例:
+
+.. code-block:: ring
+
+       new point  
+
+       class point 
+               x=10 y=20 z=30
+               print()
+               func print
+                       new UI {
+                               display(this.x,this.y,this.z)
+                       }
+
+       Class UI
+               func display x,y,z
+                       see x + nl + y + nl + z + nl
+
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); クラス範囲で This を Self として使用
+
+クラス範囲で This を Self として使用
+====================================
+
+クラス範囲とはクラス名の後、およびすべてのメソッドの前に出現する範囲のことです。
+
+クラス範囲で This を Self として使えます。
+
+用例:
+
+.. code-block:: ring
+
+       func main
+
+               o1 = new program {
+                       test()
+               }
+
+               ? o1
+
+       class program 
+
+               this.name = "My Application"
+               this.version = "1.0"
+               ? name ? version        
+
+               func test
+                       ? "Name    = " + name 
+                       ? "Version = " + version
+
+実行結果:
+
+.. code-block:: none
+
+       My Application
+       1.0
+       Name    = My Application
+       Version = 1.0
+       name: My Application
+       version: 1.0
+
+.. note:: 弓括弧は現在の有効なオブジェクトを変更しますが、This はクラスを指したままにできます。
+
+.. tip:: This と Self には違いがあります。 Self が指している現在の有効なオブジェクトは弓括弧で変更できます。
+
+ほとんどの場合、クラス範囲で This あるいは Self を使う必要はないことを覚えていてください。
+
+このように記述することもできます。
+
+
+.. code-block:: ring
+
+       class program name version
+
+または、
+
+.. code-block:: ring
+
+       class program name="My Application" version="1.0"
+
+.. note:: 同名で定義されたグローバル変数との衝突を回避するために、クラス範囲で This あるいは Self を使用します。
+
+
+.. index:: 
+       pair: オブジェクト指向プログラミング (OOP); オブジェクト属性のデフォルト値
+
+オブジェクト属性のデフォルト値
+==============================
+
+オブジェクト属性のデフォルト値は NULL です。
+
+Ring では、 NULL 値は空文字列または "NULL" を有する文字列です。
+
+isNULL() 関数で NULL 値を確認できます。
+
+用例:
+
+.. code-block:: ring
+
+       oProgram = new Program
+       ? oProgram.name
+       ? oProgram.version
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       oProgram { name="My Application" version="1.0" }
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       ? oProgram
+
+       class program
+               name 
+               version
+
+実行結果:
+
+.. code-block:: none
+
+       NULL
+       NULL
+       1
+       1
+       0
+       0
+       name: My Application
+       version: 1.0
diff --git a/docs/ja-jp/source/operators.txt b/docs/ja-jp/source/operators.txt
new file mode 100644 (file)
index 0000000..a9b56cf
--- /dev/null
@@ -0,0 +1,181 @@
+.. index:: 
+       single: 演算子; はじめに
+
+======
+演算子
+======
+
+演算子の用法を学びます。
+
+.. index:: 
+       pair: 演算子; 算術演算子
+
+
+算術演算子
+==========
+
+この表は算術演算子を全て記載したものです。
+ここでは変数 X=50 および、変数 Y=10 とします:
+
+.. csv-table::
+       :header: "演算子", "説明", "用例", "結果"
+       :widths:       26,     33,     22,     20
+
+       "\+",    "加算",                  "x+y",     "60"
+       "\-",    "減算",                  "x-y",     "40"
+       "\*",    "乗算",                  "x*y",    "500"
+       "/",     "除算",                  "x/y",      "5"
+       "%",     "余剰",                  "x%y",      "0"
+       "++",    "インクリメント (増分)", "x++",     "51"
+       ``--``,  "デクリメント   (減分)", ``x--``,   "49"
+
+.. index:: 
+       pair: 演算子; 関係演算子
+
+関係演算子
+==========
+
+この表は関係演算子を全て記載したものです。
+ここでは変数 X=50 および、変数 Y=10 とします:
+
+.. csv-table::
+       :header: "演算子", "説明", "用例", "結果"
+       :widths:       22,     38,     24,     16
+
+       "=",    "等しい",                            "x = y",        "False"
+       "!=",   "等しくない",                      "x != y",       "True"
+       ">",    "より大きい",                      "x > y",        "True"
+       "<",    "より小さい",                      "x < y",        "False"
+       ">=",   "より大きいか等しい",  "x >= y",       "True"
+       "<=",   "より小さいか等しい",  "x <= y",       "False"
+
+
+.. index:: 
+       pair: 演算子; 論理演算子
+
+論理演算子
+==========
+
+この表は論理演算子を全て記載したものです。
+ここでは変数 X=True および、変数 Y=False とします:
+
+.. csv-table::
+       :header: "演算子", "説明", "用例", "結果"
+       :widths:       22,     38,     24,     16
+
+       "and",  "論理 AND",   "x and y",      "False"
+       "or",   "論理 OR",    "x or y",       "True"
+       "not",  "論理 Not",   "not x",        "False"
+
+別の記法
+
+.. csv-table::
+       :header: "演算子", "説明", "用例", "結果"
+       :widths:       22,     38,     24,     16
+
+       "&&",   "論理 AND",   "x && y",       "False"
+       "||",   "論理 OR",    "x or y",       "True"
+       "!",    "論理 Not",   "! x",          "False"
+
+
+.. index:: 
+       pair: 演算子; ビット演算子
+
+ビット演算子
+============
+
+この表はビット演算子を全て記載したものです。
+ここでは変数 X=8 および、変数 Y=2 とします:
+
+.. csv-table::
+       :header: "演算子", "説明", "用例", "結果"
+       :widths:       19,     46,     21,     14
+
+       "&",    "二進数 AND",                                "x & y",        "0"
+       "\|",   "二進数 OR",                                 "x \| y",       "10"
+       "^",    "二進数 XOR",                                "x ^ y",        "10"
+       "~",    "二進数による 1 の補数",       "~x",           "-9"
+       "<<",   "二進数による左シフト",               "x << y",       "32"
+       ">>",   "二進数による右シフト",               "x >> y",       "2"
+
+
+.. index:: 
+       pair: 演算子; 代入演算子
+
+代入演算子
+==========
+
+この表は代入演算子を全て記載したものです。
+
+ここでは変数 X=8 とします:
+
+.. csv-table::
+       :header: "演算子", "説明", "用例", "結果"
+       :widths:       19,     46,     21,     14
+
+       "=",    "代入",                                       "x = 10",       "x=10"
+       "+=",   "加算して代入",                   "x += 5",       "x=13"
+       "-=",   "減産してして代入",                     "x -= 3",       "x=5"
+       "\*=",  "乗算して代入",                   "x \*= 2",      "x=16"
+       "/=",   "除算して代入",                   "x /= 3",       "x=2.67"
+       "%=",   "余剰して代入",                   "x %= 2",       "x=0"
+       "<<=",  "左シフトして代入",             "x <<= 2",      "x=32"
+       ">>=",  "右シフトして代入",             "x >>= 2",      "x=2"
+       "&=",   "ビット演算 AND して代入",     "x &= 4",       "x=0"
+       "\|=",  "ビット演算 OR して代入",      "x \|= 3",      "x=11"
+       "^=",   "ビット演算 XOR して代入",     "x ^= 4",       "x=12"
+
+.. index:: 
+       pair: 演算子; そのほかの演算子
+
+そのほかの演算子
+================
+
+.. csv-table::
+       :header: "演算子", "説明"
+       :widths:       30,     70
+
+       ":リテラル",                                                ": を使うと識別子の前はリテラルを意味することになります。"
+       "始点:終点",                                                "始点から終点までの項目を有するリストを作成します。"
+       "[リストの項目]",                                 "リストの項目を定義します。"
+       "リスト[インデックス]",                                "リストの項目へのアクセスします。"
+       "オブジェクト.名前",                            "ドット演算子でオブジェクトのメンバへアクセスします (属性またはメソッド)。"
+       "オブジェクト {ステートメント}",   "オブジェクトの属性とメソッドへ直接的にアクセスできるステートメントを実行します。"
+       "関数(仮引数,...)",                                "コンマで区切られた仮引数で関数を呼び出します。"
+       "? <式>",                                                      "改行後に式を表示します。"
+
+
+.. index:: 
+       pair: 演算子; 演算子の評価優先順位
+
+演算子の評価優先順位
+====================
+
+この表は最高優先度 (最初に評価します) 
+から最低優先度までの演算子を表記したものです。
+
+
+.. csv-table::
+       :header: "演算子"
+
+       ". [] () {}"
+       "\-  \~ :リテラル [リストの項目]"
+       ``++ --``
+       "始点:終点"
+       "\* / %"
+       "\+ \-"
+       "<< >>"
+       "&"
+       "\|  ^"
+       "< > <= >="
+       "= !="
+       "not !"
+       "and or && ||"
+       "代入 \= += -= \*= /= %= >>= <<= &= ^= \|= "
+       "?"
+
+用例:
+
+.. code-block:: ring
+
+       See 3+5*4       # 23 を表示
diff --git a/docs/ja-jp/source/othellogame.png b/docs/ja-jp/source/othellogame.png
new file mode 100644 (file)
index 0000000..765ec00
Binary files /dev/null and b/docs/ja-jp/source/othellogame.png differ
diff --git a/docs/ja-jp/source/outputwin.png b/docs/ja-jp/source/outputwin.png
new file mode 100644 (file)
index 0000000..f75eae9
Binary files /dev/null and b/docs/ja-jp/source/outputwin.png differ
diff --git a/docs/ja-jp/source/performancetips.txt b/docs/ja-jp/source/performancetips.txt
new file mode 100644 (file)
index 0000000..2e20d44
--- /dev/null
@@ -0,0 +1,186 @@
+.. index:: 
+     single: 性能改善に関する情報; はじめに
+
+====================
+性能改善に関する情報
+====================
+
+Ring の性能改善方法を学びます。
+
+
+.. index:: 
+     pair: 性能改善に関する情報; リストの作成
+
+リストの作成
+============
+
+用例:
+
+.. code-block:: ring
+
+       ? "Create the list using the Range operator"
+       t1 = clock()
+       aList = 1:1000000
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Create the list using the For loop"
+       t1 = clock()
+       aList = []
+       for x = 1 to 1000000
+               aList + x
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Create the list using the list() function and the For loop"
+       t1 = clock()
+       aList = list(1000000)
+       for x = 1 to 1000000
+               aList[x] = x
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+実行結果:
+
+.. code-block:: none
+
+       Create the list using the Range operator
+       Time : 0.48 seconds
+       Create the list using the For loop
+       Time : 0.79 seconds
+       Create the list using the list() function and the For loop
+       Time : 1.56 seconds
+
+.. note:: リストの作成で for ループ、または list() 関数を使用するよりも、範囲演算子のほうが速いです。
+
+.. note:: リストの追加で add() 関数を使用するよりも、連結演算子‘+’を使用したほうが関数呼び出しのオーバーヘッドが少ないため速いです。ただしソースコードの可読性は落ちる場合があります。
+
+.. note:: 処理に時間が掛かり過ぎるため copy() 関数で数十万件を超える大量のテストデータを作成しないでください。
+
+.. index:: 
+     pair: 性能改善に関する情報; 算術演算子
+
+算術演算子
+==========
+
+用例:
+
+.. code-block:: ring
+
+       ? "Using * operator"
+       t1 = clock()
+       for x = 1 to 1000000
+               out = x * 2
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Using *= operator"
+       t1 = clock()
+       for x = 1 to 1000000
+               out = x
+               out *= 2
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+実行結果:
+
+.. code-block:: none
+
+       Using * operator
+       Time : 1.34 seconds
+       Using *= operator
+       Time : 0.47 seconds
+
+.. note:: \* 演算子よりも \*= 演算子を使用したほうが速いです。
+
+
+.. index:: 
+     pair: 性能改善に関する情報; len() と For ループの使用
+
+len() と For ループの使用
+=========================
+
+用例:
+
+.. code-block:: ring
+
+       aList = 1:1000000
+
+       ? "Using len() in the For loop"
+       t1 = clock()
+       for x = 1 to len(aList)
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "Using len() before the For loop"
+       t1 = clock()
+       nMax = len(aList)
+       for x = 1 to nMax
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+実行結果:
+
+.. code-block:: none
+
+       Using len() in the For loop
+       Time : 5.50 seconds
+       Using len() before the For loop
+       Time : 0.24 seconds
+
+.. note:: Len() 関数は For ループ内ではなく For ループの手前で使用したほうが早いです。
+
+.. index:: 
+     pair: 性能改善に関する情報; 関数とメソッドの呼び出し
+
+関数とメソッドの呼び出し
+========================
+
+用例:
+
+.. code-block:: ring
+
+       ? "calling 100000 functions"
+       t1 = clock()
+       for x = 1 to 100000
+               test()
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       o1 = new test
+
+       ? "calling 100000 methods using the dot operator"
+       t1 = clock()
+       for x = 1 to 100000
+               o1.test()
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+       ? "calling 100000 methods using braces "
+       t1 = clock()
+       for x = 1 to 100000
+               o1 { test() }
+       next
+       ? "Time : " + ((clock()-t1)/clockspersecond()) + " seconds"
+
+
+       func test
+
+       class test
+               func test
+
+
+実行結果:
+
+.. code-block:: none
+
+       calling 100000 functions
+       Time : 0.28 seconds
+       calling 100000 methods using the dot operator
+       Time : 0.36 seconds
+       calling 100000 methods using braces
+       Time : 1.19 seconds
+
+.. note:: メソッドの呼び出しよりも、関数の呼び出しのほうが僅かに速いです。
+
+.. note:: メソッドの呼び出しで弓括弧を使用するよりも、ドット演算子を使用したほうが速いです。
+
diff --git a/docs/ja-jp/source/ponggame.png b/docs/ja-jp/source/ponggame.png
new file mode 100644 (file)
index 0000000..450c8a5
Binary files /dev/null and b/docs/ja-jp/source/ponggame.png differ
diff --git a/docs/ja-jp/source/postgresql.txt b/docs/ja-jp/source/postgresql.txt
new file mode 100644 (file)
index 0000000..d8c4fe0
--- /dev/null
@@ -0,0 +1,422 @@
+.. index:: 
+       single: PostgreSQL; はじめに
+
+===============
+PostgreSQL 関数
+===============
+
+PostgreSQL データベースの用法を学びます。
+
+.. index:: 
+       pair: PostgreSQL; ライブラリの読み込み
+
+ライブラリの読み込み
+====================
+
+この関数の使用前に postgresqllib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+       # PostgreSQL 関数の使用
+
+.. index:: 
+       pair: PostgreSQL; 用例
+
+用例
+====
+
+用例 (1):
+
+.. code-block:: ring
+
+               load "postgresqllib.ring"
+
+               conninfo = "user=postgres password=sa dbname = postgres"
+
+               exit_nicely = func conn {
+                       PQfinish(conn)
+                       shutdown(1)
+               }
+
+               conn = PQconnectdb(conninfo)
+
+               if (PQstatus(conn) != CONNECTION_OK)
+                       fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                               call exit_nicely(conn)
+               ok
+
+               res = PQexec(conn, "select * from pg_database")
+               if PQresultStatus(res) != PGRES_TUPLES_OK
+                       fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+                       PQclear(res)
+                       exit_nicely(conn)
+               ok
+
+               nFields = PQnfields(res)
+               for i = 1 to nFields
+                               ? PQfname(res, i-1) 
+               next
+
+               ? copy("*",60)
+
+               for i = 1 to PQntuples(res)
+                       for j=1 to nFields
+                               see PQgetvalue(res, i-1, j-1) + " "
+                       next
+                       see nl
+               next
+
+               PQclear(res)
+
+               PQfinish(conn)
+
+実行結果:
+
+.. code-block:: none 
+
+       datname
+       datdba
+       encoding
+       datcollate
+       datctype
+       datistemplate
+       datallowconn
+       datconnlimit
+       datlastsysoid
+       datfrozenxid
+       datminmxid
+       dattablespace
+       datacl
+       ************************************************************
+       postgres 10 6 English_United States.1252 
+               English_United States.1252 f t -1 12937 549 1 1663
+       template1 10 6 English_United States.1252 English_United States.1252 
+               t t -1 12937 549 1 1663 {=c/postgres,postgres=CTc/postgres}
+       template0 10 6 English_United States.1252 English_United States.1252 
+               t f -1 12937 549 1 1663 {=c/postgres,postgres=CTc/postgres}
+       mahdb 10 6 English_United States.1252 English_United States.1252 
+               f t -1 12937 549 1 1663
+               
+用例 (2):
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+
+       conninfo = "user=postgres password=sa dbname = mahdb"
+
+       exit_nicely = func conn {
+               PQfinish(conn)
+               shutdown(1)
+       }
+
+       conn = PQconnectdb(conninfo)
+
+       if (PQstatus(conn) != CONNECTION_OK)
+               fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                       call exit_nicely(conn)
+       ok
+
+       res = PQexec(conn, "
+               DROP DATABASE mahdb;
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+
+       res = PQexec(conn, "CREATE DATABASE mahdb;")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+
+
+       res = PQexec(conn, "
+       CREATE TABLE COMPANY (
+                        ID INT PRIMARY KEY     NOT NULL,
+                        NAME           TEXT    NOT NULL,
+                        AGE            INT     NOT NULL,
+                        ADDRESS        CHAR(50),
+                        SALARY         REAL );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                       INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
+                       VALUES  (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
+                                       (2, 'Ahmed'   , 27, 'Jeddah', 20.00 ),
+                                       (3, 'Mohammed', 33, 'Egypt' , 30.00 ),
+                                       (4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                  select * from COMPANY
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+               PQclear(res)
+               call exit_nicely(conn)
+       ok
+
+
+       nFields = PQnfields(res)
+       for i = 1 to nFields
+                       ? PQfname(res, i-1) 
+       next
+
+       ? copy("*",60)
+
+       for i = 1 to PQntuples(res)
+               for j=1 to nFields
+                       see PQgetvalue(res, i-1, j-1) + " "
+               next
+               see nl
+       next
+
+       PQclear(res)
+
+       PQfinish(conn)
+
+実行結果:
+
+.. code-block:: none
+
+       id
+       name
+       age
+       address
+       salary
+       ************************************************************
+       1 Mahmoud  31 Jeddah  10
+       2 Ahmed    27 Jeddah  20
+       3 Mohammed 31 Egypt   30
+       4 Ibrahim  24 Egypt   40        
+       
+
+.. index:: 
+       pair: PostgreSQL; RingPostgreSQL 定数
+
+RingPostgreSQL 定数
+===================
+
+この定数は RingPostgreSQL ライブラリで定義済みです。
+
+.. code-block:: none
+
+       CONNECTION_STARTED
+       CONNECTION_MADE
+       CONNECTION_AWAITING_RESPONSE
+       CONNECTION_AUTH_OK
+       CONNECTION_SSL_STARTUP
+       CONNECTION_SETENV
+       CONNECTION_OK
+
+       PQPING_OK
+       PQPING_REJECT
+       PQPING_NO_RESPONSE
+       PQPING_NO_ATTEMPT
+
+       PGRES_EMPTY_QUERY
+       PGRES_COMMAND_OK
+       PGRES_TUPLES_OK
+       PGRES_COPY_OUT
+       PGRES_COPY_IN
+       PGRES_BAD_RESPONSE
+       PGRES_NONFATAL_ERROR
+       PGRES_FATAL_ERROR
+       PGRES_COPY_BOTH
+       PGRES_SINGLE_TUPLE
+
+       PG_DIAG_SEVERITY
+       PG_DIAG_SQLSTATE
+       PG_DIAG_MESSAGE_PRIMARY
+       PG_DIAG_MESSAGE_DETAIL
+       PG_DIAG_MESSAGE_HINT
+       PG_DIAG_STATEMENT_POSITION
+       PG_DIAG_INTERNAL_POSITION
+       PG_DIAG_INTERNAL_QUERY
+       PG_DIAG_CONTEXT
+       PG_DIAG_SCHEMA_NAME
+       PG_DIAG_TABLE_NAME
+       PG_DIAG_COLUMN_NAME
+       PG_DIAG_DATATYPE_NAME
+       PG_DIAG_CONSTRAINT_NAME
+       PG_DIAG_SOURCE_FILE
+       PG_DIAG_SOURCE_LINE
+       PG_DIAG_SOURCE_FUNCTION
+
+
+.. index:: 
+       pair: PostgreSQL; RingPostgreSQL 関数
+
+RingPostgreSQL 関数
+===================
+
+この関数は RingPostgreSQL ライブラリで定義されています。
+
+リファレンス : https://www.postgresql.org/docs/9.1/static/libpq.html
+
+.. code-block:: none
+
+       PGconn *PQconnectdbParams(const char **keywords,
+               const char **values,int expand_dbname);
+       PGconn *PQconnectdb(const char *conninfo)
+       PGconn *PQsetdbLogin(const char *pghost,const char *pgport,
+               const char *pgoptions,const char *pgtty,
+               const char *dbName,const char *login,const char *pwd)
+       PGconn *PQsetdb(char *pghost,char *pgport,char *pgoptions,
+               char *pgtty,char *dbName)
+       PGconn *PQconnectStartParams(const char **keywords,
+               const char **values,int expand_dbname)
+       PGconn *PQconnectStart(const char *conninfo)
+       PostgresPollingStatusType PQconnectPoll(PGconn *conn)
+       PQconninfoOption *PQconndefaults(void)
+       PQconninfoOption *PQconninfo(PGconn *conn)
+       PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg)
+       void PQfinish(PGconn *conn)
+       void PQreset(PGconn *conn)
+       int PQresetStart(PGconn *conn)
+       PostgresPollingStatusType PQresetPoll(PGconn *conn)
+       PGPing PQpingParams(const char **keywords,const char **values,
+               int expand_dbname)
+       PGPing PQping(const char *conninfo)
+       char *PQdb(const PGconn *conn)
+       char *PQuser(const PGconn *conn)
+       char *PQpass(const PGconn *conn)
+       char *PQhost(const PGconn *conn)
+       char *PQport(const PGconn *conn)
+       char *PQtty(const PGconn *conn)
+       char *PQoptions(const PGconn *conn)
+       ConnStatusType PQstatus(const PGconn *conn)
+       PGTransactionStatusType PQtransactionStatus(const PGconn *conn)
+       const char *PQparameterStatus(const PGconn *conn, const char *paramName)
+       int PQprotocolVersion(const PGconn *conn)
+       int PQserverVersion(const PGconn *conn)
+       char *PQerrorMessage(const PGconn *conn)
+       int PQsocket(const PGconn *conn)
+       int PQbackendPID(const PGconn *conn)
+       int PQconnectionNeedsPassword(const PGconn *conn)
+       int PQconnectionUsedPassword(const PGconn *conn)
+       int PQsslInUse(const PGconn *conn)
+       const char *PQsslAttribute(const PGconn *conn, const char *attribute_name)
+       const char **PQsslAttributeNames(const PGconn *conn)
+       void *PQsslStruct(const PGconn *conn, const char *struct_name)
+       void *PQgetssl(const PGconn *conn)
+       PGresult *PQexec(PGconn *conn, const char *command);
+       PGresult *PQexecParams(PGconn *conn,const char *command,int nParams,
+               const Oid *paramTypes,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       PGresult *PQprepare(PGconn *conn,const char *stmtName,
+               const char *query,int nParams,const Oid *paramTypes)
+       PGresult *PQexecPrepared(PGconn *conn,const char *stmtName,
+               int nParams,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       PGresult *PQdescribePrepared(PGconn *conn, const char *stmtName)
+       PGresult *PQdescribePortal(PGconn *conn, const char *portalName)
+       ExecStatusType PQresultStatus(const PGresult *res)
+       char *PQresStatus(ExecStatusType status)
+       char *PQresultErrorMessage(const PGresult *res)
+       char *PQresultErrorField(const PGresult *res, int fieldcode)
+       void PQclear(PGresult *res)
+       int PQntuples(const PGresult *res)
+       int PQnfields(const PGresult *res)
+       char *PQfname(const PGresult *res,int column_number)
+       int PQfnumber(const PGresult *res,const char *column_name)
+       Oid PQftable(const PGresult *res,int column_number)
+       int PQftablecol(const PGresult *res,int column_number)
+       int PQfformat(const PGresult *res,int column_number)
+       Oid PQftype(const PGresult *res,int column_number)
+       int PQfmod(const PGresult *res,int column_number)
+       int PQfsize(const PGresult *res,int column_number)
+       int PQbinaryTuples(const PGresult *res)
+       char *PQgetvalue(const PGresult *res,int row_number,int column_number)
+       int PQgetisnull(const PGresult *res,int row_number,int column_number)
+       int PQgetlength(const PGresult *res,int row_number,int column_number)
+       int PQnparams(const PGresult *res)
+       Oid PQparamtype(const PGresult *res, int param_number)
+       void PQprint(FILE *fout,const PGresult *res,const PQprintOpt *po)
+       char *PQcmdStatus(PGresult *res)
+       char *PQcmdTuples(PGresult *res)
+       Oid PQoidValue(const PGresult *res)
+       char *PQoidStatus(const PGresult *res)
+       char *PQescapeLiteral(PGconn *conn, const char *str, size_t length)
+       char *PQescapeIdentifier(PGconn *conn, const char *str, size_t length)
+       size_t PQescapeStringConn(PGconn *conn,char *to, 
+               const char *from, size_t length,int *error)
+       size_t PQescapeString(char *to, const char *from, size_t length)
+       unsigned char *PQescapeByteaConn(PGconn *conn,
+               const unsigned char *from,size_t from_length,size_t *to_length)
+       unsigned char *PQescapeBytea(const unsigned char *from,
+               size_t from_length,size_t *to_length)
+       unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length)
+       int PQsendQuery(PGconn *conn, const char *command)
+       int PQsendQueryParams(PGconn *conn,const char *command,
+               int nParams,const Oid *paramTypes,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       int PQsendPrepare(PGconn *conn,const char *stmtName,
+               const char *query,int nParams,const Oid *paramTypes)
+       int PQsendQueryPrepared(PGconn *conn,const char *stmtName,
+               int nParams,const char **paramValues,
+               const int *paramLengths,const int *paramFormats,int resultFormat)
+       int PQsendDescribePrepared(PGconn *conn, const char *stmtName)
+       int PQsendDescribePortal(PGconn *conn, const char *portalName)
+       PGresult *PQgetResult(PGconn *conn)
+       int PQconsumeInput(PGconn *conn)
+       int PQisBusy(PGconn *conn)
+       int PQsetnonblocking(PGconn *conn, int arg)
+       int PQisnonblocking(const PGconn *conn)
+       int PQflush(PGconn *conn)
+       int PQsetSingleRowMode(PGconn *conn)
+       PGcancel *PQgetCancel(PGconn *conn)
+       void PQfreeCancel(PGcancel *cancel)
+       int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize)
+       int PQrequestCancel(PGconn *conn)
+       PGresult *PQfn(PGconn *conn,int fnid,int *result_buf,
+               int *result_len,int result_is_int,const PQArgBlock *args,int nargs)
+       PGnotify *PQnotifies(PGconn *conn)
+       int PQputCopyData(PGconn *conn,const char *buffer,int nbytes)
+       int PQputCopyEnd(PGconn *conn,const char *errormsg)
+       int PQgetCopyData(PGconn *conn,char **buffer,int async)
+       int PQgetline(PGconn *conn,char *buffer,int length)
+       int PQgetlineAsync(PGconn *conn,char *buffer,int bufsize)
+       int PQputline(PGconn *conn,const char *string)
+       int PQputnbytes(PGconn *conn,const char *buffer,int nbytes)
+       int PQendcopy(PGconn *conn)
+       int PQclientEncoding(const PGconn *conn)
+       char *pg_encoding_to_char(int encoding_id)
+       int PQsetClientEncoding(PGconn *conn, const char *encoding)
+       void PQtrace(PGconn *conn, FILE *stream)
+       void PQuntrace(PGconn *conn)
+       void PQfreemem(void *ptr)
+       void PQconninfoFree(PQconninfoOption *connOptions)
+       char *PQencryptPasswordConn(PGconn *conn, const char *passwd,
+                const char *user, const char *algorithm)
+       char *PQencryptPassword(const char *passwd, const char *user)
+       PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status)
+       int PQfireResultCreateEvents(PGconn *conn, PGresult *res)
+       PGresult *PQcopyResult(const PGresult *src, int flags)
+       int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs)
+       int PQsetvalue(PGresult *res, int tup_num, int field_num, 
+                       char *value, int len)
+       void *PQresultAlloc(PGresult *res, size_t nBytes)
+       int PQlibVersion(void)
+       PQnoticeReceiver PQsetNoticeReceiver(PGconn *conn,
+                       PQnoticeReceiver proc,void *arg)
+       PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn,
+                       PQnoticeProcessor proc,void *arg)
+       void PQinitOpenSSL(int do_ssl, int do_crypto)
+       void PQinitSSL(int do_ssl)
+       int PQisthreadsafe(void)
diff --git a/docs/ja-jp/source/printpreviewdialog.png b/docs/ja-jp/source/printpreviewdialog.png
new file mode 100644 (file)
index 0000000..acf1b49
Binary files /dev/null and b/docs/ja-jp/source/printpreviewdialog.png differ
diff --git a/docs/ja-jp/source/programstructure.txt b/docs/ja-jp/source/programstructure.txt
new file mode 100644 (file)
index 0000000..182972f
--- /dev/null
@@ -0,0 +1,163 @@
+.. index:: 
+       single: プログラムの構造;  はじめに
+
+=================
+プログラムの構造
+=================
+
+複数のソースコードファイルを同じプロジェクトで扱う方法を学びます。
+
+
+.. index:: 
+       pair: プログラムの構造;  ソースコードファイルの階層
+
+ソースコードファイルの階層
+==========================
+
+ソースコードは下記の各階層から構成されています (同一順)。
+
++--------------------------------+
+| ソースコードの階層             |
++================================+
+| ファイルの読み込み             |
++--------------------------------+
+| ステートメントとグローバル変数 |
++--------------------------------+
+| 関数                           |
++--------------------------------+
+| パッケージとクラス             |
++--------------------------------+
+
+アプリケーションは一本以上のファイルから構成されています。
+
+.. index:: 
+       pair: プログラムの構造;  複数のソースコードファイルを扱う方法
+
+複数のソースコードファイルを扱う方法
+====================================
+
+Load 命令はプロジェクトへ別のソースファイルをインクルードします。
+
+
+文法:
+
+.. code-block:: ring
+
+       Load  "filename.ring"
+
+.. note:: Load 命令は、コンパイラの構文解析処理の段階で直接実行します。
+
+.. tip:: 実行時までファイル名がわからない、または関数でファイルのパスを取得する必要がある場合は、 eval() を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       # ファイル : Start.ring
+
+       Load "sub.ring"
+
+       sayhello("Mahmoud")
+
+.. code-block:: ring
+
+       # ファイル : sub.ring
+
+       func sayhello cName
+               see "Hello " + cName + nl
+
+
+.. index:: 
+       pair: プログラムの構造;  Load Package
+
+Load Package
+============
+
+'Load' 命令により、複数の Ring ソースファイルをプロジェクトで使えますが、
+
+グローバルスコープを共有しているため、グローバル変数の名前衝突が起きることがあります。
+
+この問題は "Load Package" 命令で解決します。
+
+"Load Package" 命令で新規生成したグローバルスコープへライブラリ (\*.ring ファイル) を読み込みます。
+
+これにより既存のグローバル変数との名前衝突を回避できます。これはライブラリ開発でも非常に便利です。
+
+用例:
+
+ファイル: loadpackage.ring
+
+.. code-block:: ring
+
+       x = 100
+       ? "Hello, World!"
+       load package "testloadpackage.ring"
+
+       ? x
+       test()
+
+ファイル: testloadpackage.ring
+
+.. code-block:: ring
+
+       ? "Hello from testloadpackage.ring"
+
+       x = 1000
+
+       test()
+
+       func test
+               ? x
+
+実行結果:
+
+.. code-block:: none
+
+       Hello, World!
+       Hello from testloadpackage.ring
+       1000
+       100
+       1000
+
+.. index:: 
+       pair: プログラムの構造; Load Again
+
+Load Again
+==========
+
+Ring 1.12 から Load Again コマンドが使えるようになりました。
+
+このコマンドを使うと Ring ソースファイルにある定数を何度でも読み込めます。
+
+これはグローバル定数による翻訳用 Ring ソースファイルを使用するときに便利です。
+
+用例:
+
+下記はアラビア語と英語に対応するプロジェクトからの引用です。
+
+english.ring と arabic.ring ファイルには翻訳で使う定数があります。
+
+これらのファイルはプログラムの開始時に読み込まれます。
+
+Load コマンドで同じファイルの再読み込みはできません。
+
+Load コマンドは同じソースファイルを一度だけ読み込み、それ以降の読み込み指定は無理するからです。
+
+しかし Load Again コマンドならできます。
+
+よって、下記のコードを使うと実行中にファイルの再利用ができます。
+
+.. code-block:: ring
+
+       func setLang nLanguage
+               if C_ENV_DEFAULT_LANG = nLanguage
+                       return
+               ok
+               C_ENV_DEFAULT_LANG = nLanguage
+               # 言語の変更
+                       switch nLanguage 
+                               on C_TRANSLATION_ENGLISH
+                                       load again "translation/english.ring"
+                               on C_TRANSLATION_ARABIC 
+                                       load again "translation/arabic.ring"
+                       off
diff --git a/docs/ja-jp/source/qt.txt b/docs/ja-jp/source/qt.txt
new file mode 100644 (file)
index 0000000..f1bec23
--- /dev/null
@@ -0,0 +1,4665 @@
+.. index:: 
+       single: RingQt を使用したデスクトップとモバイル開発;  はじめに
+
+===========================================
+RingQt を使用したデスクトップとモバイル開発
+===========================================
+
+Ring アプリケーション (デスクトップとモバイル) 開発のために Qt フレームワーククラスの用法を学びます。
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; はじめての GUI アプリケーション
+
+
+はじめての GUI アプリケーション
+===============================
+
+この用例では、彼氏、彼女の名前を質問するアプリケーションを作成します。
+ユーザがテキストボックスへ名前を入力して “Say Hello” ボタンをクリックした後に、
+“Hello ” を名前へ追加することでテキストボックスの値を更新します。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       oApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Hello World")
+                       setGeometry(100,100,370,250)
+
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?")
+                               setGeometry(10,20,350,30)
+                               setalignment(Qt_AlignHCenter)
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("Say Hello")
+                               setclickevent("pHello()")
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(150,200,100,30)
+                               settext("Close")
+                               setclickevent("pClose()")
+                       }
+
+                       lineedit1 = new qlineedit(win1) {
+                               setGeometry(10,100,350,30)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               oApp.quit()
+
+プログラムの実行結果:
+
+最初にテキストボックスへ名前を入力します。
+
+.. image:: ringqt_shot1.jpg
+       :alt: テキストボックスへの名前入力
+
+そして Say Hello ボタンをクリックします。
+
+.. image:: ringqt_shot2.jpg
+       :alt: ボタンのクリック
+
+.. index:: 
+       pair: RingQt を使用したデスクトップとモバイル開発; イベントループ
+
+イベントループ
+==============
+
+qApp クラスから exec() メソッドを呼び出すときは Qt はイベント駆動とイベントループで制御します。
+
+一度でも exec() を呼び出すと、イベントループを開始し、ウィジェットは様々なイベントへの応答を開始します (マウス、キーボード、タイマーなど)。
+
+イベントが発行されてコールバック関数が呼び出されるときは再び制御を戻します。
+
+コールバック関数の実行完了後、制御をイベントループへ再び戻します。
+
+覚えていると便利なことは
+
+(1) ほとんどの作業は標準イベントで行います (イベントは各種ウィジェットで用意されています)。
+
+(2) イベントフィルタを使うとウィジェットにイベントを追加できます。
+
+(3) タイマーを使うと制御を戻します。これにより、各種検査を簡単にできます。
+
+コールバック関数で処理時間がかかり、ビジー状態であるとき、 GUI の停止を回避するために qApp クラスで ProcessEvents() メソッドを呼び出せます。
+
+.. code-block:: ring
+
+       oApp.processevents()
+
+exec() メソッドを呼び出さずに、メインループを作成することもできます。
+
+この方法は非推奨であり、選択肢の一つに過ぎません。
+
+.. code-block:: ring
+
+       # exec() メソッドを呼び出さない方法
+               while true
+                       oApp.processevents()    # GUI イベントへの応答
+                       # さらにコードを追加することで、制御を行います!
+                       # .....
+               end 
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; レイアウトの用法
+
+レイアウトの用法
+====================
+
+この用例は、前述のアプリケーションで垂直レイアウトを使用するように更新したものです。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Hello World") 
+                       setGeometry(100,100,400,130) 
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?") 
+                               setGeometry(10,20,350,30) 
+                               setalignment(Qt_AlignHCenter)
+                       }
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30) 
+                               settext("Say Hello") 
+                               setclickevent("pHello()")
+                       }
+                       btn2 = new qpushbutton(win1) {
+                               setGeometry(150,200,100,30) 
+                               settext("Close") 
+                               setclickevent("pClose()")
+                       }
+                       lineedit1 = new qlineedit(win1) {
+                               setGeometry(10,100,350,30) 
+                       }
+                       layout1 = new qVBoxLayout() {
+                               addwidget(label1)  
+                               addwidget(lineedit1)  
+                               addwidget(btn1)  
+                               addwidget(btn2)         
+                       }
+                       win1.setlayout(layout1) 
+                       show()
+               }
+
+               exec()
+
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               MyApp.quit()
+
+実行中のアプリケーション!
+               
+.. image:: ringqt_shot3.jpg
+       :alt: 垂直レイアウト
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QTextEdit クラスの用法
+
+QTextEdit クラスの用法
+==========================
+
+この用例では、 QTextEdit クラスを使用しています。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("QTextEdit Class")
+                       setGeometry(100,100,500,500)
+
+                       new qtextedit(win1) {
+                               setGeometry(10,10,480,480)
+
+                       }
+
+                       show()
+               }
+
+               exec()
+       }       
+               
+実行中は qtextedit へリッチテキストを貼り付けることができます。
+
+.. image:: ringqt_shot4.jpg
+       :alt: QTextEdit クラス
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QListWidget クラスの用法
+
+QListWidget クラスの用法
+============================
+
+この用例では、 QListWidget クラスを使用しています。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setGeometry(100,100,400,400)
+
+                       list1 = new qlistwidget(win1) {
+                               setGeometry(150,100,200,200)
+                               alist = ["one","two","three","four","five"]
+                               for x in alist additem(x) next
+                               setcurrentrow(3,2)
+                               win1.setwindowtitle("Items Count : " + count() )
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("selected item")
+                               setclickevent("pWork()")
+                       }
+
+                       btn2 = new qpushbutton(win1) {
+                               setGeometry(10,240,100,30)
+                               settext("Delete item")
+                               setclickevent("pWork2()")
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       func pWork
+               btn1.settext(string(list1.currentrow()))
+
+       func pWork2
+               list1 {
+                      takeitem(currentrow())
+               }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot5.jpg
+       :alt: QListWidget Class
+
+
+別の用例:
+
+.. code-block:: ring
+
+        Load "guilib.ring"
+
+        New qApp {
+
+                win1 = new qWidget() {
+
+                        setGeometry(100,100,500,400)
+
+                        list1 = new qlistwidget(win1) {
+                                setGeometry(150,100,200,200)
+                                alist = ["one","two","three","four","five"]
+                                for x in alist additem(x) next
+                                
+                                setcurrentrow(3,2)
+                                win1.setwindowtitle("Items Count : " + count() )
+                        }
+
+                        btn1 = new qpushbutton(win1) {
+                                setGeometry(10,200,100,30)
+                                settext("selected item")
+                                setclickevent("pWork()")
+                        }
+
+                        btn2 = new qpushbutton(win1) {
+                                setGeometry(10,240,100,30)
+                                settext("Delete item")
+                                setclickevent("pWork2()")
+                        }
+
+                        show()
+                }
+
+                exec()
+        }
+
+        func pWork
+                        
+                nbrOfItems = list1.count()
+                curItemNbr = list1.currentrow()
+                curValue   = list1.item(list1.currentrow()).text()
+                
+                win1.setwindowtitle( "After Select - NbrOfItems: " + nbrOfItems +
+                       " CurItemNbr: " + curItemNbr + " CurValue: " + curValue )
+                
+                btn1.settext( string(list1.currentrow() ) + " --- " +
+                             list1.item(list1.currentrow()).text() )
+
+                
+
+        func pWork2
+                list1 {
+                        takeitem(currentrow())
+                        
+                        nbrOfItems = count()
+                        curItemNbr = currentrow()
+                        curValue   = item(currentrow()).text()
+                    
+                        win1.setwindowtitle("After Delete - NbrOfItems: " + nbrOfItems +
+                               " CurItemNbr: " + curItemNbr +" CurValue: " + curValue )
+                }
+
+       
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QTreeView および QFileSystemModel の用法
+
+QTreeView および QFileSystemModel の用法
+============================================
+
+この用例では、ファイルシステムを表示するために QTreeView ウィジェットの用法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = New qWidget() {
+
+                       setwindowtitle("Using QTreeView and QFileSystemModel")
+                       setGeometry(100,100,500,400)
+
+                       New qtreeview(win1) {
+                               setGeometry(00,00,500,400)
+                               oDir = new QDir()                       
+                               ofile = new QFileSystemModel()
+                               ofile.setrootpath(oDir.currentpath())
+                               setmodel(ofile)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot6.jpg
+       :alt: QTreeView および QFileSystemModel      
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QTreeWidget と QTreeWidgetItem の用法
+
+QTreeWidget と QTreeWidgetItem の用法
+=========================================
+
+この用例では、 QTreeWidget および QTreeWidgetItem クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("TreeWidget")
+                       setGeometry(100,100,400,400)
+
+                       layout1 = new qvboxlayout()
+
+                       tree1 = new qtreewidget(win1) {
+                               setGeometry(00,00,400,400)
+                               setcolumncount(1)
+                               myitem = new qtreewidgetitem()
+                               myitem.settext(0,"The First Step")
+                               addtoplevelitem(myitem)
+                               for  x = 1 to 10
+                                       myitem2 = new qtreewidgetitem()
+                                       myitem2.settext(0,"hello"+x)
+                                       myitem.addchild(myitem2)
+                                       for  y = 1 to 10
+                                               myitem3 = new qtreewidgetitem()
+                                               myitem3.settext(0,"hello"+x)
+                                               myitem2.addchild(myitem3)
+                                       next
+                               next
+                               setheaderlabel("Steps Tree")
+                       }
+
+                       layout1.addwidget(tree1)
+                       setlayout(layout1)
+
+                       show()
+               }
+
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot7.jpg
+       :alt: QTreeWidget と QTreeWidgetItem
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QComboBox クラスの用法
+
+QComboBox クラスの用法
+==========================
+
+この用例では、 QComboBox クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Using QComboBox")
+                       setGeometry(100,100,400,400)
+
+                       New QComboBox(win1) {
+                               setGeometry(150,100,200,30)
+                               alist = ["one","two","three","four","five"]
+                               for x in aList additem(x,0) next
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+            
+実行中のアプリケーション
+
+.. image:: ringqt_shot8.jpg
+       :alt: QComboBox
+
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; メニューバーの作成方法
+
+メニューバーの作成方法
+======================
+
+この用例では、 QMenuBar クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Using QMenubar")
+                       setGeometry(100,100,400,400)
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub2 = addmenu("Edit")
+                               sub3 = addmenu("Help")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               settext("New")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Open")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save As")
+                                       }
+                                       addaction(oAction)                      
+                                       addseparator()
+                                       oAction = new qaction(win1) {
+                                               settext("Exit")
+                                               setclickevent("myapp.quit()")
+                                       }
+                                       addaction(oAction)
+                               }
+                               sub2 { 
+                                       oAction = new qAction(win1) {
+                                               settext("Cut")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Copy")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Paste")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               settext("Select All")
+                                       }
+                                       addaction(oAction)
+                               }                               
+                               sub3 { 
+                                       oAction = new qAction(win1) {
+                                               settext("Reference")
+                                       }
+                                       addaction(oAction)                      
+                                       sub4 = addmenu("Sub Menu")
+                                       sub4 { 
+                                               oAction = new qAction(win1) {
+                                                       settext("Website")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("Forum")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("Blog")
+                                               }
+                                               addaction(oAction)
+                                       }
+                                       addseparator()
+                                               oAction = new qAction(win1) {
+                                                       settext("About")
+                                               }
+                                               addaction(oAction)                      
+                               }
+                       }
+                       show()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot9.jpg
+       :alt: QMenuBar
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; コンテキストメニュー
+
+コンテキストメニュー
+====================
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qwidget() {
+                       setwindowtitle("Context Menu")
+                       resize(400,400)
+                       myfilter = new qAllEvents(win) {
+                               setContextmenuEvent("mymenu()")
+                       }
+                       installeventfilter(myfilter)
+                       show()
+               }
+               exec()
+       }
+
+
+       func mymenu 
+
+               new qMenu(win) {
+                       oAction = new qAction(win) {
+                               settext("new")
+                               SetCLickevent("See :New")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("open")
+                               SetCLickevent("See :Open")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("save")
+                               SetCLickevent("See :Save")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("close")
+                               SetCLickevent("See :Close")
+                       }
+                       addaction(oAction)
+                       oCursor  = new qCursor()
+                       exec(oCursor.pos())
+               }
+       
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; ツールバーの作成方法
+       
+ツールバーの作成方法
+====================
+
+この用例では、 QToolBar クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QToolbar")
+                       setGeometry(100,100,600,400)
+
+                       abtns = [
+                                       new qpushbutton(win1) { settext("Add") } ,
+                                       new qpushbutton(win1) { settext("Edit") } ,
+                                       new qpushbutton(win1) { settext("Find") } ,
+                                       new qpushbutton(win1) { settext("Delete") } ,
+                                       new qpushbutton(win1) { settext("Exit") 
+                                                               setclickevent("win1.close()") } 
+                               ]
+
+                       tool1 = new qtoolbar(win1) {
+                               for x in abtns addwidget(x) addseparator() next
+                               setmovable(true)
+                               setGeometry(0,0,500,30)                 
+                               setFloatable(true)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot10.jpg
+       :alt: QToolBar
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; ステータスバーの作成方法
+       
+ステータスバーの作成方法
+========================
+
+この用例では、 QStatusBar クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QStatusbar")
+                       setGeometry(100,100,400,400)
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+                       show()
+               }
+
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot11.jpg
+       :alt: QStatusBar
+
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QDockWidget の用法
+
+QDockWidget の用法
+======================
+
+この用例では、 QDockWidget クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+       
+               win1 = new qMainWindow() {
+               
+                       setwindowtitle("QDockWidget")
+                       setGeometry(100,100,400,400)
+
+                       label1 = new qlabel(win1) {
+                               settext("Hello")
+                               setGeometry(300,300,100,100)
+                       }
+                       
+                       label2 = new qlabel(win1) {
+                               settext("How are you ?")
+                               setGeometry(100,100,100,100)
+                       }
+                       
+                       dock1 = new qdockwidget(win1,0) {
+                               setwidget(label1)
+                               SetAllowedAreas(1)
+                       }
+                       
+                       dock2 = new qdockwidget(win1,0) {
+                               setwidget(label2)
+                               SetAllowedAreas(2)
+                       }
+
+                       adddockwidget(Qt_LeftDockWidgetArea,dock1,Qt_Horizontal)
+                       adddockwidget(Qt_LeftDockWidgetArea,dock2,Qt_Vertical)
+
+                       show()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot12.jpg
+       :alt: QDockWidget
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QTabWidget の用法
+
+QTabWidget の用法
+=====================
+
+この用例では、 QTabWidget クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QTabWidget")
+                       setGeometry(100,100,400,400)
+
+                       page1 = new qwidget() {
+                               new qpushbutton(page1) {
+                                       settext("The First Page")
+                               }
+                       }
+
+                       page2 = new qwidget() {
+                               new qpushbutton(page2) {
+                                       settext("The Second Page")
+                               }
+                       }
+
+                       page3 = new qwidget() {
+                               new qpushbutton(page3) {
+                                       settext("The Third Page")
+                               }
+                       }
+
+                       tab1 = new qtabwidget(win1) {
+                               inserttab(0,page1,"Page 1")
+                               inserttab(1,page2,"Page 2")
+                               inserttab(2,page3,"Page 3")
+                               setGeometry(100,100,400,400)
+                       }               
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+                       showMaximized()
+               }
+
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot13.jpg
+       :alt: QTabWidget
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QTableWidget の用法
+
+QTableWidget の用法
+=======================
+
+この用例では、 QTableWidget クラスを学びます。
+
+.. code-block:: ring
+
+       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             
+
+                       }
+
+                       setcentralwidget(table1)
+                       show()
+
+               }
+
+               exec()
+       }
+
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot14.jpg
+       :alt: QTableWidget
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QProgressBar の用法
+       
+QProgressBar の用法
+=======================
+
+この用例では、 QProgressBar クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+
+                       setGeometry(100,100,600,150)
+                       setwindowtitle("Using QProgressBar")
+
+                       for x = 10 to 100 step 10
+                               new qprogressbar(win1) {        
+                                       setGeometry(100,x,350,30)
+                                       setvalue(x)
+                               }
+                       next
+
+                       show()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot15.jpg
+       :alt: QProgressBar
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QSpinBox の用法
+
+QSpinBox の用法
+===================
+
+この用例では、 QSpinBox クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setGeometry(100,100,450,260)
+                       setwindowtitle("Using QSpinBox")
+                               new qspinbox(win1) {    
+                                       setGeometry(50,100,350,30)
+                                       setvalue(50)
+                               }
+                       show()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot16.jpg
+       :alt: QSpinBox
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QSlider の用法
+
+QSlider の用法
+==================
+
+この用例では、 QSlider クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setGeometry(100,100,500,400)
+                       setwindowtitle("Using QSlider")
+
+                       new qslider(win1) {     
+                               setGeometry(100,100,50,130)
+                               settickinterval(50)                             
+                       }
+
+                       new qslider(win1) {     
+                               setGeometry(100,250,250,30)
+                               settickinterval(50)     
+                               setorientation(Qt_Horizontal)                   
+                       }
+
+                       show()
+
+               }
+
+               exec()
+       }
+       
+実行中のアプリケーション
+
+.. image:: ringqt_shot17.jpg
+       :alt: QSlider
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QDateEdit の用法
+
+QDateEdit の用法
+====================
+
+この用例では、 QDateEdit クラスを学びます。
+
+.. code-block:: ring
+       
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QDateEdit")
+                       setGeometry(100,100,250,100)
+                       new qdateedit(win1) {   
+                               setGeometry(20,40,220,30)
+                       }
+                       show()
+               }
+               exec()
+       }
+       
+実行中のアプリケーション
+
+.. image:: ringqt_shot18.jpg
+       :alt: QDateEdit
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QDial の用法
+       
+
+QDial の用法
+================
+
+この用例では、 QDial クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setGeometry(100,100,450,500)
+                       setwindowtitle("Using QDial")
+                       new qdial(win1) {       
+                               setGeometry(100,100,250,300)
+                       }
+                       show()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot19.jpg
+       :alt: QDial
+
+その他の用例:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+                        win1 = new qMainWindow() 
+                       {
+                               setGeometry(100,100,450,500)
+                               setwindowtitle("Using QDial")
+                               button1 = new QPushButton(win1){
+                                       setGeometry(100,350,100,30)
+                                       settext("Increment")
+                                       setClickEvent("pIncrement()")
+                               }
+
+                               button2 = new QPushButton(win1){
+                                       setGeometry(250,350,100,30)
+                                       settext("Decrement")
+                                       setClickEvent("pDecrement()")                                                                              
+                               } 
+                               pdial = new qdial(win1) {
+                                       setGeometry(100,50,250,300)
+                                       setNotchesVisible(true)
+                                       setValue(50)
+                                       SetValueChangedEvent("pDialMove()")
+                               }
+                               lineedit1 = new qlineedit(win1) {
+                                       setGeometry(200,400,50,30)
+                                       setalignment(Qt_AlignHCenter)
+                                       settext(string(pdial.value()))
+                                       setreturnPressedEvent("pPress()") 
+                               } 
+                               show()
+                         }
+               exec()
+       }
+
+       func pIncrement
+               pdial{val=value()}
+               pdial.setvalue(val+1)  
+               lineedit1{settext(string(val+1))}   
+
+       func pDecrement
+               pdial{val=value()}
+               pdial.setvalue(val-1)   
+               lineedit1{settext(string(val-1))}  
+
+       func pPress
+               lineedit1{val=text()}
+               pdial.setvalue(number(val)) 
+
+       func pDialMove
+               lineedit1.settext(""+pdial.value())
+
+
+.. image:: usingqdial.png
+       :alt: QDial - 第二用例
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QWebView の用法
+
+QWebView の用法
+===================
+
+この用例では、 QWebView クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QWebView")
+                       myweb = new qwebview(win1) {    
+                               setGeometry(10,10,600,600)
+                               loadpage(new qurl("http://google.com"))
+                       }
+                       setcentralwidget(myweb)
+                       showMaximized()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot20.jpg
+       :alt: QWebView
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QCheckBox の用法
+       
+QCheckBox の用法
+====================
+
+この用例では、 QCheckBox クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QCheckBox")
+                       new qcheckbox(win1) {   
+                               setGeometry(100,100,100,30)
+                               settext("New Customer!")
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot21.jpg
+       :alt: QCheckBox
+
+
+その他の用例:
+
+.. code-block:: ring
+
+        Load "guilib.ring"
+
+        New qApp {
+                win1 = new qMainWindow() {
+                        setGeometry(100,100,400,300)
+                        setwindowtitle("Using QCheckBox")
+                        
+                        ### 0: チェックされていない。  1: チェックされた。
+                        
+                        CheckBox = new qcheckbox(win1) {
+                                setGeometry(100,100,160,30)
+                                settext("New Customer!")
+                                setclickedEvent("HandleClickEvent()")
+                        }                   
+                                    
+                        show()                            
+                }
+                exec()
+        }
+
+        Func HandleClickEvent
+            
+            if CheckBox.isChecked() = 1 
+                CheckBox.settext("New Customer. Check 1-ON")
+            else
+                CheckBox.settext("New Customer. Check 0-OFF")
+            ok
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QRadioButton と QButtonGroup の用法
+       
+QRadioButton と QButtonGroup の用法
+=======================================
+
+この用例では、 QRadioButton および QButtonGroup クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Using QRadioButton")
+
+                       new qradiobutton(win1) {        
+                               setGeometry(100,100,100,30)
+                               settext("One")
+                       }
+                       new qradiobutton(win1) {        
+                               setGeometry(100,150,100,30)
+                               settext("Two")
+                       }
+                       new qradiobutton(win1) {        
+                               setGeometry(100,200,100,30)
+                               settext("Three")
+                       }
+
+
+                       group2  = new qbuttongroup(win1) {
+                               btn4 = new qradiobutton(win1) { 
+                                       setGeometry(200,150,100,30)
+                                       settext("Four")
+                               }
+                               btn5 = new qradiobutton(win1) { 
+                                       setGeometry(200,200,100,30)
+                                       settext("Five")
+                               }
+                               addbutton(btn4,0)
+                               addbutton(btn5,0)
+
+                       }
+
+                       showMaximized()
+
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot22.jpg
+       :alt: QRadioButton と QButtonGroup の用法
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QLabel へハイパーリンクを追加するには
+
+QLabel へハイパーリンクを追加するには
+=====================================
+
+この用例では、 QLabel クラスでハイパーリンクを作成する方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QLabel - Hyperlink")
+                       new qlabel(win1) {      
+                               setGeometry(100,100,100,30)
+                               setopenexternallinks(true)
+                               settext('<a href="http://google.com">Google</a>')
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot23.jpg
+       :alt: ハイパーリンク
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QVideoWidget と QMediaPlayer
+
+QVideoWidget と QMediaPlayer
+=============================
+
+この用例では、 QVideoWidget および QMediaPlayer クラスで動画のグループを
+異なる位置から同時再生する方法を学びます。
+
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("QVideoWidget")
+                       
+                       btn1 = new qpushbutton(win1)    {
+                               setGeometry(0,0,100,30)
+                               settext("play")
+                               setclickevent("player.play() player2.play() 
+                                                          player3.play() player4.play()")
+                       }
+
+                       videowidget = new qvideowidget(win1) {
+                               setGeometry(50,50,600,300)
+                               setstylesheet("background-color: black")                        
+                       }
+
+                       videowidget2 = new qvideowidget(win1) {
+                               setGeometry(700,50,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+
+                       videowidget3 = new qvideowidget(win1) {
+                               setGeometry(50,370,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+                       videowidget4 = new qvideowidget(win1) {
+                               setGeometry(700,370,600,300)
+                               setstylesheet("background-color: black")
+                       }
+
+                       player = new qmediaplayer() {
+                               setmedia(new qurl("1.mp4"))
+                               setvideooutput(videowidget)
+                               setposition(35*60*1000)
+                               
+                       }               
+
+                       player2 = new qmediaplayer() {
+                               setmedia(new qurl("2.mp4"))
+                               setvideooutput(videowidget2)
+                               setposition(23*60*1000)
+                       }               
+
+                       player3 = new qmediaplayer() {
+                               setmedia(new qurl("3.mp4"))
+                               setvideooutput(videowidget3)
+                               setposition(14.22*60*1000)
+                       }               
+
+                       player4 = new qmediaplayer() {
+                               setmedia(new qurl("4.avi"))
+                               setvideooutput(videowidget4)
+                               setposition(8*60*1000)
+                       }               
+                       
+                       showfullscreen()                
+
+               }
+
+               exec()
+
+       }
+
+       
+実行中のアプリケーション
+
+.. image:: ringqt_shot24.jpg
+       :alt: QVideoWidget
+
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QFrame の用法
+
+QFrame の用法
+=================
+
+この用例では、 QFrame クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("Using QFrame")
+                       for x = 0 to 10
+                               frame1 = new qframe(win1,0) {   
+                                       setGeometry(100,20+50*x,400,30)
+                                       setframestyle(QFrame_Raised | QFrame_WinPanel)                          
+                               }
+                       next
+                       showMaximized()
+               }
+               exec()
+       }
+
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot25.jpg
+       :alt: QFrame
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QLabel を使用した画像の表示方法
+       
+QLabel を使用した画像の表示方法
+===============================
+
+QLabel ウイジェットを使用した画像の表示方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QLabel - Display image")
+                       new qlabel(win1) {      
+                               image = new qpixmap("b:/mahmoud/photo/advice.jpg")
+                               setpixmap(image)
+                               setGeometry(0,0,image.width(),image.height())
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot26.jpg
+       :alt: 画像の表示
+
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; メニューバーとスタイルシートの用例
+
+メニューバーとスタイルシートの用例
+==================================
+
+メニューバーの作成、およびウィンドウのスタイルシートの設定方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Menubar")
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               settext("New")          
+                                               setenabled(false)
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Open")
+                                               setcheckable(true)
+                                               setchecked(true)
+                                               setstatustip("open new file")                                    
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               settext("Save As")
+                                       }
+                                       addaction(oAction)
+                               
+                                       addseparator()
+                                       oAction = new qaction(win1)
+                                       oAction.settext("Exit")
+                                       oAction.setclickevent("myapp.quit()")
+                                       addaction(oAction)
+                               }                       
+
+                       }
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+                       setmenubar(menu1)
+                       setmousetracking(true)
+                       setstatusbar(status1)
+                       setStyleSheet("color: black; selection-color: black;
+                       selection-background-color:white ;
+                       background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
+                       stop: 0 #eef, stop: 1 #ccf);")
+                       showmaximized()
+               }
+               exec()
+       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot27.jpg
+       :alt: メニューバー
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QLineEdit イベントと QMessageBox
+
+QLineEdit イベントと QMessageBox
+================================
+
+QLineEdit イベントの用法、およびメッセージボックスの表示方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+
+               win1 = new qWidget() {
+
+                       setwindowtitle("Welcome")
+                       setGeometry(100,100,400,300)
+
+
+                       label1 = new qLabel(win1) {
+                               settext("What is your name ?")
+                               setGeometry(10,20,350,30)
+                               setalignment(Qt_AlignHCenter)
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(10,200,100,30)
+                               settext("Say Hello")
+                               setclickevent("pHello()")
+                       }
+
+                       btn1 = new qpushbutton(win1) {
+                               setGeometry(150,200,100,30)
+                               settext("Close")
+                               setclickevent("pClose()")
+                       }
+
+                       lineedit1 = new qlineedit(win1) {
+                               setGeometry(10,100,350,30)
+                               settextchangedevent("pChange()")
+                               setreturnpressedevent("penter()")
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pHello  
+               lineedit1.settext( "Hello " + lineedit1.text())
+
+       Func pClose 
+               MyApp.quit()
+
+       Func pChange
+               win1 { setwindowtitle( lineedit1.text() ) }
+
+       Func pEnter
+               new qmessagebox(win1) {
+                       setwindowtitle("Thanks")
+                       settext("Hi " + lineedit1.text() )
+                       setstylesheet("background-color : white")
+                       show()
+               }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot28.jpg
+       :alt: QLineEdit イベントと QMessageBox
+
+.. image:: ringqt_shot29.jpg
+       :alt: QLineEdit イベントと QMessageBox
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; そのほかのウイジェットイベント
+
+そのほかのウイジェットイベント
+==============================
+
+各 Qt シグナルは RingQt で使えます。シグナル名の前に設定を行うことで追加、 
+およびイベントのコードを決定するために使用できるメソッドを取得するためにシグナル名の後にイベントを追加します。
+
+例えば QProgressBar クラスにはシグナル名である valueChanged() があります。
+使用するには setValueChangedEvent() 関数を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("QProgressBar valueChanged Event")
+
+                       progress1 = new qprogressbar(win1) {    
+                               setGeometry(100,100,350,30)
+                               setvalue(10)
+                               setvaluechangedevent("pChange()")
+                       }
+
+                       new qpushbutton(win1) {
+                               setGeometry(10,10,100,30)                       
+                               settext("increase")
+                               setclickevent("pIncrease()")
+                       }
+
+                       showMaximized()
+
+               }
+
+               exec()
+       }
+
+       func pIncrease
+               progress1 { setvalue(value()+1)  }
+
+       func pchange
+               win1.setwindowtitle("value : " + progress1.value() )
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot30.jpg
+       :alt: qProgressBar クラスの valueChanged イベント
+
+別の用例は QCheckBox クラスの stateChanged イベントです。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = new qMainWindow() {
+                       setwindowtitle("QCheckBox")
+                       new qcheckbox(win1) {   
+                               setGeometry(100,100,100,30)
+                               settext("New Customer!")
+                               setstatechangedevent("pchange()")
+                       }
+                       showMaximized()
+               }
+               exec()
+       }
+
+       Func pChange
+
+               new qMessageBox(Win1) {
+                       setWindowTitle("Checkbox")
+                       settext("State Changed!")
+                       show()
+               }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot31.jpg
+       :alt: qProgressBar クラスの valueChanged イベント
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QTimer クラスの用法
+
+QTimer クラスの用法
+=======================
+
+この用例では、 QTimer クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setgeometry(100,100,200,70)
+                       setwindowtitle("Timer")
+                       label1 = new qlabel(win1) {
+                               setgeometry(10,10,200,30)
+                               settext(thetime()) 
+                       }
+                       new qtimer(win1) {
+                               setinterval(1000)
+                               settimeoutevent("pTime()")
+                               start()
+                       }
+                       show()
+               }
+               exec()
+       }
+
+       func ptime
+               label1.settext(thetime())
+
+       Func thetime
+               return "Time : " + Time()
+
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot32.jpg
+       :alt: QTimer クラス
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QProgressBar およびタイマーの用法
+
+QProgressBar およびタイマーの用法
+=====================================
+
+この用例では、“アニメーション”つきの QProgressBar クラスとタイマーを学びます。
+
+.. code-block:: ring   
+
+       ###------------------------------------
+       ### プログレスバーとタイマーの用例
+       
+       Load "guilib.ring"
+       
+       new qApp
+       {
+           win1 = new qwidget()
+           {
+               setgeometry(100,100,400,100)
+               setwindowtitle("Timer and ProgressBar")
+       
+               LabelMan = new qlabel(win1)
+               {
+                   setgeometry(10,10,200,30)
+                   settext(theTime())          ### ==>> 関数
+               }
+       
+               TimerMan = new qtimer(win1)
+               {
+                   setinterval(1000)
+                   settimeoutevent("pTime()")  ### ==>> 関数
+                   start()
+               }
+       
+               BarMan = new qprogressbar(win1)
+               {
+                   setGeometry(100,50,300,10)  ###  X, Y 位置、長さ、チックネス
+                   setvalue(0)                 ###  パーセントが塗りつぶされた
+               }
+       
+               show()
+           }
+           exec()
+       }
+       
+       func pTime
+               LabelMan.settext(theTime())     ### ==>> 関数
+       
+               Increment = 10
+               if BarMan.value() >= 100        ### プログレスバーの開始後.
+                   BarMan.setvalue(0)
+               ok
+               BarMan{ setvalue(value() + Increment) }
+       
+       Func theTime
+               return "Time : " + Time()
+
+.. image:: ringqt_shot15-B.jpg
+       :alt: QProgressBar
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QLabel を使用した寸法変更画像の表示方法
+
+QLabel を使用した寸法変更画像の表示方法
+=======================================
+
+この例では QLabel ウィジェットで“アニメーションつき”の画像を表示して寸法を変更する方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       #----------------------------------------------------
+       # 必携: image = "C:\RING\bin\stock.jpg"
+
+       # imageStock: 伸張する画像の開始寸法
+
+       imageW = 200 ;  imageH = 200 ; GrowBy = 4
+
+       ###----------------------------------------------------
+       ### ウィンドウと箱の大きさの寸法
+
+       WinWidth = 1280 ; WinHeight = 960
+       BoxWidth = WinWidth -80 ; BoxHeight = WinHeight -80
+
+       ###----------------------------------------------------
+
+       New qapp {
+
+               win1 = new qwidget() {
+
+                       setgeometry(50,50, WinWidth,WinHeight)
+                       setwindowtitle("Animated Image - Display Image Scaled and Resized")
+
+                       imageStock = new qlabel(win1) {
+
+                               image = new qpixmap("C:\RING\bin\stock.jpg")
+                               AspectRatio = image.width() / image.height()
+
+                               imageW = 200
+                               imageH = imageH / AspectRatio
+
+                               ### 水平寸法、垂直寸法、アスペクト比、変形
+                               setpixmap(image.scaled(imageW , imageH ,0,0))   
+
+                               PosLeft = (BoxWidth  - imageW ) / 2
+                               PosTop  = (BoxHeight - imageH ) / 2
+                               setGeometry(PosLeft,PosTop,imageW,imageH)
+
+                       }
+
+                       TimerMan = new qtimer(win1) {
+                               setinterval(100)            ### 100 ミリ秒間隔です。
+                               settimeoutevent("pTime()")  ### ==>> 関数
+                               start()
+                       }
+
+                       show()
+               }
+       exec()
+       }
+
+
+       ###------------------------------------------------------
+       ### TimerMan 関数: 100 ミリ秒間隔で呼び出します。
+
+       func pTime
+
+               ### 画像の大きさがウィンドウ領域に達したときにタイマーを停止します。
+               if imageW > BoxWidth
+                       TimerMan.stop()
+                       imageStock.clear()      ### 画像の消去
+               ok
+
+               ## 画像の伸張
+               imageW += GrowBy
+               imageH  = imageW / AspectRatio
+
+               ### 画像の寸法変更: 水平寸法、垂直寸法、アスペクト比、変形
+               imageStock.setpixmap(image.scaled(imageW , imageH ,0,0))
+
+               ### 画像を中央へ
+               PosLeft = (WinWidth  - imageW ) / 2
+               PosTop  = (WinHeight - imageH ) / 2
+               imageStock.setGeometry(PosLeft,PosTop,imageW,imageH)
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QFileDialog クラスの用法
+
+QFileDialog クラスの用法
+============================
+
+用例:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("open file")
+                       setgeometry(100,100,400,400)
+                       new qpushbutton(win1) {
+                               setgeometry(10,10,200,30)
+                               settext("open file")
+                               setclickevent("pOpen()")
+                       }
+                       show()
+               }
+               exec()
+       }
+
+       Func pOpen
+               new qfiledialog(win1) {
+                       cName = getopenfilename(win1,"open file","c:\","source files(*.ring)")
+                       win1.setwindowtitle(cName)
+               }
+               
+実行中のアプリケーション
+
+.. image:: ringqt_shot33.jpg
+       :alt: QFileDialog クラス
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QPainter を使用した描画方法
+
+QPainter を使用した描画方法
+===========================
+
+この用例では、 QPainter クラスを使用した描画方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("Drawing using QPainter")
+                       setgeometry(100,100,500,500)
+                       label1 = new qlabel(win1) {
+                               setgeometry(10,10,400,400)
+                               settext("")
+                       }
+                       new qpushbutton(win1) {
+                               setgeometry(200,400,100,30)
+                               settext("draw")
+                               setclickevent("draw()")
+                       }
+
+                       show()
+               }
+               exec()
+       }
+
+       Func draw
+                       p1 = new qpicture()
+                       color = new qcolor() {
+                               setrgb(0,0,255,255)
+                       }
+                       pen = new qpen() {
+                               setcolor(color)
+                               setwidth(10)
+                       }
+                       new qpainter() {
+                               begin(p1)
+                               setpen(pen)
+                               drawline(500,150,950,450)
+                               drawline(950,550,500,150)
+                               endpaint()
+                       }
+                       label1 { setpicture(p1) show() }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot34.jpg
+       :alt: QPainter クラス
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QPrinter を使用した印刷方法
+
+QPrinter を使用した印刷方法
+===========================
+
+この用例では、 QPrinter で PDF ファイルを印刷する方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer")
+                       setgeometry(100,100,500,500)
+                       myweb = new qwebview(win1) {    
+                               setgeometry(100,100,1000,500)                                           
+                               loadpage(new qurl("http://google.com"))
+                       } 
+                       new qpushbutton(win1) {
+                               setGeometry(20,20,100,30)                       
+                               settext("Print")
+                               setclickevent("print()")
+                       }
+                       showmaximized()
+               }
+               exec()
+       }
+       
+       func print
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      # 1 = pdf
+                       setoutputfilename("test.pdf")
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)                     
+                               setfont(myfont)
+                               drawtext(100,100,"test")
+                               printer1.newpage()
+                               drawtext(100,100,"test2")                       
+                               endpaint()
+                       }
+               }
+
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      
+                       setoutputfilename("test2.pdf")
+                       myweb.print(printer1)
+                       myweb.show()
+               }
+
+               system ("test.pdf")
+               system ("test2.pdf")
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QPrintPreviewDialog の用法
+
+QPrintPreviewDialog の用法
+==============================
+
+この用例では、 QPrintPreviewDialog クラスの用法を学びます。
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer Preview Dialog")
+                       setgeometry(100,100,800,880)
+                       printer1 = new qPrinter(0)
+                       show()
+                       oPreview = new qPrintPreviewDialog(printer1) {
+                               setParent(win1)
+                               move(10,10) 
+                               setPaintrequestedevent("printPreview()")
+                               exec()
+                       }
+               }
+               exec()
+       }
+
+       func printPreview
+               printer1  {
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)
+                               setfont(myfont)
+                               drawtext(100,100,"Test - Page (1)")
+                               printer1.newpage()
+                               drawtext(100,100,"Test - Page (2)")
+                               printer1.newpage()
+                               myfont2 = new qfont("Times",14,-1,0)
+                               setfont(myfont2)
+                               for x = 1 to 30
+                                       drawtext(100,100+(20*x),"Number : " + x)
+                               next 
+                               endpaint()
+                       }
+               }
+
+スクリーンショット:
+
+.. image:: printpreviewdialog.png
+       :alt: 印刷プレビューのダイアログ
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; 複数ウィンドウの作成方法
+
+複数ウィンドウの作成方法
+========================
+
+この用例は、複数ウィンドウの作成をするためのデモです。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       app1 = new qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("First")
+                       setgeometry(100,100,500,500)
+
+                       new qpushbutton(win1) {
+                               setgeometry(100,100,100,30)
+                               settext("close")
+                               setclickevent("app1.quit()")
+                       }
+
+                       new qpushbutton(win1) {
+                               setgeometry(250,100,100,30)
+                               settext("Second")
+                               setclickevent("second()")
+                       }
+
+                       showmaximized()
+               }
+               exec()
+       }
+        
+       func second
+               win2 = new qwidget() {
+                       setwindowtitle("Second")
+                       setgeometry(100,100,500,500)
+                       setwindowflags(Qt_dialog)
+                       show()
+               }
+実行中のアプリケーション
+
+.. image:: ringqt_shot35.jpg
+       :alt: 複数ウィンドウの作成方法
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; 音声の再生
+
+音声の再生
+=============
+
+用例:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       new qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("play sound!") show()    
+               }
+               new qmediaplayer()      {
+                       setmedia(new qurl("footstep.wav"))
+                       setvolume(50) play()    
+               }
+               exec()
+       }
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QColorDialog クラスの用法
+
+QColorDialog クラスの用法
+=============================
+
+用例: 
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       oApp = new myapp { start() }
+
+       Class MyApp
+
+               oColor  win1
+
+               Func start
+
+                       myapp = new qapp 
+
+                       win1 = new qMainWindow() {
+                               setwindowtitle("Color Dialog")
+                               setgeometry(100,100,400,400)
+                       }
+
+                       new qpushbutton(win1) {
+                               setgeometry(10,10,100,30)
+                               settext("Get Color")
+                               setclickevent("oApp.pColor()")
+                       }
+
+                       win1.show()
+                       myapp.exec()
+
+
+               Func pColor
+                       myobj = new qcolordialog()
+                       aColor = myobj.GetColor()
+                       r=acolor[1] g=acolor[2] b=acolor[3]      
+                       win1.setstylesheet("background-color: rgb("+r+", " + g+ "," + b + ")")
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot37.jpg
+       :alt: QColorDialog クラス
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; qLCDNumber クラスの用法
+
+qLCDNumber クラスの用法
+===========================
+
+この用例では、 qLCDNumber クラスを学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp 
+       {
+               win1 = new qWidget() 
+               {
+                       setwindowtitle("LCD Number")
+                       setgeometry(100,100,250,120)
+
+                       new qLCDNumber(win1) 
+                       {
+                               setgeometry(10,10,100,40)
+                               display(100)    
+                               
+                       }
+
+                       new qLCDNumber(win1) 
+                       {
+                               setgeometry(10,60,100,40)
+                               display(80)     
+                               
+                       }
+
+                       show()
+               }
+       
+               exec()
+       }
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot38.jpg
+       :alt: QLCDNumber クラス
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; 移動可能ラベルの用例
+
+移動可能ラベルの用例
+======================
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+
+               win1 = new qWidget() 
+               {
+
+                       label1 = new qLabel(win1) 
+                       {
+                               setText("Welcome")
+                               setgeometry(10,10,200,50)
+                               setstylesheet("color: purple ; font-size: 30pt;")
+                       }
+
+                       new qTimer(win1)
+                       {
+                               setInterVal(10)
+                               setTimeOutEvent("pMove()")
+                               start()
+                       }
+
+                       setWindowTitle("Movable Label")
+                       setgeometry(100,100,600,80)
+                       setStyleSheet("background-color: white;")
+                       show()
+
+               }
+
+               exec()
+       }
+
+       Func pMove
+               label1 
+               {
+                       move(x()+1,y())
+                       if x() > 600
+                               move(10,y())
+                       ok
+               }
+       
+       
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot39.jpg
+       :alt: 移動可能ラベル
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QMessagebox の用例
+
+QMessagebox の用例
+===================
+
+メッセージ・ボックスの出力を確認する方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               win1 = new qWidget() 
+               {
+                       label1 = new qpushbutton(win1) 
+                       {
+                               setText("Test")
+                               setgeometry(10,10,200,50)
+                               setstylesheet("color: purple ; font-size: 30pt;")
+                               setclickevent("pWork()")
+                       }
+                       setWindowTitle("Messagebox")
+                       setgeometry(100,100,600,80)
+                       setStyleSheet("background-color: white;")
+                       show()
+               }
+               exec()
+       }
+        
+       func pWork
+               new qmessagebox(win1)
+               {
+                       setwindowtitle("messagebox title")
+                       settext("messagebox text")
+                       setInformativeText("Do you want to save your changes?")
+                       setstandardbuttons(QMessageBox_Yes | QMessageBox_No | QMessageBox_Close)
+                       result = exec()
+                       win1 {
+                               if result = QMessageBox_Yes
+                                       setwindowtitle("Yes")
+                               but result = QMessageBox_No
+                                       setwindowtitle("No")
+                               but result = QMessageBox_Close
+                                       setwindowtitle("Close")
+                               ok
+                       }
+               }
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot40.jpg
+       :alt: QMessageBox の実行結果
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QInputDialog クラスの用法
+
+QInputDialog クラスの用法
+=============================
+
+この用例では、 QInputDialog クラスの用法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New QApp {
+
+               Win1 = New QWidget () {
+
+                       SetGeometry(100,100,400,400)
+                       SetWindowTitle("Input Dialog")
+
+                       New QPushButton(win1) 
+                       {
+
+                               SetText ("Input Dialog")
+                               SetGeometry(100,100,100,30)
+                               SetClickEvent("pWork()")
+                       }
+
+                       Show()
+               }
+
+               exec()
+       }
+
+       Func pWork
+               oInput = New QInputDialog(win1)
+               {
+                       setwindowtitle("What is your name?")
+                       setgeometry(100,100,400,50)
+                       setlabeltext("User Name")
+                       settextvalue("Mahmoud")
+                       lcheck = exec()
+                       if lCheck win1.setwindowtitle(oInput.textvalue()) ok
+               }
+               
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot41.jpg
+       :alt: QInputDialog
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; ダイアログ関数
+
+ダイアログ関数
+==============
+
+この関数があります。
+
+.. code-block:: none
+
+       SetDialogIcon(cIconFile)
+       MsgInfo(cTitle,cMessage)
+       ConfirmMsg(cTitle,cMessage) --> lResult
+       InputBox(cTitle,cMessage) --> cValue
+       InputBoxInt(cTitle,cMessage) --> nValue
+       InputBoxNum(cTitle,cMessage) --> nValue
+       InputBoxPass(cTitle,cMessage) --> cValue
+
+用例
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp 
+       {
+               SetDialogIcon("notepad.png")
+               msginfo(:Ring,:Welcome)
+               see confirmMsg(:Ring,"Are you sure?") + nl
+               see InputBoxNum(:Ring,"Enter Number(double) :") + nl
+               see InputBox(:Ring,"Enter Value :") + nl
+               see InputBoxInt(:Ring,"Enter Number(int)") + nl
+               see InputBoxPass(:Ring,"Enter Password") +nl
+       }
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; キー入力とマウス移動イベント
+
+キー入力とマウス移動イベント
+==============================
+
+この用例では、イベントフィルタによりキー入力と
+マウスの移動イベントを検知するための方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+
+               win1 = new qWidget()
+               {
+                       setWindowTitle("Test using Event Filter!")
+                       setGeometry(100,100,400,400)
+                       setmousetracking(true)
+                       myfilter = new qallevents(win1)
+                       myfilter.setKeyPressEvent("pWork()")
+                       myfilter.setMouseButtonPressevent("pClick()")
+                       myfilter.setmousemoveevent("pMove()")
+
+                       installeventfilter(myfilter)
+
+                       show()
+               }
+
+               exec()
+       }
+
+       func pWork
+               win1.setwindowtitle('KeyPress! : ' + myfilter.getkeycode())
+
+       func pClick
+               new qmessagebox(win1) {
+                       setgeometry(100,100,400,100)
+                       setwindowtitle("click event!")
+                       settext("x : " + myfilter.getx() + 
+                               " y : " + myfilter.gety() + " button : " +
+                                myfilter.getbutton() )
+                       show()
+               }
+
+       func pMove
+               win1.setwindowtitle("Mouse Move , X : " + myfilter.getx() +
+                                   " Y : " + myfilter.gety() )
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot42.jpg
+       :alt: キー入力とマウス移動イベント
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; マウスを使用したオブジェクトの移動方法
+
+マウスを使用したオブジェクトの移動方法
+======================================
+
+ユーザがラベルを移動できる移動可能なオブジェクトをプログラムする方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       lPress = false
+       nX = 0
+       nY = 0
+
+       new qApp {
+
+               win1 = new qWidget()
+               {
+
+                       setWindowTitle("Move this label!")
+                       setGeometry(100,100,400,400)
+                       setstylesheet("background-color:white;")
+
+                       Label1 = new qLabel(Win1){
+                               setGeometry(100,100,200,50)
+                               setText("Welcome")
+                               setstylesheet("font-size: 30pt")
+                               myfilter = new qallevents(label1)
+                               myfilter.setEnterevent("pEnter()")
+                               myfilter.setLeaveevent("pLeave()")
+                               myfilter.setMouseButtonPressEvent("pPress()")
+                               myfilter.setMouseButtonReleaseEvent("pRelease()")
+                               myfilter.setMouseMoveEvent("pMove()")
+                               installeventfilter(myfilter)
+                       }
+
+                       show()
+               }
+
+               exec()
+       }
+
+       Func pEnter
+               Label1.setStyleSheet("background-color: purple; color:white;font-size: 30pt;")
+
+       Func pLeave
+               Label1.setStyleSheet("background-color: white; color:black;font-size: 30pt;")
+
+       Func pPress
+               lPress = True   
+               nX = myfilter.getglobalx()
+               ny = myfilter.getglobaly()
+
+       Func pRelease
+               lPress = False
+               pEnter()
+
+       Func pMove
+               nX2 = myfilter.getglobalx()
+               ny2 = myfilter.getglobaly()
+               ndiffx = nX2 - nX
+               ndiffy = nY2 - nY
+               if lPress
+                       Label1 {
+                               move(x()+ndiffx,y()+ndiffy)
+                               setStyleSheet("background-color: Green;
+                                        color:white;font-size: 30pt;")
+                               nX = nX2
+                               ny = nY2
+                       }
+
+               ok
+
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot43.jpg
+       :alt: マウスで移動できるオブジェクト
+       
+.. image:: ringqt_shot44.jpg
+       :alt: マウスで移動できるオブジェクト
+       
+.. image:: ringqt_shot45.jpg
+       :alt: マウスをで移動できるオブジェクト
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; GUI クラスからの継承
+
+GUI クラスからの継承
+============================
+
+用例:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New MyWindow()
+
+       new qApp { exec() }
+
+       class mywindow from qwidget
+               Func init
+                       super.init()
+                       setwindowtitle("First Window")
+                       setgeometry(100,100,400,400)
+                       setstylesheet("background-color: purple;")
+                       settooltip("my first window!")
+                       show()
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot46.jpg
+       :alt: GUI クラスからの継承
+       
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; QDesktopWidget クラスの用法
+
+QDesktopWidget クラスの用法
+===============================
+
+この用例では、 QDesktopWidget の用法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               win1 = New qWidget()
+               {
+                       resize(400,400)
+                       btn1 = new qPushbutton(win1)
+                       {
+                               setText("Center")
+                               move(100,100)
+                               resize(100,30)
+                               setClickEvent("pCenter()")
+                       }
+
+                       Show()
+               }
+
+               exec()
+       }
+
+       Func pCenter
+               oDesktop  = new qDesktopWidget()
+               oRect = oDesktop.screenGeometry( oDesktop.primaryScreen()  ) 
+               win1.move((oRect.width()-win1.width()) /2 , (oRect.Height()-win1.Height())/2 )
+               win1.show()
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot47.jpg
+       :alt: Using QDesktopWidget クラス
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; テキストの回転
+
+テキストの回転
+==============
+
+この用例では、タイマーでテキストを回転しています。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       nAngle  = 0
+
+       New qapp {
+               win1 = new qwidget() {
+                       setwindowtitle("Rotate Text")
+                       resize(800,600)
+                       label1 = new qlabel(win1) {
+                               settext("")
+                               myfilter = new qallevents(win1)
+                               myfilter.setMouseButtonPressevent("pClick()")
+                               installeventfilter(myfilter)
+                       }
+                       new qtimer(win1) {
+                               setinterval(50)
+                               settimeoutevent("pTime()")
+                               start()
+                       }
+                       pDraw()
+                       L1 = new qVBoxLayout() { AddWidget(Label1) } SetLayout(L1)
+                       showMaximized()
+               }
+               exec()
+       }
+
+       Func pDraw
+               p1 = new qpicture()
+               color = new qcolor() {
+                       setrgb(0,0,255,255)
+               }
+               pen = new qpen() {
+                       setcolor(color)
+                       setwidth(50)
+               }
+               painter = new qpainter() {
+                       begin(p1)               
+                               setpen(pen)
+                               myfont = font()
+                               myfont.setpointsize(50)
+                               setfont(myfont)
+                               rotate(nAngle)
+                               drawtext(350,0*nAngle,"welcome")                 
+                               drawtext(0,0*nAngle,"welcome")           
+                       endpaint()
+                         }
+               label1 {
+                       setpicture(p1)  
+                       show() 
+               }
+
+       Func pClick
+               win1 { setwindowtitle("Click Event") } 
+
+       Func pTime
+               nAngle++
+               if nAngle = 90
+                       nAngle = 10
+               ok
+               pDraw()
+
+実行中のアプリケーション
+
+.. image:: shotrotatetext.png
+       :alt: テキスト回転の用例
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; フォーカスの変更
+
+フォーカスの変更
+================
+
+この用例は、 ENTER キーでフォーカスを変更します。
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qWidget() {
+                       resize(600,600)
+                       SetWindowTitle("Change Focus")
+                       text1 = new qLineEdit(win)
+                       text2 = new qLineEdit(win)
+                       text3 = new qLineEdit(win)
+                       text4 = new qLineEdit(win)
+                       layout1 = new qVBoxLayout() {
+                               AddWidget(text1)
+                               AddWidget(text2)
+                               AddWidget(text3)
+                               AddWidget(text4)
+
+                       }
+                       setLayout(Layout1)
+                       aList = [text1,text2,text3,text4]
+                       oFilter = new qallevents(win)
+                       oFilter.setKeyPressEvent("pWork()")
+                       installeventfilter(oFilter)
+                       show()
+               }
+               exec()
+       }
+
+       func pWork
+               nCode =  oFilter.getkeycode()
+               if nCode = 16777220     # ENTER キー
+                       for x=1 to len(aList) 
+                               if aList[x].HasFocus() 
+                                       t = x+1
+                                       if t > len(aList) t=1 ok
+                                       aList[t].SetFocus(0)
+                                       exit
+                               ok
+                       next
+               ok
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; 正規表現
+
+正規表現
+========
+
+この用例では、正規表現のクラスを使用しています。
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp
+       {
+               see "Using Regular Expressions" + nl
+
+               exp = new qregularexpression() {
+                       setPattern("\d\d \w+")
+                       see pattern() + nl
+                       match = match("33 one",0,0,0)
+                       see match.hasmatch() + nl
+                       match = match("3 one",0,0,0)
+                       see match.hasmatch() + nl
+                       match = match("welcome 11 one",0,0,0)
+                       see match.hasmatch() + nl
+                       matched = match.captured(0)
+                       see matched + nl
+               }
+               exp = new qregularexpression() {
+                       setPattern("^(\d\d)/(\d\d)/(\d\d\d\d)$")
+                       see pattern() + nl
+                       match = match("08/12/1985",0,0,0)
+                       see match.hasmatch() + nl
+                       day = match.captured(1)
+                       month = match.captured(2)
+                       year = match.captured(3)
+                       see day + nl + month + nl + year + nl
+                       see  "(" + match.capturedStart(1) + "," + match.capturedEnd(1)+ ")" + nl
+                       see  "(" + match.capturedStart(2) + "," + match.capturedEnd(2)+ ")" + nl
+                       see  "(" + match.capturedStart(3) + "," + match.capturedEnd(3)+ ")" + nl
+               }
+
+       }
+
+実行結果:
+
+.. code-block:: ring
+
+       Using Regular Expressions
+       \d\d \w+
+       1
+       0
+       1
+       11 one
+       ^(\d\d)/(\d\d)/(\d\d\d\d)$
+       1
+       08
+       12
+       1985
+       (0,2)
+       (3,5)
+       (6,10)
+
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; シンプルなクライアントとサーバーの用例
+
+シンプルなクライアントとサーバーの用例
+======================================
+
+この用例では、シンプルなクライアントとサーバーアプリケーションの作成方法を学びます。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp {
+               oClient = new Client { client() }
+               oServer = new Server { server() }
+               exec()
+       }
+
+       Class Client
+
+               win1 lineedit1  cOutput=""
+               oTcpSocket
+
+               func client
+
+                       win1 = new qwidget() 
+
+                       new qpushbutton(win1) {
+                               setgeometry(50,50,100,30)
+                               settext("connect")
+                               setclickevent("oClient.Connect()")
+                       }
+
+                       lineedit1 = new qtextedit(win1) {
+                               setGeometry(150,50,200,300)
+                       }
+
+                       win1 {
+                               setwindowtitle("client")
+                               setgeometry(10,100,400,400)
+                               show()
+                       }
+
+               func connect
+                       cOutput = "Connect to host 127.0.0.1 port 9999" + nl
+                       lineedit1.settext(cOutput)
+                       oTcpSocket = new qTcpSocket(win1) {
+                               setconnectedevent("oClient.pConnected()")
+                               setreadyreadevent("oClient.pRead()")
+                               connecttohost("127.0.0.1",9999,3,0)
+                               waitforconnected(5000)
+                       }                       
+                       
+               func pConnected         
+
+                       cOutput += "Connected!" + nl
+                       lineedit1.settext(cOutput)
+
+               func pRead
+
+                       cOutput += "Ready Read!" + nl
+                       lineedit1.settext(cOutput)
+                       cOutput += oTcpSocket.readall().data() + nl
+                       lineedit1.settext(cOutput)
+
+       Class Server
+
+               win1 lineedit1 
+               oTcpServer oTcpClient
+               cOutput = ""
+
+               func server
+
+                       win1 = new qwidget()
+                       
+                       lineedit1 = new qtextedit(win1) {
+                               setGeometry(150,50,200,300)
+                       }
+
+                       win1 {
+                               setwindowtitle("Server")
+                               setgeometry(450,100,400,400)
+                               show()
+                       }
+
+                       oTcpServer = new qTcpServer(win1) {
+                               setNewConnectionEvent("oServer.pNewConnection()")
+                               oHostAddress = new qHostAddress()
+                               oHostAddress.SetAddress("127.0.0.1")
+                               listen(oHostAddress,9999)
+                       }
+                       cOutput = "Server Started" + nl +
+                                  "listen to port 9999" + nl
+
+                       lineedit1.settext(cOutput)
+
+               Func pNewConnection
+               
+                       oTcpClient = oTcpServer.nextPendingConnection()
+                       cOutput += "Accept Connection" + nl
+                       lineedit1.settext(cOutput)
+                       oTcpClient {
+                               cStr ="Hello from server to client!"+char(13)+char(10)
+                               write(cStr,len(cStr))
+                               flush()
+                               waitforbyteswritten(300000)
+                               close()
+                       }
+
+実行中のアプリケーション
+
+.. image:: ringqt_shot36.jpg
+       :alt: クライアントとサーバーの用例
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; 動的オブジェクト
+
+動的オブジェクト
+================
+
+実行時にオブジェクトの作成、およびウィンドウへオブジェクトを追加します。
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       oFormDesigner = new FormDesigner { start("oFormDesigner") }
+
+       Class FormDesigner
+
+               winToolBox  winForm
+
+               aObjects = []
+
+               func start cObjectName
+
+                       oApp = new qApp
+
+                       winToolBox = new qWidget() 
+                       winToolBox.setWindowTitle("ToolBox")
+                       winToolBox.move(10,10)
+                       winToolBox.resize(300,600)
+                       
+                       btn = new qPushButton(winToolBox) 
+                       btn.resize(300,30)
+                       btn.setText("Create Button")
+                       btn.setClickEvent(cObjectName+".pCreateButton()")
+                       btn.show()              
+
+                       winToolBox.show()
+
+                       winForm = new qWidget() {
+                               move(400,50)
+                               setWindowTitle("Form Designer")
+                               resize(600,600)
+                               show()  
+                       }
+
+                       oApp.exec()
+
+
+               func pCreateButton              
+
+                       nCount = len(aObjects)
+
+                       aObjects + new MyButton(winForm) 
+                       {
+                               nIndex = nCount + 1
+                               setText("Button"+ nIndex) 
+                               Move(30*nIndex,30*nIndex)
+                               resize(100,30)
+                               show()
+                       }
+
+
+       Class MyButton from qPushButton
+               nIndex = 0
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; Weight History アプリケーション
+
+Weight History アプリケーション
+===============================
+
+このサンプルは体重の記録で役に立ちます (日付、時刻と体重)。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = new qApp
+       {  
+         $ApplicationObject = "oApp"   # イベントを呼び出すときに使用します。
+         oApp = new App     
+         exec()
+         oApp.CloseDatabase()
+       }
+
+       class App
+
+         cDir = currentdir() + "/"
+         oCon 
+         aIDs = []
+
+         win1 = new qWidget()
+         {
+               setWindowTitle("Weight History")
+               resize(600,600)
+               layoutButtons = new qhboxlayout()
+               {
+                 label1 = new qLabel(win1) { setText("Weight") }
+                 text1 = new qlineedit(win1)
+                 btnAdd = new qpushbutton(win1) { 
+                         setText("Add") 
+                         setClickEvent($ApplicationObject+".AddWeight()") 
+                 }
+                 btnDelete = new qpushbutton(win1) { 
+                         setText("Delete") 
+                         setClickEvent($ApplicationObject+".Deleteweight()") 
+                 }
+                 addwidget(label1)
+                 addwidget(text1)
+                 addwidget(btnAdd)
+                 addwidget(btnDelete)
+               }
+               layoutData  = new qhboxlayout()
+               {
+                 Table1 = new qTableWidget(win1) {
+                       setrowcount(0)
+                       setcolumncount(3)
+                       setselectionbehavior(QAbstractItemView_SelectRows)
+                       setHorizontalHeaderItem(0, new QTableWidgetItem("Date"))
+                       setHorizontalHeaderItem(1, new QTableWidgetItem("Time"))
+                       setHorizontalHeaderItem(2, new QTableWidgetItem("Weight"))
+                       setitemChangedEvent($ApplicationObject+".ItemChanged()")
+                                          setAlternatingRowColors(true)    
+                                          horizontalHeader().setStyleSheet("color: blue")
+                                          verticalHeader().setStyleSheet("color: red") 
+                 }
+                 addWidget(Table1)
+               }
+               layoutClose = new qhboxlayout()
+               {
+                 btnclose = new qpushbutton(win1) { 
+                   setText("Close") 
+                   setClickEvent("MyApp.Quit()") 
+                 }
+                 addwidget(btnClose)
+               }
+               layoutMain = new qvboxlayout()
+               {
+                 addlayout(layoutButtons)
+                 addLayout(LayoutData)
+                 addLayout(layoutClose)
+               }
+               setlayout(layoutMain)
+               self.OpenDatabase()
+               self.ShowRecords()        
+               show()  
+         }
+               
+         Func OpenDatabase
+               lCreate = False
+               if not fexists(cDir + "weighthistory.db")
+                 lCreate = True
+               ok
+               new QSqlDatabase() {
+                 this.oCon = addDatabase("QSQLITE") {
+                       setDatabaseName("weighthistory.db")
+                       Open()      
+                 }
+               }  
+               if lCreate
+                 new QSqlQuery( ) {
+                       exec("create table weighthistory (id integer primary key,"+
+                             " f_date varchar(10),"+
+                            " f_time varchar(8), f_weight varchar(8) );")
+                       delete()
+                 }
+               ok
+
+
+         Func CloseDatabase
+               oCon.Close()
+
+         Func AddWeight
+               cWeight = text1.text()
+               AddRecord(cWeight)
+
+         Func DeleteWeight
+               Table1 {
+                  nRow = CurrentRow() 
+                 if nRow >= 0
+                       nID = this.aIDs[nROW+1] 
+                       new QSqlQuery( ) {
+                         exec("delete from weighthistory where id = " + nID )
+                       }
+                       Del(this.aIDs,nRow+1)
+                       removerow(nRow)  
+                       selectrow(nRow)
+                 ok
+               }
+               
+
+         Func AddRecord cWeight
+               new QSqlQuery( ) {
+                 cStr = "insert into weighthistory (f_date,f_time,f_weight) values"+
+                 " ('%f1','%f2','%f3')"
+                 cDate = Date()
+                 cTime = Time()
+                 cStr = substr(cStr,"%f1",cDate)
+                 cStr = substr(cStr,"%f2",cTime)
+                 cStr = substr(cStr,"%f3",cWeight)
+                 exec(cStr)
+                 delete()
+               }
+               ShowRecords()
+               Table1.selectrow(table1.rowcount()-1)
+
+
+         Func ShowRecords
+               table1.setitemChangedEvent("")
+               aIDs = []
+               query = new QSqlQuery() {
+                 exec("select * from weighthistory")
+                 nRows = 0
+                 this.Table1.setrowcount(0)
+                 while movenext() 
+                       this.table1 {
+                         insertRow(nRows)
+                         this.aIDs + query.value(0).tostring()
+                         for x = 1 to 3 
+                               cStr = query.value(x).tostring()
+                               item = new qTableWidgetItem(cStr)
+                               setItem(nRows,x-1,item)
+                         next
+                       }
+                       nRows++
+                 end
+                 delete()
+               }
+               table1.setitemChangedEvent($ApplicationObject+".ItemChanged()")
+          
+         Func ItemChanged
+               nRow =  table1.currentrow()
+               if nRow >= 0 
+                 myitem = Table1.item(table1.currentrow(),0)
+                 cDate = myitem.text()
+                 myitem = Table1.item(table1.currentrow(),1)
+                 cTime = myitem.text()
+                 myitem = Table1.item(table1.currentrow(),2)
+                 cWeight = myitem.text()
+                 new QSqlQuery( ) {
+                       cStr = "update weighthistory set f_date ='%f1' , f_time = '%f2' , "+
+                       "f_weight ='%f3' where id = " +  this.aIDs[nROW+1] 
+                       cStr = substr(cStr,"%f1",cDate)
+                       cStr = substr(cStr,"%f2",cTime)
+                       cStr = substr(cStr,"%f3",cWeight)  
+                       exec(cStr)
+                       delete()
+                 }
+               ok
+
+
+このスクリーンショットはアプリケーション実行中のものです。
+
+.. image:: weighthistory_app.png
+       :alt: Weight History アプリケーション
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; Notepad アプリケーション
+
+
+Notepad アプリケーション
+========================
+
+この用例では、 RingQt を使用してシンプルな Notepad を開発したものです。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       cActiveFileName = ""
+       aTextColor = [0,0,0]  
+       aBackColor = [255,255,255]
+       cFont = "MS Shell Dlg 2,14,-1,5,50,0,0,0,0,0"
+       cWebsite = "http://www.google.com"
+
+       oSearch = NULL
+       oSearchValue = NULL 
+       oSearchCase = NULL
+       oSearchFilter = NULL
+       oReplaceValue = NULL
+
+       lAskToSave = false
+
+       MyApp = New qApp {
+               win1 = new qMainWindow() {
+
+                       setwindowtitle("Ring Notepad")
+                       setGeometry(100,100,400,400)
+                       aBtns = [
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/new.png") 
+                                               setclickevent("pNew()")
+                                               settooltip("New File")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/open.png") 
+                                               setclickevent("pOpen()")
+                                               settooltip("Open File")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/save.png")
+                                               setclickevent("pSave()")
+                                               settooltip("Save")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/saveas.png")
+                                               setclickevent("pSaveAs()")
+                                               settooltip("Save As")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/cut.png")
+                                               setclickevent("pCut()")
+                                               settooltip("Cut")
+                                        } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/copy.png") 
+                                               setclickevent("pCopy()")
+                                               settooltip("Copy")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/paste.png") 
+                                               setclickevent("pPaste()")
+                                               settooltip("Paste")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/font.png") 
+                                               setclickevent("pFont()")
+                                               settooltip("Font")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/colors.jpg") 
+                                               setclickevent("pColor()")
+                                               settooltip("Text Color")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/search.png") 
+                                               setclickevent("pFind()")
+                                               settooltip("Find and Replace")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/print.png") 
+                                               setclickevent("pPrint()")
+                                               settooltip("Print")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/debug.png") 
+                                               setclickevent("pDebug()")
+                                               settooltip("Debug (Run then wait!)")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/run.png") 
+                                               setclickevent("pRun()")
+                                               settooltip("Run the program")
+                                       } ,
+                                       new qpushbutton(win1) { 
+                                               setbtnimage(self,"image/close.png") 
+                                               setclickevent("pQuit()")
+                                               settooltip("Quit")
+                                       } 
+                               ]
+
+                       tool1 = addtoolbar("files")  {
+                               for x in aBtns addwidget(x) addseparator() next
+                       }
+
+                       menu1 = new qmenubar(win1) {            
+                               sub1 = addmenu("File")
+                               sub2 = addmenu("Edit")
+                               sub3 = addmenu("View")
+                               sub4 = addmenu("Help")
+                               sub1 { 
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+n"))
+                                               setbtnimage(self,"image/new.png")
+                                               settext("New")
+                                               setclickevent("pNew()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+o"))
+                                               setbtnimage(self,"image/open.png") 
+                                               settext("Open")
+                                               setclickevent("pOpen()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+s"))
+                                               setbtnimage(self,"image/save.png")
+                                               settext("Save")
+                                               setclickevent("pSave()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+e"))
+                                               setbtnimage(self,"image/saveas.png")
+                                               settext("Save As")
+                                               setclickevent("pSaveAs()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+p"))
+                                               setbtnimage(self,"image/print.png")
+                                               settext("Print to PDF")
+                                               setclickevent("pPrint()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+d"))
+                                               setbtnimage(self,"image/debug.png")
+                                               settext("Debug (Run then wait!)")
+                                               setclickevent("pDebug()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+r"))
+                                               setbtnimage(self,"image/run.png")
+                                               settext("Run")
+                                               setclickevent("pRun()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+F5"))
+                                               setbtnimage(self,"image/run.png")
+                                               settext("Run GUI Application (No Console)")
+                                               setclickevent("pRunNoConsole()")
+                                       }
+                                       addaction(oAction)      
+                                       addseparator()
+                                       oAction = new qaction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+q"))
+                                               setbtnimage(self,"image/close.png") 
+                                               settext("Exit")
+                                               setstatustip("Exit")
+                                               setclickevent("pQuit()")
+                                       }
+                                       addaction(oAction)
+                               }
+                               sub2 { 
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+x"))
+                                               setbtnimage(self,"image/cut.png")
+                                               settext("Cut")
+                                               setclickevent("pCut()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+c"))
+                                               setbtnimage(self,"image/copy.png")
+                                               settext("Copy")
+                                               setclickevent("pCopy()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+v"))
+                                               setbtnimage(self,"image/paste.png")
+                                               settext("Paste")
+                                               setclickevent("pPaste()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+i"))
+                                               setbtnimage(self,"image/font.png")
+                                               settext("Font")
+                                               setclickevent("pFont()")
+                                       }
+                                       addseparator()
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+t"))
+                                               setbtnimage(self,"image/colors.jpg")
+                                               settext("Text Color")
+                                               setclickevent("pColor()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+b"))
+                                               setbtnimage(self,"image/colors.jpg")
+                                               settext("Back Color")
+                                               setclickevent("pColor2()")
+                                       }
+                                       addaction(oAction)
+                                       addseparator()
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+g"))
+                                               settext("Go to line")
+                                               setclickevent("pGoto()")
+                                       }
+                                       addaction(oAction)
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+f"))
+                                               setbtnimage(self,"image/search.png")
+                                               settext("Find and Replace")
+                                               setclickevent("pFind()")
+                                       }
+                                       addaction(oAction)
+                               }                               
+                               sub3 {
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+p"))
+                                               setbtnimage(self,"image/project.png")
+                                               settext("Project Files")
+                                               setclickevent("pProject()")
+                                       }
+                                       addaction(oAction)                      
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+u"))
+                                               setbtnimage(self,"image/source.png")
+                                               setclickevent("pSourceCode()")
+                                               settext("Source Code")
+                                       }
+                                       addaction(oAction)      
+                                       oAction = new qAction(win1) {
+                                               setShortcut(new QKeySequence("Ctrl+w"))
+                                               setbtnimage(self,"image/richtext.png")
+                                               setclickevent("pWebBrowser()")
+                                               settext("Web Browser")
+                                       }
+                                       addaction(oAction)      
+                               }
+                               sub4 { 
+                                       sub5 = addmenu("Development Tools")
+                                       sub5 { 
+
+                                               oAction = new qAction(win1) {
+                                                       settext("Programming Language")
+                                                       setclickevent("pLang()")
+                                               }
+                                               addaction(oAction)
+                                               oAction = new qAction(win1) {
+                                                       settext("GUI Library")
+                                                       setclickevent("pGUI()")
+                                               }
+                                               addaction(oAction)
+                                       }
+                                       addseparator()
+                                               oAction = new qAction(win1) {
+                                                       settext("About")
+                                                       setclickevent("pAbout()")
+                                               }
+                                               addaction(oAction)                      
+                               }
+                       }
+
+                       setmenubar(menu1)
+
+                       status1 = new qstatusbar(win1) {
+                               showmessage("Ready!",0)
+                       }
+
+                       setstatusbar(status1)
+
+                       tree1 = new qtreeview(win1) {
+                               setclickedevent("pChangeFile()")
+                               setGeometry(00,00,200,400)
+                               oDir = new QDir()                                       
+                               ofile = new QFileSystemModel() {
+                                       setrootpath(oDir.currentpath())
+                                       myfiles = new qstringlist()
+                                       myfiles.append("*.ring")
+                                       myfiles.append("*.rh")
+                                       setnamefilters(myfiles) 
+                                       setNameFilterDisables(false)
+                               }
+                               setmodel(ofile)
+                               myindex = ofile.index(oDir.currentpath(),0)
+                               for x = 1 to ofile.columncount()
+                                       hidecolumn(x)
+                               next
+                               setcurrentindex(myindex)
+                               setexpanded(myindex,true)
+                               header().hide()                 
+                       }
+
+                       oDock1 = new qdockwidget(win1,0) {
+                               setGeometry(00,00,200,200)
+                               setwindowtitle("Project Files")
+                               setwidget(tree1)
+                       }
+
+                       textedit1 = new qtextedit(win1) {
+                               setCursorPositionChangedevent("pCursorPositionChanged()")
+                               setLineWrapMode(QTextEdit_NoWrap)
+                               setAcceptRichText(false)
+                               setTextChangedEvent("lAskToSave = true")
+                       }
+
+
+                       oDock2 = new qdockwidget(win1,0) {
+                               setwidget(textedit1)
+                               setwindowtitle("Source Code")
+                       }
+
+                       oWebBrowser = new qWidget() {   
+                               setWindowFlags(Qt_SubWindow)
+                               oWBLabel = new qLabel(win1) {
+                                       setText("Website: ")
+                               }       
+                               oWBText = new qLineEdit(win1) {
+                                       setText(cWebSite)
+                                       setReturnPressedEvent("pWebGo()")
+                               }
+                               oWBGo = new qPushButton(win1) {
+                                       setText("Go")
+                                       setClickEvent("pWebGo()")
+                               }
+                               oWBBack = new qPushButton(win1) {
+                                       setText("Back")
+                                       setClickEvent("pWebBack()")
+                               }
+                               oWBLayout1 = new qHBoxLayout() {
+                                       addWidget(oWBLabel)
+                                       addWidget(oWBText)
+                                       addWidget(oWBGo)
+                                       addWidget(oWBBack)
+                               }
+                               oWebView = new qWebView(win1) {
+                                       loadpage(new qurl(cWebSite))
+                               }
+                               oWBlayout2 = new qVBoxLayout() {
+                                       addLayout(oWBLayout1)
+                                       addWidget(oWebView)
+                               }
+                               setLayout(oWBLayout2)
+                       }
+
+                       oDock3 = new qdockwidget(win1,0) {
+                               setwidget(oWebBrowser)          
+                               setwindowtitle("Web Browser")
+                               setFeatures(QDockWidget_DocWidgetClosable)
+                       }       
+
+                       adddockwidget(1,oDock1,1)
+                       adddockwidget(2,oDock2,2)
+                       adddockwidget(2,oDock3,1)
+               
+                       setwinicon(self,"image/notepad.png")
+
+                       showmaximized()
+               }
+               RestoreSettings()
+               exec()
+       }
+
+       func pWebGo
+               cWebsite = oWBText.text() 
+               oWebView.LoadPage( new qurl( cWebSite ) )
+
+       func pWebBack
+               oWebView.Back()
+
+       func pProject
+               oDock1.Show()
+               
+       func pSourceCode
+               oDock2.Show()
+
+       func pWebBrowser
+               oDock3.Show()
+
+       func pChangeFile
+               myitem = tree1.currentindex()
+               if ofile.isdir(myitem)
+                       return
+               ok
+               cActiveFileName = ofile.filepath(myitem)
+               textedit1.settext(read(cActiveFileName))
+               textedit1.setfocus(0)
+               pCursorPositionChanged()
+               pSetActiveFileName()
+
+       func pSetActiveFileName
+               oDock2.setWindowTitle("Source Code : " + cActiveFileName)
+
+       func pCursorPositionChanged
+               status1.showmessage(" Line : "+(textedit1.textcursor().blocknumber()+1)+
+                               " Column : " +(textedit1.textcursor().columnnumber()+1) +
+                               " Total Lines : " + textedit1.document().linecount() ,0)
+
+       func pGoto
+               oInput = New QInputDialog(win1)
+               {
+                       setwindowtitle("Enter the line number?")
+                       setgeometry(100,100,400,50)
+                       setlabeltext("Line")
+                       settextvalue("1")
+                       exec()
+                       nLine = 0 + oInput.textvalue()
+                       oBlock = textedit1.document().findBlockByLineNumber(nLine-1)
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(oBlock.position(),0)
+                       textedit1.settextcursor(oCursor)
+               }
+
+       func pFind
+               if isobject(oSearch)
+                       oSearch.activatewindow()
+                       return
+               ok
+               oSearch = new qWidget()
+               {
+                       new qLabel(oSearch)
+                       {
+                               setText("Find What : ")
+                               setgeometry(10,10,50,30)
+                       }
+                       oSearchValue = new qlineedit(oSearch)
+                       {
+                               setgeometry(80,10,460,30)
+                               setReturnPressedEvent("pFindValue()")
+                       }
+                       new qLabel(oSearch)
+                       {
+                               setText("Replace with ")
+                               setgeometry(10,45,80,30)
+                       }
+                       oReplaceValue = new qlineedit(oSearch)
+                       {
+                               setgeometry(80,45,460,30)
+                       }
+                       oSearchCase = new qCheckbox(oSearch)
+                       {
+                               setText("Case Sensitive")
+                               setgeometry(80,85,100,30)
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Find/Find Next")
+                               setgeometry(80,120,100,30)
+                               setclickevent("pFindValue()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Replace")
+                               setgeometry(200,120,100,30)
+                               setclickevent("pReplace()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Replace All")
+                               setgeometry(320,120,100,30)
+                               setclickevent("pReplaceAll()")
+                       }
+                       new qPushButton(oSearch)
+                       {
+                               setText("Close")
+                               setgeometry(440,120,100,30)
+                               setclickevent("pSearchClose()")
+                       }
+
+                       setwinicon(oSearch,"image/notepad.png")
+                       setWindowTitle("Find/Replace")          
+                       setStyleSheet("background-color:white;")
+                       setFixedsize(550,160)
+                       setwindowflags( Qt_CustomizeWindowHint | 
+                                       Qt_WindowTitleHint | Qt_WindowStaysOnTopHint) 
+
+                       oSearchFilter = new qallevents(oSearch)
+                       oSearchFilter.setKeyPressEvent("pSearchKeyPress()")                                                             
+                       installeventfilter(oSearchFilter)
+
+                       show()
+               }
+
+       Func pReplace
+               oCursor = textedit1.textCursor()
+               if oCursor.HasSelection() = false
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Replace") 
+                               SetText("No Selection")
+                               show()  
+                       }
+                       return false
+               ok
+               cValue = oSearchValue.text()
+               cSelected = oCursor.SelectedText()
+               if oSearchCase.checkState() = Qt_Unchecked
+                       cValue = lower(cValue)  
+                       cSelected = lower(cSelected)
+               ok
+               if cSelected != cValue
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Replace") 
+                               SetText("No Match")
+                               show()  
+                       }
+                       return false
+               ok
+               cValue = oReplaceValue.text()
+               nStart = oCursor.SelectionStart()
+               nEnd = oCursor.SelectionEnd()
+               cStr = textedit1.toPlainText()
+               cStr = left(cStr,nStart)+cValue+substr(cStr,nEnd+1)
+               textedit1.setText(cStr) 
+               return pFindValue()
+
+       Func pReplaceAll
+               cStr = textedit1.toPlainText()
+               cOldValue = oSearchValue.text()
+               cNewValue = oReplaceValue.text()
+               if oSearchCase.checkState() = Qt_Unchecked
+                       # 英数大小文字非同一視
+                       cStr = SubStr(cStr,cOldValue,cNewValue,true)
+               else
+                       # 英数大小文字同一視
+                       cStr = SubStr(cStr,cOldValue,cNewValue)
+               ok
+               textedit1.setText(cStr) 
+               new qMessagebox(oSearch)
+               {
+                       SetWindowTitle("Replace All") 
+                       SetText("Operation Done")
+                       show()  
+               }
+
+       Func pSearchClose
+               oSearch.close() 
+               oSearch = NULL
+
+       func pSearchKeyPress
+               if oSearchFilter.getKeyCode() = Qt_Key_Escape
+                       pSearchClose()          
+               ok
+
+       func pFindValue
+               oCursor = textedit1.textcursor()
+               nPosStart = oCursor.Position() + 1
+               cValue = oSearchValue.text()
+               cStr = textedit1.toplaintext()
+               cStr = substr(cStr,nPosStart)
+               if oSearchCase.checkState() = Qt_Unchecked
+                       cStr = lower(cStr)  cValue = lower(cValue)
+               ok
+               nPos = substr(cStr,cValue)
+               if nPos > 0
+                       nPos += nPosStart - 2
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(nPos,0)
+                       textedit1.settextcursor(oCursor)
+                       oCursor = textedit1.textcursor()
+                       oCursor.setposition(nPos+len(cValue),1)
+                       textedit1.settextcursor(oCursor)
+                       return true
+               else
+                       new qMessagebox(oSearch)
+                       {
+                               SetWindowTitle("Search") 
+                               SetText("Cannot find :" + cValue)
+                               show()  
+                       }
+                       return false
+               ok              
+
+       func pNofileopened
+               New qMessageBox(win1) {
+                       setWindowTitle("Sorry")
+                       setText("Save the file first!")
+                       show()
+               }
+
+       func pDebug
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start run " + cActiveFileName + nl 
+               system(cCode)
+
+       func pRun
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start ring " + cActiveFileName + nl 
+               system(cCode)
+
+       func pRunNoConsole
+               if cActiveFileName = Null return pNofileopened() ok
+               cCode = "start /b ring " + cActiveFileName + nl 
+               system(cCode)
+
+       func pSave
+               if cActiveFileName = NULL return pSaveAs() ok
+               writefile(cActiveFileName,textedit1.toplaintext())
+               status1.showmessage("File : " + cActiveFileName + " saved!",0)
+               lAskToSave = false
+
+       func pSaveAs
+               new qfiledialog(win1) {
+                       cName = getsavefilename(win1,"Save As","","source files(*.ring)")
+                       if cName != NULL
+                               cActiveFileName = cName
+                               writefile(cActiveFileName,textedit1.toplaintext())
+                               status1.showmessage("File : " + cActiveFileName + " saved!",0)  
+                               pSetActiveFileName()
+                               lAskToSave = false
+                       ok      
+               }
+
+       func pPrint
+               status1.showmessage("Printing to File : RingDoc.pdf",0)
+               printer1 = new qPrinter(0) {
+                       setoutputformat(1)      # 1 = pdf
+                       setoutputfilename("RingDoc.pdf")
+                       textedit1.print(printer1)
+               }
+               status1.showmessage("Done!",0)
+               system("RingDoc.pdf")
+
+       func pCut
+               textedit1.cut()
+               status1.showmessage("Cut!",0)           
+
+       func pCopy
+               textedit1.copy()
+               status1.showmessage("Copy!",0)          
+
+       func pPaste
+               textedit1.paste()
+               status1.showmessage("Paste!",0)         
+
+       func pFont
+               oFontDialog = new qfontdialog() {
+                       aFont = getfont()
+               }
+               textedit1.selectall()
+               cFont = aFont[1]
+               pSetFont()
+
+       Func pSetFont
+               myfont = new qfont("",0,0,0)
+               myfont.fromstring(cFont)
+               textedit1.setcurrentfont(myfont)
+
+       Func pColor
+               new qcolordialog() { aTextColor = GetColor() }  
+               pSetColors()
+
+       Func pColor2
+               new qcolordialog() { aBackColor = GetColor() }  
+               pSetColors()
+               
+       Func pSetColors
+               textedit1.setstylesheet("color: rgb(" + aTextColor[1] + "," + aTextColor[2] +
+                                       "," + aTextColor[3] + ");" + "background-color: rgb(" +
+                                       aBackColor[1] + "," + aBackColor[2] + "," +
+                                       aBackColor[3] + ")")
+
+       func pOpen
+               new qfiledialog(win1) {
+                       cName = getopenfilename(win1,"open file","c:\","source files(*.ring)")                  
+                       if cName != NULL
+                               cActiveFileName = cName
+                               textedit1.settext(read(cActiveFileName))
+                       ok
+               }
+               
+       func pNew
+               new qfiledialog(win1) {
+                       cName = getsavefilename(win1,"New file","","source files(*.ring)")
+                       if cName != NULL
+                               write(cName,"")
+                               cActiveFileName = cName
+                               textedit1.settext(read(cActiveFileName))
+                               
+                       ok      
+               }
+               
+       Func WriteFile cFileName,cCode
+               aCode = str2list(cCode)
+               fp = fopen(cFileName,"wb")
+               for cLine in aCode
+                       fwrite(fp,cLine+char(13)+char(10))      
+               next
+               fclose(fp)
+
+       Func MsgBox cTitle,cMessage
+               new qMessagebox(win1) {
+                       setwindowtitle(cTitle)
+                       setText(cMessage)
+                       show()
+               }
+               
+
+       Func pLang
+               MsgBox("Programming Language",
+                       "This application developed using the Ring programming language")
+
+       Func pGUI
+               MsgBox("GUI Library",
+                       "This application uses the Qt GUI Library through RingQt")
+
+       Func pAbout
+               MsgBox("About",
+                       "2016, Mahmoud Fayed <msfclipper@yahoo.com>")           
+
+       Func pSaveSettings
+               cSettings = "aTextColor = ["+aTextColor[1]+","+aTextColor[2]+
+                               ","+aTextColor[3]+"]" + nl + 
+                               "aBackColor = ["+aBackColor[1]+","+aBackColor[2]+
+                               ","+aBackColor[3]+"]" + nl +
+                               "cFont = '" + cFont + "'" + nl + 
+                               "cWebSite = '" + cWebsite + "'" + nl
+               cSettings = substr(cSettings,nl,char(13)+char(10))
+               write("ringnotepad.ini",cSettings)
+               if lAsktoSave
+                       new qmessagebox(win1)
+                       {
+                               setwindowtitle("Save Changes?")
+                               settext("Some changes are not saved!")
+                               setInformativeText("Do you want to save your changes?")
+                               setstandardbuttons(QMessageBox_Yes |
+                                                  QMessageBox_No | QMessageBox_Cancel)
+                               result = exec()
+                               win1 {
+                               if result = QMessageBox_Yes
+                                       pSave()
+                               but result = QMessageBox_Cancel
+                                       return false
+                               ok
+                       }
+               }       
+               ok
+               return true
+
+       Func pSetWebsite
+               oWebView { loadpage(new qurl(cWebSite)) }       
+               oWBText  { setText(cWebSite) }          
+
+       Func RestoreSettings
+               eval(read("ringnotepad.ini"))
+               pSetColors()
+               pSetFont()
+               pSetWebsite()
+
+       Func pQuit
+               if pSaveSettings() 
+                       myapp.quit()
+               ok
+
+
+実行中のアプリケーション
+
+このスクリーンショットは “ファイル” メニューのデモです。
+
+.. image:: ringqt_shot50.jpg
+       :alt: Ring ノートパッド - ファイルメニュー
+
+このウィンドウは “検索と置換”です。
+
+.. image:: ringqt_shot51.jpg
+       :alt: Ring ノートパッド - 検索と置換
+
+このスクリーンショットはアプリケーションのメインウィンドウのデモです。
+
+.. image:: ringqt_shot49.jpg
+       :alt: Ring ノートパッド - メインウィンドウ
+
+.. note:: 前述のサンプルにある pDebug(), pRun() および pRunNoConsole() 関数は移植性がありません!
+       このサンプルでは MS-Windows 用に記述されており、ほかのオペレーティングシステム用に更新できます。
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; Cards ゲーム
+
+Cards ゲーム
+============
+
+この用例は、 RingQt で開発したシンプルなカードゲームです。
+
+各プレイヤーは五枚のカードを取得しますが、カードの中身は誰にもわかりません。
+プレイヤーは毎回カードを確認するためにカードを一枚クリックします。
+カードが別のカードと同じ番号ならば各カードのポイントを取得します。
+カードの番号が “5” ならば、すべての可視状態のカードのポイントを取得します。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       nScale = 1
+
+       app1 = new qApp
+
+       mypic = new QPixmap("cards.jpg")
+
+       mypic2 = mypic.copy(0,(124*4)+1,79,124)
+       Player1EatPic = mypic.copy(80,(124*4)+1,79,124)
+       Player2EatPic= mypic.copy(160,(124*4)+1,79,124)
+
+       aMyCards = []
+       aMyValues = []
+       for x1 = 0 to 3
+               for y1 = 0 to 12
+                 temppic = mypic.copy((79*y1)+1,(124*x1)+1,79,124)
+                         aMyCards + temppic
+                         aMyValues + (y1+1)
+               next
+       next
+
+       nPlayer1Score = 0   nPlayer2Score=0
+
+       do
+               Page1 = new Game
+               Page1.Start()
+       again Page1.lnewgame
+
+       mypic.delete()
+       mypic2.delete()
+       Player1EatPic.delete()
+       Player2EatPic.delete()
+
+       for t in aMyCards
+                 t.delete()
+       next
+
+       func gui_setbtnpixmap pBtn,pPixmap
+               pBtn {
+                       setIcon(new qicon(pPixmap.scaled(width(),height(),0,0)))
+                       setIconSize(new QSize(width(),height()))
+               }
+
+       Class Game
+               
+               nCardsCount = 10
+               win1 layout1 label1 label2 layout2 layout3 aBtns aBtns2
+               aCards nRole=1 aStatus = list(nCardsCount) aStatus2 = aStatus
+               aValues        aStatusValues = aStatus  aStatusValues2 = aStatus
+               Player1EatPic   Player2EatPic
+               lnewgame = false
+               nDelayEat = 0.5
+               nDelayNewGame = 1
+
+               func start
+
+                       win1 = new qWidget() { 
+                               setwindowtitle("Five") 
+                               setstylesheet("background-color: White")
+                               showfullscreen()
+                       }
+               
+                       layout1 = new qvboxlayout()
+               
+                       label1 = new qlabel(win1) {
+                               settext("Player (1) - Score : " + nPlayer1Score)
+                               setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
+                               setstylesheet("color: White; background-color: Purple;
+                                                font-size:20pt")
+                               setfixedheight(200)
+                       }
+
+                       closebtn = new qpushbutton(win1)  {
+                               settext("Close Application")
+                               setstylesheet("font-size: 18px ; color : white ;
+                                                background-color: black ;")
+                               setclickevent("Page1.win1.close()")
+                       }
+               
+                       aCards = aMyCards
+                       aValues = aMyValues
+
+                       layout2 = new qhboxlayout()
+
+                       aBtns = []
+
+                       for x = 1 to nCardsCount
+                               aBtns + new qpushbutton(win1) 
+                               aBtns[x].setfixedwidth(79*nScale)
+                               aBtns[x].setfixedheight(124*nScale)
+                               gui_setbtnpixmap(aBtns[x],mypic2)
+                               layout2.addwidget(aBtns[x])
+                               aBtns[x].setclickevent("Page1.Player1click("+x+")")
+                       next
+
+                       layout1.addwidget(label1)       
+                       layout1.addlayout(layout2)
+
+                       label2 = new qlabel(win1) {
+                               settext("Player (2) - Score : " + nPlayer2Score)
+                               setalignment(Qt_AlignHCenter | Qt_AlignVCenter)
+                               setstylesheet("color: white; background-color: red;
+                                                font-size:20pt")
+                               setfixedheight(200)
+                       }
+
+                       layout3 = new qhboxlayout()
+
+                       aBtns2 = []
+                       for x = 1 to nCardsCount
+                               aBtns2 + new qpushbutton(win1)
+                               aBtns2[x].setfixedwidth(79*nScale)
+                               aBtns2[x].setfixedheight(124*nScale)
+                               gui_setbtnpixmap(aBtns2[x],mypic2)
+                               layout3.addwidget(aBtns2[x])
+                               aBtns2[x].setclickevent("Page1.Player2click("+x+")")
+                       next
+
+                       layout1.addwidget(label2)
+                       layout1.addlayout(layout3)
+                       layout1.addwidget(closebtn)
+
+                       win1.setlayout(layout1)
+
+                       app1.exec()
+
+               Func Player1Click x
+                       if nRole = 1 and aStatus[x] = 0
+                               nPos = ((random(100)+clock())%(len(aCards)-1)) + 1
+                               gui_setbtnpixmap(aBtns[x],aCards[nPos])
+                               del(aCards,nPos)
+                               nRole = 2
+                               aStatus[x] = 1
+                               aStatusValues[x] = aValues[nPos]
+                               del(aValues,nPos)
+                               Player1Eat(x,aStatusValues[x])
+                               checknewgame()
+                       ok
+
+               Func Player2Click x
+                       if nRole = 2 and aStatus2[x] = 0
+                               nPos = ((random(100)+clock())%(len(aCards)-1)) + 1
+                               gui_setbtnpixmap(aBtns2[x],aCards[nPos])
+                               del(aCards,nPos)
+                               nRole = 1
+                               aStatus2[x] = 1
+                               aStatusValues2[x] = aValues[nPos]
+                               del(aValues,nPos)
+                               Player2Eat(x,aStatusValues2[x])
+                               checknewgame()
+                       ok
+
+               Func Player1Eat nPos,nValue
+
+                        app1.processEvents()
+
+                        delay(nDelayEat)
+                        lEat = false
+                        for x = 1 to nCardsCount
+                                if aStatus2[x] = 1 and (aStatusValues2[x] = nValue or nValue=5)
+                                       aStatus2[x] = 2
+                                       gui_setbtnpixmap(aBtns2[x],Player1EatPic)
+                                       lEat = True
+                                       nPlayer1Score++
+                                ok
+                                if (x != nPos) and (aStatus[x] = 1) and 
+                                       (aStatusValues[x] = nValue or nValue=5)
+                                       aStatus[x] = 2
+                                       gui_setbtnpixmap(aBtns[x],Player1EatPic)
+                                       lEat = True
+                                       nPlayer1Score++
+                                ok
+                        next
+                        if lEat
+                                       nPlayer1Score++
+                                       gui_setbtnpixmap(aBtns[nPos],Player1EatPic)
+                                       aStatus[nPos] = 2
+                                       label1.settext("Player (1) - Score : " + nPlayer1Score)
+                        ok
+
+               Func Player2Eat nPos,nValue
+
+                        app1.processEvents()
+
+                        delay(nDelayEat)
+                        lEat = false
+                        for x = 1 to  nCardsCount
+                                if aStatus[x] = 1 and (aStatusValues[x] = nValue or nValue = 5)
+                                       aStatus[x] = 2
+                                       gui_setbtnpixmap(aBtns[x],Player2EatPic)
+                                       lEat = True
+                                       nPlayer2Score++
+                                ok
+
+                                if (x != nPos) and (aStatus2[x] = 1) and
+                                       (aStatusValues2[x] = nValue or nValue=5 )
+                                       aStatus2[x] = 2
+                                       gui_setbtnpixmap(aBtns2[x],Player2EatPic)
+                                       lEat = True
+                                       nPlayer2Score++
+                                ok
+                        next
+                        if lEat
+                                       nPlayer2Score++
+                                       gui_setbtnpixmap(aBtns2[nPos],Player2EatPic)
+                                       aStatus2[nPos] = 2
+                                       label2.settext("Player (2) - Score : " + nPlayer2Score)
+                        ok
+
+               Func checknewgame
+                       if isnewgame()
+                                         lnewgame = true
+
+                                         if nPlayer1Score > nPlayer2Score
+                                                label1.settext("Player (1) Wins!!!")
+                                         ok
+                                         if nPlayer2Score > nPlayer1Score
+                                                label2.settext("Player (2) Wins!!!")
+                                         ok
+
+                                         app1.processEvents()
+                                         delay(nDelayNewGame)
+
+                                         win1.delete()
+                                         app1.quit()
+                       ok
+
+               Func isnewgame
+                       for t in aStatus
+                               if t = 0
+                                       return false
+                               ok
+                       next
+                       for t in aStatus2
+                               if t = 0
+                                       return false
+                               ok
+                       next
+                       return true
+
+               Func delay x
+               nTime = x * 1000
+               oTest = new qTest
+               oTest.qsleep(nTime)
+
+実行中のアプリケーション
+                       
+.. image:: ringqt_shot48.jpg
+       :alt: Cards ゲーム
+
+.. note:: 前述のスクリーンショットではプレイヤーが‘5’番のカードを入手していますがスコアは加算されていません。
+       これはほかのカードが不可視状態のときに‘5’番のカードを開いたからです!
+
+このスクリーンショットはモバイル機器 (Android) でゲームを実行しています。
+
+.. image:: ringqt_shot52.jpg
+       :alt: Cards ゲーム
+
+.. note:: Qt を使うと同じアプリケーションをほかのモバイルシステムで実行できます。
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; クラスとメソッドでデフォルトのイベントを使うには
+
+
+クラスとメソッドでデフォルトのイベントを使うには
+================================================
+
+この表ではクラス名、およびメソッドで使用するデフォルトのイベントについて説明しています。
+
+============================== ===========================================================
+クラス名                                           メソッドで使用するデフォルトのイベント
+============================== ===========================================================
+QPushButton                    SetClickEvent()
+QAction                                SetClickEvent()
+QLineEdit                      SetTextChangedEvent()
+..                             SetCursorPositionChangedEvent()
+..                             SetEditingFinishedEvent()
+..                             SetReturnPressedEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTextEditedEvent()
+QTextEdit                      SetCopyAvailableEvent()
+..                             SetCurrentCharFormatChangedEvent()
+..                             SetCursorPositionChangedEvent()
+..                             SetRedoAvailableEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTextChangedEvent()
+..                             SetUndoAvailableEvent()
+QListWidget                    SetCurrentItemChangedEvent()
+..                             SetCurrentRowChangedEvent()
+..                             SetCurrentTextChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QTreeView                      SetCollapseEvent()
+..                             SetExpandedEvent()
+..                             SetActivatedEvent()
+..                             SetClickedEvent()
+..                             SetDoubleClickedEvent()
+..                             SetEnteredEvent()
+..                             SetPressedEvent()
+..                             SetViewportEnteredEvent()
+QTreeWidget                    SetCollapsedEvent()
+..                             SetExpandedEvent()
+..                             SetActivatedEvent()
+..                             SetClickedEvent()
+..                             SetDoubleClickedEvent()
+..                             SetEnteredEvent()
+..                             SetPressedEvent()
+..                             SetViewportEnteredEvent()
+..                             SetCurrentItemChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemCollapsedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemExpandedEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QComboBox                      SetActivatedEvent()
+..                             SetCurrentIndexChangedEvent()
+..                             SetEditTextChangedEvent()
+..                             SetHighlightedEvent()
+QTabWidget                     SetCurrentChangedEvent()
+..                             SetTabCloseRequestedEvent()
+QTableWidget                   SetCellActivatedEvent()
+..                             SetCellChangedEvent()
+..                             SetCellClickedEvent()
+..                             SetCellDoubleClickedEvent()
+..                             SetCellEnteredEvent()
+..                             SetCellPressedEvent()
+..                             SetCurrentCellChangedEvent()
+..                             SetCurrentItemChangedEvent()
+..                             SetItemActivatedEvent()
+..                             SetItemChangedEvent()
+..                             SetItemClickedEvent()
+..                             SetItemDoubleClickedEvent()
+..                             SetItemEnteredEvent()
+..                             SetItemPressedEvent()
+..                             SetItemSelectionChangedEvent()
+QProgressBar                   SetValueChangedEvent()
+QSpinBox                       SetValueChangedEvent()
+QSlider                        SetActionTriggeredEvent()
+..                             SetRangeChangedEvent()
+..                             SetSliderMovedEvent()
+..                             SetSliderPressedEvent()
+..                             SetSliderReleasedEvent()
+..                             SetValueChangedEvent()
+QDial                          SetActionTriggeredEvent()
+..                             SetRangeChangedEvent()
+..                             SetSliderMovedEvent()
+..                             SetSliderPressedEvent()
+..                             SetSliderReleasedEvent()
+..                             SetValueChangedEvent()
+QWebView                       SetLoadFinishedEvent()
+..                             SetLoadProgressEvent()
+..                             SetLoadStartedEvent()
+..                             SetSelectionChangedEvent()
+..                             SetTitleChangedEvent()
+..                             SetUrlChangedEvent()
+QCheckBox                      SetStateChangedEvent()
+..                             SetClickedEvent()
+..                             SetPressedEvent()
+..                             SetReleasedEvent()
+..                             SetToggledEvent()
+QRadioButton                   SetClickedEvent()
+..                             SetPressedEvent()
+..                             SetReleasedEvent()
+..                             SetToggledEvent()
+QButtonGroup                   SetButtonClickedEvent()
+..                             SetButtonPressedEvent()
+..                             SetButtonReleasedEvent()
+QVideoWidget                   SetBrightnessChangedEvent()
+..                             SetContrastChangedEvent()
+..                             SetFullScreenChangedEvent()
+..                             SetHueChangedEvent()
+..                             SetSaturationChangedEvent()
+QTimer                                 SetTimeoutEvent()
+QTcpServer                     SetAcceptErrorEvent()
+..                             SetNewConnectionEvent()
+QIODevice                      SetAboutToCloseEvent()
+..                             SetBytesWrittenEvent()
+..                             SetReadChannelFinishedEvent()
+..                             SetReadyReadEvent()
+QAbstractSocket                SetConnectedEvent()
+..                             SetDisconnectedEvent()
+..                             SetErrorEvent()
+..                             SetHostFoundEvent()
+..                             SetProxyAuthenticationRequiredEvent()
+..                             SetStateChangedEvent()
+QTcpSocket                     SetConnectedEvent()
+..                             SetDisconnectedEvent()
+..                             SetErrorEvent()
+..                             SetHostFoundEvent()
+..                             SetProxyAuthenticationRequiredEvent()
+..                             SetStateChangedEvent()
+..                             SetAboutToCloseEvent()
+..                             SetBytesWrittenEvent()
+..                             SetReadChannelFinishedEvent()
+..                             SetReadyReadEvent()
+QColorDialog                   SetColorSelectedEvent()
+..                             SetCurrentColorChangedEvent()
+QNetworkAccessManager          SetFinishedEvent()
+QThread                                SetStartedEvent()
+..                             SetFinishedEvent()
+============================== ===========================================================
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; イベントでイベントフィルタを使用したメソッド
+
+イベントでイベントフィルタを使用したメソッド
+============================================
+
+RingQt はイベントフィルタを使用することにより、新しいクラス QAllEvents を定義しています。
+
+この表は利用可能なメソッドです。
+
+================================       ======================
+メソッドで取得する仮引数                   クラス名
+================================       ======================
+getKeyCode()   --> Number              QAllEvents
+getx()         --> Number
+gety()         --> Number
+getglobalx()   --> Number
+getglobaly()   --> Number
+getbutton()    --> Number
+getbuttons()   --> Number
+================================       ======================
+
+この表はイベントで使用するメソッドを解説しています。
+
+===================================================    ======================
+メソッド名                                                                                        クラス名
+===================================================    ======================
+setKeyPressEvent(cEvent)                               QAllEvents
+setMouseButtonPressEvent(cEvent)
+setMouseButtonReleaseEvent(cEvent)
+setMouseButtonDblClickEvent(cEvent)
+setMouseMoveEvent(cEvent)
+setCloseEvent(cEvent)
+setContextMenuEvent(cEvent)
+setDragEnterEvent(cEvent)
+setDragLeaveEvent(cEvent)
+setDragMoveEvent(cEvent)
+setDropEvent(cEvent)
+setEnterEvent(cEvent)
+setFocusInEvent(cEvent)
+setFocusOutEvent(cEvent)
+setKeyReleaseEvent(cEvent)
+setLeaveEvent(cEvent)
+setNonClientAreaMouseButtonDblClickEvent(cEvent)
+setNonClientAreaMouseButtonPressEvent(cEvent)
+setNonClientAreaMouseButtonReleaseEvent(cEvent)
+setNonClientAreaMouseMoveEvent(cEvent)
+setMoveEvent(cEvent)
+setResizeEvent(cEvent)
+setWindowActivateEvent(cEvent)
+setWindowBlockedEvent(cEvent)
+setWindowDeactivateEvent(cEvent)
+setWindowStateChangeEvent(cEvent)
+setWindowUnblockedEvent(cEvent)
+===================================================    ======================
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; Qt と RingQt の違い
+
+Qt と RingQt の違い
+===================
+
+(1) RingQt ではイベントの実行用コードを設定するために単純なメソッドを使用します。
+
+文法:
+
+.. code-block:: none
+
+       Set<Event_Name>Event(cEventCode)
+       
+(2) RingQt では Ring キーワードとの衝突を回避するためにメソッド名を変更しています。
+
+この表は変更点の解説です。
+
+===============================     ======================      =====================
+クラス名                            Qt メソッド名               RingQt メソッド名
+===============================     ======================      =====================
+QWebView                            load                        loadpage
+QMediaPlaylist                      load                        loadfile
+QMediaPlaylist                      next                        movenext
+QPainter                            end                         endpaint
+QPicture                            load                        loadfile
+QLineEdit                           end                         endtext
+QDialog                             done                        donedialog
+QTextDocument                       end                         enddoc
+QTextBlock                          next                        nextblock
+QSqlQuery                           next                        movenext
+QImage                              load                        loadimage
+QNetworkAccessManager               get                         getvalue
+QNetworkAccessManager               put                         putvalue
+QThread                             exit                        exitfromthread
+QRegularExpressionMatchIterator     next                        nextitem
+QCamera                             load                        loadcamera
+===============================     ======================      =====================
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; RingQt クラスおよび Qt の取扱説明書
+
+RingQt クラスおよび Qt の取扱説明書
+=========================================
+
+Qt 取扱説明書 : http://doc.qt.io/qt-5/classes.html
+
+対応しているクラスとメソッドについては “RingQt クラスとメソッドのリファレンス” の章を参照してください。
+
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; 新しいクラス名 - 1 からインデックスを開始
+
+新しいクラス名 - 1 からインデックスを開始
+=========================================
+
+RingQt には新しいクラスが追加されています - 別バージョンのクラス名は小文字 “q” で開始されません。
+また GUI コントロールなど扱うときにインデックスが 1 から開始するようにメソッドを更新してあります。
+
+* ComboBox
+* ListWidget
+* TableWidget
+* TreeWidget
+
+前述のクラスは System.GUI パッケージで提供されており guilib.ring にあります :
+
+用法
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       import System.GUI
+
+これは以前のコードに一切影響を与えません。
+つまり Ring の規則と整合性がある優れたコードへの第三の選択です。
+
+またフォームデザイナーは、クラス間で「インデックスを 0 から開始」
+または「インデックスを 1 から開始」を選択肢を使用するために更新しました。
+
+用例 (フォームデザイナーを使用)
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartController.ring 
+
+.. index:: 
+       pair: RingQt によるデスクトップとモバイル開発; WebLib および GUILib を使用したレポートの作成方法
+
+
+WebLib および GUILib を使用したレポートの作成方法
+=================================================
+
+WebLib には HtmlPage クラスがあります。
+
+このクラスにより WebLib と GUILib で手軽にレポートを作成できます。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+       load "guilib.ring"
+
+       import System.Web
+       import System.GUI
+
+       new qApp {
+               open_window(:CustomersReportController)
+               exec()
+       }
+
+       class CustomersReportController
+
+               oView = new CustomersReportView
+
+               func Start
+                       CreateReport()
+
+               func CreateReport
+                       mypage = new HtmlPage {
+                               h1 { text("Customers Report") }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(4)
+                                       TR
+                                       {
+                                               TD { WIDTH="10%" 
+                                                       text("Customers Count : " )  }
+                                               TD { text (100) }
+                                       }
+                               }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(26)
+                                       TR
+                                       {
+                                               style = stylewidth("100%") +
+                                                       stylegradient(24)
+                                               TD { text("Name " )  }
+                                               TD { text("Age" ) }
+                                               TD { text("Country" ) }
+                                               TD { text("Job" ) }     
+                                               TD { text("Company" ) }
+                                       }
+                                       for x =  1 to 100
+                                               TR
+                                               {
+                                                       TD { text("Test" )  }
+                                                       TD { text("30" ) }
+                                                       TD { text("Egypt" ) }
+                                                       TD { text("Sales" ) }   
+                                                       TD { text("Future" ) }
+                                               }
+                                       next
+                               }
+                       }
+                       write("report.html",mypage.output())
+
+               func PrintEvent
+                       printer1 = new qPrinter(0) {
+                               setoutputformat(1)
+                               setoutputfilename("report.pdf")
+                       }
+                       oView {
+                               web.print(printer1)
+                               web.show()
+                       }
+                       system ("report.pdf")
+
+       class CustomersReportView
+
+                       win = new window() {
+                                       setwindowtitle("Report Window")
+                                       setgeometry(100,100,500,500)
+                                       web = new webview(win) {
+                                               setgeometry(100,100,1000,500)
+                                               loadpage(new qurl("file:///"+
+                                               currentdir()+"/report.html"))
+                                       }
+                                       new pushbutton(win) {
+                                                       setGeometry(100,20,100,30)
+                                                       settext("Print")
+                                                       setclickevent(Method(:PrintEvent))
+                                       }
+                                       showMaximized()
+                               }
+
+スクリーンショット:
+
+.. image:: ring15reportshot.png
+       :alt: 顧客報告書
+
diff --git a/docs/ja-jp/source/qt3d.txt b/docs/ja-jp/source/qt3d.txt
new file mode 100644 (file)
index 0000000..4c9afc8
--- /dev/null
@@ -0,0 +1,1788 @@
+.. index:: 
+       Single: Qt3D の用法; Qt3D の用法
+
+===========
+Qt3D の用法
+===========
+
+この章では様々な用例を通して Qt3D の用法を学びます。
+
+
+.. index:: 
+       pair: Qt3D の用法; 立方体の描画
+
+立方体の描画
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oCubeMaterial = new QPhongMaterial(oCube)
+               oCubeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cube") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex1.png
+       :alt: Qt3D の用例 - 立方体の描画
+
+
+.. index:: 
+       pair: Qt3D の用法; トーラスの描画
+
+トーラスの描画
+==============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oTorus = new  QTorusMesh(oRootEntity)
+                       oTorus.setRadius(1.0)
+                       oTorus.setMinorRadius(0.4)
+                       oTorus.setRings(100)
+                       oTorus.setSlices(20)
+
+               oTorusTransform = new  QTransform(oTorus)
+               oTorusTransform.setScale(2)
+               oTorusTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTorusMaterial = new QPhongMaterial(oTorus)
+               oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oTorusEntity = new QEntity(oRootEntity)
+               oTorusEntity.addComponent(oTorus)
+               oTorusEntity.addComponent(oTorusMaterial)
+               oTorusEntity.addComponent(oTorusTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Torus") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex2.png
+       :alt: Qt3D の用例 - トーラスの描画
+
+.. index:: 
+       pair: Qt3D の用法; 球体の描画
+
+球体の描画
+==========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oSphere = new  QSphereMesh(oRootEntity)
+                       oSphere.setRadius(1.0)
+                       oSphere.setRings(100)
+                       oSphere.setSlices(20)
+
+               oSphereTransform = new  QTransform(oSphere)
+               oSphereTransform.setScale(2)
+               oSphereTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oSphereMaterial = new QPhongMaterial(oSphere)
+               oSphereMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oSphereEntity = new QEntity(oRootEntity)
+               oSphereEntity.addComponent(oSphere)
+               oSphereEntity.addComponent(oSphereMaterial)
+               oSphereEntity.addComponent(oSphereTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Sphere") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex3.png
+       :alt: Qt3D の用例 - 球体の描画
+
+.. index:: 
+       pair: Qt3D の用法; 円柱の描画
+
+円柱の描画
+==========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oCylinder = new  QCylinderMesh(oRootEntity)
+                       oCylinder.setRadius(1)
+                       oCylinder.setRings(100)
+                       oCylinder.setSlices(20)
+               oCylinder.setLength(5)
+
+               oCylinderTransform = new  QTransform(oCylinder)
+               oCylinderTransform.setScale(2)
+               oCylinderTransform.setTranslation(new QVector3D(1, 0, 3))
+
+               oCylinderMaterial = new QPhongMaterial(oCylinder)
+               oCylinderMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oCylinderEntity = new QEntity(oRootEntity)
+               oCylinderEntity.addComponent(oCylinder)
+               oCylinderEntity.addComponent(oCylinderMaterial)
+               oCylinderEntity.addComponent(oCylinderTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cylinder") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex4.png
+       :alt: Qt3D の用例 - 円柱の描画
+
+.. index:: 
+       pair: Qt3D の用法; 円錐の描画
+
+円錐の描画
+==========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oCone = new  QConeMesh(oRootEntity)
+                       oCone.setRings(100)
+                       oCone.setSlices(20)
+               oCone.setLength(5)
+
+               oConeTransform = new  QTransform(oCone)
+               oConeTransform.setScale(2)
+               oConeTransform.setTranslation(new QVector3D(1, 0, 3))
+
+               oConeMaterial = new QPhongMaterial(oCone)
+               oConeMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oConeEntity = new QEntity(oRootEntity)
+               oConeEntity.addComponent(oCone)
+               oConeEntity.addComponent(oConeMaterial)
+               oConeEntity.addComponent(oConeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Cone") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex5.png
+       :alt: Qt3D の用例 - 円錐の描画
+
+.. index:: 
+       pair: Qt3D の用法; 平面の描画
+
+平面の描画
+==========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+
+               oPlane = new  QPlaneMesh(oRootEntity)
+               oPlane.setHeight(5)
+               oPlane.setWidth(5)
+               oPlane.setmeshresolution(new qSize(10,10))
+
+               oPlaneTransform = new  QTransform(oPlane)
+               oPlaneTransform.setScale(2)
+               oPlaneTransform.setTranslation(new QVector3D(0, -4, 4))
+
+               oPlaneMaterial = new QPhongMaterial(oPlane)
+               oPlaneMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+
+               oPlaneEntity = new QEntity(oRootEntity)
+               oPlaneEntity.addComponent(oPlane)
+               oPlaneEntity.addComponent(oPlaneMaterial)
+               oPlaneEntity.addComponent(oPlaneTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Plane") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex6.png
+       :alt: Qt3D の用例 - 平面の描画
+
+       
+.. index:: 
+       pair: Qt3D の用法; テクスチャ
+
+テクスチャ
+==========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Adding Texture") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex7.png
+       :alt: Qt3D の用例 - テクスチャ
+
+.. index:: 
+       pair: Qt3D の用法; キー入力
+
+キー入力
+========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+                       oFilter = new qallevents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Moving Cube using the Keyboard") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               oContainer.setfocus(0)
+
+               exec()
+       }
+
+       func pKeyPress
+               nKey = oFilter.getkeycode()
+               oX = oCubeTransform.translation().x()
+               oY = oCubeTransform.translation().y() 
+               oZ = oCubeTransform.translation().z()
+               switch nKey
+                       on Qt_Key_Right
+                               oX++
+                       on Qt_Key_Left
+                               oX--
+                       on Qt_Key_Up
+                               oY++
+                       on Qt_Key_Down
+                               oY--
+               off
+               oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
+
+.. image:: qt3d_ex8.png
+       :alt: Qt3D の用例 - キー入力
+
+
+.. index:: 
+       pair: Qt3D の用法; オブジェクト・ピッカー
+
+オブジェクト・ピッカー
+======================
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+                       oFilter = new qallevents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(3, 3, 3))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oPicker = new qObjectPicker(oCube) {
+                       setclickedevent("pClick()")
+               }
+               oCubeEntity.addComponent(oPicker)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Object Picker - Click on the Cube") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               oContainer.setfocus(0)
+
+               exec()
+       }
+
+       func pKeyPress
+               nKey = oFilter.getkeycode()
+               oX = oCubeTransform.translation().x()
+               oY = oCubeTransform.translation().y() 
+               oZ = oCubeTransform.translation().z()
+               switch nKey
+                       on Qt_Key_Right
+                               oX++
+                       on Qt_Key_Left
+                               oX--
+                       on Qt_Key_Up
+                               oY++
+                       on Qt_Key_Down
+                               oY--
+               off
+               oCubeTransform.setTranslation(new QVector3D(oX, oY, oZ))
+
+       func pClick
+               msginfo("Event","Click")
+               oContainer.setfocus(0)
+
+
+.. image:: qt3d_ex9.png
+       :alt: Qt3D の用例 - オブジェクト・ピッカー
+
+.. index:: 
+       pair: Qt3D の用法; フレームアクション
+
+フレームアクション
+==================
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+               oCamController.setEnabled(False)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(1)
+                       setYextent(1)
+                       setZextent(1)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(-5, -5, -5))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               nAngle=0        nSpeed=0.1
+               oFrameAction = new qFrameAction(oRootEntity) {
+                       settriggeredevent("pEvent()")
+               }
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Frame Action") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+       func pEvent
+
+               # Move the Cube
+                       oX = oCubeTransform.translation().x()
+                       oY = oCubeTransform.translation().y() 
+                       oZ = oCubeTransform.translation().z()
+                       if oX >= 4
+                               nSpeed=-0.1
+                       but oX <= -10
+                               nSpeed=0.1
+                       ok
+                       oCubeTransform.setTranslation(
+                               new QVector3D(oX+nSpeed, oY+nSpeed, oZ+nSpeed))
+
+               # Rotate the Cube
+                       nAngle+=5  if nAngle=360  nAngle=0 ok
+                       oQ = new QQuaternion(0,0,0,0)
+                       oCubeTransform.setRotation(
+                               oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), nAngle))
+
+.. image:: qt3d_ex10.png
+       :alt: Qt3D の用例 - フレームアクション
+
+.. index:: 
+       pair: Qt3D の用法; 2Dテキスト
+
+2Dテキスト
+==========
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+
+               oText2DEntity = new  QText2DEntity(oRootEntity) {
+                       setText("Ring programming language")
+                       setWidth(400) setHeight(40)
+                       setColor(new QColor() {setRGB(128,128,128,255)})
+               }
+
+               oText2DTransform = new  QTransform(oText2DEntity)
+               oText2DTransform.setScale(0.1)
+               oText2DTransform.setTranslation(new QVector3D(-10.5, -5, 0))
+
+               oText2DEntity.addComponent(oText2DTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Text2D") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+
+.. image:: qt3d_ex11.png
+       :alt: Qt3D の用例 - 2Dテキスト
+
+       
+.. index:: 
+       pair: Qt3D の用法; テキストの押し出し
+
+テキストの押し出し
+==================
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oView.defaultframegraph().setclearcolor(new QColor() {setRGB(100,250,150,255)})
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oCube = new  QCuboidMesh(oRootEntity) {
+                       setXextent(2)
+                       setYextent(2)
+                       setZextent(3)
+               }
+
+               oCubeTransform = new  QTransform(oCube)
+               oCubeTransform.setScale(2)
+               oCubeTransform.setTranslation(new QVector3D(0, 3, 4))
+
+               oTextureLoader = new  QTextureLoader(oCube);
+               oTextureLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/ring.bmp") )
+               oCubeMaterial = new QTextureMaterial(oCube)
+               oCubeMaterial.setTexture(oTextureLoader)
+
+               oCubeEntity = new QEntity(oRootEntity)
+               oCubeEntity.addComponent(oCube)
+               oCubeEntity.addComponent(oCubeMaterial)
+               oCubeEntity.addComponent(oCubeTransform)
+        
+               oTextEntity = new QEntity(oRootEntity)
+
+               oTextMesh = new  QExtrudedTextMesh(oTextEntity) {
+                       setText("Ring")
+               }
+
+               oTextTransform = new  QTransform(oTextEntity)
+               oTextTransform.setScale(3)
+               oTextTransform.setTranslation(new QVector3D(-5.5, -4, 3))
+
+               oTextMaterial = new QPhongMaterial(oTextEntity);
+               oTextMaterial.setDiffuse(new QColor() {setRGB(0,0,255,255)})
+               
+               oTextEntity.addComponent(oTextMesh)
+               oTextEntity.addComponent(oTextTransform)
+               oTextEntity.addComponent(oTextMaterial)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Extruded Text") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex12.png
+       :alt: Qt3D の用例 - テキストの押し出し
+
+       
+.. index:: 
+       pair: Qt3D の用法; モデル
+
+モデル
+======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/lucky_cat.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.1)
+               oModelTransform.setTranslation(new QVector3D(0, 0, 0))
+               oQ = new QQuaternion(0,0,0,0)
+               oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 0), 180))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelmaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model (Obj File)") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+
+.. image:: qt3d_ex13.png
+       :alt: Qt3D の用例 - モデル
+
+.. index:: 
+       pair: Qt3D の用法; モデルテクスチャ
+
+モデルテクスチャ
+================
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 25, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.5)
+               oModelTransform.setTranslation(new QVector3D(0, 12, 4))
+
+               oLoader = new  QTextureLoader(oModel)
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/Robot.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model Texture") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex14.png
+       :alt: Qt3D の用例 - モデルテクスチャ
+
+       
+.. index:: 
+       pair: Qt3D の用法; 事務所の描画
+
+事務所の描画
+============
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 0, 0))     
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Reception_Table.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(1)
+               oModelTransform.setTranslation(new QVector3D(0, -2.5, 16))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,255,128,255)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+               oModelEntity.addComponent(oModelmaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Model (Obj File) - Office") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex15.png
+       :alt: Qt3D の用例 - 事務所の描画
+
+.. index:: 
+       pair: Qt3D の用法; 複数オブジェクト
+
+複数オブジェクト
+================
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.2)
+               oModelTransform.setTranslation(new QVector3D(0, 10, 10))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+
+               oLoader = new  QTextureLoader(oModel);
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               for n = 1 to 10
+
+                       oTorus = new  QTorusMesh(oRootEntity)
+                               oTorus.setRadius(1.0*n)
+                               oTorus.setMinorRadius(0.4*n)
+                               oTorus.setRings(100)
+                               oTorus.setSlices(20)
+               
+                       oTorusTransform = new  QTransform(null)
+                       oTorusTransform.setScale(2)
+                       oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
+               
+                       oTorusMaterial = new QPhongMaterial(null);
+                       oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+               
+                       oTorusEntity = new QEntity(oRootEntity)
+                       oTorusEntity.addComponent(oTorus)
+               
+                       oLoader = new  QTextureLoader(oTorus);
+                       oTorusMaterial = new QTextureMaterial(oTorus)
+                       oLoader.setSource(
+                               new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+                       oTorusMaterial.setTexture(oLoader)
+               
+                       oTorusEntity.addComponent(oTorusMaterial)
+                       oTorusEntity.addComponent(oTorusTransform)
+               next
+
+               oView.setRootEntity(oRootEntity)
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Many Objects") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+.. image:: qt3d_ex16.png
+       :alt: Qt3D の用例 - 複数オブジェクト
+
+.. index:: 
+       pair: Qt3D の用法; カメラ
+
+カメラ
+======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oView = new Qt3dwindow() 
+
+               oWidget = new QWidget() 
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000.0)
+                       oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(0, 20, 0))    
+
+               oLightEntity = new QEntity(oRootEntity)
+                       oLight = new QPointLight(oLightEntity)
+               oLight.setColor(new QColor() { setRGB(255,255,255,255) })
+               oLight.setIntensity(1)
+               oLightEntity.addComponent(oLight)
+
+               oLightTransform = new QTransform(oLightEntity)
+               oLightTransform.setTranslation(oCameraEntity.position())
+               oLightEntity.addComponent(oLightTransform)
+
+               oCamController = new  QFirstPersonCameraController(oRootEntity)
+                       oCamController.setCamera(oCameraEntity)
+
+               oModel = new qmesh(oRootEntity)
+               oModel.setsource(
+                       new qURL("file:///"+currentdir()+"/assets/model/Robot.obj") ) 
+
+               oModelTransform = new  QTransform(oModel)
+               oModelTransform.setScale(0.2)
+               oModelTransform.setTranslation(new QVector3D(0, 10, 10))
+
+               oModelMaterial = new QPhongMaterial(oModel)
+               oModelMaterial.setDiffuse(new QColor() {setRGB(0,100,0,0)})
+
+               oModelEntity = new QEntity(oRootEntity)
+               oModelEntity.addComponent(oModel)
+
+               oLoader = new  QTextureLoader(oModel);
+               oModelMaterial = new QTextureMaterial(oModel)
+               oLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+               oModelMaterial.setTexture(oLoader)
+
+               oModelEntity.addComponent(oModelMaterial)
+               oModelEntity.addComponent(oModelTransform)
+
+               for n = 1 to 10
+
+                       oTorus = new  QTorusMesh(oRootEntity)
+                               oTorus.setRadius(1.0*n)
+                               oTorus.setMinorRadius(0.4*n)
+                               oTorus.setRings(100)
+                               oTorus.setSlices(20)
+               
+                       oTorusTransform = new  QTransform(null)
+                       oTorusTransform.setScale(2)
+                       oTorusTransform.setTranslation(new QVector3D(5.0*n, 4.0*n, 0.0))
+               
+                       oTorusMaterial = new QPhongMaterial(null);
+                       oTorusMaterial.setDiffuse(new QColor() {setRGB(200,100,100,100)})
+               
+                       oTorusEntity = new QEntity(oRootEntity)
+                       oTorusEntity.addComponent(oTorus)
+               
+                       oLoader = new  QTextureLoader(oTorus);
+                       oTorusMaterial = new QTextureMaterial(oTorus)
+                       oLoader.setSource(
+                               new QUrl("file:///"+currentdir()+"/assets/texture/gold.jpg") )
+                       oTorusMaterial.setTexture(oLoader)
+               
+                       oTorusEntity.addComponent(oTorusMaterial)
+                       oTorusEntity.addComponent(oTorusTransform)
+               next
+
+               oView.setRootEntity(oRootEntity)
+
+
+               btn1 = new qPushButton(oWidget) {
+                       setText("Move the Camera and the Robot") setClickEvent("pMove()") 
+               }
+
+               oLayout = new QVBoxLayout()
+               oLayout.AddWidget(oContainer)
+               oLayout.AddWidget(btn1)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Camera") 
+                       resize(800,600)
+                       setLayout(oLayout) 
+                       showMaximized() 
+               }
+
+               exec()
+       }
+
+       func pMove 
+
+               oCameraEntity.setPosition(new QVector3D(0, 0, 20.0))
+                       oCameraEntity.setUpVector(new QVector3D(0, 1, 0))
+                       oCameraEntity.setViewCenter(new QVector3D(20, 15, 20))
+
+               oModelTransform.setTranslation(new QVector3D(20, 15, 20))
+               oQ = new QQuaternion(0,0,0,0)
+               oModelTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(1, 1, 0), 270))
+
+
+.. image:: qt3d_ex17.png
+       :alt: Qt3D の用例 - カメラ
+
+       
+.. index:: 
+       pair: Qt3D の用法; シーン
+
+シーン
+======
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+
+               oWidget = new QWidget()
+
+               oView = new Qt3DWindow() 
+               oView.defaultFrameGraph().setClearColor(new QColor() {setRGB(0,0,0,255)})
+
+               oContainer = oWidget.createWindowContainer(oView,oWidget,0)
+
+               oRootEntity = new QEntity(oContainer) 
+
+               oInput = new QInputAspect(oRootEntity)
+                       oView.registerAspect(oInput)
+
+               oCameraEntity = oView.Camera()
+
+               oCameraEntity.lens().setPerspectiveProjection(45.0, 16.0/9.0, 0.1, 1000)
+               oCameraEntity.setPosition(new QVector3D(-13.34, -6.43, 16.47))
+                       oCameraEntity.setUpVector(new QVector3D(0.02, 0, 1))
+                       oCameraEntity.setViewCenter(new QVector3D(-13.34, 17.05, 15.42))        
+
+               oCameraController = new  QFirstPersonCameraController(oRootEntity)
+               oCameraController.setCamera(oCameraEntity)
+               oCameraController.setEnabled(False)
+
+               oLongRoomEntity = new QEntity(oRootEntity)
+
+               oLongRoomModel = new QMesh(oLongRoomEntity)
+
+               oLongRoomModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Long_Room.obj") ) 
+
+               oLongRoomTransform = new  QTransform(oLongRoomEntity)
+               oLongRoomTransform.setScale(1)
+               oLongRoomTransform.setTranslation(new QVector3D(5, 0, 15))
+
+               oLongRoomLoader = new  QTextureLoader(oLongRoomModel)
+               oLongRoomMaterial = new QTextureMaterial(oLongRoomModel)
+               oLongRoomLoader.setSource(
+                       new QUrl("file:///"+currentdir()+"/assets/texture/croc.jpg") )
+               oLongRoomMaterial.setTexture(oLongRoomLoader)
+
+               oLongRoomEntity.addComponent(oLongRoomModel)
+               oLongRoomEntity.addComponent(oLongRoomMaterial)
+               oLongRoomEntity.addComponent(oLongRoomTransform)
+
+               oTableEntity = new QEntity(oRootEntity)
+
+               oTableModel = new QMesh(oTableEntity)
+               oTableModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Reception_Table.obj") ) 
+
+               oTableTransform = new  QTransform(oTableEntity)
+               oTableTransform.setScale(0.3)
+               oTableTransform.setTranslation(new QVector3D(5, 0, 15))
+               oQ = new QQuaternion(0,0,0,0)
+               oTableTransform.setRotation(oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), -180))
+
+               oTableModelMaterial = new QPhongMaterial(oTableEntity)
+               oTableModelMaterial.setDiffuse(new QColor() {setRGB(255,255,255,255)})
+
+               oTableEntity.addComponent(oTableModel)
+               oTableEntity.addComponent(oTableModelmaterial)
+               oTableEntity.addComponent(oTableTransform)
+
+               oFirstLightEntity = new QEntity(oRootEntity)
+
+                       oFirstLight = new QPointLight(oFirstLightEntity)
+               oFirstLight.setColor(new qColor() { setRGB(128,128,128,128) })
+               oFirstLight.setIntensity(1)
+
+               oFirstLightTransform = new QTransform(oFirstLightEntity)
+               oFirstLightTransform.setTranslation(new QVector3D(5, 0, 20))
+
+               oFirstLightEntity.addComponent(oFirstLight)
+               oFirstLightEntity.addComponent(oFirstLightTransform)
+
+               aCats = list(5)
+               for n = 1 to 5
+               v = n * 0.1
+               aCats[n] = []
+               aCats[n][:oCatModelEntity] = new QEntity(oRootEntity)
+               aCats[n][:oCatModel] = new QMesh(aCats[n][:oCatModelEntity])
+               aCats[n][:oCatModel].setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Lucky_Cat.obj") ) 
+               aCats[n][:oCatModelMaterial] = new QPhongMaterial(aCats[n][:oCatModel])
+               aCats[n][:oCatModelMaterial].setDiffuse(
+                       new QColor() {setRGB(255,255,255,255)})
+               aCats[n][:oCatModelTransform] = new  QTransform(aCats[n][:oCatModelEntity])
+               aCats[n][:oCatModelTransform].setScale(0.01)
+               aCats[n][:oCatModelTransform].setTranslation(
+                       new QVector3D(-5*(v+v), 1, 15.2))
+               oQ = new QQuaternion(0,0,0,0)
+               aCats[n][:oCatModelTransform].setRotation(
+                       oQ.fromAxisAndAngle(
+                               new QVector3D(0, 1, 1), 180))
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModel])
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelmaterial])
+               aCats[n][:oCatModelEntity].addComponent(aCats[n][:oCatModelTransform])
+               next
+
+               oSecondLightEntity = new QEntity(oRootEntity)
+
+               oSecondLight = new QPointLight(oSecondLightEntity)
+               oSecondLight.setColor(new qColor() { setRGB(255,255,255,255) })
+               oSecondLight.setIntensity(1)
+
+               oSecondLightTransform = new QTransform(oSecondLightEntity)
+               oSecondLightTransform.setTranslation(new QVector3D(-5, 1, 15.5))
+
+               oSecondLightEntity.addComponent(oSecondLight)
+               oSecondLightEntity.addComponent(oSecondLightTransform)
+
+               oRobotEntity = new QEntity(oRootEntity)
+
+               oRobotModel = new QMesh(oRobotEntity)
+               oRobotModel.setSource(
+                       new qURL("file:///"+CurrentDir()+"/assets/model/Fat_Robot.obj") ) 
+               oRobotTransform = new  QTransform(oRobotEntity)
+               oRobotTransform.setScale(0.006)
+               
+               robotX = -15
+               robotY = -2
+               robotZ = 15
+
+               oRobotTransform.setTranslation(new QVector3D(-15, -2, 15))
+               oQ = new QQuaternion(0,0,0,0)
+               oRobotTransform.setRotation(
+                       oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
+
+               oRobotMaterial = new QPhongMaterial(oRobotEntity)
+               oRobotMaterial.setDiffuse(new QColor() {setRGB(128,128,128,255)})
+
+               oRobotEntity.addComponent(oRobotModel)
+               oRobotEntity.addComponent(oRobotTransform)
+               oRobotEntity.addComponent(oRobotMaterial)
+
+               oView.setRootEntity(oRootEntity)
+
+               oWidget { 
+                       setwindowtitle("Using Qt3D - Scene") 
+                       showfullscreen() 
+               }
+
+               oContainer.resize(oWidget.width(),oWidget.height())
+
+                       oFilter = new QAllEvents(oView)
+                       oFilter.setKeyPressEvent("pKeyPress()")
+                       oView.installeventfilter(oFilter)
+               oContainer.setfocus(0)
+
+               exec()
+
+       }
+
+       func pKeyPress
+
+               nKey    = oFilter.getKeyCode()
+               nSpeed  = 0.1
+               cX      = oCameraEntity.position().x()
+               CY      = oCameraEntity.position().y()
+               cZ      = oCameraEntity.position().z()
+               cVCx    = oCameraEntity.viewCenter().x()
+               cVCy    = oCameraEntity.viewCenter().y()
+               cVCz    = oCameraEntity.viewCenter().z()
+
+               switch nKey
+                       on Qt_Key_Right
+                               if cX < 4.8
+                                       robotX+= nSpeed
+                                       oCameraEntity.setPosition(
+                                               new QVector3D(cX+0.1, cY, cZ))
+                                       oCameraEntity.setViewCenter(
+                                               new QVector3D(cVCx+nSpeed, cVCy, cVCz)) 
+                                       oRobotTransform.setRotation(
+                                               oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 170))
+                               ok
+                       on Qt_Key_Left
+                               if cX > - 13.8
+                                       robotX-= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX-0.1, cY, cZ))
+                                       oCameraEntity.setViewCenter(
+                                         new QVector3D(cVCx-nSpeed, cVCy, cVCz))       
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 160))
+                               ok
+                       on Qt_Key_Down 
+                               if robotY > -3.5
+                                       robotY-= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX, cY, cZ))
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 190))
+                               ok
+                       on Qt_Key_Up
+                               if robotY < 2
+                                       robotY+= nSpeed
+                                       oCameraEntity.setPosition(
+                                         new QVector3D(cX, cY, cZ))
+                                       oRobotTransform.setRotation(
+                                         oQ.fromAxisAndAngle(new QVector3D(0, 1, 1), 180))
+                               ok
+                       on Qt_Key_Escape
+                               oWidget.close()
+               off
+
+               oRobotTransform.setTranslation(new QVector3D(robotX, robotY, robotZ))
+
+
+.. image:: qt3d_ex18.png
+       :alt: Qt3D の用例 - シーン
diff --git a/docs/ja-jp/source/qt3d_ex1.png b/docs/ja-jp/source/qt3d_ex1.png
new file mode 100644 (file)
index 0000000..224c9fd
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex1.png differ
diff --git a/docs/ja-jp/source/qt3d_ex10.png b/docs/ja-jp/source/qt3d_ex10.png
new file mode 100644 (file)
index 0000000..48bced9
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex10.png differ
diff --git a/docs/ja-jp/source/qt3d_ex11.png b/docs/ja-jp/source/qt3d_ex11.png
new file mode 100644 (file)
index 0000000..1aea68a
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex11.png differ
diff --git a/docs/ja-jp/source/qt3d_ex12.png b/docs/ja-jp/source/qt3d_ex12.png
new file mode 100644 (file)
index 0000000..62c447e
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex12.png differ
diff --git a/docs/ja-jp/source/qt3d_ex13.png b/docs/ja-jp/source/qt3d_ex13.png
new file mode 100644 (file)
index 0000000..79473f6
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex13.png differ
diff --git a/docs/ja-jp/source/qt3d_ex14.png b/docs/ja-jp/source/qt3d_ex14.png
new file mode 100644 (file)
index 0000000..3363405
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex14.png differ
diff --git a/docs/ja-jp/source/qt3d_ex15.png b/docs/ja-jp/source/qt3d_ex15.png
new file mode 100644 (file)
index 0000000..05a72a6
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex15.png differ
diff --git a/docs/ja-jp/source/qt3d_ex16.png b/docs/ja-jp/source/qt3d_ex16.png
new file mode 100644 (file)
index 0000000..dd249ef
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex16.png differ
diff --git a/docs/ja-jp/source/qt3d_ex17.png b/docs/ja-jp/source/qt3d_ex17.png
new file mode 100644 (file)
index 0000000..4480a8e
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex17.png differ
diff --git a/docs/ja-jp/source/qt3d_ex18.png b/docs/ja-jp/source/qt3d_ex18.png
new file mode 100644 (file)
index 0000000..2055743
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex18.png differ
diff --git a/docs/ja-jp/source/qt3d_ex2.png b/docs/ja-jp/source/qt3d_ex2.png
new file mode 100644 (file)
index 0000000..7f64f56
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex2.png differ
diff --git a/docs/ja-jp/source/qt3d_ex3.png b/docs/ja-jp/source/qt3d_ex3.png
new file mode 100644 (file)
index 0000000..899dd78
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex3.png differ
diff --git a/docs/ja-jp/source/qt3d_ex4.png b/docs/ja-jp/source/qt3d_ex4.png
new file mode 100644 (file)
index 0000000..fd28e78
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex4.png differ
diff --git a/docs/ja-jp/source/qt3d_ex5.png b/docs/ja-jp/source/qt3d_ex5.png
new file mode 100644 (file)
index 0000000..0e31f10
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex5.png differ
diff --git a/docs/ja-jp/source/qt3d_ex6.png b/docs/ja-jp/source/qt3d_ex6.png
new file mode 100644 (file)
index 0000000..ad789a3
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex6.png differ
diff --git a/docs/ja-jp/source/qt3d_ex7.png b/docs/ja-jp/source/qt3d_ex7.png
new file mode 100644 (file)
index 0000000..c8ab221
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex7.png differ
diff --git a/docs/ja-jp/source/qt3d_ex8.png b/docs/ja-jp/source/qt3d_ex8.png
new file mode 100644 (file)
index 0000000..9080d63
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex8.png differ
diff --git a/docs/ja-jp/source/qt3d_ex9.png b/docs/ja-jp/source/qt3d_ex9.png
new file mode 100644 (file)
index 0000000..84d8848
Binary files /dev/null and b/docs/ja-jp/source/qt3d_ex9.png differ
diff --git a/docs/ja-jp/source/qt3dex18.png b/docs/ja-jp/source/qt3dex18.png
new file mode 100644 (file)
index 0000000..2055743
Binary files /dev/null and b/docs/ja-jp/source/qt3dex18.png differ
diff --git a/docs/ja-jp/source/qtclassconvertor.png b/docs/ja-jp/source/qtclassconvertor.png
new file mode 100644 (file)
index 0000000..c71d150
Binary files /dev/null and b/docs/ja-jp/source/qtclassconvertor.png differ
diff --git a/docs/ja-jp/source/qtclassesdoc.txt b/docs/ja-jp/source/qtclassesdoc.txt
new file mode 100644 (file)
index 0000000..7f9caac
--- /dev/null
@@ -0,0 +1,11381 @@
+.. index:: 
+     single: RingQt クラスリファレンス; はじめに
+
+=========================
+RingQt クラスリファレンス
+=========================
+
+
+.. index::
+       pair: RingQt クラスリファレンス; CodeEditor クラス
+
+CodeEditor クラス
+=================
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QPlainTextEdit
+
+* void setCompleter(QCompleter \*c)
+* QCompleter \*completer(void)
+* void setLineNumbersAreaColor(QColor oColor)
+* void setLineNumbersAreaBackColor(QColor oColor)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractAspect クラス
+
+QAbstractAspect クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dcore-qabstractaspect.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* void scheduleSingleShotJob(Qt3DCore::QAspectJobPtr job)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractButton クラス
+
+QAbstractButton クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qabstractbutton.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* bool autoExclusive(void)
+* bool autoRepeat(void)
+* int autoRepeatDelay(void)
+* int autoRepeatInterval(void)
+* QButtonGroup \*group(void)
+* QIcon icon(void)
+* QSize iconSize(void)
+* bool isCheckable(void)
+* bool isChecked(void)
+* bool isDown(void)
+* void setAutoExclusive(bool)
+* void setAutoRepeat(bool)
+* void setAutoRepeatDelay(int)
+* void setAutoRepeatInterval(int)
+* void setCheckable(bool)
+* void setDown(bool)
+* void setIcon(QIcon)
+* void setShortcut(QKeySequence)
+* void setText(QString)
+* QKeySequence shortcut(void)
+* QString text(void)
+* void animateClick(int msec)
+* void click(void)
+* void setChecked(bool)
+* void setIconSize(QSize)
+* void toggle(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractCameraController クラス
+
+QAbstractCameraController クラス
+================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qabstractcameracontroller.html
+
+
+親クラス : QEntity
+
+* float acceleration(void)
+* Qt3DRender::QCamera \* camera(void)
+* float deceleration(void)
+* float linearSpeed(void)
+* float lookSpeed(void)
+* void setAcceleration(float acceleration)
+* void setCamera(Qt3DRender::QCamera \*camera)
+* void setDeceleration(float deceleration)
+* void setLinearSpeed(float linearSpeed)
+* void setLookSpeed(float lookSpeed)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractItemView クラス
+
+QAbstractItemView クラス
+========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qabstractitemview.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractScrollArea
+
+* bool alternatingRowColors(void)
+* int autoScrollMargin(void)
+* void closePersistentEditor(QModelIndex)
+* QModelIndex currentIndex(void)
+* int defaultDropAction(void)
+* int dragDropMode(void)
+* bool dragDropOverwriteMode(void)
+* bool dragEnabled(void)
+* int editTriggers(void)
+* bool hasAutoScroll(void)
+* int horizontalScrollMode(void)
+* QSize iconSize(void)
+* QModelIndex indexAt(QPoint)
+* QWidget \*indexWidget(QModelIndex)
+* QAbstractItemDelegate \*itemDelegate(QModelIndex)
+* QAbstractItemDelegate \*itemDelegateForColumn(int column)
+* QAbstractItemDelegate \*itemDelegateForRow(int row)
+* void keyboardSearch(QString)
+* QAbstractItemModel \*model(void)
+* void openPersistentEditor(QModelIndex)
+* QModelIndex rootIndex(void)
+* void scrollTo(QModelIndex,QAbstractItemView::ScrollHint)
+* int selectionBehavior(void)
+* int selectionMode(void)
+* QItemSelectionModel \*selectionModel(void)
+* void setAlternatingRowColors(bool enable)
+* void setAutoScroll(bool enable)
+* void setAutoScrollMargin(int margin)
+* void setDefaultDropAction(Qt::DropAction dropAction)
+* void setDragDropMode(QAbstractItemView::DragDropMode behavior)
+* void setDragDropOverwriteMode(bool overwrite)
+* void setDragEnabled(bool enable)
+* void setDropIndicatorShown(bool enable)
+* void setEditTriggers(QAbstractItemView::EditTrigger triggers)
+* void setHorizontalScrollMode(QAbstractItemView::ScrollMode mode)
+* void setIconSize(QSize)
+* void setIndexWidget(QModelIndex, QWidget \*widget)
+* void setItemDelegate(QAbstractItemDelegate \*delegate)
+* void setItemDelegateForColumn(int column, QAbstractItemDelegate \*delegate)
+* void setItemDelegateForRow(int row, QAbstractItemDelegate \*delegate)
+* void setModel(QAbstractItemModel \*model)
+* void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)
+* void setSelectionMode(QAbstractItemView::SelectionMode mode)
+* void setSelectionModel(QItemSelectionModel \*selectionModel)
+* void setTabKeyNavigation(bool enable)
+* void setTextElideMode(Qt::TextElideMode mode)
+* void setVerticalScrollMode(QAbstractItemView::ScrollMode mode)
+* bool showDropIndicator(void)
+* int sizeHintForColumn(int column)
+* QSize sizeHintForIndex(QModelIndex)
+* int sizeHintForRow(int row)
+* bool tabKeyNavigation(void)
+* int textElideMode(void)
+* int verticalScrollMode(void)
+* QRect visualRect(QModelIndex)
+* void clearSelection(void)
+* void edit(QModelIndex)
+* void scrollToBottom(void)
+* void scrollToTop(void)
+* void setCurrentIndex(QModelIndex)
+* void update(QModelIndex)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractPrintDialog クラス
+
+QAbstractPrintDialog クラス
+===========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qabstractprintdialog.html
+
+
+仮引数 : QPrinter \*,QWidget \*
+
+
+親クラス : QDialog
+
+* int fromPage(void)
+* int maxPage(void)
+* int minPage(void)
+* QAbstractPrintDialog::PrintRange printRange(void)
+* QPrinter \* printer(void)
+* void setFromTo(int from, int to)
+* void setMinMax(int min, int max)
+* void setOptionTabs(QList<QWidget \*> tabs)
+* void setPrintRange(QAbstractPrintDialog::PrintRange range)
+* int toPage(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractScrollArea クラス
+
+QAbstractScrollArea クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qabstractscrollarea.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QFrame
+
+* void addScrollBarWidget(QWidget \*widget, Qt::AlignmentFlag alignment)
+* QWidget \*cornerWidget(void)
+* QScrollBar \*horizontalScrollBar(void)
+* int horizontalScrollBarPolicy(void)
+* QSize maximumViewportSize(void)
+* QWidgetList scrollBarWidgets(Qt::AlignmentFlag)
+* void setCornerWidget(QWidget \*widget)
+* void setHorizontalScrollBar(QScrollBar \*scrollBar)
+* void setHorizontalScrollBarPolicy(Qt::ScrollBarPolicy)
+* void setVerticalScrollBar(QScrollBar \*scrollBar)
+* void setVerticalScrollBarPolicy(Qt::ScrollBarPolicy)
+* void setViewport(QWidget \*widget)
+* QScrollBar \*verticalScrollBar(void)
+* int verticalScrollBarPolicy(void)
+* QWidget \*viewport(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractSlider クラス
+
+QAbstractSlider クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qabstractslider.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* bool hasTracking(void)
+* bool invertedAppearance(void)
+* bool invertedControls(void)
+* bool isSliderDown(void)
+* int maximum(void)
+* int minimum(void)
+* int orientation(void)
+* int pageStep(void)
+* void setInvertedAppearance(bool)
+* void setInvertedControls(bool)
+* void setMaximum(int)
+* void setMinimum(int)
+* void setPageStep(int)
+* void setSingleStep(int)
+* void setSliderDown(bool)
+* void setSliderPosition(int)
+* void setTracking(bool enable)
+* int singleStep(void)
+* int sliderPosition(void)
+* void triggerAction(QAbstractSlider::SliderAction action)
+* int value(void)
+* void setOrientation(Qt::Orientation)
+* void setRange(int min, int max)
+* void setValue(int)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractSocket クラス
+
+QAbstractSocket クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qabstractsocket.html
+
+
+仮引数 : void
+
+
+親クラス : QIODevice
+
+* void abort(void)
+* bool bind(QHostAddress address, int port, QAbstractSocket::BindFlag mode)
+* void connectToHost(QString  hostName, int port, QIODevice::OpenModeFlag openMode, QAbstractSocket::NetworkLayerProtocol protocol)
+* void disconnectFromHost(void)
+* int error(void)
+* bool flush(void)
+* bool isValid(void)
+* QHostAddress localAddress(void)
+* int localPort(void)
+* int pauseMode(void)
+* QHostAddress peerAddress(void)
+* QString peerName(void)
+* int peerPort(void)
+* QNetworkProxy proxy(void)
+* int readBufferSize(void)
+* void resume(void)
+* void setPauseMode(QAbstractSocket::PauseMode pauseMode)
+* void setProxy(QNetworkProxy  networkProxy)
+* void setReadBufferSize(int size)
+* bool setSocketDescriptor(qintptr socketDescriptor, QAbstractSocket::SocketState socketState, QIODevice::OpenModeFlag openMode)
+* void setSocketOption(QAbstractSocket::SocketOption option,  QVariant  value)
+* int \*socketDescriptor(void)
+* QVariant socketOption(QAbstractSocket::SocketOption option)
+* int socketType(void)
+* int state(void)
+* bool waitForConnected(int msecs)
+* bool waitForDisconnected(int msecs)
+* bool atEnd(void)
+* int bytesAvailable(void)
+* int bytesToWrite(void)
+* bool canReadLine(void)
+* void close(void)
+* bool isSequential(void)
+* bool waitForBytesWritten(int msecs)
+* bool waitForReadyRead(int msecs)
+* void setconnectedEvent(const char \*)
+* void setdisconnectedEvent(const char \*)
+* void seterrorEvent(const char \*)
+* void sethostFoundEvent(const char \*)
+* void setproxyAuthenticationRequiredEvent(const char \*)
+* void setstateChangedEvent(const char \*)
+* const char \*getconnectedEvent(void)
+* const char \*getdisconnectedEvent(void)
+* const char \*geterrorEvent(void)
+* const char \*gethostFoundEvent(void)
+* const char \*getproxyAuthenticationRequiredEvent(void)
+* const char \*getstateChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAbstractSpinBox クラス
+
+QAbstractSpinBox クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qabstractspinbox.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* int alignment(void)
+* int buttonSymbols(void)
+* int correctionMode(void)
+* bool hasAcceptableInput(void)
+* bool hasFrame(void)
+* void interpretText(void)
+* bool isAccelerated(void)
+* bool keyboardTracking(void)
+* void setAccelerated(bool on)
+* void setAlignment(Qt::AlignmentFlag flag)
+* void setButtonSymbols(QAbstractSpinBox::ButtonSymbols bs)
+* void setCorrectionMode(QAbstractSpinBox::CorrectionMode cm)
+* void setFrame(bool)
+* void setReadOnly(bool r)
+* void setSpecialValueText(QString)
+* void setWrapping(bool w)
+* QString specialValueText(void)
+* void stepBy(int steps)
+* QString text(void)
+* bool wrapping(void)
+* void clear(void)
+* void selectAll(void)
+* void stepDown(void)
+* void stepUp(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAction クラス
+
+QAction クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qaction.html
+
+
+仮引数 : QWidget \*parent
+
+* QActionGroup \*actionGroup(void)
+* void activate(QAction::ActionEvent event)
+* bool autoRepeat(void)
+* QVariant data(void)
+* QFont font(void)
+* QIcon icon(void)
+* QString iconText(void)
+* bool isCheckable(void)
+* bool isChecked(void)
+* bool isEnabled(void)
+* bool isIconVisibleInMenu(void)
+* bool isSeparator(void)
+* bool isVisible(void)
+* QMenu \*menu(void)
+* int menuRole(void)
+* QWidget \*parentWidget(void)
+* int priority(void)
+* void setActionGroup(QActionGroup \*group)
+* void setAutoRepeat(bool)
+* void setCheckable(bool)
+* void setData(QVariant)
+* void setFont(QFont)
+* void setIcon(QIcon)
+* void setIconText(QString)
+* void setIconVisibleInMenu(bool visible)
+* void setMenu(QMenu \*menu)
+* void setMenuRole(QAction::MenuRole menuRole)
+* void setPriority(QAction::Priority priority)
+* void setSeparator(bool b)
+* void setShortcut(QKeySequence)
+* void setShortcutContext(Qt::ShortcutContext context)
+* void setShortcuts(QKeySequence::StandardKey key)
+* void setStatusTip(QString)
+* void setText(QString)
+* void setToolTip(QString)
+* void setWhatsThis(QString)
+* QKeySequence shortcut(void)
+* int shortcutContext(void)
+* bool showStatusText(QWidget \*widget)
+* QString statusTip(void)
+* QString text(void)
+* QString toolTip(void)
+* QString whatsThis(void)
+* void hover(void)
+* void setChecked(bool)
+* void setDisabled(bool)
+* void setEnabled(bool)
+* void setVisible(bool)
+* void toggle(void)
+* void trigger(void)
+* void setClickEvent(const char \*)
+* const char \*getClickEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAllEvents クラス
+
+QAllEvents クラス
+=================
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* void accept(void)
+* void ignore(void)
+* int getKeyCode(void)
+* QString getKeyText(void)
+* int getModifiers(void)
+* int getx(void)
+* int gety(void)
+* int getglobalx(void)
+* int getglobaly(void)
+* int getbutton(void)
+* int getbuttons(void)
+* void setKeyPressEvent(const char \*cStr)
+* void setMouseButtonPressEvent(const char \*cStr)
+* void setMouseButtonReleaseEvent(const char \*cStr)
+* void setMouseButtonDblClickEvent(const char \*cStr)
+* void setMouseMoveEvent(const char \*cStr)
+* void setCloseEvent(const char \*cStr)
+* void setContextMenuEvent(const char \*cStr)
+* void setDragEnterEvent(const char \*cStr)
+* void setDragLeaveEvent(const char \*cStr)
+* void setDragMoveEvent(const char \*cStr)
+* void setDropEvent(const char \*cStr)
+* void setEnterEvent(const char \*cStr)
+* void setFocusInEvent(const char \*cStr)
+* void setFocusOutEvent(const char \*cStr)
+* void setKeyReleaseEvent(const char \*cStr)
+* void setLeaveEvent(const char \*cStr)
+* void setNonClientAreaMouseButtonDblClickEvent(const char \*cStr)
+* void setNonClientAreaMouseButtonPressEvent(const char \*cStr)
+* void setNonClientAreaMouseButtonReleaseEvent(const char \*cStr)
+* void setNonClientAreaMouseMoveEvent(const char \*cStr)
+* void setMoveEvent(const char \*cStr)
+* void setResizeEvent(const char \*cStr)
+* void setWindowActivateEvent(const char \*cStr)
+* void setWindowBlockedEvent(const char \*cStr)
+* void setWindowDeactivateEvent(const char \*cStr)
+* void setWindowStateChangeEvent(const char \*cStr)
+* void setWindowUnblockedEvent(const char \*cStr)
+* void setPaintEvent(const char \*cStr)
+* void setChildAddedEvent(const char \*cStr)
+* void setChildPolishedEvent(const char \*cStr)
+* void setChildRemovedEvent(const char \*cStr)
+* const char \*getKeyPressEvent(void)
+* const char \*getMouseButtonPressEvent(void)
+* const char \*getMouseButtonReleaseEvent(void)
+* const char \*getMouseButtonDblClickEvent(void)
+* const char \*getMouseMoveEvent(void)
+* const char \*getCloseEvent(void)
+* const char \*getContextMenuEvent(void)
+* const char \*getDragEnterEvent(void)
+* const char \*getDragLeaveEvent(void)
+* const char \*getDragMoveEvent(void)
+* const char \*getDropEvent(void)
+* const char \*getEnterEvent(void)
+* const char \*getFocusInEvent(void)
+* const char \*getFocusOutEvent(void)
+* const char \*getKeyReleaseEvent(void)
+* const char \*getLeaveEvent(void)
+* const char \*getNonClientAreaMouseButtonDblClickEvent(void)
+* const char \*getNonClientAreaMouseButtonPressEvent(void)
+* const char \*getNonClientAreaMouseButtonReleaseEvent(void)
+* const char \*getNonClientAreaMouseMoveEvent(void)
+* const char \*getMoveEvent(void)
+* const char \*getResizeEvent(void)
+* const char \*getWindowActivateEvent(void)
+* const char \*getWindowBlockedEvent(void)
+* const char \*getWindowDeactivateEvent(void)
+* const char \*getWindowStateChangeEvent(void)
+* const char \*getWindowUnblockedEvent(void)
+* const char \*getPaintEvent(void)
+* const char \*getChildAddedEvent(void)
+* const char \*getChildPolishedEvent(void)
+* const char \*getChildRemovedEvent(void)
+* void setEventOutput(bool x)
+* QObject \*getParentObject(void)
+* QWidget \*getParentWidget(void)
+* void setKeyPressFunc(const char \*cStr)
+* void setMouseButtonPressFunc(const char \*cStr)
+* void setMouseButtonReleaseFunc(const char \*cStr)
+* void setMouseButtonDblClickFunc(const char \*cStr)
+* void setMouseMoveFunc(const char \*cStr)
+* void setCloseFunc(const char \*cStr)
+* void setContextMenuFunc(const char \*cStr)
+* void setDragEnterFunc(const char \*cStr)
+* void setDragLeaveFunc(const char \*cStr)
+* void setDragMoveFunc(const char \*cStr)
+* void setDropFunc(const char \*cStr)
+* void setEnterFunc(const char \*cStr)
+* void setFocusInFunc(const char \*cStr)
+* void setFocusOutFunc(const char \*cStr)
+* void setKeyReleaseFunc(const char \*cStr)
+* void setLeaveFunc(const char \*cStr)
+* void setNonClientAreaMouseButtonDblClickFunc(const char \*cStr)
+* void setNonClientAreaMouseButtonPressFunc(const char \*cStr)
+* void setNonClientAreaMouseButtonReleaseFunc(const char \*cStr)
+* void setNonClientAreaMouseMoveFunc(const char \*cStr)
+* void setMoveFunc(const char \*cStr)
+* void setResizeFunc(const char \*cStr)
+* void setWindowActivateFunc(const char \*cStr)
+* void setWindowBlockedFunc(const char \*cStr)
+* void setWindowDeactivateFunc(const char \*cStr)
+* void setWindowStateChangeFunc(const char \*cStr)
+* void setWindowUnblockedFunc(const char \*cStr)
+* void setPaintFunc(const char \*cStr)
+* void setChildAddedFunc(const char \*cStr)
+* void setChildPolishedFunc(const char \*cStr)
+* void setChildRemovedFunc(const char \*cStr)
+* const char \*getKeyPressFunc(void)
+* const char \*getMouseButtonPressFunc(void)
+* const char \*getMouseButtonReleaseFunc(void)
+* const char \*getMouseButtonDblClickFunc(void)
+* const char \*getMouseMoveFunc(void)
+* const char \*getCloseFunc(void)
+* const char \*getContextMenuFunc(void)
+* const char \*getDragEnterFunc(void)
+* const char \*getDragLeaveFunc(void)
+* const char \*getDragMoveFunc(void)
+* const char \*getDropFunc(void)
+* const char \*getEnterFunc(void)
+* const char \*getFocusInFunc(void)
+* const char \*getFocusOutFunc(void)
+* const char \*getKeyReleaseFunc(void)
+* const char \*getLeaveFunc(void)
+* const char \*getNonClientAreaMouseButtonDblClickFunc(void)
+* const char \*getNonClientAreaMouseButtonPressFunc(void)
+* const char \*getNonClientAreaMouseButtonReleaseFunc(void)
+* const char \*getNonClientAreaMouseMoveFunc(void)
+* const char \*getMoveFunc(void)
+* const char \*getResizeFunc(void)
+* const char \*getWindowActivateFunc(void)
+* const char \*getWindowBlockedFunc(void)
+* const char \*getWindowDeactivateFunc(void)
+* const char \*getWindowStateChangeFunc(void)
+* const char \*getWindowUnblockedFunc(void)
+* const char \*getPaintFunc(void)
+* const char \*getChildAddedFunc(void)
+* const char \*getChildPolishedFunc(void)
+* const char \*getChildRemovedFunc(void)
+* QDropEvent \*getDropEventObject(void)
+* QDragMoveEvent \*getDragMoveEventObject(void)
+* QDragEnterEvent \*getDragEnterEventObject(void)
+* QDragLeaveEvent \*getDragLeaveEventObject(void)
+* QChildEvent \*getChildEventObject(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QApp クラス
+
+QApp クラス
+===========
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qapplication.html
+
+
+親クラス : QGuiApplication
+
+* void exec(void)
+* void quit(void)
+* void processEvents(void)
+* void styleWindows(void)
+* void styleWindowsVista(void)
+* void styleFusion(void)
+* void styleFusionBlack(void)
+* void styleFusionCustom(QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor,QColor)
+* void closeAllWindows(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAspectEngine クラス
+
+QAspectEngine クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dcore-qaspectengine.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* QVector<Qt3DCore::QAbstractAspect \*> aspects(void)
+* QVariant executeCommand(QString command)
+* void registerAspect(Qt3DCore::QAbstractAspect \*aspect)
+* void registerAspect_2(QString name)
+* Qt3DCore::QEntityPtr rootEntity(void)
+* void setRootEntity(Qt3DCore::QEntityPtr root)
+* void unregisterAspect(Qt3DCore::QAbstractAspect \*aspect)
+* void unregisterAspect_2(QString name)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAxBase クラス
+
+QAxBase クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qaxbase.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QObject
+
+* QVariant asVariant(void)
+* QString control(void)
+* void disableClassInfo(void)
+* void disableEventSink(void)
+* void disableMetaObject(void)
+* QVariant dynamicCall(char \*function)
+* QVariant dynamicCall_2(char \*function,QVariant)
+* QVariant dynamicCall_3(char \*function,QVariant,QVariant)
+* QVariant dynamicCall_4(char \*function,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_5(char \*function,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_6(char \*function,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_7(char \*function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_8(char \*function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_9(char \*function,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QVariant dynamicCall_10(const char \*function, QList<QVariant> )
+* QString generateDocumentation(void)
+* bool isNull(void)
+* QAxObject \*querySubObject(const char \*name)
+* QAxObject \*querySubObject_2(const char \*name,QVariant)
+* QAxObject \*querySubObject_3(const char \*name,QVariant,QVariant)
+* QAxObject \*querySubObject_4(const char \*name,QVariant,QVariant,QVariant)
+* QAxObject \*querySubObject_5(const char \*name,QVariant,QVariant,QVariant,QVariant)
+* QAxObject \*querySubObject_6(const char \*name,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject \*querySubObject_7(const char \*name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject \*querySubObject_8(const char \*name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* QAxObject \*querySubObject_9(const char \*name,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)
+* bool setControl( QString  )
+* QStringList verbs(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAxObject クラス
+
+QAxObject クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qaxobject.html
+
+
+仮引数 : QString
+
+
+親クラス : QAxBase
+
+* bool doVerb(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAxWidget クラス
+
+QAxWidget クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qaxwidget.html
+
+
+仮引数 : QWidget \*parent, Qt::WindowFlags f
+
+
+親クラス : QAxBase
+
+* bool doVerb(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QAxWidget2 クラス
+
+QAxWidget2 クラス
+=================
+
+
+仮引数 : QString c, QWidget \*parent, Qt::WindowFlags f
+
+
+親クラス : QAxWidget
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QBitmap クラス
+
+QBitmap クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbitmap.html
+
+
+仮引数 : void
+
+
+親クラス : QPixmap
+
+* void clear(void)
+* void swap(QBitmap)
+* QBitmap transformed(QTransform)
+* QBitmap fromData(QSize, const uchar \* bits, QImage::Format monoFormat)
+* QBitmap fromImage(QImage, Qt::ImageConversionFlags flags)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothAddress クラス
+
+QBluetoothAddress クラス
+========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothaddress.html
+
+
+仮引数 : void
+
+* void clear(void)
+* bool isNull(void)
+* QString toString(void)
+* quint64 toUInt64(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothDeviceDiscoveryAgent クラス
+
+QBluetoothDeviceDiscoveryAgent クラス
+=====================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothdevicediscoveryagent.html
+
+
+仮引数 : QObject \*
+
+* QList<QBluetoothDeviceInfo> discoveredDevices(void)
+* QBluetoothDeviceDiscoveryAgent::Error error(void)
+* QString errorString(void)
+* QBluetoothDeviceDiscoveryAgent::InquiryType inquiryType(void)
+* bool isActive(void)
+* void setInquiryType(QBluetoothDeviceDiscoveryAgent::InquiryType type)
+* void start(void)
+* void stop(void)
+* void setcanceledEvent(const char \*)
+* void setdeviceDiscoveredEvent(const char \*)
+* void seterrorEvent(const char \*)
+* void setfinishedEvent(const char \*)
+* const char \*getcanceledEvent(void)
+* const char \*getdeviceDiscoveredEvent(void)
+* const char \*geterrorEvent(void)
+* const char \*getfinishedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothDeviceInfo クラス
+
+QBluetoothDeviceInfo クラス
+===========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothdeviceinfo.html
+
+
+仮引数 : void
+
+* QBluetoothAddress address(void)
+* bool isValid(void)
+* QBluetoothDeviceInfo::MajorDeviceClass majorDeviceClass(void)
+* quint8 minorDeviceClass(void)
+* QString name(void)
+* qint16 rssi(void)
+* QBluetoothDeviceInfo::ServiceClasses serviceClasses(void)
+* QList<QBluetoothUuid> serviceUuids(QBluetoothDeviceInfo::DataCompleteness \*completeness)
+* QBluetoothDeviceInfo::DataCompleteness serviceUuidsCompleteness(void)
+* void setCached(bool cached)
+* void setServiceUuids(QList<QBluetoothUuid> uuids, QBluetoothDeviceInfo::DataCompleteness completeness)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothHostInfo クラス
+
+QBluetoothHostInfo クラス
+=========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothhostinfo.html
+
+
+仮引数 : void
+
+* QBluetoothAddress address(void)
+* QString name(void)
+* void setAddress(QBluetoothAddress address)
+* void setName(QString name)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothLocalDevice クラス
+
+QBluetoothLocalDevice クラス
+============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothlocaldevice.html
+
+
+仮引数 : QObject \*
+
+* QBluetoothAddress address(void)
+* QBluetoothLocalDevice::HostMode hostMode(void)
+* bool isValid(void)
+* QString name(void)
+* QBluetoothLocalDevice::Pairing pairingStatus(QBluetoothAddress address)
+* void powerOn(void)
+* void requestPairing(QBluetoothAddress address, QBluetoothLocalDevice::Pairing pairing)
+* void setHostMode(QBluetoothLocalDevice::HostMode mode)
+* void pairingConfirmation(bool accept)
+* QList<QBluetoothHostInfo> allDevices(void)
+* void setdeviceConnectedEvent(const char \*)
+* void setdeviceDisconnectedEvent(const char \*)
+* void seterrorEvent(const char \*)
+* void sethostModeStateChangedEvent(const char \*)
+* void setpairingDisplayConfirmationEvent(const char \*)
+* void setpairingDisplayPinCodeEvent(const char \*)
+* void setpairingFinishedEvent(const char \*)
+* const char \*getdeviceConnectedEvent(void)
+* const char \*getdeviceDisconnectedEvent(void)
+* const char \*geterrorEvent(void)
+* const char \*gethostModeStateChangedEvent(void)
+* const char \*getpairingDisplayConfirmationEvent(void)
+* const char \*getpairingDisplayPinCodeEvent(void)
+* const char \*getpairingFinishedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothServer クラス
+
+QBluetoothServer クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothserver.html
+
+
+仮引数 : QBluetoothServiceInfo::Protocol,QObject \*
+
+
+親クラス : QObject
+
+* void close(void)
+* QBluetoothServer::Error error(void)
+* bool hasPendingConnections(void)
+* bool isListening(void)
+* bool listen(QBluetoothAddress address, quint16 port)
+* QBluetoothServiceInfo listen_2(QBluetoothUuid uuid, QString serviceName))
+* int maxPendingConnections(void)
+* QBluetoothSocket \* nextPendingConnection(void)
+* QBluetooth::SecurityFlags securityFlags(void)
+* QBluetoothAddress serverAddress(void)
+* quint16 serverPort(void)
+* QBluetoothServiceInfo::Protocol serverType(void)
+* void setMaxPendingConnections(int numConnections)
+* void setSecurityFlags(QBluetooth::SecurityFlags security)
+* void seterrorEvent(const char \*)
+* void setnewConnectionEvent(const char \*)
+* const char \*geterrorEvent(void)
+* const char \*getnewConnectionEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothServiceDiscoveryAgent クラス
+
+QBluetoothServiceDiscoveryAgent クラス
+======================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothservicediscoveryagent.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* QList<QBluetoothServiceInfo> discoveredServices(void)
+* QBluetoothServiceDiscoveryAgent::Error error(void)
+* QString errorString(void)
+* bool isActive(void)
+* QBluetoothAddress remoteAddress(void)
+* bool setRemoteAddress(QBluetoothAddress address)
+* void setUuidFilter(QList<QBluetoothUuid> uuids)
+* void setUuidFilter_2(QBluetoothUuid uuid)
+* QList<QBluetoothUuid> uuidFilter(void)
+* void clear(void)
+* void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode)
+* void stop(void)
+* void setcanceledEvent(const char \*)
+* void seterrorEvent(const char \*)
+* void setfinishedEvent(const char \*)
+* void setserviceDiscoveredEvent(const char \*)
+* const char \*getcanceledEvent(void)
+* const char \*geterrorEvent(void)
+* const char \*getfinishedEvent(void)
+* const char \*getserviceDiscoveredEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothServiceInfo クラス
+
+QBluetoothServiceInfo クラス
+============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothserviceinfo.html
+
+
+仮引数 : void
+
+* QVariant attribute(quint16 attributeId)
+* QList<quint16> attributes(void)
+* bool contains(quint16 attributeId)
+* QBluetoothDeviceInfo device(void)
+* bool isComplete(void)
+* bool isRegistered(void)
+* bool isValid(void)
+* QBluetoothServiceInfo::Sequence protocolDescriptor(QBluetoothUuid::ProtocolUuid protocol)
+* int protocolServiceMultiplexer(void)
+* bool registerService(QBluetoothAddress localAdapter))
+* void removeAttribute(quint16 attributeId)
+* int serverChannel(void)
+* quint8 serviceAvailability(void)
+* QList<QBluetoothUuid> serviceClassUuids(void)
+* QString serviceDescription(void)
+* QString serviceName(void)
+* QString serviceProvider(void)
+* QBluetoothUuid serviceUuid(void)
+* void setAttribute(quint16 attributeId, QVariant value)
+* void setAttribute_2(quint16 attributeId, QBluetoothUuid value)
+* void setAttribute_3(quint16 attributeId, QBluetoothServiceInfo::Sequence value)
+* void setDevice(QBluetoothDeviceInfo device)
+* void setServiceAvailability(quint8 availability)
+* void setServiceDescription(QString description)
+* void setServiceName(QString name)
+* void setServiceProvider(QString provider)
+* void setServiceUuid(QBluetoothUuid uuid)
+* bool unregisterService(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothSocket クラス
+
+QBluetoothSocket クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothsocket.html
+
+
+仮引数 : QBluetoothServiceInfo::Protocol,QObject \*
+
+
+親クラス : QIODevice
+
+* void abort(void)
+* void connectToService(QBluetoothServiceInfo service, QIODevice::OpenMode openMode)
+* void connectToService_2(QBluetoothAddress address, QBluetoothUuid uuid, QIODevice::OpenMode openMode)
+* void connectToService_3(QBluetoothAddress address, quint16 port, QIODevice::OpenMode openMode)
+* void disconnectFromService(void)
+* QBluetoothSocket::SocketError error(void)
+* QString errorString(void)
+* QBluetoothAddress localAddress(void)
+* QString localName(void)
+* quint16 localPort(void)
+* QBluetoothAddress peerAddress(void)
+* QString peerName(void)
+* quint16 peerPort(void)
+* bool setSocketDescriptor(int socketDescriptor, QBluetoothServiceInfo::Protocol socketType, QBluetoothSocket::SocketState socketState, QIODevice::OpenMode openMode)
+* int socketDescriptor(void)
+* QBluetoothServiceInfo::Protocol socketType(void)
+* QBluetoothSocket::SocketState state(void)
+* void setconnectedEvent(const char \*)
+* void setdisconnectedEvent(const char \*)
+* void seterrorEvent(const char \*)
+* void setstateChangedEvent(const char \*)
+* const char \*getconnectedEvent(void)
+* const char \*getdisconnectedEvent(void)
+* const char \*geterrorEvent(void)
+* const char \*getstateChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothTransferManager クラス
+
+QBluetoothTransferManager クラス
+================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothtransfermanager.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* QBluetoothTransferReply \* put(QBluetoothTransferRequest request, QIODevice \*data)
+* void setfinishedEvent(const char \*)
+* const char \*getfinishedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothTransferReply クラス
+
+QBluetoothTransferReply クラス
+==============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothtransferreply.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* QBluetoothTransferManager \* manager(void)
+* QBluetoothTransferRequest request(void)
+* void abort(void)
+* void seterrorEvent(const char \*)
+* void setfinishedEvent(const char \*)
+* void settransferProgressEvent(const char \*)
+* const char \*geterrorEvent(void)
+* const char \*getfinishedEvent(void)
+* const char \*gettransferProgressEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothTransferRequest クラス
+
+QBluetoothTransferRequest クラス
+================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothtransferrequest.html
+
+
+仮引数 : QBluetoothAddress
+
+* QBluetoothAddress address(void)
+* QVariant attribute(QBluetoothTransferRequest::Attribute code, QVariant defaultValue))
+* void setAttribute(QBluetoothTransferRequest::Attribute code, QVariant value)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBluetoothUuid クラス
+
+QBluetoothUuid クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbluetoothuuid.html
+
+
+仮引数 : void
+
+
+親クラス : QUuid
+
+* int minimumSize(void)
+* quint16 toUInt16(bool \*ok)
+* quint32 toUInt32(bool \*ok)
+* quint128 toUInt128(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBoxLayout クラス
+
+QBoxLayout クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qboxlayout.html
+
+
+仮引数 : QBoxLayout::Direction dir, QWidget \*parent
+
+
+親クラス : QLayout
+
+* void  addLayout(QLayout \* layout, int stretch )
+* void  addSpacerItem(QSpacerItem \* spacerItem)
+* void  addSpacing(int size)
+* void  addStretch(int stretch )
+* void  addStrut(int size)
+* void  addWidget(QWidget \* widget, int stretch , Qt::Alignment alignment )
+* QBoxLayout::Direction  direction(void)
+* void  insertLayout(int index, QLayout \* layout, int stretch )
+* void  insertSpacerItem(int index, QSpacerItem \* spacerItem)
+* void  insertSpacing(int index, int size)
+* void  insertStretch(int index, int stretch )
+* void  insertWidget(int index, QWidget \* widget, int stretch , Qt::Alignment alignment )
+* void  setDirection(QBoxLayout::Direction direction)
+* void  setSpacing(int spacing)
+* void  setStretch(int index, int stretch)
+* bool  setStretchFactor(QWidget \* widget, int stretch)
+* bool  setStretchFactor_2(QLayout \* layout, int stretch)
+* int  spacing(void)
+* int  stretch(int index)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBrush クラス
+
+QBrush クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbrush.html
+
+
+仮引数 : void
+
+* QColor color(void)
+* QGradient \*gradient(void)
+* bool isOpaque(void)
+* QMatrix matrix(void)
+* void setColor(QColor)
+* void setMatrix(QMatrix)
+* void setStyle(Qt::BrushStyle style)
+* void setTexture(QPixmap)
+* void setTextureImage(QImage)
+* void setTransform(QTransform)
+* int style(void)
+* void swap(QBrush)
+* QPixmap texture(void)
+* QImage textureImage(void)
+* QTransform transform(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QBuffer クラス
+
+QBuffer クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbuffer.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QIODevice
+
+* QByteArray buffer(void)
+* QByteArray data(void)
+* void setBuffer(QByteArray \*byteArray)
+* void setData(QByteArray data)
+* void setData_2(char \*data, int size)
+
+.. index::
+       pair: RingQt クラスリファレンス; QButtonGroup クラス
+
+QButtonGroup クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbuttongroup.html
+
+
+仮引数 : QObject \*parent
+
+* void addButton(QAbstractButton \*button, int id)
+* QAbstractButton \*button(int id)
+* QAbstractButton \*checkedButton(void)
+* int checkedId(void)
+* bool exclusive(void)
+* int id(QAbstractButton \*button)
+* void removeButton(QAbstractButton \*button)
+* void setExclusive(bool)
+* void setId(QAbstractButton \*button, int id)
+* void setbuttonClickedEvent(const char \*)
+* void setbuttonPressedEvent(const char \*)
+* void setbuttonReleasedEvent(const char \*)
+* const char \*getbuttonClickedEvent(void)
+* const char \*getbuttonPressedEvent(void)
+* const char \*getbuttonReleasedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QByteArray クラス
+
+QByteArray クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qbytearray.html
+
+
+仮引数 : void
+
+* QByteArray append(const char \*str)
+* char at(int i)
+* int capacity(void)
+* void chop(int n)
+* void clear(void)
+* const char \*constData(void)
+* bool contains(const char \*str)
+* int count(const char \*str)
+* const char \*data(void)
+* bool endsWith(const char \*str)
+* QByteArray fill(char ch, int size)
+* int indexOf(const char \*str, int from)
+* QByteArray insert(int i, const char \*str, int len)
+* bool isEmpty(void)
+* bool isNull(void)
+* int lastIndexOf(const char \*str, int from)
+* QByteArray left(int len)
+* QByteArray leftJustified(int width, char fill, bool truncate)
+* int length(void)
+* QByteArray mid(int pos, int len)
+* QByteArray prepend(const char \*str, int len)
+* void push_back(const char \*str)
+* void push_front(const char \*str)
+* QByteArray remove(int pos, int len)
+* QByteArray repeated(int times)
+* QByteArray  replace(int pos, int len, const char \*after, int alen)
+* void reserve(int size)
+* void resize(int size)
+* QByteArray right(int len)
+* QByteArray rightJustified(int width, char fill, bool truncate)
+* QByteArray setNum(int n, int base)
+* QByteArray setRawData(const char \*data, uint size)
+* QByteArray simplified(void)
+* int size(void)
+* void squeeze(void)
+* bool startsWith(const char \*str)
+* void swap(QByteArray other)
+* QByteArray toBase64(void)
+* double toDouble(bool \* ok)
+* float toFloat(bool \* ok)
+* QByteArray toHex(void)
+* int toInt(bool \*ok, int base)
+* long toLong(bool \*ok, int base)
+* qlonglong toLongLong(bool \*ok, int base)
+* QByteArray toLower(void)
+* QByteArray toPercentEncoding(QByteArray,QByteArray, char percent)
+* short toShort(bool \*ok, int base)
+* int toUInt(bool \*ok, int base)
+* int toULong(bool \*ok, int base)
+* int toULongLong(bool \* ok, int base)
+* int toUShort(bool \* ok, int base)
+* QByteArray toUpper(void)
+* QByteArray trimmed(void)
+* void truncate(int pos)
+* QByteArray fromBase64(QByteArray)
+* QByteArray fromHex(QByteArray)
+* QByteArray fromPercentEncoding(QByteArray, char percent)
+* QByteArray fromRawData(const char \*data, int size)
+* QByteArray number(int n, int base)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCalendarWidget クラス
+
+QCalendarWidget クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcalendarwidget.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* int dateEditAcceptDelay(void)
+* QMap<QDate, QTextCharFormat> dateTextFormat(void)
+* QTextCharFormat dateTextFormat_2(QDate date)
+* Qt::DayOfWeek firstDayOfWeek(void)
+* QTextCharFormat headerTextFormat(void)
+* QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat(void)
+* bool isDateEditEnabled(void)
+* bool isGridVisible(void)
+* bool isNavigationBarVisible(void)
+* QDate maximumDate(void)
+* QDate minimumDate(void)
+* int monthShown(void)
+* QDate selectedDate(void)
+* QCalendarWidget::SelectionMode selectionMode(void)
+* void setDateEditAcceptDelay(int delay)
+* void setDateEditEnabled(bool enable)
+* void setDateTextFormat(QDate date, QTextCharFormat format)
+* void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
+* void setHeaderTextFormat(QTextCharFormat format)
+* void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
+* void setMaximumDate(QDate date)
+* void setMinimumDate(QDate date)
+* void setSelectionMode(QCalendarWidget::SelectionMode mode)
+* void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)
+* void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, QTextCharFormat format)
+* QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat(void)
+* QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek)
+* int yearShown(void)
+* void setCurrentPage(int year, int month)
+* void setDateRange(QDate min, QDate max)
+* void setGridVisible(bool show)
+* void setNavigationBarVisible(bool visible)
+* void setSelectedDate(QDate date)
+* void showNextMonth(void)
+* void showNextYear(void)
+* void showPreviousMonth(void)
+* void showPreviousYear(void)
+* void showSelectedDate(void)
+* void showToday(void)
+* void setactivatedEvent(const char \*)
+* void setclickedEvent(const char \*)
+* void setcurrentPageChangedEvent(const char \*)
+* void setselectionChangedEvent(const char \*)
+* const char \*getactivatedEvent(void)
+* const char \*getclickedEvent(void)
+* const char \*getcurrentPageChangedEvent(void)
+* const char \*getselectionChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCamera クラス
+
+QCamera クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qcamera.html
+
+
+仮引数 : void
+
+
+親クラス : QMediaObject
+
+* QCamera::CaptureModes captureMode(void)
+* QCamera::Error error(void)
+* QString errorString(void)
+* QCameraExposure \* exposure(void)
+* QCameraFocus \* focus(void)
+* QCameraImageProcessing \* imageProcessing(void)
+* bool isCaptureModeSupported(QCamera::CaptureModes mode)
+* QCamera::LockStatus lockStatus(void)
+* QCamera::LockStatus lockStatus_2(QCamera::LockType lockType)
+* QCamera::LockTypes requestedLocks(void)
+* void setViewfinder(QVideoWidget \* viewfinder)
+* void setViewfinder_2(QGraphicsVideoItem \* viewfinder)
+* void setViewfinder_3(QAbstractVideoSurface \* surface)
+* QCamera::State state(void)
+* QCamera::Status status(void)
+* QCamera::LockTypes supportedLocks(void)
+* void load(void)
+* void searchAndLock(void)
+* void searchAndLock_2(QCamera::LockTypes locks)
+* void setCaptureMode(QCamera::CaptureModes mode)
+* void start(void)
+* void stop(void)
+* void unload(void)
+* void unlock(void)
+* void unlock_2(QCamera::LockTypes locks)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCameraImageCapture クラス
+
+QCameraImageCapture クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcameraimagecapture.html
+
+
+仮引数 : QMediaObject \* mediaObject
+
+* QMultimedia::AvailabilityStatus availability(void)
+* QVideoFrame::PixelFormat bufferFormat(void)
+* QCameraImageCapture::CaptureDestinations captureDestination(void)
+* QImageEncoderSettings encodingSettings(void)
+* QCameraImageCapture::Error error(void)
+* QString errorString(void)
+* QString imageCodecDescription( QString   codec)
+* bool isAvailable(void)
+* bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination)
+* bool isReadyForCapture(void)
+* void setBufferFormat( QVideoFrame::PixelFormat format)
+* void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination)
+* void setEncodingSettings( QImageEncoderSettings   settings)
+* QList<QVideoFrame::PixelFormat> supportedBufferFormats(void)
+* QStringList supportedImageCodecs(void)
+* QList<QSize> supportedResolutions( QImageEncoderSettings   settings , bool \* continuous )
+* void cancelCapture(void)
+* int capture( QString   file )
+
+.. index::
+       pair: RingQt クラスリファレンス; QCameraLens クラス
+
+QCameraLens クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qcameralens.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float aspectRatio(void)
+* float bottom(void)
+* float exposure(void)
+* float farPlane(void)
+* float fieldOfView(void)
+* float left(void)
+* float nearPlane(void)
+* QMatrix4x4 projectionMatrix(void)
+* Qt3DRender::QCameraLens::ProjectionType projectionType(void)
+* float right(void)
+* void setFrustumProjection(float left, float right, float bottom, float top, float nearPlane, float farPlane)
+* void setOrthographicProjection(float left, float right, float bottom, float top, float nearPlane, float farPlane)
+* void setPerspectiveProjection(float fieldOfView, float aspectRatio, float nearPlane, float farPlane)
+* float top(void)
+* void setBottom(float bottom)
+* void setExposure(float exposure)
+* void setFarPlane(float farPlane)
+* void setFieldOfView(float fieldOfView)
+* void setLeft(float left)
+* void setNearPlane(float nearPlane)
+* void setProjectionMatrix(QMatrix4x4 projectionMatrix)
+* void setProjectionType(Qt3DRender::QCameraLens::ProjectionType projectionType)
+* void setRight(float right)
+* void setTop(float top)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCameraSelector クラス
+
+QCameraSelector クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qcameraselector .html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* Qt3DCore::QEntity \* camera(void)
+* void setCamera(Qt3DCore::QEntity \*camera)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCameraViewfinder クラス
+
+QCameraViewfinder クラス
+========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcameraviewfinder.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QVideoWidget
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QChar クラス
+
+QChar クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qchar.html
+
+
+仮引数 : int
+
+* QChar::Category category(void)
+* uchar cell(void)
+* unsigned char combiningClass(void)
+* QString decomposition(void)
+* QChar::Decomposition decompositionTag(void)
+* int digitValue(void)
+* QChar::Direction direction(void)
+* bool hasMirrored(void)
+* bool isDigit(void)
+* bool isHighSurrogate(void)
+* bool isLetter(void)
+* bool isLetterOrNumber(void)
+* bool isLowSurrogate(void)
+* bool isLower(void)
+* bool isMark(void)
+* bool isNonCharacter(void)
+* bool isNull(void)
+* bool isNumber(void)
+* bool isPrint(void)
+* bool isPunct(void)
+* bool isSpace(void)
+* bool isSurrogate(void)
+* bool isSymbol(void)
+* bool isTitleCase(void)
+* bool isUpper(void)
+* QChar mirroredChar(void)
+* uchar row(void)
+* QChar::Script script(void)
+* QChar toCaseFolded(void)
+* char toLatin1(void)
+* QChar toLower(void)
+* QChar toTitleCase(void)
+* QChar toUpper(void)
+* ushort unicode(void)
+* ushort unicode_2(void)
+* QChar::UnicodeVersion unicodeVersion(void)
+* QChar::Category category_2(uint ucs4)
+* unsigned char combiningClass_2(uint ucs4)
+* QChar::UnicodeVersion currentUnicodeVersion(void)
+* QString decomposition_2(uint ucs4)
+* QChar::Decomposition decompositionTag_2(uint ucs4)
+* int digitValue_2(uint ucs4)
+* QChar::Direction direction_2(uint ucs4)
+* QChar fromLatin1(char c)
+* bool hasMirrored_2(uint ucs4)
+* ushort highSurrogate(uint ucs4)
+* bool isDigit_2(uint ucs4)
+* bool isHighSurrogate_2(uint ucs4)
+* bool isLetter_2(uint ucs4)
+* bool isLetterOrNumber_2(uint ucs4)
+* bool isLowSurrogate_2(uint ucs4)
+* bool isLower_2(uint ucs4)
+* bool isMark_2(uint ucs4)
+* bool isNonCharacter_2(uint ucs4)
+* bool isNumber_2(uint ucs4)
+* bool isPrint_2(uint ucs4)
+* bool isPunct_2(uint ucs4)
+* bool isSpace_2(uint ucs4)
+* bool isSurrogate_2(uint ucs4)
+* bool isSymbol_2(uint ucs4)
+* bool isTitleCase_2(uint ucs4)
+* bool isUpper_2(uint ucs4)
+* ushort lowSurrogate(uint ucs4)
+* uint mirroredChar_2(uint ucs4)
+* bool requiresSurrogates(uint ucs4)
+* QChar::Script script_2(uint ucs4)
+* uint surrogateToUcs4(ushort high, ushort low)
+* uint surrogateToUcs4_2(QChar high, QChar low)
+* uint toCaseFolded_2(uint ucs4)
+* uint toLower_2(uint ucs4)
+* uint toTitleCase_2(uint ucs4)
+* uint toUpper_2(uint ucs4)
+* QChar::UnicodeVersion unicodeVersion_2(uint ucs4)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCheckBox クラス
+
+QCheckBox クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcheckbox.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractButton
+
+* int checkState(void)
+* bool isTristate(void)
+* void setCheckState(Qt::CheckState state)
+* void setTristate(bool y)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setstateChangedEvent(const char \*)
+* void setclickedEvent(const char \*)
+* void setpressedEvent(const char \*)
+* void setreleasedEvent(const char \*)
+* void settoggledEvent(const char \*)
+* const char \*getstateChangedEvent(void)
+* const char \*getclickedEvent(void)
+* const char \*getpressedEvent(void)
+* const char \*getreleasedEvent(void)
+* const char \*gettoggledEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QChildEvent クラス
+
+QChildEvent クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qchildevent.html
+
+
+仮引数 : QEvent::Type,QObject \*
+
+
+親クラス : QEvent
+
+* bool added(void)
+* QObject \*child(void)
+* bool polished(void)
+* bool removed(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QClipboard クラス
+
+QClipboard クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qclipboard.html
+
+* void clear(QClipboard::Mode mode)
+* QImage image(QClipboard::Mode mode)
+* QMimeData \* mimeData(QClipboard::Mode mode)
+* bool ownsClipboard(void)
+* bool ownsFindBuffer(void)
+* bool ownsSelection(void)
+* QPixmap pixmap(QClipboard::Mode mode)
+* void setImage(QImage image, QClipboard::Mode mode)
+* void setMimeData(QMimeData \* src, QClipboard::Mode mode)
+* void setPixmap(QPixmap pixmap, QClipboard::Mode mode)
+* void setText(QString text, QClipboard::Mode mode)
+* bool supportsFindBuffer(void)
+* bool supportsSelection(void)
+* QString text(QClipboard::Mode mode)
+
+.. index::
+       pair: RingQt クラスリファレンス; QColor クラス
+
+QColor クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcolor.html
+
+
+仮引数 : void
+
+* int alpha(void)
+* double alphaF(void)
+* int black(void)
+* double blackF(void)
+* int blue(void)
+* double blueF(void)
+* QColor convertTo(QColor::Spec colorSpec)
+* int cyan(void)
+* double cyanF(void)
+* QColor darker(int factor)
+* void getCmyk(int \*c, int \*m, int \*y, int \*k, int \*a)
+* void getCmykF(qreal \*c, qreal \*m, qreal \*y, qreal \*k, qreal \*a)
+* void getHsl(int \*h, int \*s, int \*l, int \*a)
+* void getHslF(qreal \*h, qreal \*s, qreal \*l, qreal \*a)
+* void getHsv(int \*h, int \*s, int \*v, int \*a)
+* void getHsvF(qreal \*h, qreal \*s, qreal \*v, qreal \*a)
+* void getRgb(int \*r, int \*g, int \*b, int \*a)
+* void getRgbF(qreal \*r, qreal \*g, qreal \*b, qreal \*a)
+* int green(void)
+* double greenF(void)
+* int hslHue(void)
+* double hslHueF(void)
+* int hslSaturation(void)
+* double hslSaturationF(void)
+* int hsvHue(void)
+* double hsvHueF(void)
+* int hsvSaturation(void)
+* double hsvSaturationF(void)
+* int hue(void)
+* double hueF(void)
+* bool isValid(void)
+* QColor lighter(int factor)
+* int lightness(void)
+* double lightnessF(void)
+* int magenta(void)
+* double magentaF(void)
+* QString name(void)
+* int red(void)
+* double redF(void)
+* QRgb rgb(void)
+* QRgb rgba(void)
+* int saturation(void)
+* double saturationF(void)
+* void setAlpha(int alpha)
+* void setAlphaF(double alpha)
+* void setBlue(int blue)
+* void setBlueF(double blue)
+* void setCmyk(int c, int m, int y, int k, int a)
+* void setCmykF(double c, double m, double y, double k, double a)
+* void setGreen(int green)
+* void setGreenF(double green)
+* void setHsl(int h, int s, int l, int a)
+* void setHslF(double h, double s, double l, double a)
+* void setHsv(int h, int s, int v, int a)
+* void setHsvF(double h, double s, double v, double a)
+* void setNamedColor(QString)
+* void setRed(int red)
+* void setRedF(double red)
+* void setRgb(int r, int g, int b, int a)
+* void setRgbF(double r, double g, double b, double a)
+* void setRgba(QRgb rgba)
+* int spec(void)
+* QColor toCmyk(void)
+* QColor toHsl(void)
+* QColor toHsv(void)
+* QColor toRgb(void)
+* int value(void)
+* double valueF(void)
+* int yellow(void)
+* double yellowF(void)
+* QStringList colorNames(void)
+* QColor fromCmyk(int c, int m, int y, int k, int a)
+* QColor fromCmykF(double c, double m, double y, double k, double a)
+* QColor fromHsl(int h, int s, int l, int a)
+* QColor fromHslF(double h, double s, double l, double a)
+* QColor fromHsv(int h, int s, int v, int a)
+* QColor fromHsvF(double h, double s, double v, double a)
+* QColor fromRgb(int r, int g, int b, int a)
+* QColor fromRgbF(double r, double g, double b, double a)
+* QColor fromRgba(QRgb rgba)
+* bool isValidColor(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QColorDialog クラス
+
+QColorDialog クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcolordialog.html
+
+
+仮引数 : void
+
+
+親クラス : QDialog
+
+* QColor currentColor(void)
+* void open(void)
+* int options(void)
+* QColor selectedColor(void)
+* void setCurrentColor(QColor)
+* void setOption(QColorDialog::ColorDialogOption option, bool on )
+* void setOptions(QColorDialog::ColorDialogOption options)
+* bool testOption(QColorDialog::ColorDialogOption option)
+* QColor customColor(int index)
+* int customCount(void)
+* void setCustomColor(int index, int color)
+* void setStandardColor(int index, int color)
+* int getcolor(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QComboBox クラス
+
+QComboBox クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcombobox.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* void addItem(QString,int)
+* QCompleter \*completer(void)
+* int count(void)
+* int currentIndex(void)
+* QString currentText(void)
+* bool duplicatesEnabled(void)
+* int findData(QVariant, int role, Qt::MatchFlag flags)
+* int findText(QString, Qt::MatchFlag flags)
+* bool hasFrame(void)
+* void hidePopup(void)
+* QSize iconSize(void)
+* void insertItem(int index, QString, QVariant)
+* bool isEditable(void)
+* QVariant itemData(int index, int role)
+* QAbstractItemDelegate \*itemDelegate(void)
+* QIcon itemIcon(int index)
+* QString itemText(int index)
+* QLineEdit \*lineEdit(void)
+* int maxCount(void)
+* int maxVisibleItems(void)
+* int minimumContentsLength(void)
+* QAbstractItemModel \*model(void)
+* int modelColumn(void)
+* void removeItem(int index)
+* QModelIndex rootModelIndex(void)
+* void setCompleter(QCompleter \*completer)
+* void setDuplicatesEnabled(bool enable)
+* void setEditable(bool editable)
+* void setFrame(bool)
+* void setIconSize(QSize)
+* void setItemDelegate(QAbstractItemDelegate \*delegate)
+* void setItemIcon(int index, QIcon)
+* void setItemText(int index, QString)
+* void setLineEdit(QLineEdit \*edit)
+* void setMaxCount(int max)
+* void setMaxVisibleItems(int maxItems)
+* void setMinimumContentsLength(int characters)
+* void setModel(QAbstractItemModel \*model)
+* void setModelColumn(int visibleColumn)
+* void setRootModelIndex(QModelIndex)
+* void setView(QAbstractItemView \*itemView)
+* void showPopup(void)
+* QAbstractItemView \*view(void)
+* void clear(void)
+* void clearEditText(void)
+* void setCurrentIndex(int index)
+* void setEditText(QString)
+* void setactivatedEvent(const char \*)
+* void setcurrentIndexChangedEvent(const char \*)
+* void seteditTextChangedEvent(const char \*)
+* void sethighlightedEvent(const char \*)
+* const char \*getactivatedEvent(void)
+* const char \*getcurrentIndexChangedEvent(void)
+* const char \*geteditTextChangedEvent(void)
+* const char \*gethighlightedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCompleter クラス
+
+QCompleter クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcompleter.html
+
+
+仮引数 : QObject \*parent
+
+
+親クラス : QObject
+
+* Qt::CaseSensitivity caseSensitivity(void)
+* int completionColumn(void)
+* int completionCount(void)
+* QCompleter::CompletionMode completionMode(void)
+* QAbstractItemModel \*completionModel(void)
+* QString completionPrefix(void)
+* int completionRole(void)
+* QString currentCompletion(void)
+* QModelIndex currentIndex(void)
+* int currentRow(void)
+* Qt::MatchFlags filterMode(void)
+* int maxVisibleItems(void)
+* QAbstractItemModel \* model(void)
+* QCompleter::ModelSorting modelSorting(void)
+* QAbstractItemView \* popup(void)
+* void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity)
+* void setCompletionColumn(int column)
+* void setCompletionMode(QCompleter::CompletionMode mode)
+* void setCompletionRole(int role)
+* bool setCurrentRow(int row)
+* void setFilterMode(Qt::MatchFlags filterMode)
+* void setMaxVisibleItems(int maxItems)
+* void setModel(QAbstractItemModel \*model)
+* void setModelSorting(QCompleter::ModelSorting sorting)
+* void setPopup(QAbstractItemView \*popup)
+* void setWidget(QWidget \*widget)
+* QWidget \* widget(void)
+* bool wrapAround(void)
+* void complete(QRect  rect)
+* void setCompletionPrefix(QString prefix)
+* void setWrapAround(bool wrap)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCompleter2 クラス
+
+QCompleter2 クラス
+==================
+
+
+仮引数 : QAbstractItemModel \*model, QObject \*parent
+
+
+親クラス : QCompleter
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QCompleter3 クラス
+
+QCompleter3 クラス
+==================
+
+
+仮引数 : QStringList list, QObject \*parent
+
+
+親クラス : QCompleter
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QConeGeometry クラス
+
+QConeGeometry クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qconegeometry.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float bottomRadius(void)
+* bool hasBottomEndcap(void)
+* bool hasTopEndcap(void)
+* Qt3DRender::QAttribute \* indexAttribute(void)
+* float length(void)
+* Qt3DRender::QAttribute \* normalAttribute(void)
+* Qt3DRender::QAttribute \* positionAttribute(void)
+* int rings(void)
+* int slices(void)
+* Qt3DRender::QAttribute \* texCoordAttribute(void)
+* float topRadius(void)
+* void updateIndices(void)
+* void updateVertices(void)
+* void setBottomRadius(float bottomRadius)
+* void setHasBottomEndcap(bool hasBottomEndcap)
+* void setHasTopEndcap(bool hasTopEndcap)
+* void setLength(float length)
+* void setRings(int rings)
+* void setSlices(int slices)
+* void setTopRadius(float topRadius)
+
+.. index::
+       pair: RingQt クラスリファレンス; QConeMesh クラス
+
+QConeMesh クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qconemesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float bottomRadius(void)
+* bool hasBottomEndcap(void)
+* bool hasTopEndcap(void)
+* float length(void)
+* int rings(void)
+* int slices(void)
+* float topRadius(void)
+* void setBottomRadius(float bottomRadius)
+* void setHasBottomEndcap(bool hasBottomEndcap)
+* void setHasTopEndcap(bool hasTopEndcap)
+* void setLength(float length)
+* void setRings(int rings)
+* void setSlices(int slices)
+* void setTopRadius(float topRadius)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCoreApplication クラス
+
+QCoreApplication クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcoreapplication.html
+
+
+親クラス : QObject
+
+* void installNativeEventFilter(QAbstractNativeEventFilter \*filterObj)
+* void removeNativeEventFilter(QAbstractNativeEventFilter \*filterObject)
+* void quit(void)
+* void addLibraryPath(QString path)
+* QString applicationDirPath(void)
+* QString applicationFilePath(void)
+* QString applicationName(void)
+* qint64 applicationPid(void)
+* QString applicationVersion(void)
+* QStringList arguments(void)
+* bool closingDown(void)
+* QAbstractEventDispatcher \* eventDispatcher(void)
+* int exec(void)
+* void exit(int returnCode)
+* bool installTranslator(QTranslator \*translationFile)
+* QCoreApplication \* instance(void)
+* bool isQuitLockEnabled(void)
+* QStringList libraryPaths(void)
+* QString organizationDomain(void)
+* QString organizationName(void)
+* void postEvent(QObject \*receiver, QEvent \*event, int priority)
+* void processEvents(QEventLoop::ProcessEventsFlags flags)
+* void processEvents_2(QEventLoop::ProcessEventsFlags flags, int maxtime)
+* void removeLibraryPath(QString path)
+* void removePostedEvents(QObject \*receiver, int eventType)
+* bool removeTranslator(QTranslator \*translationFile)
+* bool sendEvent(QObject \*receiver, QEvent \*event)
+* void sendPostedEvents(QObject \*receiver, int event_type)
+* void setApplicationName(QString application)
+* void setApplicationVersion(QString version)
+* void setAttribute(Qt::ApplicationAttribute attribute, bool on)
+* void setEventDispatcher(QAbstractEventDispatcher \*eventDispatcher)
+* void setLibraryPaths(QStringList paths)
+* void setOrganizationDomain(QString orgDomain)
+* void setOrganizationName(QString orgName)
+* void setQuitLockEnabled(bool enabled)
+* bool startingUp(void)
+* bool testAttribute(Qt::ApplicationAttribute attribute)
+* QString translate(char \*context, char \*sourceText, char \*disambiguation, int n)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCuboidMesh クラス
+
+QCuboidMesh クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qcuboidmesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float xExtent(void)
+* QSize xyMeshResolution(void)
+* QSize xzMeshResolution(void)
+* float yExtent(void)
+* QSize yzMeshResolution(void)
+* float zExtent(void)
+* void setXExtent(float xExtent)
+* void setXYMeshResolution(QSize resolution)
+* void setXZMeshResolution(QSize resolution)
+* void setYExtent(float yExtent)
+* void setYZMeshResolution(QSize resolution)
+* void setZExtent(float zExtent)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCullFace クラス
+
+QCullFace クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qcullface.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* Qt3DRender::QCullFace::CullingMode mode(void)
+* void setMode(Qt3DRender::QCullFace::CullingMode mode)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCursor クラス
+
+QCursor クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qcursor.html
+
+
+仮引数 : void
+
+* QBitmap \*bitmap(void)
+* QPoint hotSpot(void)
+* QBitmap \*mask(void)
+* QPixmap pixmap(void)
+* void setShape(Qt::CursorShape shape)
+* Qt::CursorShape shape(void)
+* QPoint pos(void)
+* QPoint pos_2(QScreen \*)
+* void setPos(int x, int y)
+* void setPos_2(QScreen \*screen, int x, int y)
+* void setPos_3(QPoint)
+* void setPos_4(QScreen \*screen, QPoint)
+
+.. index::
+       pair: RingQt クラスリファレンス; QCylinderMesh クラス
+
+QCylinderMesh クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qcylindermesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float length(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setLength(float length)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDate クラス
+
+QDate クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdate.html
+
+
+仮引数 : void
+
+* QDate addDays(int ndays)
+* QDate addMonths(int nmonths)
+* QDate addYears(int nyears)
+* int day(void)
+* int dayOfWeek(void)
+* int dayOfYear(void)
+* int daysInMonth(void)
+* int daysInYear(void)
+* int daysTo(QDate)
+* void getDate(int \* year, int \* month, int \* day)
+* bool isNull(void)
+* bool isValid(void)
+* int month(void)
+* bool setDate(int year, int month, int day)
+* int toJulianDay(void)
+* QString toString(QString)
+* int weekNumber(int \* yearNumber)
+* int year(void)
+* QDate currentDate(void)
+* QDate fromJulianDay(int jd)
+* QDate fromString(QString, QString)
+* bool isLeapYear(int year)
+* QString longDayName(int weekday)
+* QString longMonthName(int month)
+* QString shortDayName(int weekday)
+* QString shortMonthName(int month)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDateEdit クラス
+
+QDateEdit クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdateedit.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QDateTimeEdit
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QDateTime クラス
+
+QDateTime クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdatetime.html
+
+
+仮引数 : void
+
+* QDateTime addDays(int ndays)
+* QDateTime addMSecs(qint64 msecs)
+* QDateTime addMonths(int nmonths)
+* QDateTime addSecs(int s)
+* QDateTime addYears(int nyears)
+* QDate date(void)
+* int daysTo(QDateTime other)
+* bool isNull(void)
+* bool isValid(void)
+* qint64 msecsTo(QDateTime other)
+* int secsTo(QDateTime other)
+* void setDate(QDate date)
+* void setMSecsSinceEpoch(qint64 msecs)
+* void setTime(QTime time)
+* void setTimeSpec(Qt::TimeSpec spec)
+* void setTime_t(uint seconds)
+* QTime time(void)
+* Qt::TimeSpec timeSpec(void)
+* QDateTime toLocalTime(void)
+* qint64 toMSecsSinceEpoch(void)
+* QString toString(QString format)
+* QString toString_2(Qt::DateFormat format)
+* QDateTime toTimeSpec(Qt::TimeSpec specification)
+* uint toTime_t(void)
+* QDateTime toUTC(void)
+* QDateTime currentDateTime(void)
+* QDateTime currentDateTimeUtc(void)
+* qint64 currentMSecsSinceEpoch(void)
+* QDateTime fromMSecsSinceEpoch(qint64 msecs)
+* QDateTime fromString(QString string, Qt::DateFormat format)
+* QDateTime fromString_2(QString string, QString format)
+* QDateTime fromTime_t(uint seconds)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDateTimeEdit クラス
+
+QDateTimeEdit クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdatetimeedit.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractSpinBox
+
+* bool calendarPopup(void)
+* QCalendarWidget \*calendarWidget(void)
+* void clearMaximumDate(void)
+* void clearMaximumDateTime(void)
+* void clearMaximumTime(void)
+* void clearMinimumDate(void)
+* void clearMinimumDateTime(void)
+* void clearMinimumTime(void)
+* int currentSection(void)
+* int currentSectionIndex(void)
+* QDate date(void)
+* QDateTime dateTime(void)
+* QString displayFormat(void)
+* int displayedSections(void)
+* QDate maximumDate(void)
+* QDateTime maximumDateTime(void)
+* QTime maximumTime(void)
+* QDate minimumDate(void)
+* QDateTime minimumDateTime(void)
+* QTime minimumTime(void)
+* int sectionAt(int index)
+* int sectionCount(void)
+* QString sectionText(QDateTimeEdit::Section section)
+* void setCalendarPopup(bool enable)
+* void setCalendarWidget(QCalendarWidget \*calendarWidget)
+* void setCurrentSection(QDateTimeEdit::Section section)
+* void setCurrentSectionIndex(int index)
+* void setDateRange(QDate,QDate)
+* void setDateTimeRange(QDateTime,QDateTime)
+* void setDisplayFormat(QString)
+* void setMaximumDate(QDate)
+* void setMaximumDateTime(QDateTime)
+* void setMaximumTime(QTime)
+* void setMinimumDate(QDate)
+* void setMinimumDateTime(QDateTime)
+* void setMinimumTime(QTime)
+* void setSelectedSection(QDateTimeEdit::Section section)
+* void setTimeRange(QTime,QTime)
+* void setTimeSpec(Qt::TimeSpec spec)
+* QTime time(void)
+* Qt::TimeSpec timeSpec(void)
+* void setDate(QDate)
+* void setDateTime(QDateTime)
+* void setTime(QTime)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDepthTest クラス
+
+QDepthTest クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qdepthtest.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* Qt3DRender::QDepthTest::DepthFunction depthFunction(void)
+* void setDepthFunction(Qt3DRender::QDepthTest::DepthFunction depthFunction)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDesktopServices クラス
+
+QDesktopServices クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdesktopservices.html
+
+* bool openUrl(QUrl)
+* void setUrlHandler(QString, QObject \*receiver, const char \*method)
+* void unsetUrlHandler(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDesktopWidget クラス
+
+QDesktopWidget クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdesktopwidget.html
+
+
+仮引数 : void
+
+
+親クラス : QWidget
+
+* QRect availableGeometry(int screen)
+* bool isVirtualDesktop(void)
+* int primaryScreen(void)
+* QWidget \*screen(int screen)
+* int screenCount(void)
+* QRect screenGeometry(int screen)
+* int screenNumber(QWidget \*widget)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDial クラス
+
+QDial クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdial.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractSlider
+
+* int notchSize(void)
+* qreal notchTarget(void)
+* bool notchesVisible(void)
+* void setNotchTarget(double target)
+* bool wrapping(void)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setNotchesVisible(bool visible)
+* void setWrapping(bool on)
+* void setactionTriggeredEvent(const char \*)
+* void setrangeChangedEvent(const char \*)
+* void setsliderMovedEvent(const char \*)
+* void setsliderPressedEvent(const char \*)
+* void setsliderReleasedEvent(const char \*)
+* void setvalueChangedEvent(const char \*)
+* const char \*getactionTriggeredEvent(void)
+* const char \*getrangeChangedEvent(void)
+* const char \*getsliderMovedEvent(void)
+* const char \*getsliderPressedEvent(void)
+* const char \*getsliderReleasedEvent(void)
+* const char \*getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDialog クラス
+
+QDialog クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdialog.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* bool isSizeGripEnabled(void)
+* int result(void)
+* void setModal(bool modal)
+* void setResult(int i)
+* void setSizeGripEnabled(bool)
+* void accept(void)
+* void done(int r) # In RingQt use : void donedialog(int r)
+* int exec(void)
+* void open(void)
+* void reject(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDiffuseSpecularMaterial クラス
+
+QDiffuseSpecularMaterial クラス
+===============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qdiffusespecularmaterial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* QColor ambient(void)
+* QVariant diffuse(void)
+* bool isAlphaBlendingEnabled(void)
+* QVariant normal(void)
+* float shininess(void)
+* QVariant specular(void)
+* float textureScale(void)
+* void setAlphaBlendingEnabled(bool enabled)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QVariant diffuse)
+* void setNormal(QVariant normal)
+* void setShininess(float shininess)
+* void setSpecular(QVariant specular)
+* void setTextureScale(float textureScale)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDir クラス
+
+QDir クラス
+===========
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdir.html
+
+
+仮引数 : void
+
+* QString absoluteFilePath(QString fileName)
+* QString absolutePath(void)
+* QString canonicalPath(void)
+* bool cd(QString dirName)
+* bool cdUp(void)
+* uint count(void)
+* QString dirName(void)
+* QFileInfoList entryInfoList(QStringList nameFilters, QDir::Filters filters, QDir::SortFlags sort)
+* QFileInfoList entryInfoList_2(QDir::Filters filters, QDir::SortFlags sort)
+* QStringList entryList(QStringList nameQDir::Filters, QDir::Filters filters, QDir::SortFlags sort)
+* QStringList entryList_2(QDir::Filters filters, QDir::SortFlags sort)
+* bool exists(QString name)
+* bool exists_2(void)
+* QString filePath(QString fileName)
+* QDir::Filters filter(void)
+* bool isAbsolute(void)
+* bool isReadable(void)
+* bool isRelative(void)
+* bool isRoot(void)
+* bool makeAbsolute(void)
+* bool mkdir(QString dirName)
+* bool mkpath(QString dirPath)
+* QStringList nameFilters(void)
+* QString path(void)
+* void refresh(void)
+* QString relativeFilePath(QString fileName)
+* bool remove(QString fileName)
+* bool removeRecursively(void)
+* bool rename(QString oldName, QString newName)
+* bool rmdir(QString dirName)
+* bool rmpath(QString dirPath)
+* void setFilter(QDir::Filters filters)
+* void setNameFilters(QStringList nameQDir::Filters)
+* void setPath(QString path)
+* void setSorting(QDir::SortFlags sort)
+* QDir::SortFlags sorting(void)
+* void swap(QDir other)
+* void addSearchPath(QString prefix, QString path)
+* QString cleanPath(QString path)
+* QDir current(void)
+* QString currentPath(void)
+* QFileInfoList drives(void)
+* QString fromNativeSeparators(QString pathName)
+* QDir home(void)
+* QString homePath(void)
+* bool isAbsolutePath(QString path)
+* bool isRelativePath(QString path)
+* bool match(QString filter, QString fileName)
+* bool match_2(QStringList filters, QString fileName)
+* QDir root(void)
+* QString rootPath(void)
+* QStringList searchPaths(QString prefix)
+* QChar separator(void)
+* bool setCurrent(QString path)
+* void setSearchPaths(QString prefix, QStringList searchPaths)
+* QDir temp(void)
+* QString tempPath(void)
+* QString toNativeSeparators(QString pathName)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDirModel クラス
+
+QDirModel クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdirmodel.html
+
+
+仮引数 : void
+
+* QIcon fileIcon(QModelIndex)
+* QFileInfo fileInfo(QModelIndex)
+* QString fileName(QModelIndex)
+* QString filePath(QModelIndex)
+* int filter(void)
+* QFileIconProvider \*iconProvider(void)
+* QModelIndex index(QString path, int column)
+* bool isDir(QModelIndex)
+* bool isReadOnly(void)
+* bool lazyChildCount(void)
+* QModelIndex mkdir(QModelIndex parent, QString name)
+* QStringList nameFilters(void)
+* bool remove(QModelIndex index)
+* bool resolveSymlinks(void)
+* bool rmdir(QModelIndex index)
+* void setFilter(QDir::Filter filters)
+* void setIconProvider(QFileIconProvider \*provider)
+* void setLazyChildCount(bool enable)
+* void setNameFilters(QStringList filters)
+* void setReadOnly(bool enable)
+* void setResolveSymlinks(bool enable)
+* void setSorting(QDir::SortFlag sort)
+* int sorting(void)
+* void refresh(QModelIndex parent)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDockWidget クラス
+
+QDockWidget クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdockwidget.html
+
+
+仮引数 : QWidget \*parent,Qt::WindowType flag
+
+
+親クラス : QWidget
+
+* int allowedAreas(void)
+* int features(void)
+* bool isAreaAllowed(Qt::DockWidgetArea area)
+* bool isFloating(void)
+* void setAllowedAreas(Qt::DockWidgetArea areas)
+* void setFeatures(QDockWidget::DockWidgetFeature features)
+* void setFloating(bool floating)
+* void setTitleBarWidget(QWidget \*widget)
+* void setWidget(QWidget \*widget)
+* QWidget \*titleBarWidget(void)
+* QAction \*toggleViewAction(void)
+* QWidget \*widget(void)
+* void allowedAreasChanged(Qt::DockWidgetArea allowedAreas)
+* void dockLocationChanged(Qt::DockWidgetArea area)
+* void featuresChanged(QDockWidget::DockWidgetFeature features)
+* void topLevelChanged(bool topLevel)
+* void visibilityChanged(bool visible)
+* void setallowedAreasChangedEvent(const char \*)
+* void setdockLocationChangedEvent(const char \*)
+* void setfeaturesChangedEvent(const char \*)
+* void settopLevelChangedEvent(const char \*)
+* void setvisibilityChangedEvent(const char \*)
+* const char \*getallowedAreasChangedEvent(void)
+* const char \*getdockLocationChangedEvent(void)
+* const char \*getfeaturesChangedEvent(void)
+* const char \*gettopLevelChangedEvent(void)
+* const char \*getvisibilityChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDrag クラス
+
+QDrag クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdrag.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* Qt::DropAction defaultAction(void)
+* QPixmap dragCursor(Qt::DropAction action)
+* Qt::DropAction exec(Qt::DropActions supportedActions)
+* Qt::DropAction exec_2(Qt::DropActions supportedActions, Qt::DropAction defaultDropAction)
+* QPoint hotSpot(void)
+* QMimeData \*mimeData(void)
+* QPixmap pixmap(void)
+* void setDragCursor(QPixmap cursor, Qt::DropAction action)
+* void setHotSpot(QPoint hotspot)
+* void setMimeData(QMimeData \* data)
+* void setPixmap(QPixmap pixmap)
+* QObject \* source(void)
+* Qt::DropActions supportedActions(void)
+* QObject \* target(void)
+* void setactionChangedEvent(const char \*)
+* void settargetChangedEvent(const char \*)
+* const char \*getactionChangedEvent(void)
+* const char \*gettargetChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDragEnterEvent クラス
+
+QDragEnterEvent クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdragenterevent.html
+
+
+仮引数 : QPoint,Qt::DropActions,const QMimeData \*,Qt::MouseButtons,Qt::KeyboardModifiers
+
+
+親クラス : QDragMoveEvent
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QDragLeaveEvent クラス
+
+QDragLeaveEvent クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdragleaveevent.html
+
+
+仮引数 : void
+
+
+親クラス : QEvent
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QDragMoveEvent クラス
+
+QDragMoveEvent クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdragmoveevent.html
+
+
+仮引数 : QPoint,Qt::DropActions,const QMimeData \*,Qt::MouseButtons,Qt::KeyboardModifiers,QEvent::Type
+
+
+親クラス : QDropEvent
+
+* void accept(QRect rectangle)
+* void accept_2(void)
+* QRect answerRect(void)
+* void ignore(QRect rectangle)
+* void ignore_2(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QDropEvent クラス
+
+QDropEvent クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qdropevent.html
+
+
+仮引数 : QPointF,Qt::DropActions,const QMimeData \*,Qt::MouseButtons,Qt::KeyboardModifiers,QEvent::Type
+
+
+親クラス : QEvent
+
+* void acceptProposedAction(void)
+* Qt::DropAction dropAction(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+* QMimeData \* mimeData(void)
+* Qt::MouseButtons mouseButtons(void)
+* QPoint pos(void)
+* QPointF posF(void)
+* Qt::DropActions possibleActions(void)
+* Qt::DropAction proposedAction(void)
+* void setDropAction(Qt::DropAction action)
+* QObject \* source(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QEffect クラス
+
+QEffect クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qeffect.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* void addParameter(Qt3DRender::QParameter \*parameter)
+* void addTechnique(Qt3DRender::QTechnique \*t)
+* QVector<Qt3DRender::QParameter \*> parameters(void)
+* void removeParameter(Qt3DRender::QParameter \*parameter)
+* void removeTechnique(Qt3DRender::QTechnique \*t)
+* QVector<Qt3DRender::QTechnique \*> techniques(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QEntity クラス
+
+QEntity クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dcore-qentity.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QNode
+
+* void addComponent(Qt3DCore::QComponent \*comp)
+* Qt3DCore::QComponentVector components(void)
+* Qt3DCore::QEntity \* parentEntity(void)
+* void removeComponent(Qt3DCore::QComponent \*comp)
+
+.. index::
+       pair: RingQt クラスリファレンス; QEvent クラス
+
+QEvent クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qevent.html
+
+
+仮引数 : QEvent::Type Type
+
+* void accept(void)
+* void ignore(void)
+* bool isAccepted(void)
+* void setAccepted(bool accepted)
+* bool spontaneous(void)
+* int type(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QExtrudedTextMesh クラス
+
+QExtrudedTextMesh クラス
+========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qextrudedtextmesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float depth(void)
+* QFont font(void)
+* QString text(void)
+* void setDepth(float depth)
+* void setFont(QFont font)
+* void setText(QString text)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFile クラス
+
+QFile クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfile.html
+
+
+仮引数 : void
+
+
+親クラス : QFileDevice
+
+* bool copy(QString newName)
+* bool exists(void)
+* bool link(QString linkName)
+* bool open(FILE \*fh, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags)
+* bool open_2(int fd, QIODevice::OpenMode mode, QFile::FileHandleFlags handleFlags)
+* bool open_3(QIODevice::OpenMode mode)
+* bool remove(void)
+* bool rename(QString newName)
+* void setFileName(QString name)
+* QString symLinkTarget(void)
+* bool copy_2(QString fileName, QString newName)
+* QString decodeName(QByteArray localFileName)
+* QString decodeName_2(char \*localFileName)
+* QByteArray encodeName(QString fileName)
+* bool exists_2(QString fileName)
+* bool link_2(QString fileName, QString linkName)
+* QFile::Permissions permissions(QString fileName)
+* bool remove_2(QString fileName)
+* bool rename_2(QString oldName, QString newName)
+* bool resize(QString fileName, qint64 sz)
+* bool setPermissions(QString fileName, QFile::Permissions permissions)
+* QString symLinkTarget_2(QString fileName)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFile2 クラス
+
+QFile2 クラス
+=============
+
+
+仮引数 : QString
+
+
+親クラス : QFile
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QFileDevice クラス
+
+QFileDevice クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfiledevice.html
+
+
+親クラス : QIODevice
+
+* QFileDevice::FileError error(void)
+* bool flush(void)
+* int handle(void)
+* uchar \* map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags)
+* QFileDevice::Permissions permissions(void)
+* bool resize(qint64 sz)
+* QString fileName(void)
+* bool unmap(uchar \*address)
+* void unsetError(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFileDialog クラス
+
+QFileDialog クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfiledialog.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* int acceptMode(void)
+* QString defaultSuffix(void)
+* QDir directory(void)
+* QUrl directoryUrl(void)
+* int fileMode(void)
+* int filter(void)
+* QStringList history(void)
+* QFileIconProvider \*iconProvider(void)
+* QAbstractItemDelegate \*itemDelegate(void)
+* QString labelText(QFileDialog::DialogLabel label)
+* QStringList mimeTypeFilters(void)
+* QStringList nameFilters(void)
+* void open(QObject \*receiver, const char \*member)
+* int options(void)
+* QAbstractProxyModel \*proxyModel(void)
+* bool restoreState(QByteArray)
+* QByteArray saveState(void)
+* void selectFile(QString)
+* void selectMimeTypeFilter(QString)
+* void selectNameFilter(QString)
+* void selectUrl(QUrl)
+* QStringList selectedFiles(void)
+* QString selectedNameFilter(void)
+* void setDefaultSuffix(QString)
+* void setDirectory(QString)
+* void setDirectoryUrl(QUrl)
+* void setFileMode(QFileDialog::FileMode mode)
+* void setFilter(QDir::Filter filters)
+* void setHistory(QStringList)
+* void setIconProvider(QFileIconProvider \*provider)
+* void setItemDelegate(QAbstractItemDelegate \*delegate)
+* void setLabelText(QFileDialog::DialogLabel label, QString)
+* void setMimeTypeFilters(QStringList)
+* void setNameFilter(QString)
+* void setNameFilters(QStringList)
+* void setOption(QFileDialog::Option option, bool)
+* void setOptions(QFileDialog::Option options)
+* void setProxyModel(QAbstractProxyModel \*proxyModel)
+* int viewMode(void)
+* QString getExistingDirectory(QWidget \*,QString,QString, QFileDialog::Option)
+* QUrl getExistingDirectoryUrl(QWidget \*,QString,QUrl, QFileDialog::Option,QStringList)
+* QString getOpenFileName(QWidget \*,QString,QString,QString)
+* QUrl getSaveFileUrl(QWidget \*,QString, QUrl,QString, QString \*, QFileDialog::Option options,QStringList)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFileInfo クラス
+
+QFileInfo クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfileinfo.html
+
+
+仮引数 : void
+
+* QDir absoluteDir(void)
+* QString absoluteFilePath(void)
+* QString absolutePath(void)
+* QString baseName(void)
+* QString bundleName(void)
+* bool caching(void)
+* QString canonicalFilePath(void)
+* QString canonicalPath(void)
+* QString completeBaseName(void)
+* QString completeSuffix(void)
+* QDateTime created(void)
+* QDir dir(void)
+* bool exists(void)
+* QString fileName(void)
+* QString filePath(void)
+* QString group(void)
+* int groupId(void)
+* bool isAbsolute(void)
+* bool isBundle(void)
+* bool isDir(void)
+* bool isExecutable(void)
+* bool isFile(void)
+* bool isHidden(void)
+* bool isNativePath(void)
+* bool isReadable(void)
+* bool isRelative(void)
+* bool isRoot(void)
+* bool isSymLink(void)
+* bool isWritable(void)
+* QDateTime lastModified(void)
+* QDateTime lastRead(void)
+* bool makeAbsolute(void)
+* QString owner(void)
+* uint ownerId(void)
+* QString path(void)
+* bool permission(QFileDevice::Permission permissions)
+* int permissions(void)
+* void refresh(void)
+* void setCaching(bool enable)
+* void setFile(QString)
+* int size(void)
+* QString suffix(void)
+* void swap(QFileInfo)
+* QString symLinkTarget(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFileSystemModel クラス
+
+QFileSystemModel クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfilesystemmodel.html
+
+
+仮引数 : void
+
+* QIcon fileIcon(QModelIndex)
+* QFileInfo fileInfo(QModelIndex)
+* QString fileName(QModelIndex)
+* QString filePath(QModelIndex)
+* int filter(void)
+* QFileIconProvider \*iconProvider(void)
+* QModelIndex index(QString, int column)
+* bool isDir(QModelIndex)
+* bool isReadOnly(void)
+* QDateTime lastModified(QModelIndex)
+* QModelIndex mkdir(QModelIndex,QString)
+* QVariant myComputer(int role)
+* bool nameFilterDisables(void)
+* QStringList nameFilters(void)
+* int permissions(QModelIndex)
+* bool remove(QModelIndex)
+* bool resolveSymlinks(void)
+* bool rmdir(QModelIndex)
+* QDir rootDirectory(void)
+* QString rootPath(void)
+* void setFilter(QDir::Filter filters)
+* void setIconProvider(QFileIconProvider \*provider)
+* void setNameFilterDisables(bool enable)
+* void setNameFilters(QStringList)
+* void setReadOnly(bool enable)
+* void setResolveSymlinks(bool enable)
+* QModelIndex setRootPath(QString)
+* int size(QModelIndex)
+* QString type(QModelIndex)
+* bool canFetchMore(QModelIndex)
+* int columnCount(void)
+* QVariant data( QModelIndex index, int role)
+* bool dropMimeData( QMimeData \*data, Qt::DropAction action, int row, int column, QModelIndex parent)
+* void fetchMore( QModelIndex parent)
+* int flags( QModelIndex index)
+* bool hasChildren( QModelIndex parent )
+* QVariant headerData(int section, Qt::Orientation orientation, int role )
+* QMimeData \* mimeData( QModelIndexList indexes)
+* QStringList mimeTypes(void)
+* QModelIndex parent( QModelIndex index)
+* int rowCount( QModelIndex parent)
+* bool setData( QModelIndex idx,  QVariant value, int role)
+* void sort(int column, Qt::SortOrder order )
+* int supportedDropActions(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFirstPersonCameraController クラス
+
+QFirstPersonCameraController クラス
+===================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qfirstpersoncameracontroller.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QAbstractCameraController
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QFont クラス
+
+QFont クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfont.html
+
+
+仮引数 : QString, int, int, bool
+
+* bool bold(void)
+* int capitalization(void)
+* QString defaultFamily(void)
+* bool exactMatch(void)
+* QString family(void)
+* bool fixedPitch(void)
+* bool fromString(QString)
+* int hintingPreference(void)
+* bool isCopyOf(QFont)
+* bool italic(void)
+* bool kerning(void)
+* QString key(void)
+* QString lastResortFamily(void)
+* QString lastResortFont(void)
+* double letterSpacing(void)
+* int letterSpacingType(void)
+* bool overline(void)
+* int pixelSize(void)
+* int pointSize(void)
+* double pointSizeF(void)
+* bool rawMode(void)
+* QString rawName(void)
+* QFont resolve(QFont)
+* void setBold(bool enable)
+* void setCapitalization(QFont::Capitalization caps)
+* void setFamily(QString)
+* void setFixedPitch(bool enable)
+* void setHintingPreference(QFont::HintingPreference hintingPreference)
+* void setItalic(bool enable)
+* void setKerning(bool enable)
+* void setLetterSpacing(QFont::SpacingType type, double spacing)
+* void setOverline(bool enable)
+* void setPixelSize(int pixelSize)
+* void setPointSize(int pointSize)
+* void setPointSizeF(double pointSize)
+* void setRawMode(bool enable)
+* void setRawName(QString)
+* void setStretch(int factor)
+* void setStrikeOut(bool enable)
+* void setStyle(QFont::Style style)
+* void setStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy)
+* void setStyleName(QString)
+* void setStyleStrategy(QFont::StyleStrategy s)
+* void setUnderline(bool enable)
+* void setWeight(int weight)
+* void setWordSpacing(double spacing)
+* int stretch(void)
+* bool strikeOut(void)
+* int style(void)
+* int styleHint(void)
+* QString styleName(void)
+* int styleStrategy(void)
+* QString toString(void)
+* bool underline(void)
+* int weight(void)
+* double wordSpacing(void)
+* void insertSubstitution(QString,QString)
+* void insertSubstitutions(QString,QStringList)
+* QString substitute(QString)
+* QStringList substitutes(QString)
+* QStringList substitutions(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFontDialog クラス
+
+QFontDialog クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfontdialog.html
+
+
+仮引数 : void
+
+
+親クラス : QDialog
+
+* QFont currentFont(void)
+* void open(QObject \*receiver, const char \*member)
+* int options(void)
+* QFont selectedFont(void)
+* void setCurrentFont(QFont)
+* void setOption(QFontDialog::FontDialogOption option, bool on)
+* void setOptions(QFontDialog::FontDialogOption options)
+* bool testOption(QFontDialog::FontDialogOption option)
+* int getfont(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFontMetrics クラス
+
+QFontMetrics クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qfontmetrics.html
+
+
+仮引数 : QFont
+
+* int ascent(void)
+* int averageCharWidth(void)
+* QRect boundingRect(QChar ch)
+* QRect boundingRect_2( QString   text)
+* QRect boundingRect_3(int x, int y, int width, int height, int flags,  QString   text, int tabStops , int \* tabArray )
+* QRect boundingRect_4( QRect   rect, int flags,  QString   text, int tabStops , int \* tabArray )
+* int descent(void)
+* QString elidedText( QString   text, Qt::TextElideMode mode, int width, int flags )
+* int height(void)
+* bool inFont(QChar ch)
+* bool inFontUcs4(uint character)
+* int leading(void)
+* int leftBearing(QChar ch)
+* int lineSpacing(void)
+* int lineWidth(void)
+* int maxWidth(void)
+* int minLeftBearing(void)
+* int minRightBearing(void)
+* int overlinePos(void)
+* int rightBearing(QChar ch)
+* QSize size(int flags,  QString   text, int tabStops , int \* tabArray )
+* int strikeOutPos(void)
+* QRect tightBoundingRect( QString   text)
+* int underlinePos(void)
+* int width( QString   text, int len )
+* int width_2(QChar ch)
+* int xHeight(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QForwardRenderer クラス
+
+QForwardRenderer クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qforwardrenderer.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* Qt3DCore::QEntity \* camera(void)
+* QColor clearColor(void)
+* QSize externalRenderTargetSize(void)
+* float gamma(void)
+* bool isFrustumCullingEnabled(void)
+* QObject \* surface(void)
+* QRectF viewportRect(void)
+* void setCamera(Qt3DCore::QEntity \*camera)
+* void setClearColor(QColor clearColor)
+* void setExternalRenderTargetSize(QSize size)
+* void setFrustumCullingEnabled(bool enabled)
+* void setGamma(float gamma)
+* void setSurface(QObject \*surface)
+* void setViewportRect(QRectF viewportRect)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFrame クラス
+
+QFrame クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qframe.html
+
+
+仮引数 : QWidget \*parent, Qt::WindowType flag
+
+
+親クラス : QWidget
+
+* QRect frameRect(void)
+* int frameShadow(void)
+* int frameShape(void)
+* int frameStyle(void)
+* int frameWidth(void)
+* int lineWidth(void)
+* int midLineWidth(void)
+* void setFrameRect(QRect)
+* void setFrameShadow(QFrame::Shadow)
+* void setFrameShape(QFrame::Shape)
+* void setFrameStyle(int style)
+* void setLineWidth(int)
+* void setMidLineWidth(int)
+* QSize sizeHint(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QFrame2 クラス
+
+QFrame2 クラス
+==============
+
+
+仮引数 : void
+
+
+親クラス : QFrame
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QFrame3 クラス
+
+QFrame3 クラス
+==============
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QFrame
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QFrameAction クラス
+
+QFrameAction クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dlogic-qframeaction.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* void settriggeredEvent(const char \*)
+* const char \*gettriggeredEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoAddress クラス
+
+QGeoAddress クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeoaddress.html
+
+
+仮引数 : void
+
+* QString city(void)
+* void clear(void)
+* QString country(void)
+* QString countryCode(void)
+* QString county(void)
+* QString district(void)
+* bool isEmpty(void)
+* bool isTextGenerated(void)
+* QString postalCode(void)
+* void setCity(QString city)
+* void setCountry(QString country)
+* void setCountryCode(QString countryCode)
+* void setCounty(QString county)
+* void setDistrict(QString district)
+* void setPostalCode(QString postalCode)
+* void setState(QString state)
+* void setStreet(QString street)
+* void setText(QString text)
+* QString state(void)
+* QString street(void)
+* QString text(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoAreaMonitorInfo クラス
+
+QGeoAreaMonitorInfo クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeoareamonitorinfo.html
+
+
+仮引数 : QString
+
+* QGeoShape area(void)
+* QDateTime expiration(void)
+* QString identifier(void)
+* bool isPersistent(void)
+* bool isValid(void)
+* QString name(void)
+* QVariantMap notificationParameters(void)
+* void setArea(QGeoShape newShape)
+* void setExpiration(QDateTime expiry)
+* void setName(QString name)
+* void setNotificationParameters(QVariantMap parameters)
+* void setPersistent(bool isPersistent)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoAreaMonitorSource クラス
+
+QGeoAreaMonitorSource クラス
+============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeoareamonitorsource.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* QString sourceName(void)
+* QStringList availableSources(void)
+* QGeoAreaMonitorSource \* createDefaultSource(QObject \* parent)
+* QGeoAreaMonitorSource \* createSource(QString sourceName, QObject \* parent)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoCircle クラス
+
+QGeoCircle クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeocircle.html
+
+
+仮引数 : void
+
+* QGeoCoordinate center(void)
+* qreal radius(void)
+* void setCenter(QGeoCoordinate center)
+* void setRadius(qreal radius)
+* void translate(double degreesLatitude, double degreesLongitude)
+* QGeoCircle translated(double degreesLatitude, double degreesLongitude)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoCoordinate クラス
+
+QGeoCoordinate クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeocoordinate.html
+
+
+仮引数 : void
+
+* double altitude(void)
+* QGeoCoordinate atDistanceAndAzimuth(qreal distance, qreal azimuth, qreal distanceUp)
+* qreal azimuthTo(QGeoCoordinate other)
+* qreal distanceTo(QGeoCoordinate other)
+* bool isValid(void)
+* double latitude(void)
+* double longitude(void)
+* void setAltitude(double altitude)
+* void setLatitude(double latitude)
+* void setLongitude(double longitude)
+* QString toString(QGeoCoordinate::CoordinateFormat format)
+* QGeoCoordinate::CoordinateType type(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoPositionInfo クラス
+
+QGeoPositionInfo クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeopositioninfo.html
+
+
+仮引数 : void
+
+* qreal attribute(QGeoPositionInfo::Attribute attribute)
+* QGeoCoordinate coordinate(void)
+* bool hasAttribute(QGeoPositionInfo::Attribute attribute)
+* bool isValid(void)
+* void removeAttribute(QGeoPositionInfo::Attribute attribute)
+* void setAttribute(QGeoPositionInfo::Attribute attribute, qreal value)
+* void setCoordinate(QGeoCoordinate coordinate)
+* void setTimestamp(QDateTime timestamp)
+* QDateTime timestamp(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoPositionInfoSource クラス
+
+QGeoPositionInfoSource クラス
+=============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeopositioninfosource.html
+
+
+親クラス : QObject
+
+* QGeoPositionInfoSource::PositioningMethods preferredPositioningMethods(void)
+* QString sourceName(void)
+* int updateInterval(void)
+* void seterrorEvent(const char \*)
+* void setpositionUpdatedEvent(const char \*)
+* void setupdateTimeoutEvent(const char \*)
+* const char \*geterrorEvent(void)
+* const char \*getpositionUpdatedEvent(void)
+* const char \*getupdateTimeoutEvent(void)
+* QStringList availableSources(void)
+* QGeoPositionInfoSource \*createDefaultSource(QObject \*parent)
+* QGeoPositionInfoSource \*createSource(QString sourceName, QObject \*parent)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoRectangle クラス
+
+QGeoRectangle クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeorectangle.html
+
+
+仮引数 : void
+
+
+親クラス : QGeoShape
+
+* QGeoCoordinate bottomLeft(void)
+* QGeoCoordinate bottomRight(void)
+* QGeoCoordinate center(void)
+* bool contains(QGeoRectangle rectangle)
+* double height(void)
+* bool intersects(QGeoRectangle rectangle)
+* void setBottomLeft(QGeoCoordinate bottomLeft)
+* void setBottomRight(QGeoCoordinate bottomRight)
+* void setCenter(QGeoCoordinate center)
+* void setHeight(double degreesHeight)
+* void setTopLeft(QGeoCoordinate topLeft)
+* void setTopRight(QGeoCoordinate topRight)
+* void setWidth(double degreesWidth)
+* QGeoCoordinate topLeft(void)
+* QGeoCoordinate topRight(void)
+* void translate(double degreesLatitude, double degreesLongitude)
+* QGeoRectangle translated(double degreesLatitude, double degreesLongitude)
+* QGeoRectangle united(QGeoRectangle rectangle)
+* double width(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoSatelliteInfo クラス
+
+QGeoSatelliteInfo クラス
+========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeosatelliteinfo.html
+
+
+仮引数 : void
+
+* qreal attribute(QGeoSatelliteInfo::Attribute attribute)
+* bool hasAttribute(QGeoSatelliteInfo::Attribute attribute)
+* void removeAttribute(QGeoSatelliteInfo::Attribute attribute)
+* int satelliteIdentifier(void)
+* QGeoSatelliteInfo::SatelliteSystem satelliteSystem(void)
+* void setAttribute(QGeoSatelliteInfo::Attribute attribute, qreal value)
+* void setSatelliteIdentifier(int satId)
+* void setSatelliteSystem(QGeoSatelliteInfo::SatelliteSystem system)
+* void setSignalStrength(int signalStrength)
+* int signalStrength(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoSatelliteInfoSource クラス
+
+QGeoSatelliteInfoSource クラス
+==============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeosatelliteinfosource.html
+
+* QString sourceName(void)
+* int updateInterval(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGeoShape クラス
+
+QGeoShape クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgeoshape.html
+
+
+仮引数 : void
+
+* bool contains(QGeoCoordinate coordinate)
+* bool isEmpty(void)
+* bool isValid(void)
+* QGeoShape::ShapeType type(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGoochMaterial クラス
+
+QGoochMaterial クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qgoochmaterial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float alpha(void)
+* float beta(void)
+* QColor cool(void)
+* QColor diffuse(void)
+* float shininess(void)
+* QColor specular(void)
+* QColor warm(void)
+* void setAlpha(float alpha)
+* void setBeta(float beta)
+* void setCool(QColor cool)
+* void setDiffuse(QColor diffuse)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+* void setWarm(QColor warm)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGradient クラス
+
+QGradient クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgradient.html
+
+
+仮引数 : void
+
+* QGradient::CoordinateMode coordinateMode(void)
+* void setColorAt(qreal position,  QColor   color)
+* void setCoordinateMode(QGradient::CoordinateMode mode)
+* void setSpread(QGradient::Spread method)
+* void setStops(QGradientStops stopPoints)
+* QGradient::Spread spread(void)
+* QGradientStops stops(void)
+* QGradient::Type type(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGraphicsVideoItem クラス
+
+QGraphicsVideoItem クラス
+=========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgraphicsvideoitem.html
+
+
+仮引数 : void
+
+* Qt::AspectRatioMode aspectRatioMode(void)
+* QSizeF nativeSize(void)
+* QPointF offset(void)
+* void setAspectRatioMode(Qt::AspectRatioMode mode)
+* void setOffset(QPointF offset)
+* void setSize(QSizeF size)
+* QSizeF size(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGraphicsView クラス
+
+QGraphicsView クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgraphicsview.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractScrollArea
+
+* Qt::Alignment alignment(void)
+* QBrush backgroundBrush(void)
+* QGraphicsView::CacheMode cacheMode(void)
+* void centerOn(QPointF pos)
+* void centerOn_2(qreal x, qreal y)
+* void centerOn_3(QGraphicsItem \*item)
+* QGraphicsView::DragMode dragMode(void)
+* void ensureVisible(QRectF rect, int xmargin, int ymargin)
+* void ensureVisible_2(qreal x, qreal y, qreal w, qreal h, int xmargin, int ymargin)
+* void ensureVisible_3(QGraphicsItem \*item, int xmargin, int ymargin)
+* void fitInView(QRectF rect, Qt::AspectRatioMode aspectRatioMode)
+* void fitInView_2(qreal x, qreal y, qreal w, qreal h, Qt::AspectRatioMode aspectRatioMode)
+* void fitInView_3(QGraphicsItem \*item, Qt::AspectRatioMode aspectRatioMode)
+* QBrush foregroundBrush(void)
+* bool isInteractive(void)
+* bool isTransformed(void)
+* QGraphicsItem \* itemAt(QPoint pos)
+* QGraphicsItem \* itemAt_2(int x, int y)
+* QList<QGraphicsItem \*> items(void)
+* QList<QGraphicsItem \*> items_2(QPoint pos)
+* QList<QGraphicsItem \*> items_3(int x, int y)
+* QList<QGraphicsItem \*> items_4(QRect rect, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem \*> items_5(int x, int y, int w, int h, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem \*> items_6(QPolygon polygon, Qt::ItemSelectionMode mode)
+* QList<QGraphicsItem \*> items_7(QPainterPath path, Qt::ItemSelectionMode mode)
+* QPoint mapFromScene(QPointF point)
+* QPolygon mapFromScene_2(QRectF rect)
+* QPolygon mapFromScene_3(QPolygonF polygon)
+* QPainterPath mapFromScene_4(QPainterPath path)
+* QPoint mapFromScene_5(qreal x, qreal y)
+* QPolygon mapFromScene_6(qreal x, qreal y, qreal w, qreal h)
+* QPointF mapToScene(QPoint point)
+* QPolygonF mapToScene_2(QRect rect)
+* QPolygonF mapToScene_3(QPolygon polygon)
+* QPainterPath mapToScene_4(QPainterPath path)
+* QPointF mapToScene_5(int x, int y)
+* QPolygonF mapToScene_6(int x, int y, int w, int h)
+* QMatrix matrix(void)
+* QGraphicsView::OptimizationFlags optimizationFlags(void)
+* void render(QPainter \*painter, QRectF target, QRect source, Qt::AspectRatioMode aspectRatioMode)
+* QPainter::RenderHints renderHints(void)
+* void resetCachedContent(void)
+* void resetMatrix(void)
+* void resetTransform(void)
+* QGraphicsView::ViewportAnchor resizeAnchor(void)
+* void rotate(qreal angle)
+* QRect rubberBandRect(void)
+* Qt::ItemSelectionMode rubberBandSelectionMode(void)
+* void scale(qreal sx, qreal sy)
+* QGraphicsScene \* scene(void)
+* QRectF sceneRect(void)
+* void setAlignment(Qt::Alignment alignment)
+* void setBackgroundBrush(QBrush brush)
+* void setCacheMode(QGraphicsView::CacheMode mode)
+* void setDragMode(QGraphicsView::DragMode mode)
+* void setForegroundBrush(QBrush brush)
+* void setInteractive(bool allowed)
+* void setMatrix(QMatrix matrix, bool combine)
+* void setOptimizationFlag(QGraphicsView::OptimizationFlag flag, bool enabled)
+* void setOptimizationFlags(QGraphicsView::OptimizationFlags flags)
+* void setRenderHint(QPainter::RenderHint hint, bool enabled)
+* void setRenderHints(QPainter::RenderHints hints)
+* void setResizeAnchor(QGraphicsView::ViewportAnchor anchor)
+* void setRubberBandSelectionMode(Qt::ItemSelectionMode mode)
+* void setScene(QGraphicsScene \*scene)
+* void setSceneRect(QRectF rect)
+* void setSceneRect_2(qreal x, qreal y, qreal w, qreal h)
+* void setTransform(QTransform matrix, bool combine)
+* void setTransformationAnchor(QGraphicsView::ViewportAnchor anchor)
+* void setViewportUpdateMode(QGraphicsView::ViewportUpdateMode mode)
+* void shear(qreal sh, qreal sv)
+* QTransform transform(void)
+* QGraphicsView::ViewportAnchor transformationAnchor(void)
+* void translate(qreal dx, qreal dy)
+* QTransform viewportTransform(void)
+* QGraphicsView::ViewportUpdateMode viewportUpdateMode(void)
+* void invalidateScene(QRectF rect, QGraphicsScene::SceneLayers layers)
+* void updateScene(QList<QRectF> rects)
+* void updateSceneRect(QRectF rect)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGridLayout クラス
+
+QGridLayout クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qgridlayout.html
+
+
+仮引数 : void
+
+* void addItem(QLayoutItem \* item, int row, int column, int rowSpan , int columnSpan , Qt::Alignment alignment )
+* void addLayout(QLayout \* layout, int row, int column, Qt::Alignment alignment )
+* void addLayout_2(QLayout \* layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment )
+* void addWidget(QWidget \* widget, int row, int column, Qt::Alignment alignment )
+* void addWidget_2(QWidget \* widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment )
+* QRect cellRect(int row, int column)
+* int columnCount(void)
+* int columnMinimumWidth(int column)
+* int columnStretch(int column)
+* void getItemPosition(int index, int \* row, int \* column, int \* rowSpan, int \* columnSpan)
+* int horizontalSpacing(void)
+* QLayoutItem \* itemAtPosition(int row, int column)
+* Qt::Corner originCorner(void)
+* int rowCount(void)
+* int rowMinimumHeight(int row)
+* int rowStretch(int row)
+* void setColumnMinimumWidth(int column, int minSize)
+* void setColumnStretch(int column, int stretch)
+* void setHorizontalSpacing(int spacing)
+* void setOriginCorner(Qt::Corner corner)
+* void setRowMinimumHeight(int row, int minSize)
+* void setRowStretch(int row, int stretch)
+* void setSpacing(int spacing)
+* void setVerticalSpacing(int spacing)
+* int spacing(void)
+* int verticalSpacing(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QGuiApplication クラス
+
+QGuiApplication クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qguiapplication.html
+
+
+親クラス : QCoreApplication
+
+
+仮引数 : int,char \**
+
+* qreal devicePixelRatio(void)
+* bool isSavingSession(void)
+* bool isSessionRestored(void)
+* QString sessionId(void)
+* QString sessionKey(void)
+* QWindowList allWindows(void)
+* QString applicationDisplayName(void)
+* Qt::ApplicationState applicationState(void)
+* void changeOverrideCursor(QCursor cursor)
+* QClipboard \* clipboard(void)
+* bool desktopSettingsAware(void)
+* int exec(void)
+* QObject \* focusObject(void)
+* QWindow \* focusWindow(void)
+* QFont font(void)
+* QInputMethod \* inputMethod(void)
+* bool isLeftToRight(void)
+* bool isRightToLeft(void)
+* Qt::KeyboardModifiers keyboardModifiers(void)
+* Qt::LayoutDirection layoutDirection(void)
+* QWindow \* modalWindow(void)
+* Qt::MouseButtons mouseButtons(void)
+* QCursor \* overrideCursor(void)
+* QPalette palette(void)
+* QString platformName(void)
+* QPlatformNativeInterface \* platformNativeInterface(void)
+* QScreen \* primaryScreen(void)
+* Qt::KeyboardModifiers queryKeyboardModifiers(void)
+* bool quitOnLastWindowClosed(void)
+* void restoreOverrideCursor(void)
+* QList<QScreen \*> screens(void)
+* void setApplicationDisplayName(QString name)
+* void setDesktopSettingsAware(bool on)
+* void setFont(QFont font)
+* void setLayoutDirection(Qt::LayoutDirection direction)
+* void setOverrideCursor(QCursor cursor)
+* void setPalette(QPalette pal)
+* void setQuitOnLastWindowClosed(bool quit)
+* QStyleHints \* styleHints(void)
+* void sync(void)
+* QWindow \* topLevelAt(QPoint pos)
+* QWindowList topLevelWindows(void)
+* void setapplicationDisplayNameChangedEvent(const char \*)
+* void setapplicationStateChangedEvent(const char \*)
+* void setcommitDataRequestEvent(const char \*)
+* void setfocusObjectChangedEvent(const char \*)
+* void setfocusWindowChangedEvent(const char \*)
+* void setfontDatabaseChangedEvent(const char \*)
+* void setlastWindowClosedEvent(const char \*)
+* void setlayoutDirectionChangedEvent(const char \*)
+* void setpaletteChangedEvent(const char \*)
+* void setprimaryScreenChangedEvent(const char \*)
+* void setsaveStateRequestEvent(const char \*)
+* void setscreenAddedEvent(const char \*)
+* void setscreenRemovedEvent(const char \*)
+* const char \*getapplicationDisplayNameChangedEvent(void)
+* const char \*getapplicationStateChangedEvent(void)
+* const char \*getcommitDataRequestEvent(void)
+* const char \*getfocusObjectChangedEvent(void)
+* const char \*getfocusWindowChangedEvent(void)
+* const char \*getfontDatabaseChangedEvent(void)
+* const char \*getlastWindowClosedEvent(void)
+* const char \*getlayoutDirectionChangedEvent(void)
+* const char \*getpaletteChangedEvent(void)
+* const char \*getprimaryScreenChangedEvent(void)
+* const char \*getsaveStateRequestEvent(void)
+* const char \*getscreenAddedEvent(void)
+* const char \*getscreenRemovedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QHBoxLayout クラス
+
+QHBoxLayout クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qhboxlayout.html
+
+
+仮引数 : void
+
+
+親クラス : QBoxLayout
+
+* void addWidget(QWidget \*)
+* void addLayout(QLayout \*)
+
+.. index::
+       pair: RingQt クラスリファレンス; QHeaderView クラス
+
+QHeaderView クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qheaderview.html
+
+
+仮引数 : Qt::Orientation, QWidget \*
+
+
+親クラス : QAbstractItemView
+
+* bool cascadingSectionResizes(void)
+* int count(void)
+* Qt::Alignment defaultAlignment(void)
+* int defaultSectionSize(void)
+* int hiddenSectionCount(void)
+* void hideSection(int logicalIndex)
+* bool highlightSections(void)
+* bool isSectionHidden(int logicalIndex)
+* bool isSortIndicatorShown(void)
+* int length(void)
+* int logicalIndex(int visualIndex)
+* int logicalIndexAt(int position)
+* int logicalIndexAt_2(int x, int y)
+* int logicalIndexAt_3( QPoint   pos)
+* int maximumSectionSize(void)
+* int minimumSectionSize_2(void)
+* void moveSection(int from, int to)
+* int offset(void)
+* Qt::Orientation orientation(void)
+* int resizeContentsPrecision(void)
+* void resizeSection(int logicalIndex, int size)
+* void resizeSections(QHeaderView::ResizeMode mode)
+* bool restoreState( QByteArray   state)
+* QByteArray saveState(void)
+* int sectionPosition(int logicalIndex)
+* QHeaderView::ResizeMode sectionResizeMode(int logicalIndex)
+* int sectionSize(int logicalIndex)
+* int sectionSizeHint(int logicalIndex)
+* int sectionViewportPosition(int logicalIndex)
+* bool sectionsClickable(void)
+* bool sectionsHidden(void)
+* bool sectionsMovable(void)
+* bool sectionsMoved(void)
+* void setCascadingSectionResizes(bool enable)
+* void setDefaultAlignment(Qt::Alignment alignment)
+* void setDefaultSectionSize(int size)
+* void setHighlightSections(bool highlight)
+* void setMaximumSectionSize(int size)
+* void setMinimumSectionSize(int size)
+* void setResizeContentsPrecision(int precision)
+* void setSectionHidden(int logicalIndex, bool hide)
+* void setSectionResizeMode(QHeaderView::ResizeMode mode)
+* void setSectionResizeMode_2(int logicalIndex, QHeaderView::ResizeMode mode)
+* void setSectionsClickable(bool clickable)
+* void setSectionsMovable(bool movable)
+* void setSortIndicator(int logicalIndex, Qt::SortOrder order)
+* void setSortIndicatorShown(bool show)
+* void setStretchLastSection(bool stretch)
+* void showSection(int logicalIndex)
+* Qt::SortOrder sortIndicatorOrder(void)
+* int sortIndicatorSection(void)
+* bool stretchLastSection(void)
+* int stretchSectionCount(void)
+* void swapSections(int first, int second)
+* int visualIndex(int logicalIndex)
+* int visualIndexAt(int position)
+* void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast)
+* void setOffset(int offset)
+* void setOffsetToLastSection(void)
+* void setOffsetToSectionPosition(int visualSectionNumber)
+* void setgeometriesChangedEvent(const char \*)
+* void setsectionClickedEvent(const char \*)
+* void setsectionCountChangedEvent(const char \*)
+* void setsectionDoubleClickedEvent(const char \*)
+* void setsectionEnteredEvent(const char \*)
+* void setsectionHandleDoubleClickedEvent(const char \*)
+* void setsectionMovedEvent(const char \*)
+* void setsectionPressedEvent(const char \*)
+* void setsectionResizedEvent(const char \*)
+* void setsortIndicatorChangedEvent(const char \*)
+* const char \*getgeometriesChangedEvent(void)
+* const char \*getsectionClickedEvent(void)
+* const char \*getsectionCountChangedEvent(void)
+* const char \*getsectionDoubleClickedEvent(void)
+* const char \*getsectionEnteredEvent(void)
+* const char \*getsectionHandleDoubleClickedEvent(void)
+* const char \*getsectionMovedEvent(void)
+* const char \*getsectionPressedEvent(void)
+* const char \*getsectionResizedEvent(void)
+* const char \*getsortIndicatorChangedEvent(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QHostAddress クラス
+
+QHostAddress クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qhostaddress.html
+
+
+仮引数 : void
+
+* void clear(void)
+* bool isInSubnet(QHostAddress, int netmask)
+* bool isNull(void)
+* int protocol(void)
+* QString scopeId(void)
+* bool setAddress(QString)
+* int toIPv4Address(void)
+* Q_IPV6ADDR toIPv6Address(void)
+* QString toString(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QHostInfo クラス
+
+QHostInfo クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qhostinfo.html
+
+
+仮引数 : void
+
+* int error(void)
+* QString errorString(void)
+* QString hostName(void)
+* int lookupId(void)
+* void setError(QHostInfo::HostInfoError error)
+* void setErrorString(QString)
+* void setHostName(QString)
+* void setLookupId(int id)
+* void abortHostLookup(int id)
+* QHostInfo fromName(QString)
+* QString localDomainName(void)
+* QString localHostName(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QIODevice クラス
+
+QIODevice クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qiodevice.html
+
+
+仮引数 : void
+
+
+親クラス : QObject
+
+* QString errorString(void)
+* bool getChar(char \*c)
+* bool isOpen(void)
+* bool isReadable(void)
+* bool isTextModeEnabled(void)
+* bool isWritable(void)
+* int openMode(void)
+* int peek(char \*data, int maxSize)
+* int read(char \*data, int maxSize)
+* int readLine(char \*data, int maxSize)
+* void ungetChar(char c)
+* int write(const char \*data, int maxSize)
+* bool atEnd(void)
+* bool canReadLine(void)
+* void close(void)
+* bool open(QIODevice::OpenMode flags)
+* qint64 pos(void)
+* bool seek(qint64 pos)
+* qint64 size(void)
+* void setaboutToCloseEvent(const char \*)
+* void setbytesWrittenEvent(const char \*)
+* void setreadChannelFinishedEvent(const char \*)
+* void setreadyReadEvent(const char \*)
+* const char \*getaboutToCloseEvent(void)
+* const char \*getbytesWrittenEvent(void)
+* const char \*getreadChannelFinishedEvent(void)
+* const char \*getreadyReadEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QIcon クラス
+
+QIcon クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qicon.html
+
+
+仮引数 : QPixmap
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QImage クラス
+
+QImage クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qimage.html
+
+
+仮引数 : void
+
+* bool allGray(void)
+* int bitPlaneCount(void)
+* uchar \*bits(void)
+* int byteCount(void)
+* int bytesPerLine(void)
+* qint64 cacheKey(void)
+* QRgb color(int i)
+* int colorCount(void)
+* const uchar \*constBits(void)
+* const uchar \*constScanLine(int i)
+* QImage convertToFormat(QImage::Format format, Qt::ImageConversionFlags flags)
+* QImage copy(int x, int y, int width, int height)
+* QImage createAlphaMask(Qt::ImageConversionFlags flags)
+* QImage createHeuristicMask(bool clipTight)
+* QImage createMaskFromColor(QRgb color, Qt::MaskMode mode)
+* int depth(void)
+* int dotsPerMeterX(void)
+* int dotsPerMeterY(void)
+* void fill(QColor)
+* QImage::Format format(void)
+* bool hasAlphaChannel(void)
+* int height(void)
+* void invertPixels(QImage::InvertMode mode)
+* bool isGrayscale(void)
+* bool isNull(void)
+* bool load(QString, const char \*format) # In RingQt use : bool loadimage(QString, const char \*format)
+* bool loadFromData(QByteArray, const char \* format)
+* QImage mirrored(bool horizontal, bool vertical)
+* QPoint offset(void)
+* QRgb pixel(int x, int y)
+* int pixelIndex(int x, int y)
+* QRect rect(void)
+* QImage rgbSwapped(void)
+* bool save(QString, const char \* format, int quality)
+* QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* QImage scaledToHeight(int height, Qt::TransformationMode mode )
+* QImage scaledToWidth(int width, Qt::TransformationMode mode)
+* uchar \*scanLine(int i)
+* void setColor(int index, QRgb colorValue)
+* void setColorCount(int colorCount)
+* void setDotsPerMeterX(int x)
+* void setDotsPerMeterY(int y)
+* void setOffset(QPoint)
+* void setPixel(int x, int y, uint index_or_rgb)
+* void setText(QString,QString)
+* QSize size(void)
+* void swap(QImage)
+* QString text(QString)
+* QStringList textKeys(void)
+* QImage transformed(QMatrix, Qt::TransformationMode mode)
+* bool valid(int x, int y)
+* int width(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QInputAspect クラス
+
+QInputAspect クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dinput-qinputaspect.html
+
+
+仮引数 : QObject \*
+
+* QStringList availablePhysicalDevices(void)
+* Qt3DInput::QAbstractPhysicalDevice \* createPhysicalDevice(QString name)
+
+.. index::
+       pair: RingQt クラスリファレンス; QInputDialog クラス
+
+QInputDialog クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qinputdialog.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QDialog
+
+* QString cancelButtonText(void)
+* QStringList comboBoxItems(void)
+* int doubleDecimals(void)
+* double doubleMaximum(void)
+* double doubleMinimum(void)
+* double doubleValue(void)
+* int inputMode(void)
+* int intMaximum(void)
+* int intMinimum(void)
+* int intStep(void)
+* int intValue(void)
+* bool isComboBoxEditable(void)
+* QString labelText(void)
+* QString okButtonText(void)
+* void open(QObject \*receiver, const char \*member)
+* int options(void)
+* void setCancelButtonText(QString)
+* void setComboBoxEditable(bool editable)
+* void setComboBoxItems(QStringList)
+* void setDoubleDecimals(int decimals)
+* void setDoubleMaximum(double max)
+* void setDoubleMinimum(double min)
+* void setDoubleRange(double min, double max)
+* void setDoubleValue(double value)
+* void setInputMode(QInputDialog::InputMode mode)
+* void setIntMaximum(int max)
+* void setIntMinimum(int min)
+* void setIntRange(int min, int max)
+* void setIntStep(int step)
+* void setIntValue(int value)
+* void setLabelText(QString)
+* void setOkButtonText(QString)
+* void setOption(QInputDialog::InputDialogOption option, bool on)
+* void setOptions(QInputDialog::InputDialogOption options)
+* void setTextEchoMode(QLineEdit::EchoMode mode)
+* void setTextValue(QString)
+* bool testOption(QInputDialog::InputDialogOption option)
+* int textEchoMode(void)
+* QString textValue(void)
+* double getDouble(QWidget \*parent,QString,QString, double value, double min, double max , int decimals, bool \*ok, Qt::WindowType flags)
+* int getInt(QWidget \*parent,QString,QString, int value, int min, int max, int step, bool \*ok, Qt::WindowType flags)
+
+.. index::
+       pair: RingQt クラスリファレンス; QJsonArray クラス
+
+QJsonArray クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qjsonarray.html
+
+
+仮引数 : void
+
+* void append(QJsonValue  value)
+* QJsonValue at(int i)
+* bool contains(QJsonValue  value)
+* int count(void)
+* bool empty(void)
+* QJsonValue first(void)
+* void insert(int i, QJsonValue  value)
+* bool isEmpty(void)
+* QJsonValue last(void)
+* void pop_back(void)
+* void pop_front(void)
+* void prepend(QJsonValue  value)
+* void push_back(QJsonValue  value)
+* void push_front(QJsonValue  value)
+* void removeAt(int i)
+* void removeFirst(void)
+* void removeLast(void)
+* void replace(int i, QJsonValue  value)
+* int size(void)
+* QJsonValue takeAt(int i)
+* QVariantList toVariantList(void)
+* QJsonArray fromStringList(QStringList  list)
+* QJsonArray fromVariantList(QVariantList  list)
+
+.. index::
+       pair: RingQt クラスリファレンス; QJsonDocument クラス
+
+QJsonDocument クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qjsondocument.html
+
+
+仮引数 : void
+
+* QJsonArray array(void)
+* bool isArray(void)
+* bool isEmpty(void)
+* bool isNull(void)
+* bool isObject(void)
+* QJsonObject object(void)
+* const char \* rawData(int \* size)
+* void setArray(QJsonArray  array)
+* void setObject(QJsonObject  object)
+* QByteArray toBinaryData(void)
+* QByteArray toJson(QJsonDocument::JsonFormat format)
+* QVariant toVariant(void)
+* QJsonDocument fromBinaryData( QByteArray  data, QJsonDocument::DataValidation validation)
+* QJsonDocument fromJson( QByteArray  json, QJsonParseError \* error)
+* QJsonDocument fromRawData( char \* data, int size, QJsonDocument::DataValidation validation)
+* QJsonDocument fromVariant( QVariant  variant)
+
+.. index::
+       pair: RingQt クラスリファレンス; QJsonObject クラス
+
+QJsonObject クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qjsonobject.html
+
+
+仮引数 : void
+
+* bool contains(QString  key)
+* int count(void)
+* bool empty(void)
+* bool isEmpty(void)
+* QStringList keys(void)
+* int length(void)
+* void remove(QString  key)
+* int size(void)
+* QJsonValue take(QString  key)
+* QVariantMap toVariantMap(void)
+* QJsonValue value(QString  key)
+* QJsonObject fromVariantMap(QVariantMap  map)
+
+.. index::
+       pair: RingQt クラスリファレンス; QJsonParseError クラス
+
+QJsonParseError クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qjsonparseerror.html
+
+
+仮引数 : void
+
+* QString errorString(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QJsonValue クラス
+
+QJsonValue クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qjsonvalue.html
+
+
+仮引数 : void
+
+* bool isArray(void)
+* bool isBool(void)
+* bool isDouble(void)
+* bool isNull(void)
+* bool isObject(void)
+* bool isString(void)
+* bool isUndefined(void)
+* QJsonArray toArray(QJsonArray  defaultValue)
+* QJsonArray toArray_2(void)
+* bool toBool(bool defaultValue  )
+* double toDouble(double defaultValue )
+* int toInt(int defaultValue )
+* QJsonObject toObject(QJsonObject  defaultValue)
+* QJsonObject toObject_2(void)
+* QString toString(QString  defaultValue  )
+* QVariant toVariant(void)
+* QJsonValue::Type type(void)
+* QJsonValue fromVariant(QVariant  variant)
+
+.. index::
+       pair: RingQt クラスリファレンス; QKeySequence クラス
+
+QKeySequence クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qkeysequence.html
+
+
+仮引数 : QString
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QLCDNumber クラス
+
+QLCDNumber クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlcdnumber.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QFrame
+
+* bool checkOverflow(double num)
+* int digitCount(void)
+* int intValue(void)
+* int mode(void)
+* int segmentStyle(void)
+* void setDigitCount(int numDigits)
+* void setMode(QLCDNumber::Mode)
+* void setSegmentStyle(QLCDNumber::SegmentStyle)
+* bool smallDecimalPoint(void)
+* double value(void)
+* void display(double)
+* void setBinMode(void)
+* void setDecMode(void)
+* void setHexMode(void)
+* void setOctMode(void)
+* void setSmallDecimalPoint(bool)
+
+.. index::
+       pair: RingQt クラスリファレンス; QLabel クラス
+
+QLabel クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlabel.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* 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)
+* QString selectedText(void)
+* int selectionStart(void)
+* void setAlignment(Qt::AlignmentFlag)
+* void setBuddy(QWidget \*buddy)
+* void setIndent(int)
+* void setMargin(int)
+* void setOpenExternalLinks(bool open)
+* void setScaledContents(bool)
+* void setSelection(int start, int length)
+* void setTextFormat(Qt::TextFormat)
+* void setTextInteractionFlags(Qt::TextInteractionFlag flags)
+* void setWordWrap(bool on)
+* QString text(void)
+* int textFormat(void)
+* int textInteractionFlags(void)
+* bool wordWrap(void)
+* void clear(void)
+* void setMovie(QMovie \*movie)
+* void setNum(double num)
+* void setPicture(QPicture)
+* void setPixmap(QPixmap)
+* void setText(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QLayout クラス
+
+QLayout クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlayout.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QObject
+
+* bool activate(void)
+* void addWidget(QWidget \*w)
+* QMargins contentsMargins(void)
+* QRect contentsRect(void)
+* void getContentsMargins(int \*left, int \*top, int \*right, int \*bottom)
+* bool isEnabled(void)
+* QWidget \*menuBar(void)
+* QWidget \*parentWidget(void)
+* void removeItem(QLayoutItem \*item)
+* void removeWidget(QWidget \*widget)
+* bool setAlignment(QWidget \*w, Qt::Alignment alignment)
+* void setAlignment_2(Qt::Alignment alignment)
+* bool setAlignment_3(QLayout \*l, Qt::Alignment alignment)
+* void setContentsMargins(int left, int top, int right, int bottom)
+* void setContentsMargins_2(QMargins margins)
+* void setEnabled(bool enable)
+* void setMenuBar(QWidget \*widget)
+* void setSizeConstraint(QLayout::SizeConstraint)
+* void setSpacing(int)
+* QLayout::SizeConstraint sizeConstraint(void)
+* int spacing(void)
+* void update(void)
+* QSize  closestAcceptableSize( QWidget \* widget,  QSize   size)
+
+.. index::
+       pair: RingQt クラスリファレンス; QLineEdit クラス
+
+QLineEdit クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlineedit.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* int alignment(void)
+* void backspace(void)
+* QCompleter \*completer(void)
+* QMenu \*createStandardContextMenu(void)
+* void cursorBackward(bool mark, int steps)
+* void cursorForward(bool mark, int steps)
+* int cursorMoveStyle(void)
+* int cursorPosition(void)
+* int cursorPositionAt(QPoint)
+* void cursorWordBackward(bool mark)
+* void cursorWordForward(bool mark)
+* void del(void)
+* void deselect(void)
+* QString displayText(void)
+* bool dragEnabled(void)
+* int echoMode(void)
+* void end(bool mark) # In RingQt use : void endtext(bool mark)
+* void getTextMargins(int \*left, int \*top, int \*right, int \*bottom)
+* bool hasAcceptableInput(void)
+* bool hasFrame(void)
+* bool hasSelectedText(void)
+* void home(bool mark)
+* QString inputMask(void)
+* void insert(QString)
+* bool isModified(void)
+* bool isReadOnly(void)
+* bool isRedoAvailable(void)
+* bool isUndoAvailable(void)
+* int maxLength(void)
+* QString placeholderText(void)
+* QString selectedText(void)
+* int selectionStart(void)
+* void setAlignment(Qt::AlignmentFlag flag)
+* void setCompleter(QCompleter \*c)
+* void setCursorMoveStyle(Qt::CursorMoveStyle style)
+* void setCursorPosition(int)
+* void setDragEnabled(bool b)
+* void setEchoMode(QLineEdit::EchoMode)
+* void setFrame(bool)
+* void setInputMask(QString)
+* void setMaxLength(int)
+* void setModified(bool)
+* void setPlaceholderText(QString)
+* void setReadOnly(bool)
+* void setSelection(int start, int length)
+* void setTextMargins(int left, int top, int right, int bottom)
+* void setValidator(QValidator \*v)
+* QString text(void)
+* QMargins textMargins(void)
+* QValidator \*validator(void)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void paste(void)
+* void redo(void)
+* void selectAll(void)
+* void setText(QString)
+* void undo(void)
+* void setTextChangedEvent(const char \*)
+* void setcursorPositionChangedEvent(const char \*)
+* void seteditingFinishedEvent(const char \*)
+* void setreturnPressedEvent(const char \*)
+* void setselectionChangedEvent(const char \*)
+* void settextEditedEvent(const char \*)
+* const char \*getTextChangedEvent(void)
+* const char \*getcursorPositionChangedEvent(void)
+* const char \*geteditingFinishedEvent(void)
+* const char \*getreturnPressedEvent(void)
+* const char \*getselectionChangedEvent(void)
+* const char \*gettextEditedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QLinearGradient クラス
+
+QLinearGradient クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlineargradient.html
+
+
+仮引数 : void
+
+
+親クラス : QGradient
+
+* QPointF finalStop(void)
+* void setFinalStop(QPointF stop)
+* void setFinalStop_2(qreal x,qreal y)
+* void setStart(QPointF start)
+* void setStart_2(qreal x,qreal y)
+* QPointF start(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QListView クラス
+
+QListView クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlistview.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractItemView
+
+* int  batchSize(void)
+* void  clearPropertyFlags(void)
+* QListView::Flow  flow(void)
+* QSize  gridSize(void)
+* bool  isRowHidden(int row)
+* bool  isSelectionRectVisible(void)
+* bool  isWrapping(void)
+* QListView::LayoutMode  layoutMode(void)
+* int  modelColumn(void)
+* QListView::Movement  movement(void)
+* QListView::ResizeMode  resizeMode(void)
+* void  setBatchSize(int batchSize)
+* void  setFlow(QListView::Flow flow)
+* void  setGridSize( QSize   size)
+* void  setLayoutMode(QListView::LayoutMode mode)
+* void  setModelColumn(int column)
+* void  setMovement(QListView::Movement movement)
+* void  setResizeMode(QListView::ResizeMode mode)
+* void  setRowHidden(int row, bool hide)
+* void  setSelectionRectVisible(bool show)
+* void  setSpacing(int space)
+* void  setUniformItemSizes(bool enable)
+* void  setViewMode(QListView::ViewMode mode)
+* void  setWordWrap(bool on)
+* void  setWrapping(bool enable)
+* int  spacing(void)
+* bool  uniformItemSizes(void)
+* QListView::ViewMode  viewMode(void)
+* bool  wordWrap(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QListWidget クラス
+
+QListWidget クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlistwidget.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QListView
+
+* void addItem(QString)
+* int count(void)
+* void editItem(QListWidgetItem \*item)
+* bool isSortingEnabled(void)
+* QListWidgetItem \*item(int row)
+* QListWidgetItem \*itemAt(int x, int y)
+* QWidget \*itemWidget(QListWidgetItem \*item)
+* void openPersistentEditor(QListWidgetItem \*item)
+* void removeItemWidget(QListWidgetItem \*item)
+* int row(QListWidgetItem \*item)
+* void setCurrentRow(int row, QItemSelectionModel::SelectionFlag command)
+* void setItemWidget(QListWidgetItem \*item, QWidget \*widget)
+* void setSortingEnabled(bool enable)
+* void sortItems(Qt::SortOrder order)
+* QListWidgetItem \*takeItem(int row)
+* QRect visualItemRect(QListWidgetItem \*item)
+* void clear(void)
+* void scrollToItem(QListWidgetItem \*item,QAbstractItemView::ScrollHint hint)
+* void setcurrentItemChangedEvent(const char \*)
+* void setcurrentRowChangedEvent(const char \*)
+* void setcurrentTextChangedEvent(const char \*)
+* void setitemActivatedEvent(const char \*)
+* void setitemChangedEvent(const char \*)
+* void setitemClickedEvent(const char \*)
+* void setitemDoubleClickedEvent(const char \*)
+* void setitemEnteredEvent(const char \*)
+* void setitemPressedEvent(const char \*)
+* void setitemSelectionChangedEvent(const char \*)
+* const char \*getcurrentItemChangedEvent(void)
+* const char \*getcurrentRowChangedEvent(void)
+* const char \*getcurrentTextChangedEvent(void)
+* const char \*getitemActivatedEvent(void)
+* const char \*getitemChangedEvent(void)
+* const char \*getitemClickedEvent(void)
+* const char \*getitemDoubleClickedEvent(void)
+* const char \*getitemEnteredEvent(void)
+* const char \*getitemPressedEvent(void)
+* const char \*getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QListWidgetItem クラス
+
+QListWidgetItem クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qlistwidgetitem.html
+
+
+仮引数 : void
+
+* QBrush background(void)
+* Qt::CheckState checkState(void)
+* Qt::ItemFlags flags(void)
+* QFont font(void)
+* QBrush foreground(void)
+* QIcon icon(void)
+* bool isHidden(void)
+* bool isSelected(void)
+* QListWidget \*listWidget(void)
+* void setBackground(QBrush brush)
+* void setCheckState(Qt::CheckState state)
+* void setFlags(Qt::ItemFlags flags)
+* void setFont(QFont font)
+* void setForeground(QBrush brush)
+* void setHidden(bool hide)
+* void setIcon(QIcon icon)
+* void setSelected(bool select)
+* void setSizeHint(QSize size)
+* void setStatusTip(QString statusTip)
+* void setText(QString text)
+* void setTextAlignment(int alignment)
+* void setToolTip(QString toolTip)
+* void setWhatsThis(QString whatsThis)
+* QSize sizeHint(void)
+* QString statusTip(void)
+* QString text(void)
+* int textAlignment(void)
+* QString toolTip(void)
+* int type(void)
+* QString whatsThis(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QLogicAspect クラス
+
+QLogicAspect クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dlogic-qlogicaspect.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : Qt3DCore::QAbstractAspect
+
+.. index::
+       pair: RingQt クラスリファレンス; QMainWindow クラス
+
+QMainWindow クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmainwindow.html
+
+
+仮引数 : void
+
+
+親クラス : QWidget
+
+* void addDockWidget(Qt::DockWidgetArea area, QDockWidget \*dockwidget, Qt::Orientation orientation)
+* QToolBar \*addToolBar(QString)
+* void addToolBar_2(Qt::ToolBarArea area, QToolBar \*toolbar)
+* void addToolBarBreak(Qt::ToolBarArea)
+* QWidget \*centralWidget(void)
+* int corner(Qt::Corner corner)
+* QMenu \*createPopupMenu(void)
+* int dockOptions(void)
+* int dockWidgetArea(QDockWidget \*dockwidget)
+* bool documentMode(void)
+* QSize iconSize(void)
+* void insertToolBar(QToolBar \*before, QToolBar \*toolbar)
+* void insertToolBarBreak(QToolBar \*before)
+* bool isAnimated(void)
+* bool isDockNestingEnabled(void)
+* QMenuBar \*menuBar(void)
+* QWidget \*menuWidget(void)
+* void removeDockWidget(QDockWidget \*dockwidget)
+* void removeToolBar(QToolBar \*toolbar)
+* void removeToolBarBreak(QToolBar \*before)
+* bool restoreDockWidget(QDockWidget \*dockwidget)
+* bool restoreState(QByteArray state, int version)
+* QByteArray saveState(int version)
+* void setCentralWidget(QWidget \*widget)
+* void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)
+* void setDockOptions(QMainWindow::DockOption options)
+* void setDocumentMode(bool enabled)
+* void setIconSize(QSize)
+* void setMenuBar(QMenuBar \*menuBar)
+* void setMenuWidget(QWidget \*menuBar)
+* void setStatusBar(QStatusBar \*statusbar)
+* void setTabPosition(Qt::DockWidgetArea areas, QTabWidget::TabPosition tabPosition)
+* void setTabShape(QTabWidget::TabShape tabShape)
+* void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
+* void setUnifiedTitleAndToolBarOnMac(bool set)
+* void splitDockWidget(QDockWidget \*first, QDockWidget \*second, Qt::Orientation orientation)
+* QStatusBar \*statusBar(void)
+* int tabPosition(Qt::DockWidgetArea area)
+* int tabShape(void)
+* void tabifyDockWidget(QDockWidget \*first, QDockWidget \*second)
+* int toolBarArea(QToolBar \*toolbar)
+* bool toolBarBreak(QToolBar \*toolbar)
+* int toolButtonStyle(void)
+* bool unifiedTitleAndToolBarOnMac(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMaterial クラス
+
+QMaterial クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qmaterial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : Qt3DCore::QComponent
+
+* void addParameter(Qt3DRender::QParameter \*parameter)
+* Qt3DRender::QEffect \* effect(void)
+* QVector<Qt3DRender::QParameter \*> parameters(void)
+* void removeParameter(Qt3DRender::QParameter \*parameter)
+* void setEffect(Qt3DRender::QEffect \*effect)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMatrix4x4 クラス
+
+QMatrix4x4 クラス
+=================
+
+
+仮引数 : qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal,qreal
+
+* QVector4D column(int index)
+* qreal \* constData(void)
+* qreal \* data_2(void)
+* qreal determinant(void)
+* void fill(qreal value)
+* void flipCoordinates(void)
+* void frustum(qreal left, qreal right, qreal bottom, qreal top, qreal nearPlane, qreal farPlane)
+* QMatrix4x4 inverted(bool \* invertible)
+* bool isIdentity(void)
+* void lookAt(QVector3D eye, QVector3D center, QVector3D up)
+* QPoint map(QPoint point)
+* QPointF map_2(QPointF point)
+* QVector3D map_3(QVector3D point)
+* QVector4D map_4(QVector4D point)
+* QRect mapRect(QRect rect)
+* QRectF mapRect_2(QRectF rect)
+* QVector3D mapVector(QVector3D vector)
+* QMatrix3x3 normalMatrix(void)
+* void optimize(void)
+* void ortho(qreal left, qreal right, qreal bottom, qreal top, qreal nearPlane, qreal farPlane)
+* void ortho_2(QRect rect)
+* void ortho_3(QRectF rect)
+* void perspective(qreal angle, qreal aspect, qreal nearPlane, qreal farPlane)
+* void rotate(qreal angle, QVector3D vector)
+* void rotate_2(QQuaternion quaternion)
+* void rotate_3(qreal angle, qreal x, qreal y, qreal z)
+* QVector4D row(int index)
+* void scale(QVector3D vector)
+* void scale_2(qreal x, qreal y)
+* void scale_3(qreal x, qreal y, qreal z)
+* void scale_4(qreal factor)
+* void setColumn(int index, QVector4D value)
+* void setRow(int index, QVector4D value)
+* void setToIdentity(void)
+* QMatrix toAffine(void)
+* QTransform toTransform_2(qreal distanceToPlane)
+* void translate(QVector3D vector)
+* void translate_2(qreal x, qreal y)
+* void translate_3(qreal x, qreal y, qreal z)
+* QMatrix4x4 transposed(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMdiArea クラス
+
+QMdiArea クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmdiarea.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractScrollArea
+
+* QMdiArea::WindowOrder activationOrder(void)
+* QMdiSubWindow \* activeSubWindow(void)
+* QMdiSubWindow \* addSubWindow(QWidget \* widget, Qt::WindowFlags windowFlags )
+* QBrush background(void)
+* QMdiSubWindow \* currentSubWindow(void)
+* bool documentMode(void)
+* void removeSubWindow(QWidget \* widget)
+* void setActivationOrder(QMdiArea::WindowOrder order)
+* void setBackground( QBrush   background)
+* void setDocumentMode(bool enabled)
+* void setOption(QMdiArea::AreaOption option, bool on )
+* void setTabPosition(QTabWidget::TabPosition position)
+* void setTabShape(QTabWidget::TabShape shape)
+* void setTabsClosable(bool closable)
+* void setTabsMovable(bool movable)
+* void setViewMode(QMdiArea::ViewMode mode)
+* QList<QMdiSubWindow \*> subWindowList(QMdiArea::WindowOrder order )
+* QTabWidget::TabPosition tabPosition(void)
+* QTabWidget::TabShape tabShape(void)
+* bool tabsClosable(void)
+* bool tabsMovable(void)
+* bool testOption(QMdiArea::AreaOption option)
+* QMdiArea::ViewMode viewMode(void)
+* void activateNextSubWindow(void)
+* void activatePreviousSubWindow(void)
+* void cascadeSubWindows(void)
+* void closeActiveSubWindow(void)
+* void closeAllSubWindows(void)
+* void setActiveSubWindow(QMdiSubWindow \* window)
+* void tileSubWindows(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMdiSubWindow クラス
+
+QMdiSubWindow クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmdisubwindow.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* bool isShaded(void)
+* int keyboardPageStep(void)
+* int keyboardSingleStep(void)
+* QMdiArea \* mdiArea(void)
+* void setKeyboardPageStep(int step)
+* void setKeyboardSingleStep(int step)
+* void setOption(QMdiSubWindow::SubWindowOption option, bool on )
+* void setSystemMenu(QMenu \* systemMenu)
+* void setWidget(QWidget \* widget)
+* QMenu \* systemMenu(void)
+* bool testOption(QMdiSubWindow::SubWindowOption option)
+* QWidget \* widget(void)
+* void showShaded(void)
+* void showSystemMenu(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMediaObject クラス
+
+QMediaObject クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmediaobject.html
+
+
+仮引数 : void
+
+
+親クラス : QWidget
+
+* QStringList availableMetaData(void)
+* bool isMetaDataAvailable(void)
+* QVariant metaData( QString   key)
+* int notifyInterval(void)
+* void setNotifyInterval(int milliSeconds)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMediaPlayer クラス
+
+QMediaPlayer クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmediaplayer.html
+
+
+仮引数 : void
+
+* int bufferStatus(void)
+* QMediaContent currentMedia(void)
+* QNetworkConfiguration currentNetworkConfiguration(void)
+* int duration(void)
+* int error(void)
+* QString errorString(void)
+* bool isAudioAvailable(void)
+* bool isMuted(void)
+* bool isSeekable(void)
+* bool isVideoAvailable(void)
+* QMediaContent media(void)
+* int mediaStatus(void)
+* QIODevice \*mediaStream(void)
+* qreal playbackRate(void)
+* QMediaPlaylist \*playlist(void)
+* int position(void)
+* void setVideoOutput(QVideoWidget \*output)
+* int volume(void)
+* void pause(void)
+* void play(void)
+* void setMuted(bool muted)
+* void setPlaylist(QMediaPlaylist \*playlist)
+* void setPosition(int position)
+* void setVolume(int volume)
+* void stop(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMediaPlaylist クラス
+
+QMediaPlaylist クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmediaplaylist.html
+
+
+仮引数 : void
+
+* int currentIndex(void)
+* QMediaContent currentMedia(void)
+* int error(void)
+* QString errorString(void)
+* bool insertMedia(int pos, QMediaContent)
+* bool isReadOnly(void)
+* QMediaContent media(int index)
+* int mediaCount(void)
+* int nextIndex(int steps)
+* int playbackMode(void)
+* int previousIndex(int steps)
+* bool save(QUrl, const char \* format)
+* void next(void) # In RingQt use : void movenext(void)
+* void previous(void)
+* void setCurrentIndex(int playlistPosition)
+* void shuffle(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMenu クラス
+
+QMenu クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmenu.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* QAction \*actionAt(QPoint)
+* QRect actionGeometry(QAction \*act)
+* QAction \*activeAction(void)
+* void addAction(QAction \*)
+* QMenu \*addMenu(QString)
+* QAction \*addSeparator(void)
+* void clear(void)
+* QAction \*defaultAction(void)
+* QAction \*exec(const QPoint &)
+* QAction \*exec_2(void)
+* QAction \*exec_3(const QPoint &,QAction \*)
+* void hideTearOffMenu(void)
+* QIcon icon(void)
+* QAction \*insertMenu(QAction \*before, QMenu \*menu)
+* QAction \*insertSeparator(QAction \*before)
+* bool isEmpty(void)
+* bool isTearOffEnabled(void)
+* bool isTearOffMenuVisible(void)
+* QAction \*menuAction(void)
+* void popup(QPoint, QAction \*atAction)
+* bool separatorsCollapsible(void)
+* void setActiveAction(QAction \*act)
+* void setDefaultAction(QAction \*act)
+* void setIcon(QIcon)
+* void setSeparatorsCollapsible(bool collapse)
+* void setTearOffEnabled(bool)
+* void setTitle(QString)
+* QString title(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMenuBar クラス
+
+QMenuBar クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmenubar.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* QAction \*actionAt(QPoint)
+* QRect actionGeometry(QAction \*act)
+* QAction \*activeAction(void)
+* QAction \*addAction(QString)
+* QAction \*addSeparator(void)
+* void clear(void)
+* QWidget \*cornerWidget(Qt::Corner)
+* QAction \*insertSeparator(QAction \*before)
+* bool isDefaultUp(void)
+* bool isNativeMenuBar(void)
+* void setActiveAction(QAction \*act)
+* void setCornerWidget(QWidget \*widget, Qt::Corner)
+* void setNativeMenuBar(bool nativeMenuBar)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMesh クラス
+
+QMesh クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qmesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* QString meshName(void)
+* QUrl source(void)
+* Qt3DRender::QMesh::Status status(void)
+* void setMeshName(QString meshName)
+* void setSource(QUrl source)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMessageBox クラス
+
+QMessageBox クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmessagebox.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QDialog
+
+* void addButton(QAbstractButton \*button, QMessageBox::ButtonRole role)
+* QAbstractButton \*button(QMessageBox::StandardButton which)
+* int buttonRole(QAbstractButton \*button)
+* QAbstractButton \*clickedButton(void)
+* QPushButton \*defaultButton(void)
+* QString detailedText(void)
+* QAbstractButton \*escapeButton(void)
+* QPixmap iconPixmap(void)
+* QString informativeText(void)
+* void open(QObject \*receiver, const char \*member)
+* void removeButton(QAbstractButton \*button)
+* void setDefaultButton(QPushButton \*button)
+* void setDetailedText(QString)
+* void setEscapeButton(QAbstractButton \*button)
+* void setIconPixmap(QPixmap)
+* void setInformativeText(QString)
+* void setStandardButtons(QMessageBox::StandardButton buttons)
+* void setText(QString)
+* void setTextFormat(Qt::TextFormat format)
+* void setWindowModality(Qt::WindowModality windowModality)
+* void setWindowTitle(QString)
+* int standardButton(QAbstractButton \*button)
+* int standardButtons(void)
+* QString text(void)
+* int textFormat(void)
+* int exec(void)
+* void about(QWidget \*parent, QString,QString)
+* void aboutQt(QWidget \*parent, QString)
+* int critical(QWidget \* parent, QString , QString, int buttons, int defaultButton)
+* int information(QWidget \* parent, QString ,QString, int buttons,int defaultButton)
+* int question(QWidget \* parent,QString,QString, int buttons ,int  defaultButton)
+* int warning(QWidget \*parent, QString,QString, int buttons,int defaultButton)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMetalRoughMaterial クラス
+
+QMetalRoughMaterial クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qmetalroughmaterial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* QVariant ambientOcclusion(void)
+* QVariant baseColor(void)
+* QVariant metalness(void)
+* QVariant normal(void)
+* QVariant roughness(void)
+* float textureScale(void)
+* void setAmbientOcclusion(QVariant ambientOcclusion)
+* void setBaseColor(QVariant baseColor)
+* void setMetalness(QVariant metalness)
+* void setNormal(QVariant normal)
+* void setRoughness(QVariant roughness)
+* void setTextureScale(float textureScale)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMimeData クラス
+
+QMimeData クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmimedata.html
+
+
+仮引数 : void
+
+
+親クラス : QObject
+
+* void clear(void)
+* QVariant colorData(void)
+* QByteArray data(QString mimeType)
+* QStringList formats(void)
+* bool hasColor(void)
+* bool hasFormat(QString mimeType)
+* bool hasHtml(void)
+* bool hasImage(void)
+* bool hasText(void)
+* bool hasUrls(void)
+* QString html(void)
+* QVariant imageData(void)
+* void removeFormat(QString mimeType)
+* void setColorData(QVariant color)
+* void setData(QString mimeType, QByteArray data)
+* void setHtml(QString html)
+* void setImageData(QVariant image)
+* void setText(QString text)
+* void setUrls(QList<QUrl> urls)
+* QString text(void)
+* QList<QUrl> urls(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMorphPhongMaterial クラス
+
+QMorphPhongMaterial クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmorphphongmaterial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* QColor ambient(void)
+* QColor diffuse(void)
+* float interpolator(void)
+* float shininess(void)
+* QColor specular(void)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QColor diffuse)
+* void setInterpolator(float interpolator)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMutex クラス
+
+QMutex クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmutex.html
+
+
+仮引数 : QMutex::RecursionMode
+
+* bool isRecursive(void)
+* void lock(void)
+* void unlock(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QMutexLocker クラス
+
+QMutexLocker クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qmutexlocker.html
+
+
+仮引数 : QMutex \*
+
+* QMutex \* mutex(void)
+* void relock(void)
+* void unlock(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QNetworkAccessManager クラス
+
+QNetworkAccessManager クラス
+============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qnetworkaccessmanager.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* void setfinishedEvent(const char \*)
+* const char \*getfinishedEvent(void)
+* QNetworkConfiguration activeConfiguration(void)
+* QAbstractNetworkCache \*cache(void)
+* void clearAccessCache(void)
+* QNetworkConfiguration configuration(void)
+* void connectToHost(QString, quint16)
+* QNetworkReply \*deleteResource(QNetworkRequest)
+* QNetworkReply \*get(QNetworkRequest) # In RingQt use : QNetworkReply \*getvalue(QNetworkRequest)
+* QNetworkReply \*head(QNetworkRequest)
+* QNetworkAccessManager::NetworkAccessibility networkAccessible(void)
+* QNetworkReply \*post(QNetworkRequest, QByteArray)
+* QNetworkProxy proxy(void)
+* QNetworkProxyFactory \*proxyFactory(void)
+* QNetworkReply \*put(QNetworkRequest, QByteArray) # In RingQt use : QNetworkReply \*putvalue(QNetworkRequest, QByteArray)
+* QNetworkReply \*sendCustomRequest(QNetworkRequest, QByteArray, QIODevice \*)
+* void setCache(QAbstractNetworkCache \*cache)
+* void setConfiguration(QNetworkConfiguration)
+* void setCookieJar(QNetworkCookieJar \*cookieJar)
+* void setNetworkAccessible(QNetworkAccessManager::NetworkAccessibility accessible)
+* void setProxy(QNetworkProxy)
+* void setProxyFactory(QNetworkProxyFactory \*factory)
+* QStringList supportedSchemes(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QNetworkProxy クラス
+
+QNetworkProxy クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qnetworkproxy.html
+
+
+仮引数 : void
+
+* int capabilities(void)
+* bool hasRawHeader(QByteArray headerName)
+* QVariant header(QNetworkRequest::KnownHeaders header)
+* QString hostName(void)
+* bool isCachingProxy(void)
+* bool isTransparentProxy(void)
+* QString password(void)
+* int port(void)
+* QByteArray rawHeader(QByteArray headerName)
+* void setCapabilities(QNetworkProxy::Capability capabilities)
+* void setHeader(QNetworkRequest::KnownHeaders header,  QVariant value)
+* void setHostName(QString hostName)
+* void setPassword(QString password)
+* void setPort(int port)
+* void setRawHeader(QByteArray headerName, QByteArray headerValue)
+* void setType(QNetworkProxy::ProxyType type)
+* void setUser(QString user)
+* void swap(QNetworkProxy  other)
+* int type(void)
+* QString user(void)
+* QNetworkProxy applicationProxy(void)
+* void setApplicationProxy(QNetworkProxy  networkProxy)
+
+.. index::
+       pair: RingQt クラスリファレンス; QNetworkReply クラス
+
+QNetworkReply クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qnetworkreply.html
+
+
+仮引数 : void
+
+
+親クラス : QIODevice
+
+* QVariant attribute(QNetworkRequest::Attribute code)
+* QNetworkReply::NetworkError error(void)
+* bool hasRawHeader(QByteArray)
+* QVariant header(QNetworkRequest::KnownHeaders header)
+* bool isFinished(void)
+* bool isRunning(void)
+* QNetworkAccessManager \*manager(void)
+* QNetworkAccessManager::Operation operation(void)
+* QByteArray rawHeader(QByteArray)
+* qint64 readBufferSize(void)
+* QNetworkRequest request(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QNetworkRequest クラス
+
+QNetworkRequest クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qnetworkrequest.html
+
+
+仮引数 : QUrl
+
+* QVariant attribute(QNetworkRequest::Attribute, QVariant)
+* bool hasRawHeader(QByteArray)
+* QVariant header(QNetworkRequest::KnownHeaders)
+* QObject \*originatingObject(void)
+* QNetworkRequest::Priority priority(void)
+* QByteArray rawHeader(QByteArray)
+* void setAttribute(QNetworkRequest::Attribute, QVariant)
+* void setHeader(QNetworkRequest::KnownHeaders, QVariant)
+* void setOriginatingObject(QObject \*object)
+* void setPriority(QNetworkRequest::Priority priority)
+* void setRawHeader(QByteArray, QByteArray)
+* void swap(QNetworkRequest)
+* QUrl url(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QNmeaPositionInfoSource クラス
+
+QNmeaPositionInfoSource クラス
+==============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qnmeapositioninfosource.html
+
+
+仮引数 : QNmeaPositionInfoSource::UpdateMode,QObject \*
+
+
+親クラス : QGeoPositionInfoSource
+
+* QIODevice \* device(void)
+* void setDevice(QIODevice \* device)
+* QNmeaPositionInfoSource::UpdateMode updateMode(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QNode クラス
+
+QNode クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dcore-qnode.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QObject
+
+* bool blockNotifications(bool block)
+* Qt3DCore::QNodeVector childNodes(void)
+* void clearPropertyTracking(QString propertyName)
+* void clearPropertyTrackings(void)
+* Qt3DCore::QNode::PropertyTrackingMode defaultPropertyTrackingMode(void)
+* Qt3DCore::QNodeId id(void)
+* bool isEnabled(void)
+* bool notificationsBlocked(void)
+* Qt3DCore::QNode \* parentNode(void)
+* Qt3DCore::QNode::PropertyTrackingMode propertyTracking(QString propertyName)
+* void setPropertyTracking(QString propertyName, Qt3DCore::QNode::PropertyTrackingMode trackMode)
+* void setDefaultPropertyTrackingMode(Qt3DCore::QNode::PropertyTrackingMode mode)
+* void setEnabled(bool isEnabled)
+* void setParent(Qt3DCore::QNode \*parent)
+
+.. index::
+       pair: RingQt クラスリファレンス; QObject クラス
+
+QObject クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qobject.html
+
+
+仮引数 : void
+
+* 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)
+* 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 setProperty_2(const char \*name, int)
+* bool setProperty_3(const char \*name, float)
+* bool setProperty_4(const char \*name, double)
+* bool setProperty_5(const char \*name, QString)
+* bool setProperty_int(const char \*name, int)
+* bool setProperty_float(const char \*name, float)
+* bool setProperty_double(const char \*name, double)
+* bool setProperty_string(const char \*name, QString)
+* bool signalsBlocked(void)
+* int startTimer(int interval)
+* QThread \*thread(void)
+* void deleteLater(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QObjectPicker クラス
+
+QObjectPicker クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qobjectpicker.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* bool containsMouse(void)
+* bool isDragEnabled(void)
+* bool isHoverEnabled(void)
+* bool isPressed(void)
+* void setDragEnabled(bool dragEnabled)
+* void setHoverEnabled(bool hoverEnabled)
+* void setclickedEvent(const char \*)
+* void setcontainsMouseChangedEvent(const char \*)
+* void setdragEnabledChangedEvent(const char \*)
+* void setenteredEvent(const char \*)
+* void setexitedEvent(const char \*)
+* void sethoverEnabledChangedEvent(const char \*)
+* void setmovedEvent(const char \*)
+* void setpressedEvent(const char \*)
+* void setpressedChangedEvent(const char \*)
+* void setreleasedEvent(const char \*)
+* const char \*getclickedEvent(void)
+* const char \*getcontainsMouseChangedEvent(void)
+* const char \*getdragEnabledChangedEvent(void)
+* const char \*getenteredEvent(void)
+* const char \*getexitedEvent(void)
+* const char \*gethoverEnabledChangedEvent(void)
+* const char \*getmovedEvent(void)
+* const char \*getpressedEvent(void)
+* const char \*getpressedChangedEvent(void)
+* const char \*getreleasedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLBuffer クラス
+
+QOpenGLBuffer クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglbuffer.html
+
+
+仮引数 : void
+
+* void allocate(void \*data, int count)
+* void allocate_2(int count)
+* bool bind(void)
+* GLuint bufferId(void)
+* bool create(void)
+* void destroy(void)
+* bool isCreated(void)
+* void \* map(QOpenGLBuffer::Access access)
+* void release(void)
+* void setUsagePattern(QOpenGLBuffer::UsagePattern value)
+* int size(void)
+* QOpenGLBuffer::Type type(void)
+* bool unmap(void)
+* QOpenGLBuffer::UsagePattern usagePattern(void)
+* void write(int offset, void \*data, int count)
+* void release_2(QOpenGLBuffer::Type type)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLContext クラス
+
+QOpenGLContext クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglcontext.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* bool create(void)
+* GLuint defaultFramebufferObject(void)
+* void doneCurrent(void)
+* QSet<QByteArray> extensions(void)
+* QOpenGLFunctions \* functions(void)
+* QFunctionPointer getProcAddress(QByteArray procName)
+* QFunctionPointer getProcAddress_2(char \*procName)
+* bool hasExtension(QByteArray extension)
+* bool isOpenGLES(void)
+* bool isValid(void)
+* bool makeCurrent(QSurface \*surface)
+* QVariant nativeHandle(void)
+* QScreen \* screen(void)
+* void setFormat(QSurfaceFormat format)
+* void setNativeHandle(QVariant handle)
+* void setScreen(QScreen \*screen)
+* void setShareContext(QOpenGLContext \*shareContext)
+* QOpenGLContext \* shareContext(void)
+* QOpenGLContextGroup \* shareGroup(void)
+* QSurface \* surface(void)
+* void swapBuffers(QSurface \*surface)
+* QAbstractOpenGLFunctions \* versionFunctions(QOpenGLVersionProfile versionProfile))
+* TYPE \* versionFunctions_2(void)
+* bool areSharing(QOpenGLContext \*first, QOpenGLContext \*second)
+* QOpenGLContext \* currentContext(void)
+* QOpenGLContext \* globalShareContext(void)
+* void \* openGLModuleHandle(void)
+* QOpenGLContext::OpenGLModuleType openGLModuleType(void)
+* bool supportsThreadedOpenGL(void)
+* QOpenGLFunctions_3_2_Core \*opengl32(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLDebugLogger クラス
+
+QOpenGLDebugLogger クラス
+=========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopengldebuglogger.html
+
+
+仮引数 : QObject \*
+
+* void disableMessages(QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types, QOpenGLDebugMessage::Severities severities)
+* void disableMessages_2(QVector<GLuint> ids, QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types)
+* void enableMessages(QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types, QOpenGLDebugMessage::Severities severities)
+* void enableMessages_2(QVector<GLuint> ids, QOpenGLDebugMessage::Sources sources, QOpenGLDebugMessage::Types types)
+* bool initialize(void)
+* bool isLogging(void)
+* QList<QOpenGLDebugMessage> loggedMessages(void)
+* QOpenGLDebugLogger::LoggingMode loggingMode(void)
+* qint64 maximumMessageLength(void)
+* void popGroup(void)
+* void pushGroup(QString name, GLuint id, QOpenGLDebugMessage::Source source)
+* void logMessage(QOpenGLDebugMessage debugMessage)
+* void startLogging(QOpenGLDebugLogger::LoggingMode loggingMode)
+* void stopLogging(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLFramebufferObject クラス
+
+QOpenGLFramebufferObject クラス
+===============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglframebufferobject.html
+
+
+仮引数 : int,int,GLenum
+
+* bool bind(void)
+* QOpenGLFramebufferObjectFormat format(void)
+* GLuint handle(void)
+* int height(void)
+* bool isBound(void)
+* bool isValid(void)
+* bool release(void)
+* void setAttachment(QOpenGLFramebufferObject::Attachment attachment)
+* QSize size(void)
+* QImage toImage(bool flipped)
+* QImage toImage_3(bool flipped, int colorQOpenGLFramebufferObject::AttachmentIndex)
+* QImage toImage_2(void)
+* int width(void)
+* bool bindDefault(void)
+* bool hasOpenGLFramebufferObjects(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLFunctions クラス
+
+QOpenGLFunctions クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglfunctions.html
+
+
+仮引数 : void
+
+* void glActiveTexture(GLenum texture)
+* void glAttachShader(GLuint program, GLuint shader)
+* void glBindAttribLocation(GLuint program, GLuint index, char \*name)
+* void glBindBuffer(GLenum target, GLuint buffer)
+* void glBindFramebuffer(GLenum target, GLuint framebuffer)
+* void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+* void glBufferData(GLenum target, qopengl_GLsizeiptr size, void \*data, GLenum usage)
+* void glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, void \*data)
+* GLenum glCheckFramebufferStatus(GLenum target)
+* void glClear(GLbitfield mask)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepthf(GLclampf depth)
+* void glClearStencil(GLint s)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, void \*data)
+* void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, void \*data)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum type)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n, GLuint \*buffers)
+* void glDeleteFramebuffers(GLsizei n, GLuint \*framebuffers)
+* void glDeleteProgram(GLuint program)
+* void glDeleteRenderbuffers(GLsizei n, GLuint \*renderbuffers)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n, GLuint \*textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRangef(GLclampf zNear, GLclampf zFar)
+* void glDetachShader(GLuint program, GLuint shader)
+* void glDisable(GLenum cap)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid \*indices)
+* void glEnable(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glFinish(void)
+* void glFlush(void)
+* void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+* void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFrontFace(GLenum mode)
+* void glGenBuffers(GLsizei n, GLuint \*buffers)
+* void glGenFramebuffers(GLsizei n, GLuint \*framebuffers)
+* void glGenRenderbuffers(GLsizei n, GLuint \*renderbuffers)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGenerateMipmap(GLenum target)
+* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei \*length, GLint \*size, GLenum \*type, char \*name)
+* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei \*length, GLint \*size, GLenum \*type, char \*name)
+* void glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei \*count, GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program, char \*name)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetBufferParameteriv(GLenum target, GLenum pname, GLint \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint \*params)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei \*length, char \*infolog)
+* void glGetProgramiv(GLuint program, GLenum pname, GLint \*params)
+* void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei \*length, char \*infolog)
+* void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint \*range, GLint \*precision)
+* void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei \*length, char \*source)
+* void glGetShaderiv(GLuint shader, GLenum pname, GLint \*params)
+* GLubyte \* glGetString(GLenum name)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* GLint glGetUniformLocation(GLuint program, char \*name)
+* void glGetUniformfv(GLuint program, GLint location, GLfloat \*params)
+* void glGetUniformiv(GLuint program, GLint location, GLint \*params)
+* void glGetVertexAttribiv(GLuint index, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsFramebuffer(GLuint framebuffer)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsRenderbuffer(GLuint renderbuffer)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid \*pixels)
+* void glReleaseShaderCompiler(void)
+* void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+* void glSampleCoverage(GLclampf value, GLboolean invert)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glShaderBinary(GLint n, GLuint \*shaders, GLenum binaryformat, void \*binary, GLint length)
+* void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face, GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid \*pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid \*pixels)
+* void glUniform1f(GLint location, GLfloat x)
+* void glUniform1fv(GLint location, GLsizei count, GLfloat \*v)
+* void glUniform1i(GLint location, GLint x)
+* void glUniform1iv(GLint location, GLsizei count, GLint \*v)
+* void glUniform2f(GLint location, GLfloat x, GLfloat y)
+* void glUniform2fv(GLint location, GLsizei count, GLfloat \*v)
+* void glUniform2i(GLint location, GLint x, GLint y)
+* void glUniform2iv(GLint location, GLsizei count, GLint \*v)
+* void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+* void glUniform3fv(GLint location, GLsizei count, GLfloat \*v)
+* void glUniform3i(GLint location, GLint x, GLint y, GLint z)
+* void glUniform3iv(GLint location, GLsizei count, GLint \*v)
+* void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glUniform4fv(GLint location, GLsizei count, GLfloat \*v)
+* void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+* void glUniform4iv(GLint location, GLsizei count, GLint \*v)
+* void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertexAttrib1f(GLuint indx, GLfloat x)
+* void glVertexAttrib1fv(GLuint indx, GLfloat \*values)
+* void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
+* void glVertexAttrib2fv(GLuint indx, GLfloat \*values)
+* void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
+* void glVertexAttrib3fv(GLuint indx, GLfloat \*values)
+* void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertexAttrib4fv(GLuint indx, GLfloat \*values)
+* void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void \*ptr)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+* bool hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature)
+* void initializeOpenGLFunctions(void)
+* QOpenGLFunctions::OpenGLFeatures openGLFeatures(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLFunctions_3_2_Core クラス
+
+QOpenGLFunctions_3_2_Core クラス
+================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglfunctions_3_2_core.html
+
+
+仮引数 : void
+
+* void glActiveTexture(GLenum texture)
+* void glAttachShader(GLuint program, GLuint shader)
+* void glBeginConditionalRender(GLuint id, GLenum mode)
+* void glBeginQuery(GLenum target, GLuint id)
+* void glBeginTransformFeedback(GLenum primitiveMode)
+* void glBindAttribLocation(GLuint program, GLuint index, GLchar \*name)
+* void glBindBuffer(GLenum target, GLuint buffer)
+* void glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
+* void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+* void glBindFragDataLocation(GLuint program, GLuint color, GLchar \*name)
+* void glBindFramebuffer(GLenum target, GLuint framebuffer)
+* void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBindVertexArray(GLuint array)
+* void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+* void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+* void glBufferData(GLenum target, GLsizeiptr size, GLvoid \*data, GLenum usage)
+* void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid \*data)
+* GLenum glCheckFramebufferStatus(GLenum target)
+* void glClampColor(GLenum target, GLenum clamp)
+* void glClear(GLbitfield mask)
+* void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+* void glClearBufferfv(GLenum buffer, GLint drawbuffer, GLfloat \*value)
+* void glClearBufferiv(GLenum buffer, GLint drawbuffer, GLint \*value)
+* void glClearBufferuiv(GLenum buffer, GLint drawbuffer, GLuint \*value)
+* void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearDepth(GLdouble depth)
+* void glClearStencil(GLint s)
+* GLenum glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, GLvoid \*data)
+* void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLvoid \*data)
+* void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLvoid \*data)
+* void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, GLvoid \*data)
+* void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLvoid \*data)
+* void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLvoid \*data)
+* void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum type)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n, GLuint \*buffers)
+* void glDeleteFramebuffers(GLsizei n, GLuint \*framebuffers)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n, GLuint \*ids)
+* void glDeleteRenderbuffers(GLsizei n, GLuint \*renderbuffers)
+* void glDeleteShader(GLuint shader)
+* void glDeleteSync(GLsync sync)
+* void glDeleteTextures(GLsizei n, GLuint \*textures)
+* void glDeleteVertexArrays(GLsizei n, GLuint \*arrays)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLdouble nearVal, GLdouble farVal)
+* void glDetachShader(GLuint program, GLuint shader)
+* void glDisable(GLenum cap)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDisablei(GLenum target, GLuint index)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n, GLenum \*bufs)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, GLvoid \*indices)
+* void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, GLvoid \*indices, GLint basevertex)
+* void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLvoid \*indices, GLsizei instancecount)
+* void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, GLvoid \*indices, GLsizei instancecount, GLint basevertex)
+* void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid \*indices)
+* void glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLvoid \*indices, GLint basevertex)
+* void glEnable(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glEnablei(GLenum target, GLuint index)
+* void glEndConditionalRender(void)
+* void glEndQuery(GLenum target)
+* void glEndTransformFeedback(void)
+* GLsync glFenceSync(GLenum condition, GLbitfield flags)
+* void glFinish(void)
+* void glFlush(void)
+* void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+* void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+* void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level)
+* void glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+* void glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+* void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+* void glFrontFace(GLenum mode)
+* void glGenBuffers(GLsizei n, GLuint \*buffers)
+* void glGenFramebuffers(GLsizei n, GLuint \*framebuffers)
+* void glGenQueries(GLsizei n, GLuint \*ids)
+* void glGenRenderbuffers(GLsizei n, GLuint \*renderbuffers)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGenVertexArrays(GLsizei n, GLuint \*arrays)
+* void glGenerateMipmap(GLenum target)
+* void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei \*length, GLint \*size, GLenum \*type, GLchar \*name)
+* void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei \*length, GLint \*size, GLenum \*type, GLchar \*name)
+* void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei \*length, GLchar \*uniformBlockName)
+* void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint \*params)
+* void glGetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei \*length, GLchar \*uniformName)
+* void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, GLuint \*uniformIndices, GLenum pname, GLint \*params)
+* void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei \*count, GLuint \*obj)
+* GLint glGetAttribLocation(GLuint program, GLchar \*name)
+* void glGetBooleani_v(GLenum target, GLuint index, GLboolean \*data)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 \*params)
+* void glGetBufferParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glGetCompressedTexImage(GLenum target, GLint level, GLvoid \*img)
+* void glGetDoublev(GLenum pname, GLdouble \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* GLint glGetFragDataLocation(GLuint program, GLchar \*name)
+* void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint \*params)
+* void glGetInteger64i_v(GLenum target, GLuint index, GLint64 \*data)
+* void glGetInteger64v(GLenum pname, GLint64 \*params)
+* void glGetIntegeri_v(GLenum target, GLuint index, GLint \*data)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat \*val)
+* void glGetProgramiv(GLuint program, GLenum pname, GLint \*params)
+* void glGetQueryObjectiv(GLuint id, GLenum pname, GLint \*params)
+* void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint \*params)
+* void glGetQueryiv(GLenum target, GLenum pname, GLint \*params)
+* void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei \*length, GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei \*length, GLchar \*source)
+* void glGetShaderiv(GLuint shader, GLenum pname, GLint \*params)
+* GLubyte \* glGetString(GLenum name)
+* GLubyte \* glGetStringi(GLenum name, GLuint index)
+* void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei \*length, GLint \*values)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid \*pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat \*params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint \*params)
+* void glGetTexParameterIiv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint \*params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei \*length, GLsizei \*size, GLenum \*type, GLchar \*name)
+* GLuint glGetUniformBlockIndex(GLuint program, GLchar \*uniformBlockName)
+* void glGetUniformfv(GLuint program, GLint location, GLfloat \*params)
+* void glGetUniformiv(GLuint program, GLint location, GLint \*params)
+* void glGetUniformuiv(GLuint program, GLint location, GLuint \*params)
+* void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint \*params)
+* void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint \*params)
+* void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexub(GLubyte c)
+* void glIndexubv(GLubyte \*c)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsEnabledi(GLenum target, GLuint index)
+* GLboolean glIsFramebuffer(GLuint framebuffer)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsRenderbuffer(GLuint renderbuffer)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsSync(GLsync sync)
+* GLboolean glIsTexture(GLuint texture)
+* GLboolean glIsVertexArray(GLuint array)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glLogicOp(GLenum opcode)
+* GLvoid \* glMapBuffer(GLenum target, GLenum access)
+* GLvoid \* glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+* void glMultiDrawArrays(GLenum mode, GLint \*first, GLsizei \*count, GLsizei drawcount)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPointParameterf(GLenum pname, GLfloat param)
+* void glPointParameterfv(GLenum pname, GLfloat \*params)
+* void glPointParameteri(GLenum pname, GLint param)
+* void glPointParameteriv(GLenum pname, GLint \*params)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPrimitiveRestartIndex(GLuint index)
+* void glProvokingVertex(GLenum mode)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid \*pixels)
+* void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+* void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+* void glSampleCoverage(GLfloat value, GLboolean invert)
+* void glSampleMaski(GLuint index, GLbitfield mask)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face, GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass)
+* void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, GLvoid \*pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid \*pixels)
+* void glTexImage2DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
+* void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLvoid \*pixels)
+* void glTexImage3DMultisample(GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations)
+* void glTexParameterIiv(GLenum target, GLenum pname, GLint \*params)
+* void glTexParameterIuiv(GLenum target, GLenum pname, GLuint \*params)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, GLvoid \*pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid \*pixels)
+* void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid \*pixels)
+* void glUniform1fv(GLint location, GLsizei count, GLfloat \*value)
+* void glUniform1i(GLint location, GLint v0)
+* void glUniform1iv(GLint location, GLsizei count, GLint \*value)
+* void glUniform1ui(GLint location, GLuint v0)
+* void glUniform1uiv(GLint location, GLsizei count, GLuint \*value)
+* void glUniform2f(GLint location, GLfloat v0, GLfloat v1)
+* void glUniform2fv(GLint location, GLsizei count, GLfloat \*value)
+* void glUniform2i(GLint location, GLint v0, GLint v1)
+* void glUniform2iv(GLint location, GLsizei count, GLint \*value)
+* void glUniform2ui(GLint location, GLuint v0, GLuint v1)
+* void glUniform2uiv(GLint location, GLsizei count, GLuint \*value)
+* void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+* void glUniform3fv(GLint location, GLsizei count, GLfloat \*value)
+* void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2)
+* void glUniform3iv(GLint location, GLsizei count, GLint \*value)
+* void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+* void glUniform3uiv(GLint location, GLsizei count, GLuint \*value)
+* void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+* void glUniform4fv(GLint location, GLsizei count, GLfloat \*value)
+* void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+* void glUniform4iv(GLint location, GLsizei count, GLint \*value)
+* void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+* void glUniform4uiv(GLint location, GLsizei count, GLuint \*value)
+* void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+* void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, GLfloat \*value)
+* GLboolean glUnmapBuffer(GLenum target)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLPaintDevice クラス
+
+QOpenGLPaintDevice クラス
+=========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglpaintdevice.html
+
+
+仮引数 : void
+
+
+親クラス : QPaintDevice
+
+* QOpenGLContext \* context(void)
+* qreal dotsPerMeterX(void)
+* qreal dotsPerMeterY(void)
+* void ensureActiveTarget(void)
+* bool paintFlipped(void)
+* void setDevicePixelRatio(qreal devicePixelRatio)
+* void setDotsPerMeterX(qreal dpmx)
+* void setDotsPerMeterY(qreal dpmy)
+* void setPaintFlipped(bool flipped)
+* void setSize(QSize size)
+* QSize size(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLShader クラス
+
+QOpenGLShader クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglshader.html
+
+
+仮引数 : QOpenGLShader::ShaderType,QObject \*
+
+* bool compileSourceCode(char \*source)
+* bool compileSourceCode_2(QByteArray source)
+* bool compileSourceCode_3(QString source)
+* bool compileSourceFile(QString fileName)
+* bool isCompiled(void)
+* QString log(void)
+* GLuint shaderId(void)
+* QOpenGLShader::ShaderType shaderType(void)
+* QByteArray sourceCode(void)
+* bool hasOpenGLShaders(QOpenGLShader::ShaderType type, QOpenGLContext \*context)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLShaderProgram クラス
+
+QOpenGLShaderProgram クラス
+===========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglshaderprogram.html
+
+
+仮引数 : QObject \*
+
+* bool addShaderFromSourceCode(QOpenGLShader::ShaderType type, char \*source)
+* bool addShaderFromSourceCode_2(QOpenGLShader::ShaderType type, QByteArray source)
+* bool addShaderFromSourceCode_3(QOpenGLShader::ShaderType type, QString source)
+* bool addShaderFromSourceFile(QOpenGLShader::ShaderType type, QString fileName)
+* int attributeLocation(char \*name)
+* int attributeLocation_2(QByteArray name)
+* int attributeLocation_3(QString name)
+* bool bind(void)
+* void bindAttributeLocation(char \*name, int location)
+* void bindAttributeLocation_2(QByteArray name, int location)
+* void bindAttributeLocation_3(QString name, int location)
+* QVector<float> defaultOuterTessellationLevels(void)
+* void disableAttributeArray(int location)
+* void disableAttributeArray_2(char \*name)
+* void enableAttributeArray(int location)
+* void enableAttributeArray_2(char \*name)
+* bool isLinked(void)
+* bool link(void)
+* QString log(void)
+* int maxGeometryOutputVertices(void)
+* int patchVertexCount(void)
+* GLuint programId(void)
+* void release(void)
+* void removeAllShaders(void)
+* void removeShader(QOpenGLShader \*shader)
+* void setAttributeArray(int location, GLfloat \*values, int tupleSize, int stride)
+* void setAttributeArray_2(int location, QVector2D \*values, int stride)
+* void setAttributeArray_3(int location, QVector3D \*values, int stride)
+* void setAttributeArray_4(int location, QVector4D \*values, int stride)
+* void setAttributeArray_5(int location, GLenum type, void \*values, int tupleSize, int stride)
+* void setAttributeArray_6(char \*name, GLfloat \*values, int tupleSize, int stride)
+* void setAttributeArray_7(char \*name, QVector2D \*values, int stride)
+* void setAttributeArray_8(char \*name, QVector3D \*values, int stride)
+* void setAttributeArray_9(char \*name, QVector4D \*values, int stride)
+* void setAttributeArray_10(char \*name, GLenum type, void \*values, int tupleSize, int stride)
+* void setAttributeBuffer(int location, GLenum type, int offset, int tupleSize, int stride)
+* void setAttributeBuffer_2(char \*name, GLenum type, int offset, int tupleSize, int stride)
+* void setAttributeValue(int location, GLfloat value)
+* void setAttributeValue_2(int location, GLfloat x, GLfloat y)
+* void setAttributeValue_3(int location, GLfloat x, GLfloat y, GLfloat z)
+* void setAttributeValue_4(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setAttributeValue_5(int location, QVector2D value)
+* void setAttributeValue_6(int location, QVector3D value)
+* void setAttributeValue_7(int location, QVector4D value)
+* void setAttributeValue_8(int location, QColor value)
+* void setAttributeValue_9(int location, GLfloat \*values, int columns, int rows)
+* void setAttributeValue_10(char \*name, GLfloat value)
+* void setAttributeValue_11(char \*name, GLfloat x, GLfloat y)
+* void setAttributeValue_12(char \*name, GLfloat x, GLfloat y, GLfloat z)
+* void setAttributeValue_13(char \*name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setAttributeValue_14(char \*name, QVector2D value)
+* void setAttributeValue_15(char \*name, QVector3D value)
+* void setAttributeValue_16(char \*name, QVector4D value)
+* void setDefaultInnerTessellationLevels(QVector<float> levels)
+* void setDefaultOuterTessellationLevels(QVector<float> levels)
+* void setPatchVertexCount(int count)
+* void setUniformValue(int location, GLfloat value)
+* void setUniformValue_2(int location, GLint value)
+* void setUniformValue_3(char \*name, QColor color)
+* void setUniformValue_4(char \*name, QPoint point)
+* void setUniformValue_5(char \*name, QPointF point)
+* void setUniformValue_6(char \*name, QSize size)
+* void setUniformValue_7(char \*name, QSizeF size)
+* void setUniformValue_8(char \*name, QMatrix2x2 value)
+* void setUniformValue_9(char \*name, QMatrix2x3 value)
+* void setUniformValue_10(char \*name, QMatrix2x4 value)
+* void setUniformValue_11(char \*name, QMatrix3x2 value)
+* void setUniformValue_12(char \*name, QMatrix3x3 value)
+* void setUniformValue_13(char \*name, QMatrix3x4 value)
+* void setUniformValue_14(char \*name, QMatrix4x2 value)
+* void setUniformValue_15(char \*name, QMatrix4x3 value)
+* void setUniformValue_16(char \*name, QMatrix4x4 value)
+* void setUniformValue_21(int location, GLuint value)
+* void setUniformValue_22(int location, GLfloat x, GLfloat y)
+* void setUniformValue_23(int location, GLfloat x, GLfloat y, GLfloat z)
+* void setUniformValue_24(int location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setUniformValue_25(int location, QVector2D value)
+* void setUniformValue_26(int location, QVector3D value)
+* void setUniformValue_27(int location, QVector4D value)
+* void setUniformValue_28(int location, QColor color)
+* void setUniformValue_29(int location, QPoint point)
+* void setUniformValue_30(int location, QPointF point)
+* void setUniformValue_31(int location, QSize size)
+* void setUniformValue_32(int location, QSizeF size)
+* void setUniformValue_33(int location, QMatrix2x2 value)
+* void setUniformValue_34(int location, QMatrix2x3 value)
+* void setUniformValue_35(int location, QMatrix2x4 value)
+* void setUniformValue_36(int location, QMatrix3x2 value)
+* void setUniformValue_37(int location, QMatrix3x3 value)
+* void setUniformValue_38(int location, QMatrix3x4 value)
+* void setUniformValue_39(int location, QMatrix4x2 value)
+* void setUniformValue_40(int location, QMatrix4x3 value)
+* void setUniformValue_41(int location, QMatrix4x4 value)
+* void setUniformValue_46(char \*name, GLfloat value)
+* void setUniformValue_47(char \*name, GLint value)
+* void setUniformValue_48(char \*name, GLuint value)
+* void setUniformValue_49(char \*name, GLfloat x, GLfloat y)
+* void setUniformValue_50(char \*name, GLfloat x, GLfloat y, GLfloat z)
+* void setUniformValue_51(char \*name, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void setUniformValue_52(char \*name, QVector2D value)
+* void setUniformValue_53(char \*name, QVector3D value)
+* void setUniformValue_54(char \*name, QVector4D value)
+* void setUniformValueArray(int location, GLfloat \*values, int count, int tupleSize)
+* void setUniformValueArray_2(int location, GLint \*values, int count)
+* void setUniformValueArray_3(int location, GLuint \*values, int count)
+* void setUniformValueArray_4(int location, QVector2D \*values, int count)
+* void setUniformValueArray_5(int location, QVector3D \*values, int count)
+* void setUniformValueArray_6(int location, QVector4D \*values, int count)
+* void setUniformValueArray_7(int location, QMatrix2x2 \*values, int count)
+* void setUniformValueArray_8(int location, QMatrix2x3 \*values, int count)
+* void setUniformValueArray_9(int location, QMatrix2x4 \*values, int count)
+* void setUniformValueArray_10(int location, QMatrix3x2 \*values, int count)
+* void setUniformValueArray_11(int location, QMatrix3x3 \*values, int count)
+* void setUniformValueArray_12(int location, QMatrix3x4 \*values, int count)
+* void setUniformValueArray_13(int location, QMatrix4x2 \*values, int count)
+* void setUniformValueArray_14(int location, QMatrix4x3 \*values, int count)
+* void setUniformValueArray_15(int location, QMatrix4x4 \*values, int count)
+* void setUniformValueArray_16(char \*name, GLfloat \*values, int count, int tupleSize)
+* void setUniformValueArray_17(char \*name, GLint \*values, int count)
+* void setUniformValueArray_18(char \*name, GLuint \*values, int count)
+* void setUniformValueArray_19(char \*name, QVector2D \*values, int count)
+* void setUniformValueArray_20(char \*name, QVector3D \*values, int count)
+* void setUniformValueArray_21(char \*name, QVector4D \*values, int count)
+* void setUniformValueArray_22(char \*name, QMatrix2x2 \*values, int count)
+* void setUniformValueArray_23(char \*name, QMatrix2x3 \*values, int count)
+* void setUniformValueArray_24(char \*name, QMatrix2x4 \*values, int count)
+* void setUniformValueArray_25(char \*name, QMatrix3x2 \*values, int count)
+* void setUniformValueArray_26(char \*name, QMatrix3x3 \*values, int count)
+* void setUniformValueArray_27(char \*name, QMatrix3x4 \*values, int count)
+* void setUniformValueArray_28(char \*name, QMatrix4x2 \*values, int count)
+* void setUniformValueArray_29(char \*name, QMatrix4x3 \*values, int count)
+* void setUniformValueArray_30(char \*name, QMatrix4x4 \*values, int count)
+* QList<QOpenGLShader \*> shaders(void)
+* int uniformLocation(char \*name)
+* int uniformLocation_2(QByteArray name)
+* int uniformLocation_3(QString name)
+* bool hasOpenGLShaderPrograms(QOpenGLContext \*context)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLTexture クラス
+
+QOpenGLTexture クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopengltexture.html
+
+
+仮引数 : QOpenGLTexture::Target
+
+* void allocateStorage(void)
+* void bind_2(uint unit, QOpenGLTexture::TextureUnitReset reset)
+* QColor borderColor(void)
+* void borderColor_2(float \*border)
+* void borderColor_3(int \*border)
+* void borderColor_4(unsigned int \*border)
+* QOpenGLTexture \* createTextureView(QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat viewFormat, int minimumMipmapLevel, int maximumMipmapLevel, int minimumLayer, int maximumLayer)
+* int depth(void)
+* QOpenGLTexture::DepthStencilMode depthStencilMode(void)
+* void destroy(void)
+* int faces(void)
+* QOpenGLTexture::TextureFormat format(void)
+* void generateMipMaps(void)
+* void generateMipMaps_2(int baseLevel, bool resetBaseLevel)
+* int height(void)
+* bool isAutoMipMapGenerationEnabled(void)
+* bool isBound(void)
+* bool isBound_2(uint unit)
+* bool isCreated(void)
+* bool isTextureView(void)
+* int layers(void)
+* QPair<float, float> levelOfDetailRange(void)
+* float levelofDetailBias(void)
+* QOpenGLTexture::Filter magnificationFilter(void)
+* float maximumAnisotropy(void)
+* float maximumLevelOfDetail(void)
+* int maximumMipLevels(void)
+* float minimumLevelOfDetail(void)
+* int mipBaseLevel(void)
+* int mipMaxLevel(void)
+* void release(void)
+* void release_2(uint unit, QOpenGLTexture::TextureUnitReset reset)
+* void setBorderColor(QColor color)
+* void setBorderColor_4(uint r, uint g, uint b, uint a)
+* void setCompressedData_4(int mipLevel, int dataSize, void \*data, QOpenGLPixelTransferOptions \* options)
+* void setCompressedData_5(int dataSize, void \*data, QOpenGLPixelTransferOptions \* options)
+* void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void \*data, QOpenGLPixelTransferOptions \* options)
+* void setData_4(int mipLevel, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void \*data, QOpenGLPixelTransferOptions \* options)
+* void setData_5(QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, void \*data, QOpenGLPixelTransferOptions \* options)
+* void setData_6(QImage image, QOpenGLTexture::MipMapGeneration genMipMaps)
+* void setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode)
+* void setLayers(int layers)
+* void setLevelOfDetailRange(float min, float max)
+* void setLevelofDetailBias(float bias)
+* void setMagnificationFilter(QOpenGLTexture::Filter filter)
+* void setMaximumAnisotropy(float anisotropy)
+* void setMaximumLevelOfDetail(float value)
+* void setMinMagFilters(QOpenGLTexture::Filter minificationQOpenGLTexture::Filter, QOpenGLTexture::Filter magnificationQOpenGLTexture::Filter)
+* void setMinificationFilter(QOpenGLTexture::Filter filter)
+* void setMinimumLevelOfDetail(float value)
+* void setMipBaseLevel(int baseLevel)
+* void setMipLevelRange(int baseLevel, int maxLevel)
+* void setMipLevels(int levels)
+* void setMipMaxLevel(int maxLevel)
+* void setSwizzleMask(QOpenGLTexture::SwizzleComponent component, QOpenGLTexture::SwizzleValue value)
+* void setSwizzleMask_2(QOpenGLTexture::SwizzleValue r, QOpenGLTexture::SwizzleValue g, QOpenGLTexture::SwizzleValue b, QOpenGLTexture::SwizzleValue a)
+* void setWrapMode(QOpenGLTexture::WrapMode mode)
+* void setWrapMode_2(QOpenGLTexture::CoordinateDirection direction, QOpenGLTexture::WrapMode mode)
+* QOpenGLTexture::SwizzleValue swizzleMask(QOpenGLTexture::SwizzleComponent component)
+* int width(void)
+* QOpenGLTexture::WrapMode wrapMode(QOpenGLTexture::CoordinateDirection direction)
+* GLuint boundTextureId(QOpenGLTexture::BindingTarget target)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLTimerQuery クラス
+
+QOpenGLTimerQuery クラス
+========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopengltimerquery.html
+
+
+仮引数 : QObject \*
+
+* void begin(void)
+* bool create(void)
+* void destroy(void)
+* void end(void)
+* bool isCreated(void)
+* bool isResultAvailable(void)
+* GLuint objectId(void)
+* void recordTimestamp(void)
+* GLuint64 waitForResult(void)
+* GLuint64 waitForTimestamp(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLVersionProfile クラス
+
+QOpenGLVersionProfile クラス
+============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglversionprofile.html
+
+
+仮引数 : void
+
+* bool hasProfiles(void)
+* bool isLegacyVersion(void)
+* bool isValid(void)
+* QSurfaceFormat::OpenGLContextProfile profile(void)
+* void setProfile(QSurfaceFormat::OpenGLContextProfile profile)
+* void setVersion(int majorVersion, int minorVersion)
+* QPair<int, int> version(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLVertexArrayObject クラス
+
+QOpenGLVertexArrayObject クラス
+===============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglvertexarrayobject.html
+
+
+仮引数 : QObject \*
+
+* void bind(void)
+* bool create(void)
+* void destroy(void)
+* bool isCreated(void)
+* GLuint objectId(void)
+* void release(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOpenGLWidget クラス
+
+QOpenGLWidget クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qopenglwidget.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* void geteventparameters(void)
+* void setInitEvent(const char \*cStr)
+* const char \*getInitEvent(void)
+* void setPaintEvent(const char \*cStr)
+* const char \*getPaintEvent(void)
+* void setResizeEvent(const char \*cStr)
+* const char \*getResizeEvent(void)
+* QOpenGLContext \* context(void)
+* GLuint defaultFramebufferObject(void)
+* void doneCurrent(void)
+* QSurfaceFormat format(void)
+* QImage grabFramebuffer(void)
+* bool isValid(void)
+* void makeCurrent(void)
+* void setFormat(QSurfaceFormat format)
+* QOpenGLWidget::UpdateBehavior updateBehavior(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QOrbitCameraController クラス
+
+QOrbitCameraController クラス
+=============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qorbitcameracontroller.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QAbstractCameraController
+
+* void setZoomInLimit(float zoomInLimit)
+* float zoomInLimit(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPageSetupDialog クラス
+
+QPageSetupDialog クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpagesetupdialog.html
+
+
+仮引数 : QPrinter \*,QWidget \*
+
+
+親クラス : QDialog
+
+* void open(QObject \* receiver, char \* member)
+* QPrinter \* printer(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPaintDevice クラス
+
+QPaintDevice クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpaintdevice.html
+
+* int colorCount(void)
+* int depth(void)
+* int devicePixelRatio(void)
+* int heightMM(void)
+* int logicalDpiX(void)
+* int logicalDpiY(void)
+* QPaintEngine \* paintEngine(void)
+* bool paintingActive(void)
+* int physicalDpiX(void)
+* int physicalDpiY(void)
+* int width(void)
+* int widthMM(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPainter クラス
+
+QPainter クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpainter.html
+
+
+仮引数 : void
+
+* QBrush background(void)
+* int backgroundMode(void)
+* bool begin(QPaintDevice \*device)
+* void beginNativePainting(void)
+* QRect boundingRect(int x, int y, int w, int h, int flags, QString text)
+* QBrush brush(void)
+* QPoint brushOrigin(void)
+* QRectF clipBoundingRect(void)
+* QPainterPath clipPath(void)
+* QRegion clipRegion(void)
+* QTransform combinedTransform(void)
+* int compositionMode(void)
+* QPaintDevice \*device(void)
+* QTransform deviceTransform(void)
+* void drawArc(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawChord(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawEllipse(int x, int y, int width, int height)
+* void drawGlyphRun(QPointF  position,  QGlyphRun  glyphs)
+* void drawImage(int x, int y,  QImage image)
+* void drawLine(int x1, int y1, int x2, int y2)
+* void drawLines(QLine \*lines, int lineCount)
+* void drawPath(QPainterPath path)
+* void drawPicture(int x, int y,  QPicture  picture)
+* void drawPie(int x, int y, int width, int height, int startAngle, int spanAngle)
+* void drawPixmap(int x, int y,  QPixmap)
+* void drawPoint(int x, int y)
+* void drawRect(int x, int y, int width, int height)
+* void drawRects(QRectF \*rectangles, int rectCount)
+* void drawRoundedRect(int x, int y, int w, int h, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
+* void drawStaticText(int left, int top,  QStaticText  staticText)
+* void drawText(int x, int y, QString  text)
+* void drawTiledPixmap(int x, int y, int width, int height,  QPixmap  pixmap, int sx, int sy)
+* bool end(void) # In RingQt use : bool endpaint(void)
+* void endNativePainting(void)
+* void eraseRect(int x, int y, int width, int height)
+* void fillPath(QPainterPath  path,  QBrush  brush)
+* void fillRect(int x, int y, int width, int height, QBrush)
+* QFont font(void)
+* QFontInfo fontInfo(void)
+* bool hasClipping(void)
+* void initFrom(QWidget \*widget)
+* bool isActive(void)
+* int layoutDirection(void)
+* double opacity(void)
+* QPaintEngine \*paintEngine(void)
+* QPen pen(void)
+* int renderHints(void)
+* void resetTransform(void)
+* void restore(void)
+* void rotate(qreal angle)
+* void save(void)
+* void scale(double sx, double sy)
+* void setBackground(QBrush  brush)
+* void setBackgroundMode(Qt::BGMode mode)
+* void setBrush(QBrush brush)
+* void setBrushOrigin(int x, int y)
+* void setClipPath(QPainterPath  path, Qt::ClipOperation operation)
+* void setClipRect(int x, int y, int width, int height, Qt::ClipOperation operation)
+* void setClipRegion(QRegion  region, Qt::ClipOperation operation)
+* void setClipping(bool enable)
+* void setCompositionMode(QPainter::CompositionMode mode)
+* void setFont(QFont font)
+* void setLayoutDirection(Qt::LayoutDirection direction)
+* void setOpacity(qreal opacity)
+* void setPen(QPen pen)
+* void setRenderHint(QPainter::RenderHint hint, bool on)
+* void setTransform(QTransform  transform, bool combine)
+* void setViewTransformEnabled(bool enable)
+* void setViewport(int x, int y, int width, int height)
+* void setWindow(int x, int y, int width, int height)
+* void setWorldMatrixEnabled(bool enable)
+* void setWorldTransform( QTransform  matrix, bool combine)
+* void shear(double sh, double sv)
+* void strokePath(QPainterPath  path,  QPen  pen)
+* bool testRenderHint(QPainter::RenderHint hint)
+* QTransform transform(void)
+* void translate(double dx, double dy)
+* bool viewTransformEnabled(void)
+* QRect viewport(void)
+* QRect window(void)
+* bool worldMatrixEnabled(void)
+* QTransform  worldTransform(void)
+* void drawPolygon(List \*pPoints, Qt::FillRule fillRule)
+* void drawConvexPolygon(List \*pPoints)
+* void drawPoints(List \*pPoints)
+* void drawPolyline(List \*pPoints)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPainter2 クラス
+
+QPainter2 クラス
+================
+
+
+仮引数 : QPaintDevice \*
+
+
+親クラス : QPainter
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QPainterPath クラス
+
+QPainterPath クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpainterpath.html
+
+
+仮引数 : void
+
+* void addEllipse(qreal x, qreal y, qreal width, qreal height)
+* void addPath(QPainterPath)
+* void addPolygon(QPolygonF)
+* void addRect(qreal x, qreal y, qreal width, qreal height)
+* void addRegion(QRegion)
+* void addRoundedRect(qreal x, qreal y, qreal w, qreal h, qreal xRadius, qreal yRadius, Qt::SizeMode mode)
+* void addText(qreal x, qreal y, QFont, QString)
+* qreal angleAtPercent(qreal t)
+* void arcMoveTo(qreal x, qreal y, qreal width, qreal height, qreal angle)
+* void arcTo(qreal x, qreal y, qreal width, qreal height, qreal startAngle, qreal sweepLength)
+* QRectF boundingRect(void)
+* void closeSubpath(void)
+* void connectPath(QPainterPath)
+* bool contains(QPointF)
+* QRectF controlPointRect(void)
+* void cubicTo(qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY)
+* QPointF currentPosition(void)
+* QPainterPath::Element elementAt(int index)
+* int elementCount(void)
+* Qt::FillRule fillRule(void)
+* QPainterPath intersected(QPainterPath)
+* bool intersects(QRectF)
+* bool isEmpty(void)
+* qreal length(void)
+* void lineTo(qreal x, qreal y)
+* void moveTo(qreal x, qreal y)
+* qreal percentAtLength(qreal len)
+* QPointF pointAtPercent(qreal t)
+* void quadTo(qreal cx, qreal cy, qreal endPointX, qreal endPointY)
+* void setElementPositionAt(int index, qreal x, qreal y)
+* void setFillRule(Qt::FillRule fillRule)
+* QPainterPath simplified(void)
+* qreal slopeAtPercent(qreal t)
+* QPainterPath subtracted(QPainterPath)
+* void swap(QPainterPath)
+* QPolygonF toFillPolygon(QTransform)
+* QPainterPath toReversed(void)
+* void translate(qreal dx, qreal dy)
+* QPainterPath translated(qreal dx, qreal dy)
+* QPainterPath united(QPainterPath)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPen クラス
+
+QPen クラス
+===========
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpen.html
+
+
+仮引数 : void
+
+* QBrush brush(void)
+* int capStyle(void)
+* QColor color(void)
+* double dashOffset(void)
+* bool isCosmetic(void)
+* bool isSolid(void)
+* int joinStyle(void)
+* double miterLimit(void)
+* void setBrush(QBrush)
+* void setCapStyle(Qt::PenCapStyle style)
+* void setColor(QColor)
+* void setCosmetic(bool cosmetic)
+* void setDashOffset(double offset)
+* void setJoinStyle(Qt::PenJoinStyle style)
+* void setMiterLimit(double limit)
+* void setStyle(Qt::PenStyle style)
+* void setWidth(int width)
+* void setWidthF(double width)
+* int style(void)
+* void swap(QPen)
+* int width(void)
+* double widthF(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPerVertexColorMaterial クラス
+
+QPerVertexColorMaterial クラス
+==============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qpervertexcolormaterial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QPhongMaterial クラス
+
+QPhongMaterial クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qphongmaterial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* QColor ambient(void)
+* QColor diffuse(void)
+* float shininess(void)
+* QColor specular(void)
+* void setAmbient(QColor ambient)
+* void setDiffuse(QColor diffuse)
+* void setShininess(float shininess)
+* void setSpecular(QColor specular)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPicture クラス
+
+QPicture クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpicture.html
+
+
+仮引数 : void
+
+* QRect boundingRect(void)
+* const char \*data(void)
+* bool isNull(void)
+* bool load(QString, const char \*format) # In RingQt use : bool loadfile(QString, const char \*format)
+* bool play(QPainter \*painter)
+* bool save(QString , const char \*format)
+* void setBoundingRect(QRect)
+* int size(void)
+* void swap(QPicture)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPixmap クラス
+
+QPixmap クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpixmap.html
+
+
+仮引数 : const char \*
+
+* QPixmap copy(int x, int y, int width, int height)
+* QPixmap scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* int width(void)
+* int height(void)
+* QBitmap createMaskFromColor(QColor , Qt::MaskMode)
+* QBitmap mask(void)
+* void setMask(QBitmap)
+* void fill(QColor)
+* QPixmap fromImage(QImage,Qt::ImageConversionFlags)
+* bool load(QString, const char \*, Qt::ImageConversionFlags )
+* qint64 cacheKey(void)
+* bool convertFromImage(QImage image, Qt::ImageConversionFlags flags)
+* QPixmap copy_2(QRect rectangle)
+* QBitmap createHeuristicMask(bool clipTight)
+* int depth(void)
+* void detach(void)
+* qreal devicePixelRatio(void)
+* bool hasAlpha(void)
+* bool hasAlphaChannel(void)
+* bool isNull(void)
+* bool isQBitmap(void)
+* bool loadFromData(uchar \*data, uint len, char \*format, Qt::ImageConversionFlags flags)
+* bool loadFromData_2(QByteArray data, char \*format, Qt::ImageConversionFlags flags)
+* QRect rect(void)
+* bool save(QString fileName, char \*format, int quality)
+* bool save_2(QIODevice \*device, char \*format, int quality)
+* QPixmap scaled_2(QSize size, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode)
+* QPixmap scaledToHeight(int height, Qt::TransformationMode mode)
+* QPixmap scaledToWidth(int width, Qt::TransformationMode mode)
+* void scroll(int dx, int dy, int x, int y, int width, int height, QRegion \*exposed)
+* void scroll_2(int dx, int dy, QRect rect, QRegion \*exposed)
+* void setDevicePixelRatio(qreal scaleFactor)
+* QSize size(void)
+* void swap(QPixmap other)
+* QImage toImage(void)
+* QPixmap transformed(QTransform transform, Qt::TransformationMode mode)
+* QPixmap transformed_2(QMatrix matrix, Qt::TransformationMode mode)
+* int defaultDepth(void)
+* QPixmap fromImage_2(QImage image, Qt::ImageConversionFlags flags)
+* QPixmap fromImageReader(QImageReader \*imageReader, Qt::ImageConversionFlags flags)
+* QTransform trueMatrix(QTransform matrix, int width, int height)
+* QMatrix trueMatrix_2(QMatrix m, int w, int h)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPixmap2 クラス
+
+QPixmap2 クラス
+===============
+
+
+仮引数 : int width, int height
+
+
+親クラス : QPixmap
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QPlainTextEdit クラス
+
+QPlainTextEdit クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qplaintextedit.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractScrollArea
+
+* QString anchorAt(QPoint pos)
+* bool backgroundVisible(void)
+* int blockCount(void)
+* bool canPaste(void)
+* bool centerOnScroll(void)
+* QMenu \* createStandardContextMenu(void)
+* QTextCharFormat currentCharFormat(void)
+* QTextCursor cursorForPosition(QPoint pos)
+* QRect cursorRect(QTextCursor cursor)
+* QRect cursorRect_2(void)
+* int cursorWidth(void)
+* QTextDocument \* document(void)
+* QString documentTitle(void)
+* void ensureCursorVisible(void)
+* QList<QTextEdit::ExtraSelection> extraSelections(void)
+* bool find(QString exp, QTextDocument::FindFlags options)
+* bool isReadOnly(void)
+* bool isUndoRedoEnabled(void)
+* QPlainTextEdit::LineWrapMode lineWrapMode(void)
+* int maximumBlockCount(void)
+* void mergeCurrentCharFormat(QTextCharFormat modifier)
+* void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode)
+* bool overwriteMode(void)
+* void print(QPagedPaintDevice \*printer)
+* void setBackgroundVisible(bool visible)
+* void setCenterOnScroll(bool enabled)
+* void setCurrentCharFormat(QTextCharFormat format)
+* void setCursorWidth(int width)
+* void setDocument(QTextDocument \*document)
+* void setDocumentTitle(QString title)
+* void setExtraSelections(QList<QTextEdit::ExtraSelection> selections)
+* void setLineWrapMode(QPlainTextEdit::LineWrapMode mode)
+* void setMaximumBlockCount(int maximum)
+* void setOverwriteMode(bool overwrite)
+* void setReadOnly(bool ro)
+* void setTabChangesFocus(bool b)
+* void setTabStopWidth(int width)
+* void setTextCursor(QTextCursor cursor)
+* void setTextInteractionFlags(Qt::TextInteractionFlags flags)
+* void setUndoRedoEnabled(bool enable)
+* void setWordWrapMode(QTextOption::WrapMode policy)
+* bool tabChangesFocus(void)
+* int tabStopWidth(void)
+* QTextCursor textCursor(void)
+* Qt::TextInteractionFlags textInteractionFlags(void)
+* QString toPlainText(void)
+* QTextOption::WrapMode wordWrapMode(void)
+* void appendHtml(QString html)
+* void appendPlainText(QString text)
+* void centerCursor(void)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void insertPlainText(QString text)
+* void paste(void)
+* void redo(void)
+* void selectAll(void)
+* void setPlainText(QString text)
+* void undo(void)
+* void zoomIn(int range)
+* void zoomOut(int range)
+* void setblockCountChangedEvent(const char \*cStr)
+* void setcopyAvailableEvent(const char \*cStr)
+* void setcursorPositionChangedEvent(const char \*cStr)
+* void setmodificationChangedEvent(const char \*cStr)
+* void setredoAvailableEvent(const char \*cStr)
+* void setselectionChangedEvent(const char \*cStr)
+* void settextChangedEvent(const char \*cStr)
+* void setundoAvailableEvent(const char \*cStr)
+* void setupdateRequestEvent(const char \*cStr)
+* const char \*getblockCountChangedEvent(void)
+* const char \*getcopyAvailableEvent(void)
+* const char \*getcursorPositionChangedEvent(void)
+* const char \*getmodificationChangedEvent(void)
+* const char \*getredoAvailableEvent(void)
+* const char \*getselectionChangedEvent(void)
+* const char \*gettextChangedEvent(void)
+* const char \*getundoAvailableEvent(void)
+* const char \*getupdateRequestEvent(void)
+* void cyanline(void)
+* void setactivelinecolor(QColor)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPlaneMesh クラス
+
+QPlaneMesh クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qplanemesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float height(void)
+* QSize meshResolution(void)
+* bool mirrored(void)
+* float width(void)
+* void setHeight(float height)
+* void setMeshResolution(QSize resolution)
+* void setMirrored(bool mirrored)
+* void setWidth(float width)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPoint クラス
+
+QPoint クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpoint.html
+
+
+仮引数 : void
+
+* bool isNull(void)
+* int manhattanLength(void)
+* int rx(void)
+* int ry(void)
+* void setX(int x)
+* void setY(int y)
+* int x(void)
+* int y(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPointF クラス
+
+QPointF クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpointf.html
+
+
+仮引数 : void
+
+* bool isNull(void)
+* qreal manhattanLength(void)
+* qreal rx(void)
+* qreal ry(void)
+* void setX(qreal x)
+* void setY(qreal y)
+* QPoint toPoint(void)
+* qreal x(void)
+* qreal y(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPointLight クラス
+
+QPointLight クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qpointlight.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float constantAttenuation(void)
+* float linearAttenuation(void)
+* float quadraticAttenuation(void)
+* void setConstantAttenuation(float value)
+* void setLinearAttenuation(float value)
+* void setQuadraticAttenuation(float value)
+* void setColor(QColor)
+* void setIntensity(float intensity)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPrintDialog クラス
+
+QPrintDialog クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qprintdialog.html
+
+
+仮引数 : QPrinter \*,QWidget \*
+
+
+親クラス : QAbstractPrintDialog
+
+* void open(QObject \* receiver, char \* member)
+* QAbstractPrintDialog::PrintDialogOptions options(void)
+* QPrinter \* printer(void)
+* void setOption(QAbstractPrintDialog::PrintDialogOption option, bool on)
+* void setOptions(QAbstractPrintDialog::PrintDialogOptions options)
+* bool testOption(QAbstractPrintDialog::PrintDialogOption option)
+* void setacceptedEvent(const char \*)
+* const char \*getacceptedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPrintPreviewDialog クラス
+
+QPrintPreviewDialog クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qprintpreviewdialog.html
+
+
+仮引数 : QPrinter \*
+
+
+親クラス : QDialog
+
+* void open(QObject \* receiver, char \* member)
+* QPrinter \* printer(void)
+* void setpaintRequestedEvent(const char \*)
+* const char \*getpaintRequestedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPrintPreviewWidget クラス
+
+QPrintPreviewWidget クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qprintpreviewwidget.html
+
+
+仮引数 : QPrinter \*
+
+
+親クラス : QWidget
+
+* int currentPage(void)
+* QPrinter::Orientation orientation(void)
+* int pageCount(void)
+* QPrintPreviewWidget::ViewMode viewMode(void)
+* qreal zoomFactor(void)
+* QPrintPreviewWidget::ZoomMode zoomMode(void)
+* void fitInView(void)
+* void fitToWidth(void)
+* void print(void)
+* void setAllPagesViewMode(void)
+* void setCurrentPage(int page)
+* void setFacingPagesViewMode(void)
+* void setLandscapeOrientation(void)
+* void setOrientation(QPrinter::Orientation orientation)
+* void setPortraitOrientation(void)
+* void setSinglePageViewMode(void)
+* void setViewMode(QPrintPreviewWidget::ViewMode mode)
+* void setZoomFactor(qreal factor)
+* void setZoomMode(QPrintPreviewWidget::ZoomMode zoomMode)
+* void updatePreview(void)
+* void zoomIn(qreal factor)
+* void zoomOut(qreal factor)
+* void setpaintRequestedEvent(const char \*)
+* void setpreviewChangedEvent(const char \*)
+* const char \*getpaintRequestedEvent(void)
+* const char \*getpreviewChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPrinter クラス
+
+QPrinter クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qprinter.html
+
+
+仮引数 : QPrinter::PrinterMode
+
+* bool abort(void)
+* bool collateCopies(void)
+* int colorMode(void)
+* int copyCount(void)
+* QString creator(void)
+* QString docName(void)
+* int duplex(void)
+* bool fontEmbeddingEnabled(void)
+* int fromPage(void)
+* bool fullPage(void)
+* bool isValid(void)
+* QString outputFileName(void)
+* int outputFormat(void)
+* QRectF pageRect(QPrinter::Unit unit)
+* QRectF paperRect(QPrinter::Unit unit)
+* int paperSource(void)
+* QPrintEngine \*printEngine(void)
+* QString printProgram(void)
+* int printRange(void)
+* QString printerName(void)
+* QString printerSelectionOption(void)
+* int printerState(void)
+* int resolution(void)
+* void setCollateCopies(bool collate)
+* void setColorMode(QPrinter::ColorMode newColorMode)
+* void setCopyCount(int count)
+* void setCreator(QString)
+* void setDocName(QString)
+* void setDuplex(QPrinter::DuplexMode duplex)
+* void setFontEmbeddingEnabled(bool enable)
+* void setFromTo(int from, int to)
+* void setFullPage(bool fp)
+* void setOutputFileName(QString)
+* void setOutputFormat(QPrinter::OutputFormat format)
+* void setPrintProgram(QString)
+* void setPrintRange(QPrinter::PrintRange)
+* void setPrinterName(QString)
+* void setPrinterSelectionOption(QString)
+* void setResolution(int dpi)
+* bool supportsMultipleCopies(void)
+* int toPage(void)
+* bool newPage(void)
+* QPaintEngine \*paintEngine(void)
+* void setPageSizeMM(QSizeF)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPrinterInfo クラス
+
+QPrinterInfo クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qprinterinfo.html
+
+
+仮引数 : void
+
+* QString description(void)
+* bool isDefault(void)
+* bool isNull(void)
+* QString location(void)
+* QString makeAndModel(void)
+* QString printerName(void)
+* QPrinterInfo printerInfo(QString printerName
+
+.. index::
+       pair: RingQt クラスリファレンス; QProcess クラス
+
+QProcess クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qprocess.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QIODevice
+
+* QStringList arguments(void)
+* void closeReadChannel(QProcess::ProcessChannel channel)
+* void closeWriteChannel(void)
+* QProcess::ProcessError error(void)
+* int exitCode(void)
+* QProcess::ExitStatus exitStatus(void)
+* QProcess::InputChannelMode inputChannelMode(void)
+* QProcess::ProcessChannelMode processChannelMode(void)
+* QProcessEnvironment processEnvironment(void)
+* QString program(void)
+* QByteArray readAllStandardError(void)
+* QByteArray readAllStandardOutput(void)
+* QProcess::ProcessChannel readChannel(void)
+* void setArguments( QStringList  arguments)
+* void setInputChannelMode(QProcess::InputChannelMode mode)
+* void setProcessChannelMode(QProcess::ProcessChannelMode mode)
+* void setProcessEnvironment( QProcessEnvironment  environment)
+* void setProgram( QString  program)
+* void setReadChannel(QProcess::ProcessChannel channel)
+* void setStandardErrorFile( QString  fileName, QIODevice::OpenMode mode )
+* void setStandardInputFile( QString  fileName)
+* void setStandardOutputFile( QString  fileName, QIODevice::OpenMode mode )
+* void setStandardOutputProcess(QProcess \*destination)
+* void setWorkingDirectory( QString  dir)
+* void start( QString  program,  QStringList  arguments, QIODevice::OpenMode mode )
+* void start_2( QString  command, QIODevice::OpenMode mode )
+* void start_3(QIODevice::OpenMode mode )
+* QProcess::ProcessState state(void)
+* bool waitForFinished(int msecs )
+* bool waitForStarted(int msecs )
+* QString workingDirectory(void)
+* void kill(void)
+* void terminate(void)
+* void setreadyReadStandardErrorEvent(const char \*)
+* void setreadyReadStandardOutputEvent(const char \*)
+* const char \*getreadyReadStandardErrorEvent(void)
+* const char \*getreadyReadStandardOutputEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QProgressBar クラス
+
+QProgressBar クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qprogressbar.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* int alignment(void)
+* QString format(void)
+* bool invertedAppearance(void)
+* bool isTextVisible(void)
+* int maximum(void)
+* int minimum(void)
+* int orientation(void)
+* void resetFormat(void)
+* void setAlignment(Qt::AlignmentFlag alignment)
+* void setFormat(QString)
+* void setInvertedAppearance(bool invert)
+* void setTextDirection(QProgressBar::Direction textDirection)
+* void setTextVisible(bool visible)
+* QString text(void)
+* int textDirection(void)
+* int value(void)
+* void reset(void)
+* void setMaximum(int maximum)
+* void setMinimum(int minimum)
+* void setOrientation(Qt::Orientation)
+* void setRange(int minimum, int maximum)
+* void setValue(int value)
+* void setvalueChangedEvent(const char \*)
+* const char \*getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QPushButton クラス
+
+QPushButton クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qpushbutton.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractButton
+
+* void setText(const char \*)
+* void setClickEvent(const char \*)
+* void setIcon(QIcon)
+* void setIconSize(QSize)
+* const char \*getClickEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QQmlEngine クラス
+
+QQmlEngine クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qqmlengine.html
+
+
+仮引数 : QObject \*
+
+* void addImageProvider(QString providerId, QQmlImageProviderBase \*provider)
+* void addImportPath(QString path)
+* void addPluginPath(QString path)
+* QUrl baseUrl(void)
+* void clearComponentCache(void)
+* QQmlImageProviderBase \*imageProvider(QString providerId)
+* QStringList importPathList(void)
+* bool importPlugin(QString filePath, QString uri, QList<QQmlError> \*errors)
+* QQmlIncubationController \*incubationController(void)
+* QNetworkAccessManager \*networkAccessManager(void)
+* QQmlNetworkAccessManagerFactory \*networkAccessManagerFactory(void)
+* QString offlineStorageDatabaseFilePath(QString databaseName)
+* QString offlineStoragePath(void)
+* bool outputWarningsToStandardError(void)
+* QStringList pluginPathList(void)
+* void removeImageProvider(QString providerId)
+* QQmlContext \*rootContext(void)
+* void setBaseUrl(QUrl url)
+* void setImportPathList(QStringList paths)
+* void setIncubationController(QQmlIncubationController \*controller)
+* void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory \*factory)
+* void setOfflineStoragePath(QString dir)
+* void setOutputWarningsToStandardError(bool enabled)
+* void setPluginPathList(QStringList paths)
+* void trimComponentCache(void)
+* void retranslate(void)
+* QQmlContext \* contextForObject(QObject \*object)
+* QQmlEngine::ObjectOwnership objectOwnership(QObject \*object)
+* void setContextForObject(QObject \*object, QQmlContext \*context)
+* void setObjectOwnership(QObject \*object, QQmlEngine::ObjectOwnership ownership)
+
+.. index::
+       pair: RingQt クラスリファレンス; QQmlError クラス
+
+QQmlError クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qqmlerror.html
+
+
+仮引数 : void
+
+* int column(void)
+* QString description(void)
+* bool isValid(void)
+* int line(void)
+* QObject \* object(void)
+* void setColumn(int column)
+* void setDescription(QString description)
+* void setLine(int line)
+* void setObject(QObject \*object)
+* void setUrl(QUrl url)
+* QString toString(void)
+* QUrl url(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QQuaternion クラス
+
+QQuaternion クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qquaternion.html
+
+
+仮引数 : float,float,float,float
+
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QQuaternion normalized(void)
+* QVector3D rotatedVector(QVector3D vector)
+* float scalar(void)
+* void setScalar(float scalar)
+* void setVector(QVector3D vector)
+* void setVector_2(float x, float y, float z)
+* void setX(float x)
+* void setY(float y)
+* void setZ(float z)
+* QVector3D vector(void)
+* float x(void)
+* float y(void)
+* float z(void)
+* QQuaternion fromAxisAndAngle_2(float x, float y, float z, float angle)
+* QQuaternion nlerp(QQuaternion q1, QQuaternion q2, float t)
+* QQuaternion slerp(QQuaternion q1, QQuaternion q2, float t)
+
+.. index::
+       pair: RingQt クラスリファレンス; QQuickView クラス
+
+QQuickView クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qquickview.html
+
+
+仮引数 : void
+
+
+親クラス : QWindow
+
+* QQmlEngine \*engine(void)
+* QList<QQmlError> errors(void)
+* QSize initialSize(void)
+* QQuickWidget::ResizeMode resizeMode(void)
+* QQmlContext \*rootContext(void)
+* QQuickItem \*rootObject(void)
+* void setFormat(QSurfaceFormat format)
+* void setResizeMode(QQuickView::ResizeMode)
+* QUrl source(void)
+* QQuickWidget::Status status(void)
+* void setSource(QUrl url)
+
+.. index::
+       pair: RingQt クラスリファレンス; QQuickWidget クラス
+
+QQuickWidget クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qquickwidget.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* QQmlEngine \*engine(void)
+* QList<QQmlError> errors(void)
+* QSurfaceFormat format(void)
+* QImage grabFramebuffer(void)
+* QSize initialSize(void)
+* QQuickWindow \*quickWindow(void)
+* QQuickWidget::ResizeMode resizeMode(void)
+* QQmlContext \*rootContext(void)
+* QQuickItem \*rootObject(void)
+* void setClearColor(QColor color)
+* void setFormat(QSurfaceFormat format)
+* void setResizeMode(QQuickWidget::ResizeMode)
+* QUrl source(void)
+* QQuickWidget::Status status(void)
+* void setSource(QUrl url)
+* void setsceneGraphErrorEvent(const char \*)
+* void setstatusChangedEvent(const char \*)
+* const char \*getsceneGraphErrorEvent(void)
+* const char \*getstatusChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QRadioButton クラス
+
+QRadioButton クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qradiobutton.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractButton
+
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setclickedEvent(const char \*)
+* void setpressedEvent(const char \*)
+* void setreleasedEvent(const char \*)
+* void settoggledEvent(const char \*)
+* const char \*getclickedEvent(void)
+* const char \*getpressedEvent(void)
+* const char \*getreleasedEvent(void)
+* const char \*gettoggledEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QRect クラス
+
+QRect クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qrect.html
+
+
+仮引数 : void
+
+* void adjust(int dx1, int dy1, int dx2, int dy2)
+* QRect adjusted(int dx1, int dy1, int dx2, int dy2)
+* int bottom(void)
+* QPoint bottomLeft(void)
+* QPoint bottomRight(void)
+* QPoint center(void)
+* bool contains(int x, int y, bool proper)
+* void getCoords(int \*x1, int \*y1, int \*x2, int \*y2)
+* void getRect(int \*x, int \*y, int \*width, int \*height)
+* int  height(void)
+* QRect intersected(QRect)
+* bool intersects(QRect)
+* bool isEmpty(void)
+* bool isNull(void)
+* bool isValid(void)
+* int left(void)
+* void moveBottom(int y)
+* void moveBottomLeft(QPoint)
+* void moveBottomRight(QPoint)
+* void moveCenter(QPoint)
+* void moveLeft(int x)
+* void moveRight(int x)
+* void moveTo(int x, int y)
+* void moveTop(int y)
+* void moveTopLeft(QPoint)
+* void moveTopRight(QPoint)
+* QRect normalized(void)
+* int right(void)
+* void setBottom(int y)
+* void setBottomLeft(QPoint)
+* void setBottomRight(QPoint)
+* void setCoords(int x1, int y1, int x2, int y2)
+* void setHeight(int height)
+* void setLeft(int x)
+* void setRect(int x, int y, int width, int height)
+* void setRight(int x)
+* void setSize(QSize)
+* void setTop(int y)
+* void setTopLeft(QPoint)
+* void setTopRight(QPoint)
+* void setWidth(int width)
+* void setX(int x)
+* void setY(int y)
+* QSize size(void)
+* int top(void)
+* QPoint topLeft(void)
+* QPoint topRight(void)
+* void translate(int dx, int dy)
+* QRect translated(int dx, int dy)
+* QRect united(QRect)
+* int width(void)
+* int x(void)
+* int y(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QRegion クラス
+
+QRegion クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qregion.html
+
+
+仮引数 : void
+
+* QRect boundingRect(void)
+* bool contains(QPoint p)
+* bool contains_2(QRect r)
+* QRegion intersected(QRegion r)
+* QRegion intersected_2(QRect rect)
+* bool intersects(QRegion region)
+* bool intersects_2(QRect rect)
+* bool isEmpty(void)
+* bool isNull(void)
+* int rectCount(void)
+* QVector<QRect> rects(void)
+* void setRects(QRect \*rects, int number)
+* QRegion subtracted(QRegion r)
+* void swap(QRegion other)
+* void translate(int dx, int dy)
+* void translate_2(QPoint point)
+* QRegion translated(int dx, int dy)
+* QRegion translated_2(QPoint p)
+* QRegion united(QRegion r)
+* QRegion united_2(QRect rect)
+* QRegion xored(QRegion r)
+
+.. index::
+       pair: RingQt クラスリファレンス; QRegularExpression クラス
+
+QRegularExpression クラス
+=========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qregularexpression.html
+
+
+仮引数 : void
+
+* int captureCount(void)
+* QString errorString(void)
+* QRegularExpressionMatchIterator globalMatch(QString  subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions)
+* bool isValid(void)
+* QRegularExpressionMatch match(QString  subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions)
+* QStringList namedCaptureGroups(void)
+* QString pattern(void)
+* int patternErrorOffset(void)
+* QRegularExpression::PatternOptions patternOptions(void)
+* void setPattern(QString  pattern)
+* void setPatternOptions(QRegularExpression::PatternOptions options)
+* void swap(QRegularExpression  other)
+
+.. index::
+       pair: RingQt クラスリファレンス; QRegularExpressionMatch クラス
+
+QRegularExpressionMatch クラス
+==============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qregularexpressionmatch.html
+
+
+仮引数 : void
+
+* QString captured(int nth)
+* QString captured_2(const QString  name)
+* int capturedEnd(int nth)
+* int capturedEnd_2(const QString  name)
+* int capturedLength(int nth)
+* int capturedLength_2(const QString  name)
+* QStringRef capturedRef(int nth)
+* QStringRef capturedRef_2(const QString  name)
+* int capturedStart(int nth)
+* int capturedStart_2(const QString  name)
+* QStringList capturedTexts(void)
+* bool hasMatch(void)
+* bool hasPartialMatch(void)
+* bool isValid(void)
+* int lastCapturedIndex(void)
+* QRegularExpression::MatchOptions matchOptions(void)
+* QRegularExpression::MatchType matchType(void)
+* QRegularExpression regularExpression(void)
+* void swap(QRegularExpressionMatch  other)
+
+.. index::
+       pair: RingQt クラスリファレンス; QRegularExpressionMatchIterator クラス
+
+QRegularExpressionMatchIterator クラス
+======================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qregularexpressionmatchiterator.html
+
+
+仮引数 : void
+
+* bool hasNext(void)
+* bool isValid(void)
+* QRegularExpression::MatchOptions matchOptions(void)
+* QRegularExpression::MatchType matchType(void)
+* QRegularExpressionMatch next(void) # In RingQt use : QRegularExpressionMatch nextitem(void)
+* QRegularExpressionMatch peekNext(void)
+* QRegularExpression regularExpression(void)
+* void swap(QRegularExpressionMatchIterator other)
+
+.. index::
+       pair: RingQt クラスリファレンス; QRenderAspect クラス
+
+QRenderAspect クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qrenderaspect.html
+
+
+仮引数 : QObject \*
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QRenderPass クラス
+
+QRenderPass クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qrenderpass.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* void addFilterKey(Qt3DRender::QFilterKey \*filterKey)
+* void addParameter(Qt3DRender::QParameter \*parameter)
+* void addRenderState(Qt3DRender::QRenderState \*state)
+* QVector<Qt3DRender::QFilterKey \*> filterKeys(void)
+* QVector<Qt3DRender::QParameter \*> parameters(void)
+* void removeFilterKey(Qt3DRender::QFilterKey \*filterKey)
+* void removeParameter(Qt3DRender::QParameter \*parameter)
+* void removeRenderState(Qt3DRender::QRenderState \*state)
+* QVector<Qt3DRender::QRenderState \*> renderStates(void)
+* Qt3DRender::QShaderProgram \* shaderProgram(void)
+* void setShaderProgram(Qt3DRender::QShaderProgram \*shaderProgram)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSceneLoader クラス
+
+QSceneLoader クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qsceneloader.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QComponent
+
+* Qt3DCore::QComponent \* component(QString entityName, Qt3DRender::QSceneLoader::ComponentType componentType)
+* Qt3DCore::QEntity \* entity(QString entityName)
+* QStringList entityNames(void)
+* QUrl source(void)
+* Qt3DRender::QSceneLoader::Status status(void)
+* void setSource(QUrl arg)
+
+.. index::
+       pair: RingQt クラスリファレンス; QScreen クラス
+
+QScreen クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qscreen.html
+
+* int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
+* QRect availableGeometry(void)
+* QSize availableSize(void)
+* QRect availableVirtualGeometry(void)
+* QSize availableVirtualSize(void)
+* int depth(void)
+* qreal devicePixelRatio(void)
+* QRect geometry(void)
+* QPixmap grabWindow(int window, int x, int y, int width, int height)
+* QPixmap grabWindow_2(int window)
+* QPlatformScreen \* handle(void)
+* bool isLandscape(Qt::ScreenOrientation o)
+* bool isPortrait(Qt::ScreenOrientation o)
+* qreal logicalDotsPerInch(void)
+* qreal logicalDotsPerInchX(void)
+* qreal logicalDotsPerInchY(void)
+* QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, QRect rect)
+* QString name(void)
+* Qt::ScreenOrientation nativeOrientation(void)
+* Qt::ScreenOrientation orientation(void)
+* Qt::ScreenOrientations orientationUpdateMask(void)
+* qreal physicalDotsPerInch(void)
+* qreal physicalDotsPerInchX(void)
+* qreal physicalDotsPerInchY(void)
+* QSizeF physicalSize(void)
+* Qt::ScreenOrientation primaryOrientation(void)
+* qreal refreshRate(void)
+* void setOrientationUpdateMask(Qt::ScreenOrientations mask)
+* QSize size(void)
+* QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, QRect target)
+
+.. index::
+       pair: RingQt クラスリファレンス; QScrollArea クラス
+
+QScrollArea クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qscrollarea.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractScrollArea
+
+* Qt::Alignment alignment(void)
+* void ensureVisible(int x, int y, int xmargin , int ymargin )
+* void ensureWidgetVisible(QWidget \*childWidget, int xmargin , int ymargin )
+* void setAlignment(Qt::Alignment)
+* void setWidget(QWidget \*widget)
+* void setWidgetResizable(bool resizable)
+* QWidget \*takeWidget(void)
+* QWidget \*widget(void)
+* bool widgetResizable(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QScrollBar クラス
+
+QScrollBar クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qscrollbar.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractSlider
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QSerialPort クラス
+
+QSerialPort クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qserialport.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QIODevice
+
+* qint32 baudRate(QSerialPort::Directions directions)
+* bool clear(QSerialPort::Directions directions)
+* void clearError(void)
+* QSerialPort::DataBits dataBits(void)
+* QSerialPort::SerialPortError error(void)
+* QSerialPort::FlowControl flowControl(void)
+* bool flush(void)
+* void \*handle(void)
+* bool isDataTerminalReady(void)
+* bool isRequestToSend(void)
+* QSerialPort::Parity parity(void)
+* QSerialPort::PinoutSignals pinoutSignals(void)
+* QString portName(void)
+* qint64 readBufferSize(void)
+* bool setBaudRate(qint32 baudRate, QSerialPort::Directions directions)
+* bool setBreakEnabled(bool set)
+* bool setDataBits(QSerialPort::DataBits dataBits)
+* bool setDataTerminalReady(bool set)
+* bool setFlowControl(QSerialPort::FlowControl flowControl)
+* bool setParity(QSerialPort::Parity parity)
+* void setPort(QSerialPortInfo serialPortInfo)
+* void setPortName(QString name)
+* void setReadBufferSize(qint64 size)
+* bool setRequestToSend(bool set)
+* bool setStopBits(QSerialPort::StopBits stopBits)
+* QSerialPort::StopBits stopBits(void)
+* void setbaudRateChangedEvent(const char \*)
+* void setbreakEnabledChangedEvent(const char \*)
+* void setdataBitsChangedEvent(const char \*)
+* void setdataTerminalReadyChangedEvent(const char \*)
+* void seterrorEvent(const char \*)
+* void setflowControlChangedEvent(const char \*)
+* void setparityChangedEvent(const char \*)
+* void setrequestToSendChangedEvent(const char \*)
+* void setstopBitsChangedEvent(const char \*)
+* const char \*getbaudRateChangedEvent(void)
+* const char \*getbreakEnabledChangedEvent(void)
+* const char \*getdataBitsChangedEvent(void)
+* const char \*getdataTerminalReadyChangedEvent(void)
+* const char \*geterrorEvent(void)
+* const char \*getflowControlChangedEvent(void)
+* const char \*getparityChangedEvent(void)
+* const char \*getrequestToSendChangedEvent(void)
+* const char \*getstopBitsChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSerialPortInfo クラス
+
+QSerialPortInfo クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qserialportinfo.html
+
+
+仮引数 : void
+
+* QString description(void)
+* bool hasProductIdentifier(void)
+* bool hasVendorIdentifier(void)
+* bool isBusy(void)
+* bool isNull(void)
+* QString manufacturer(void)
+* QString portName(void)
+* quint16 productIdentifier(void)
+* void swap(QSerialPortInfo other)
+* QString systemLocation(void)
+* quint16 vendorIdentifier(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSize クラス
+
+QSize クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsize.html
+
+
+仮引数 : int width, int height
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QSkyboxEntity クラス
+
+QSkyboxEntity クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qskyboxentity.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QEntity
+
+* QString baseName(void)
+* QString extension(void)
+* bool isGammaCorrectEnabled(void)
+* void setBaseName(QString baseName)
+* void setExtension(QString extension)
+* void setGammaCorrectEnabled(bool enabled)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSlider クラス
+
+QSlider クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qslider.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractSlider
+
+* void setTickInterval(int ti)
+* void setTickPosition(QSlider::TickPosition position)
+* int tickInterval(void)
+* int tickPosition(void)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setactionTriggeredEvent(const char \*)
+* void setrangeChangedEvent(const char \*)
+* void setsliderMovedEvent(const char \*)
+* void setsliderPressedEvent(const char \*)
+* void setsliderReleasedEvent(const char \*)
+* void setvalueChangedEvent(const char \*)
+* const char \*getactionTriggeredEvent(void)
+* const char \*getrangeChangedEvent(void)
+* const char \*getsliderMovedEvent(void)
+* const char \*getsliderPressedEvent(void)
+* const char \*getsliderReleasedEvent(void)
+* const char \*getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSphereMesh クラス
+
+QSphereMesh クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qspheremesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* bool generateTangents(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setGenerateTangents(bool gen)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSpinBox クラス
+
+QSpinBox クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qspinbox.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* QString cleanText(void)
+* int displayIntegerBase(void)
+* int maximum(void)
+* int minimum(void)
+* QString prefix(void)
+* void setDisplayIntegerBase(int base)
+* void setMaximum(int max)
+* void setMinimum(int min)
+* void setPrefix(QString)
+* void setRange(int minimum, int maximum)
+* void setSingleStep(int val)
+* void setSuffix(QString)
+* int singleStep(void)
+* QString suffix(void)
+* int value(void)
+* void setValue(int val)
+* void setvalueChangedEvent(const char \*)
+* const char \*getvalueChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSplashScreen クラス
+
+QSplashScreen クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsplashscreen.html
+
+
+仮引数 : QPixmap
+
+
+親クラス : QWidget
+
+* void  finish(QWidget \*mainWin)
+* QPixmap pixmap(void)
+* void repaint(void)
+* void setPixmap(QPixmap pixmap)
+* void clearMessage(void)
+* void showMessage(QString message, int alignment ,QColor color)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSplitter クラス
+
+QSplitter クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsplitter.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QFrame
+
+* void addWidget(QWidget \*widget)
+* bool childrenCollapsible(void)
+* int count(void)
+* void getRange(int index, int \*min, int \*max)
+* QSplitterHandle \* handle(int index)
+* int handleWidth(void)
+* int indexOf(QWidget \*widget)
+* void insertWidget(int index, QWidget \*widget)
+* bool isCollapsible(int index)
+* bool opaqueResize(void)
+* Qt::Orientation orientation(void)
+* void refresh(void)
+* bool restoreState( QByteArray  state)
+* QByteArray saveState(void)
+* void setChildrenCollapsible(bool)
+* void setCollapsible(int index, bool collapse)
+* void setHandleWidth(int)
+* void setOpaqueResize(bool opaque )
+* void setOrientation(Qt::Orientation)
+* void setSizes( QList<int>  list)
+* void setStretchFactor(int index, int stretch)
+* QList<int> sizes(void)
+* QWidget \* widget(int index)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlDatabase クラス
+
+QSqlDatabase クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqldatabase.html
+
+
+仮引数 : void
+
+* void close(void)
+* bool commit(void)
+* QString connectOptions(void)
+* QString connectionName(void)
+* QString databaseName(void)
+* QSqlDriver \*driver(void)
+* QString driverName(void)
+* QSqlQuery exec(QString)
+* QString hostName(void)
+* bool isOpen(void)
+* bool isOpenError(void)
+* bool isValid(void)
+* QSqlError lastError(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* bool open(void)
+* QString password(void)
+* int port(void)
+* QSqlIndex primaryIndex(QString)
+* QSqlRecord record(QString)
+* bool rollback(void)
+* void setConnectOptions(QString)
+* void setDatabaseName(QString)
+* void setHostName(QString)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
+* void setPassword(QString)
+* void setPort(int port)
+* void setUserName(QString)
+* QStringList tables(QSql::TableType type)
+* bool transaction(void)
+* QString userName(void)
+* QSqlDatabase addDatabase(QString)
+* QSqlDatabase cloneDatabase(QSqlDatabase, QString)
+* QStringList connectionNames(void)
+* bool contains(QString)
+* QSqlDatabase database(QString , bool)
+* QStringList drivers(void)
+* bool isDriverAvailable(QString)
+* void registerSqlDriver(QString, QSqlDriverCreatorBase \*)
+* void removeDatabase(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlDriver クラス
+
+QSqlDriver クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqldriver.html
+
+
+仮引数 : void
+
+* QSqlError lastError(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlDriverCreatorBase クラス
+
+QSqlDriverCreatorBase クラス
+============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqldrivercreatorbase.html
+
+
+仮引数 : void
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlError クラス
+
+QSqlError クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqlerror.html
+
+
+仮引数 : QString, QString, QSqlError::ErrorType
+
+* QString databaseText(void)
+* QString driverText(void)
+* bool isValid(void)
+* int number(void)
+* void setDatabaseText(QString)
+* void setDriverText(QString)
+* void setNumber(int number)
+* void setType(QSqlError::ErrorType type)
+* QString text(void)
+* QSqlError::ErrorType type(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlField クラス
+
+QSqlField クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqlfield.html
+
+
+仮引数 : QString,QVariant::Type
+
+* void clear(void)
+* QVariant defaultValue(void)
+* bool isAutoValue(void)
+* bool isGenerated(void)
+* bool isNull(void)
+* bool isReadOnly(void)
+* bool isValid(void)
+* int length(void)
+* QString name(void)
+* int precision(void)
+* RequiredStatus requiredStatus(void)
+* void setAutoValue(bool autoVal)
+* void setDefaultValue(QVariant)
+* void setGenerated(bool gen)
+* void setLength(int fieldLength)
+* void setName(QString)
+* void setPrecision(int precision)
+* void setReadOnly(bool readOnly)
+* void setRequired(bool required)
+* void setRequiredStatus(QSqlField::RequiredStatus required)
+* void setType(QVariant::Type type)
+* void setValue(QVariant)
+* QVariant::Type type(void)
+* QVariant value(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlIndex クラス
+
+QSqlIndex クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqlindex.html
+
+
+仮引数 : QString, QString
+
+
+親クラス : QSqlRecord
+
+* void append(QSqlField, bool)
+* QString cursorName(void)
+* bool isDescending(int i)
+* QString name(void)
+* void setCursorName(QString)
+* void setDescending(int i, bool desc)
+* void setName(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlQuery クラス
+
+QSqlQuery クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqlquery.html
+
+
+仮引数 : void
+
+* void addBindValue(QVariant, QSql::ParamType paramType)
+* int at(void)
+* void bindValue(QString, QVariant, QSql::ParamType paramType)
+* QVariant boundValue(QString)
+* void clear(void)
+* QSqlDriver \* driver(void)
+* bool exec(QString)
+* bool exec_2(void)
+* bool execBatch(QSqlQuery::BatchExecutionMode mode)
+* QString executedQuery(void)
+* void finish(void)
+* bool first(void)
+* bool isActive(void)
+* bool isForwardOnly(void)
+* bool isNull(int field)
+* bool isSelect(void)
+* bool isValid(void)
+* bool last(void)
+* QSqlError lastError(void)
+* QVariant lastInsertId(void)
+* QString lastQuery(void)
+* bool next(void) # In RingQt use : bool movenext(void)
+* bool nextResult(void)
+* int numRowsAffected(void)
+* QSql::NumericalPrecisionPolicy numericalPrecisionPolicy(void)
+* bool prepare(QString)
+* bool previous(void)
+* QSqlRecord record(void)
+* QSqlResult \*result(void)
+* bool seek(int index, bool relative)
+* void setForwardOnly(bool forward)
+* void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
+* int size(void)
+* QVariant value(int index)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSqlRecord クラス
+
+QSqlRecord クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsqlrecord.html
+
+
+仮引数 : void
+
+* void append(QSqlField)
+* void clear(void)
+* void clearValues(void)
+* bool contains(QString)
+* int count(void)
+* QSqlField field(int index)
+* QString fieldName(int index)
+* int indexOf(QString)
+* void insert(int pos, QSqlField)
+* bool isEmpty(void)
+* bool isGenerated(QString)
+* bool isNull(QString)
+* void remove(int pos)
+* void replace(int pos, QSqlField)
+* void setGenerated(QString, bool generated)
+* void setNull(int index)
+* void setValue(int index, QVariant)
+* QVariant value(int index)
+
+.. index::
+       pair: RingQt クラスリファレンス; QStackedWidget クラス
+
+QStackedWidget クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qstackedwidget.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QFrame
+
+* int addWidget(QWidget \*widget)
+* int count(void)
+* int currentIndex(void)
+* QWidget \* currentWidget(void)
+* int indexOf(QWidget \*widget)
+* int insertWidget(int index, QWidget \*widget)
+* void removeWidget(QWidget \*widget)
+* QWidget \* widget(int index)
+* void setCurrentIndex(int index)
+* void setCurrentWidget(QWidget \*widget)
+* void setcurrentChangedEvent(const char \*)
+* void setwidgetRemovedEvent(const char \*)
+* const char \*getcurrentChangedEvent(void)
+* const char \*getwidgetRemovedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QStandardPaths クラス
+
+QStandardPaths クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qstandardpaths.html
+
+
+仮引数 : void
+
+* QString displayName(QStandardPaths::StandardLocation type)
+* QString findExecutable(QString executableName, QStringList paths))
+* QString locate(QStandardPaths::StandardLocation type, QString fileName, QStandardPaths::LocateOptions options)
+* QStringList locateAll(QStandardPaths::StandardLocation type, QString fileName, QStandardPaths::LocateOptions options)
+* void setTestModeEnabled(bool testMode)
+* QStringList standardLocations(QStandardPaths::StandardLocation type)
+* QString writableLocation(QStandardPaths::StandardLocation type)
+
+.. index::
+       pair: RingQt クラスリファレンス; QStatusBar クラス
+
+QStatusBar クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qstatusbar.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* void addPermanentWidget(QWidget \* widget, int stretch)
+* void addWidget(QWidget \* widget, int stretch)
+* QString currentMessage(void)
+* int insertPermanentWidget(int index, QWidget \* widget, int stretch)
+* int insertWidget(int index, QWidget \* widget, int stretch)
+* bool isSizeGripEnabled(void)
+* void removeWidget(QWidget \*widget)
+* void setSizeGripEnabled(bool)
+* void clearMessage(void)
+* void showMessage(QString , int timeout)
+
+.. index::
+       pair: RingQt クラスリファレンス; QString2 クラス
+
+QString2 クラス
+===============
+
+
+仮引数 : void
+
+* QString append( QString  str)
+* QByteArray toUtf8(void)
+* QByteArray toLatin1(void)
+* QByteArray toLocal8Bit(void)
+* QStringList split( QString  sep, QString::SplitBehavior behavior , Qt::CaseSensitivity cs )
+* QStringList split_2(QChar sep, QString::SplitBehavior behavior , Qt::CaseSensitivity cs )
+* QStringList split_3( QRegExp  rx, QString::SplitBehavior behavior )
+* QStringList split_4( QRegularExpression  re, QString::SplitBehavior behavior )
+* QChar \* unicode(void)
+* QString number(ulong n, int base)
+* int count(void)
+* QString left(int n)
+* QString mid(int position, int n)
+* QString right(int n)
+* int compare(QString  other, Qt::CaseSensitivity cs )
+* bool contains(QString  str, Qt::CaseSensitivity cs )
+* int indexOf(QString str,int from,Qt::CaseSensitivity cs )
+* QString insert(int position,  QString  str)
+* bool isRightToLeft(void)
+* QString repeated(int times)
+* QString replace(int position, int n,  QString  after)
+* bool startsWith( QString  s, Qt::CaseSensitivity cs )
+* bool endsWith( QString  s, Qt::CaseSensitivity cs )
+* QString toHtmlEscaped(void)
+* void clear(void)
+* bool isNull(void)
+* void resize(int size)
+* QString fill(QChar ch, int size)
+
+.. index::
+       pair: RingQt クラスリファレンス; QStringList クラス
+
+QStringList クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qstringlist.html
+
+
+仮引数 : void
+
+* QString join(QString)
+* void sort(void)
+* int removeDuplicates(void)
+* QStringList filter(QString, Qt::CaseSensitivity)
+* QStringList replaceInStrings(QString,QString, Qt::CaseSensitivity)
+* void append(QString)
+* QString at(int)
+* QString back(void)
+* void clear(void)
+* bool contains(QString)
+* int count(void)
+* bool empty(void)
+* bool endsWith(QString)
+* QString first(void)
+* QString front(void)
+* int indexOf(QString, int)
+* void insert(int, QString)
+* bool isEmpty(void)
+* QString last(void)
+* int lastIndexOf(QString,int)
+* int length(void)
+* void move(int,int)
+* void pop_back(void)
+* void pop_front(void)
+* void prepend(QString)
+* void push_back(QString)
+* void push_front(QString)
+* int removeAll(QString)
+* void removeAt(int)
+* void removeFirst(void)
+* void removeLast(void)
+* bool removeOne(QString)
+* void replace(int,QString)
+* void reserve(int)
+* int size(void)
+* bool startsWith(QString)
+* void swap(int,int)
+* QString takeAt(int)
+* QString takeFirst(void)
+* QString takeLast(void)
+* QString value(int)
+
+.. index::
+       pair: RingQt クラスリファレンス; QStringRef クラス
+
+QStringRef クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qstringref.html
+
+
+仮引数 : void
+
+* QStringRef appendTo(QString \* string)
+* QChar at(int position)
+* void clear(void)
+* int compare_3(QLatin1String other, Qt::CaseSensitivity cs)
+* QChar \* constData(void)
+* bool contains(QString str, Qt::CaseSensitivity cs)
+* bool contains_2(QChar ch, Qt::CaseSensitivity cs)
+* bool contains_3(QStringRef str, Qt::CaseSensitivity cs)
+* bool contains_4(QLatin1String str, Qt::CaseSensitivity cs)
+* int count(void)
+* int count_2(QString str, Qt::CaseSensitivity cs)
+* int count_3(QChar ch, Qt::CaseSensitivity cs)
+* int count_4(QStringRef str, Qt::CaseSensitivity cs)
+* QChar \* data(void)
+* bool endsWith(QString str, Qt::CaseSensitivity cs)
+* bool endsWith_2(QChar ch, Qt::CaseSensitivity cs)
+* bool endsWith_3(QLatin1String str, Qt::CaseSensitivity cs)
+* bool endsWith_4(QStringRef str, Qt::CaseSensitivity cs)
+* int indexOf(QString str, int from, Qt::CaseSensitivity cs)
+* int indexOf_2(QLatin1String str, int from, Qt::CaseSensitivity cs)
+* int indexOf_3(QChar ch, int from, Qt::CaseSensitivity cs)
+* int indexOf_4(QStringRef str, int from, Qt::CaseSensitivity cs)
+* bool isEmpty(void)
+* bool isNull(void)
+* int lastIndexOf(QString str, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_2(QChar ch, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_3(QLatin1String str, int from, Qt::CaseSensitivity cs)
+* int lastIndexOf_4(QStringRef str, int from, Qt::CaseSensitivity cs)
+* int length(void)
+* int localeAwareCompare(QString other)
+* int localeAwareCompare_2(QStringRef other)
+* int position(void)
+* int size(void)
+* bool startsWith(QString str, Qt::CaseSensitivity cs)
+* bool startsWith_2(QLatin1String str, Qt::CaseSensitivity cs)
+* bool startsWith_3(QStringRef str, Qt::CaseSensitivity cs)
+* bool startsWith_4(QChar ch, Qt::CaseSensitivity cs)
+* QString \* string(void)
+* QByteArray toLatin1(void)
+* QByteArray toLocal8Bit(void)
+* QString toString(void)
+* QVector<uint> toUcs4(void)
+* QByteArray toUtf8(void)
+* QChar \* unicode(void)
+* int compare_4(QStringRef s1, QString s2, Qt::CaseSensitivity cs)
+* int compare_5(QStringRef s1, QStringRef s2, Qt::CaseSensitivity cs)
+* int compare_6(QStringRef s1, QLatin1String s2, Qt::CaseSensitivity cs)
+* int localeAwareCompare_3(QStringRef s1, QString s2)
+* int localeAwareCompare_4(QStringRef s1, QStringRef s2)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSurfaceFormat クラス
+
+QSurfaceFormat クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsurfaceformat.html
+
+
+仮引数 : void
+
+* int alphaBufferSize(void)
+* int blueBufferSize(void)
+* int greenBufferSize(void)
+* bool hasAlpha(void)
+* int majorVersion(void)
+* int minorVersion(void)
+* QSurfaceFormat::FormatOptions options(void)
+* QSurfaceFormat::OpenGLContextProfile profile(void)
+* int redBufferSize(void)
+* QSurfaceFormat::RenderableType renderableType(void)
+* int samples(void)
+* void setAlphaBufferSize(int size)
+* void setBlueBufferSize(int size)
+* void setGreenBufferSize(int size)
+* void setMajorVersion(int major)
+* void setMinorVersion(int minor)
+* void setOption(QSurfaceFormat::FormatOption option, bool on)
+* void setOptions(QSurfaceFormat::FormatOptions options)
+* void setProfile(QSurfaceFormat::OpenGLContextProfile profile)
+* void setRedBufferSize(int size)
+* void setRenderableType(QSurfaceFormat::RenderableType type)
+* void setSamples(int numSamples)
+* void setStencilBufferSize(int size)
+* void setStereo(bool enable)
+* void setSwapBehavior(QSurfaceFormat::SwapBehavior behavior)
+* void setSwapInterval(int interval)
+* void setVersion(int major, int minor)
+* int stencilBufferSize(void)
+* bool stereo(void)
+* QSurfaceFormat::SwapBehavior swapBehavior(void)
+* int swapInterval(void)
+* bool testOption(QSurfaceFormat::FormatOption option)
+* QSurfaceFormat defaultFormat(void)
+* void setDefaultFormat(QSurfaceFormat format)
+
+.. index::
+       pair: RingQt クラスリファレンス; QSystemTrayIcon クラス
+
+QSystemTrayIcon クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qsystemtrayicon.html
+
+
+仮引数 : void
+
+* QMenu \*contextMenu(void)
+* QRect geometry(void)
+* QIcon icon(void)
+* bool isVisible(void)
+* void setContextMenu(QMenu \*menu)
+* void setIcon(QIcon)
+* void setToolTip(QString)
+* QString toolTip(void)
+* void hide(void)
+* void setVisible(bool visible)
+* void show(void)
+* void showMessage(QString, QString, QSystemTrayIcon::MessageIcon, int millisecondsTimeoutHint)
+* bool isSystemTrayAvailable(void)
+* bool supportsMessages(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTabBar クラス
+
+QTabBar クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtabbar.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* int addTab(QString text)
+* int addTab_2(QIcon icon, QString text)
+* int count(void)
+* int currentIndex(void)
+* bool documentMode(void)
+* bool drawBase(void)
+* Qt::TextElideMode elideMode(void)
+* bool expanding(void)
+* QSize iconSize(void)
+* int insertTab(int index, QString text)
+* int insertTab_2(int index, QIcon icon, QString text)
+* bool isMovable(void)
+* bool isTabEnabled(int index)
+* void moveTab(int from, int to)
+* void removeTab(int index)
+* QTabBar::SelectionBehavior selectionBehaviorOnRemove(void)
+* void setDocumentMode(bool set)
+* void setDrawBase(bool drawTheBase)
+* void setElideMode(Qt::TextElideMode)
+* void setExpanding(bool enabled)
+* void setIconSize(QSize size)
+* void setMovable(bool movable)
+* void setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior behavior)
+* void setShape(QTabBar::Shape shape)
+* void setTabButton(int index, QTabBar::ButtonPosition position, QWidget \* widget)
+* void setTabData(int index, QVariant data)
+* void setTabEnabled(int index, bool enabled)
+* void setTabIcon(int index, QIcon icon)
+* void setTabText(int index, QString text)
+* void setTabTextColor(int index, QColor color)
+* void setTabToolTip(int index, QString tip)
+* void setTabWhatsThis(int index, QString text)
+* void setTabsClosable(bool closable)
+* void setUsesScrollButtons(bool useButtons)
+* QTabBar::Shape shape(void)
+* int tabAt(QPoint position)
+* QWidget \* tabButton(int index, QTabBar::ButtonPosition position)
+* QVariant tabData(int index)
+* QIcon tabIcon(int index)
+* QRect tabRect(int index)
+* QString tabText(int index)
+* QColor tabTextColor(int index)
+* QString tabToolTip(int index)
+* QString tabWhatsThis(int index)
+* bool tabsClosable(void)
+* bool usesScrollButtons(void)
+* void setCurrentIndex(int index)
+* void setcurrentChangedEvent(const char \*)
+* void settabCloseRequestedEvent(const char \*)
+* void settabMovedEvent(const char \*)
+* const char \*getcurrentChangedEvent(void)
+* const char \*gettabCloseRequestedEvent(void)
+* const char \*gettabMovedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTabWidget クラス
+
+QTabWidget クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtabwidget.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* int addTab(QWidget \*page, QString)
+* void clear(void)
+* QWidget \*cornerWidget(Qt::Corner corner)
+* int count(void)
+* int currentIndex(void)
+* QWidget \*currentWidget(void)
+* bool documentMode(void)
+* int elideMode(void)
+* QSize iconSize(void)
+* int indexOf(QWidget \*w)
+* int insertTab(int index, QWidget \*page,QString)
+* bool isMovable(void)
+* bool isTabEnabled(int index)
+* void removeTab(int index)
+* void setCornerWidget(QWidget \*widget, Qt::Corner corner)
+* void setDocumentMode(bool set)
+* void setElideMode(Qt::TextElideMode)
+* void setIconSize(QSize)
+* void setMovable(bool movable)
+* void setTabEnabled(int index, bool enable)
+* void setTabIcon(int index, QIcon)
+* void setTabText(int index,QString)
+* void setTabToolTip(int index, QString)
+* void setTabWhatsThis(int index, QString)
+* void setTabsClosable(bool closeable)
+* void setUsesScrollButtons(bool useButtons)
+* QIcon tabIcon(int index)
+* QString tabText(int index)
+* QString tabToolTip(int index)
+* QString tabWhatsThis(int index)
+* bool tabsClosable(void)
+* bool usesScrollButtons(void)
+* QWidget \*widget(int index)
+* int heightForWidth(int width)
+* QSize minimumSizeHint(void)
+* QSize sizeHint(void)
+* void setCurrentIndex(int index)
+* void setCurrentWidget(QWidget \*widget)
+* void setcurrentChangedEvent(const char \*)
+* void settabCloseRequestedEvent(const char \*)
+* const char \*getcurrentChangedEvent(void)
+* const char \*gettabCloseRequestedEvent(void)
+* void geteventparameters(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTableView クラス
+
+QTableView クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtableview.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QAbstractItemView
+
+* void clearSpans(void)
+* int columnAt(int x)
+* int columnSpan(int row, int column)
+* int columnViewportPosition(int column)
+* int columnWidth(int column)
+* Qt::PenStyle gridStyle(void)
+* QHeaderView \*horizontalHeader(void)
+* bool isColumnHidden(int column)
+* bool isCornerButtonEnabled(void)
+* bool isRowHidden(int row)
+* bool isSortingEnabled(void)
+* int rowAt(int y)
+* int rowHeight(int row)
+* int rowSpan(int row, int column)
+* int rowViewportPosition(int row)
+* void setColumnHidden(int column, bool hide)
+* void setColumnWidth(int column, int width)
+* void setCornerButtonEnabled(bool enable)
+* void setGridStyle(Qt::PenStyle style)
+* void setHorizontalHeader(QHeaderView \*header)
+* void setRowHeight(int row, int height)
+* void setRowHidden(int row, bool hide)
+* void setSortingEnabled(bool enable)
+* void setSpan(int row, int column, int rowSpanCount, int columnSpanCount)
+* void setVerticalHeader(QHeaderView \*header)
+* void setWordWrap(bool on)
+* bool showGrid(void)
+* void sortByColumn(int column, Qt::SortOrder order)
+* QHeaderView \*verticalHeader(void)
+* bool wordWrap(void)
+* void hideColumn(int column)
+* void hideRow(int row)
+* void resizeColumnToContents(int column)
+* void resizeColumnsToContents(void)
+* void resizeRowToContents(int row)
+* void resizeRowsToContents(void)
+* void selectColumn(int column)
+* void selectRow(int row)
+* void setShowGrid(bool show)
+* void showColumn(int column)
+* void showRow(int row)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTableWidget クラス
+
+QTableWidget クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtablewidget.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QTableView
+
+* QWidget \*cellWidget(int row, int column)
+* void closePersistentEditor(QTableWidgetItem \*item)
+* int column(QTableWidgetItem \*item)
+* int columnCount(void)
+* int currentColumn(void)
+* QTableWidgetItem \*currentItem(void)
+* int currentRow(void)
+* void editItem(QTableWidgetItem \*item)
+* QTableWidgetItem \*horizontalHeaderItem(int column)
+* QTableWidgetItem \*item(int row, int column)
+* QTableWidgetItem \*itemAt(int ax, int ay)
+* QTableWidgetItem \*itemPrototype(void)
+* void openPersistentEditor(QTableWidgetItem \*item)
+* void removeCellWidget(int row, int column)
+* int row(const QTableWidgetItem \*item)
+* int rowCount(void)
+* QList<QTableWidgetItem \*> selectedItems(void)
+* QList<QTableWidgetSelectionRange> selectedRanges(void)
+* void setCellWidget(int row, int column, QWidget \*widget)
+* void setColumnCount(int columns)
+* void setCurrentCell(int row, int column)
+* void setCurrentItem(QTableWidgetItem \* item)
+* void setHorizontalHeaderItem(int column, QTableWidgetItem \*item)
+* void setHorizontalHeaderLabels(QStringList)
+* void setItem(int row, int column, QTableWidgetItem \*item)
+* void setItemPrototype(QTableWidgetItem \*item)
+* void setRowCount(int rows)
+* void setVerticalHeaderItem(int row, QTableWidgetItem \*item)
+* void sortItems(int column, Qt::SortOrder order)
+* QTableWidgetItem \*takeHorizontalHeaderItem(int column)
+* QTableWidgetItem \*takeItem(int row, int column)
+* QTableWidgetItem \*takeVerticalHeaderItem(int row)
+* QTableWidgetItem \*verticalHeaderItem(int row)
+* int visualColumn(int logicalColumn)
+* QRect visualItemRect(QTableWidgetItem \*)
+* int visualRow(int logicalRow)
+* void clear(void)
+* void clearContents(void)
+* void insertColumn(int column)
+* void insertRow(int row)
+* void removeColumn(int column)
+* void removeRow(int row)
+* void scrollToItem(QTableWidgetItem \*item, QAbstractItemView::ScrollHint hint)
+* void setcellActivatedEvent(const char \*)
+* void setcellChangedEvent(const char \*)
+* void setcellClickedEvent(const char \*)
+* void setcellDoubleClickedEvent(const char \*)
+* void setcellEnteredEvent(const char \*)
+* void setcellPressedEvent(const char \*)
+* void setcurrentCellChangedEvent(const char \*)
+* void setcurrentItemChangedEvent(const char \*)
+* void setitemActivatedEvent(const char \*)
+* void setitemChangedEvent(const char \*)
+* void setitemClickedEvent(const char \*)
+* void setitemDoubleClickedEvent(const char \*)
+* void setitemEnteredEvent(const char \*)
+* void setitemPressedEvent(const char \*)
+* void setitemSelectionChangedEvent(const char \*)
+* const char \*getcellActivatedEvent(void)
+* const char \*getcellChangedEvent(void)
+* const char \*getcellClickedEvent(void)
+* const char \*getcellDoubleClickedEvent(void)
+* const char \*getcellEnteredEvent(void)
+* const char \*getcellPressedEvent(void)
+* const char \*getcurrentCellChangedEvent(void)
+* const char \*getcurrentItemChangedEvent(void)
+* const char \*getitemActivatedEvent(void)
+* const char \*getitemChangedEvent(void)
+* const char \*getitemClickedEvent(void)
+* const char \*getitemDoubleClickedEvent(void)
+* const char \*getitemEnteredEvent(void)
+* const char \*getitemPressedEvent(void)
+* const char \*getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTableWidgetItem クラス
+
+QTableWidgetItem クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtablewidgetitem.html
+
+
+仮引数 : QString
+
+* QBrush background(void)
+* int checkState(void)
+* QTableWidgetItem \*clone(void)
+* int column(void)
+* QVariant data(int role)
+* int flags(void)
+* QFont font(void)
+* QBrush foreground(void)
+* QIcon icon(void)
+* bool isSelected(void)
+* void read(QDataStream)
+* int row(void)
+* void setBackground(QBrush)
+* void setCheckState(Qt::CheckState state)
+* void setData(int role, QVariant)
+* void setFlags(Qt::ItemFlag flags)
+* void setFont(QFont)
+* void setForeground(QBrush)
+* void setIcon(QIcon)
+* void setSelected(bool select)
+* void setSizeHint(QSize)
+* void setStatusTip(QString)
+* void setText(QString)
+* void setTextAlignment(int alignment)
+* void setToolTip(QString)
+* void setWhatsThis(QString)
+* QSize sizeHint(void)
+* QString statusTip(void)
+* QTableWidget \*tableWidget(void)
+* QString text(void)
+* int textAlignment(void)
+* QString toolTip(void)
+* int type(void)
+* QString whatsThis(void)
+* void write(QDataStream)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTcpServer クラス
+
+QTcpServer クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtcpserver.html
+
+
+仮引数 : QWidget \*
+
+* void close(void)
+* QString errorString(void)
+* bool hasPendingConnections(void)
+* bool isListening(void)
+* bool listen(QHostAddress, int port)
+* int maxPendingConnections(void)
+* QTcpSocket \*nextPendingConnection(void)
+* void pauseAccepting(void)
+* QNetworkProxy proxy(void)
+* void resumeAccepting(void)
+* QHostAddress serverAddress(void)
+* int serverError(void)
+* int serverPort(void)
+* void setMaxPendingConnections(int numConnections)
+* void setProxy(QNetworkProxy)
+* bool setSocketDescriptor(qintptr socketDescriptor)
+* int \*socketDescriptor(void)
+* bool waitForNewConnection(int msec, bool \*timedOut)
+* void setacceptErrorEvent(const char \*)
+* void setnewConnectionEvent(const char \*)
+* const char \*getacceptErrorEvent(void)
+* const char \*getnewConnectionEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTcpSocket クラス
+
+QTcpSocket クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtcpsocket.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QAbstractSocket
+
+* void setconnectedEvent(const char \*)
+* void setdisconnectedEvent(const char \*)
+* void seterrorEvent(const char \*)
+* void sethostFoundEvent(const char \*)
+* void setproxyAuthenticationRequiredEvent(const char \*)
+* void setstateChangedEvent(const char \*)
+* void setaboutToCloseEvent(const char \*)
+* void setbytesWrittenEvent(const char \*)
+* void setreadChannelFinishedEvent(const char \*)
+* void setreadyReadEvent(const char \*)
+* const char \*getconnectedEvent(void)
+* const char \*getdisconnectedEvent(void)
+* const char \*geterrorEvent(void)
+* const char \*gethostFoundEvent(void)
+* const char \*getproxyAuthenticationRequiredEvent(void)
+* const char \*getstateChangedEvent(void)
+* const char \*getaboutToCloseEvent(void)
+* const char \*getbytesWrittenEvent(void)
+* const char \*getreadChannelFinishedEvent(void)
+* const char \*getreadyReadEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTechnique クラス
+
+QTechnique クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qtechnique.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* void addFilterKey(Qt3DRender::QFilterKey \*filterKey)
+* void addParameter(Qt3DRender::QParameter \*parameter)
+* void addRenderPass(Qt3DRender::QRenderPass \*pass)
+* QVector<Qt3DRender::QFilterKey \*> filterKeys(void)
+* Qt3DRender::QGraphicsApiFilter \* graphicsApiFilter(void)
+* QVector<Qt3DRender::QParameter \*> parameters(void)
+* void removeFilterKey(Qt3DRender::QFilterKey \*filterKey)
+* void removeParameter(Qt3DRender::QParameter \*parameter)
+* void removeRenderPass(Qt3DRender::QRenderPass \*pass)
+* QVector<Qt3DRender::QRenderPass \*> renderPasses(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTest クラス
+
+QTest クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtest.html
+
+* void qsleep(int)
+
+.. index::
+       pair: RingQt クラスリファレンス; QText2DEntity クラス
+
+QText2DEntity クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qtext2dentity.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QEntity
+
+* QColor color(void)
+* QFont font(void)
+* float height(void)
+* void setColor(QColor color)
+* void setFont(QFont font)
+* void setHeight(float height)
+* void setText(QString text)
+* void setWidth(float width)
+* QString text(void)
+* float width(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextBlock クラス
+
+QTextBlock クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextblock.html
+
+
+仮引数 : void
+
+* int blockFormatIndex(void)
+* int blockNumber(void)
+* QTextCharFormat charFormat(void)
+* int charFormatIndex(void)
+* void clearLayout(void)
+* bool contains(int position)
+* QTextDocument \*document(void)
+* bool isValid(void)
+* bool isVisible(void)
+* QTextLayout \* layout(void)
+* int length(void)
+* int lineCount(void)
+* QTextBlock next(void) # In RingQt use :  QTextBlock nextblock(void)
+* int position(void)
+* QTextBlock previous(void)
+* int revision(void)
+* void setLineCount(int count)
+* void setRevision(int rev)
+* void setUserData(QTextBlockUserData \* data)
+* void setUserState(int state)
+* void setVisible(bool visible)
+* QString text(void)
+* int textDirection(void)
+* QTextList \* textList(void)
+* QTextBlockUserData \* userData(void)
+* int userState(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextBrowser クラス
+
+QTextBrowser クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextbrowser.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QTextEdit
+
+* int backwardHistoryCount(void)
+* void clearHistory(void)
+* int forwardHistoryCount(void)
+* QString historyTitle(int i)
+* QUrl historyUrl(int i)
+* bool isBackwardAvailable(void)
+* bool isForwardAvailable(void)
+* bool openExternalLinks(void)
+* bool openLinks(void)
+* QStringList searchPaths(void)
+* void setOpenExternalLinks(bool open)
+* void setOpenLinks(bool open)
+* void setSearchPaths(QStringList paths)
+* QUrl source(void)
+* void setanchorClickedEvent(const char \*)
+* void setbackwardAvailableEvent(const char \*)
+* void setforwardAvailableEvent(const char \*)
+* void sethighlightedEvent(const char \*)
+* void sethistoryChangedEvent(const char \*)
+* void setsourceChangedEvent(const char \*)
+* const char \*getanchorClickedEvent(void)
+* const char \*getbackwardAvailableEvent(void)
+* const char \*getforwardAvailableEvent(void)
+* const char \*gethighlightedEvent(void)
+* const char \*gethistoryChangedEvent(void)
+* const char \*getsourceChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextCharFormat クラス
+
+QTextCharFormat クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextcharformat.html
+
+
+仮引数 : void
+
+* QString anchorHref(void)
+* QStringList anchorNames(void)
+* QFont font(void)
+* QFont::Capitalization fontCapitalization(void)
+* QString fontFamily(void)
+* bool fontFixedPitch(void)
+* QFont::HintingPreference fontHintingPreference(void)
+* bool fontItalic(void)
+* bool fontKerning(void)
+* qreal fontLetterSpacing(void)
+* QFont::SpacingType fontLetterSpacingType(void)
+* bool fontOverline(void)
+* qreal fontPointSize(void)
+* int fontStretch(void)
+* bool fontStrikeOut(void)
+* QFont::StyleHint fontStyleHint(void)
+* QFont::StyleStrategy fontStyleStrategy(void)
+* bool fontUnderline(void)
+* int fontWeight(void)
+* qreal fontWordSpacing(void)
+* bool isAnchor(void)
+* bool isValid(void)
+* void setAnchor(bool anchor)
+* void setAnchorHref( QString   value)
+* void setAnchorNames( QStringList   names)
+* void setFontCapitalization(QFont::Capitalization capitalization)
+* void setFontFamily( QString   family)
+* void setFontFixedPitch(bool fixedPitch)
+* void setFontHintingPreference(QFont::HintingPreference hintingPreference)
+* void setFontItalic(bool italic)
+* void setFontKerning(bool enable)
+* void setFontLetterSpacing(qreal spacing)
+* void setFontLetterSpacingType(QFont::SpacingType letterSpacingType)
+* void setFontOverline(bool overline)
+* void setFontPointSize(qreal size)
+* void setFontStretch(int factor)
+* void setFontStrikeOut(bool strikeOut)
+* void setFontStyleHint(QFont::StyleHint hint, QFont::StyleStrategy strategy )
+* void setFontStyleStrategy(QFont::StyleStrategy strategy)
+* void setFontUnderline(bool underline)
+* void setFontWeight(int weight)
+* void setFontWordSpacing(qreal spacing)
+* void setTextOutline( QPen   pen)
+* void setToolTip( QString   text)
+* void setUnderlineColor( QColor   color)
+* void setUnderlineStyle(QTextCharFormat::UnderlineStyle style)
+* void setVerticalAlignment(QTextCharFormat::VerticalAlignment alignment)
+* QPen textOutline(void)
+* QString toolTip(void)
+* QColor underlineColor(void)
+* QTextCharFormat::UnderlineStyle underlineStyle(void)
+* QTextCharFormat::VerticalAlignment verticalAlignment(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextCodec クラス
+
+QTextCodec クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextcodec.html
+
+* QTextCodec \*codecForName(const char \*name)
+* void setCodecForLocale(QTextCodec \*c)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextCursor クラス
+
+QTextCursor クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextcursor.html
+
+
+仮引数 : void
+
+* int anchor(void)
+* bool atBlockEnd(void)
+* bool atBlockStart(void)
+* bool atEnd(void)
+* bool atStart(void)
+* void beginEditBlock(void)
+* QTextBlock block(void)
+* QTextCharFormat blockCharFormat(void)
+* QTextBlockFormat blockFormat(void)
+* int blockNumber(void)
+* QTextCharFormat charFormat(void)
+* void clearSelection(void)
+* int columnNumber(void)
+* QTextList \*createList(QTextListFormat)
+* QTextFrame \*currentFrame(void)
+* QTextList \*currentList(void)
+* QTextTable \*currentTable(void)
+* void deleteChar(void)
+* void deletePreviousChar(void)
+* QTextDocument \*document(void)
+* void endEditBlock(void)
+* bool hasComplexSelection(void)
+* bool hasSelection(void)
+* void insertBlock(void)
+* void insertFragment(QTextDocumentFragment)
+* QTextFrame \*insertFrame(QTextFrameFormat)
+* void insertHtml(QString)
+* void insertImage(QTextImageFormat)
+* QTextList \*insertList(QTextListFormat)
+* QTextTable \* insertTable(int rows, int columns, QTextTableFormat)
+* void insertText(QString)
+* void insertText_2(QString,QTextCharFormat)
+* bool isCopyOf(QTextCursor)
+* bool isNull(void)
+* void joinPreviousEditBlock(void)
+* bool keepPositionOnInsert(void)
+* void mergeBlockCharFormat(QTextCharFormat)
+* void mergeBlockFormat(QTextBlockFormat)
+* void mergeCharFormat(QTextCharFormat)
+* bool movePosition(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode, int n)
+* int position(void)
+* int positionInBlock(void)
+* void removeSelectedText(void)
+* void select(QTextCursor::SelectionType selection)
+* void selectedTableCells(int \*firstRow, int \*numRows, int \*firstColumn, int \*numColumns)
+* QString selectedText(void)
+* QTextDocumentFragment selection(void)
+* int selectionEnd(void)
+* int selectionStart(void)
+* void setBlockCharFormat(QTextCharFormat)
+* void setBlockFormat(QTextBlockFormat)
+* void setCharFormat(QTextCharFormat)
+* void setKeepPositionOnInsert(bool b)
+* void setPosition(int pos, QTextCursor::MoveMode m)
+* void setVerticalMovementX(int x)
+* void setVisualNavigation(bool b)
+* int verticalMovementX(void)
+* bool visualNavigation(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextDocument クラス
+
+QTextDocument クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextdocument.html
+
+
+仮引数 : void
+
+
+親クラス : QObject
+
+* void addResource(int type,QUrl name, QVariant resource)
+* void adjustSize(void)
+* QVector<QTextFormat> allFormats(void)
+* int availableRedoSteps(void)
+* int availableUndoSteps(void)
+* QTextBlock begin(void)
+* int blockCount(void)
+* QChar characterAt(int pos)
+* int characterCount(void)
+* void clearUndoRedoStacks(QTextDocument::Stacks stacksToClear )
+* QTextDocument \*clone(QObject \*parent )
+* int defaultCursorMoveStyle(void)
+* QFont defaultFont(void)
+* QString defaultStyleSheet(void)
+* QTextOption defaultTextOption(void)
+* QAbstractTextDocumentLayout \*documentLayout(void)
+* double documentMargin(void)
+* void drawContents(QPainter \*p, QRectF rect)
+* QTextBlock end(void) # In RingQt use : QTextBlock enddoc(void)
+* QTextCursor find(QString subString, QTextCursor cursor, QTextDocument::FindFlag options )
+* QTextBlock findBlock(int pos)
+* QTextBlock findBlockByLineNumber(int lineNumber)
+* QTextBlock findBlockByNumber(int blockNumber)
+* QTextBlock firstBlock(void)
+* double idealWidth(void)
+* double indentWidth(void)
+* bool isEmpty(void)
+* bool isModified(void)
+* bool isRedoAvailable(void)
+* bool isUndoAvailable(void)
+* bool isUndoRedoEnabled(void)
+* QTextBlock lastBlock(void)
+* int lineCount(void)
+* void markContentsDirty(int position, int length)
+* int maximumBlockCount(void)
+* QString metaInformation(QTextDocument::MetaInformation info)
+* QTextObject \*object(int objectIndex)
+* QTextObject \*objectForFormat(QTextFormat f)
+* int pageCount(void)
+* QSizeF pageSize(void)
+* void print(QPrinter \*printer)
+* void redo(QTextCursor \*cursor)
+* QVariant resource(int type, QUrl name)
+* int revision(void)
+* QTextFrame \*rootFrame(void)
+* void setDefaultCursorMoveStyle(Qt::CursorMoveStyle style)
+* void setDefaultFont(QFont font)
+* void setDefaultStyleSheet(QString sheet)
+* void setDefaultTextOption(QTextOption option)
+* void setDocumentLayout(QAbstractTextDocumentLayout \* layout)
+* void setDocumentMargin(double margin)
+* void setHtml(QString html)
+* void setIndentWidth(double width)
+* void setMaximumBlockCount(int maximum)
+* void setMetaInformation(QTextDocument::MetaInformation info, QString string)
+* void setPageSize(QSizeF size)
+* void setPlainText(QString text)
+* void setTextWidth(double width)
+* void setUndoRedoEnabled(bool enable)
+* void setUseDesignMetrics(bool b)
+* QSizeF size(void)
+* qreal textWidth(void)
+* QString toHtml(QByteArray encoding)
+* QString toPlainText(void)
+* void undo(QTextCursor \*cursor)
+* bool useDesignMetrics(void)
+* void setModified(bool m)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextEdit クラス
+
+QTextEdit クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextedit.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractScrollArea
+
+* bool acceptRichText(void)
+* int alignment(void)
+* QString anchorAt(QPoint)
+* bool canPaste(void)
+* QTextCharFormat currentCharFormat(void)
+* QFont currentFont(void)
+* QTextCursor cursorForPosition(QPoint)
+* QRect cursorRect(void)
+* int cursorWidth(void)
+* QTextDocument \*document(void)
+* QString documentTitle(void)
+* void ensureCursorVisible(void)
+* bool find(QString, QTextDocument::FindFlag)
+* QString fontFamily(void)
+* bool fontItalic(void)
+* double fontPointSize(void)
+* bool fontUnderline(void)
+* int fontWeight(void)
+* bool isReadOnly(void)
+* bool isUndoRedoEnabled(void)
+* int lineWrapColumnOrWidth(void)
+* QVariant loadResource(int, QUrl)
+* void mergeCurrentCharFormat(QTextCharFormat)
+* void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode)
+* bool overwriteMode(void)
+* void print(QPrinter \* printer)
+* void setAcceptRichText(bool accept)
+* void setCurrentCharFormat(QTextCharFormat)
+* void setCursorWidth(int width)
+* void setDocument(QTextDocument \*document)
+* void setDocumentTitle(QString)
+* void setLineWrapColumnOrWidth(int w)
+* void setLineWrapMode(QTextEdit::LineWrapMode)
+* void setOverwriteMode(bool overwrite)
+* void setReadOnly(bool)
+* void setTabChangesFocus(bool)
+* void setTabStopWidth(int width)
+* void setTextCursor(QTextCursor)
+* void setTextInteractionFlags(Qt::TextInteractionFlag flags)
+* void setUndoRedoEnabled(bool enable)
+* void setWordWrapMode(QTextOption::WrapMode policy)
+* bool tabChangesFocus(void)
+* int tabStopWidth(void)
+* QColor textBackgroundColor(void)
+* QColor textColor(void)
+* QTextCursor textCursor(void)
+* int textInteractionFlags(void)
+* QString toHtml(void)
+* QString toPlainText(void)
+* int wordWrapMode(void)
+* void append(QString)
+* void clear(void)
+* void copy(void)
+* void cut(void)
+* void insertHtml(QString)
+* void insertPlainText(QString)
+* void paste(void)
+* void redo(void)
+* void scrollToAnchor(QString)
+* void selectAll(void)
+* void setAlignment(Qt::AlignmentFlag a)
+* void setCurrentFont(QFont)
+* void setFontFamily(QString)
+* void setFontItalic(bool italic)
+* void setFontPointSize(double s)
+* void setFontUnderline(bool underline)
+* void setFontWeight(int weight)
+* void setHtml(QString)
+* void setPlainText(QString)
+* void setText(QString)
+* void setTextBackgroundColor(QColor)
+* void setTextColor(QColor)
+* void undo(void)
+* void zoomIn(int range)
+* void zoomOut(int range)
+* void setcopyAvailableEvent(const char \*)
+* void setcurrentCharFormatChangedEvent(const char \*)
+* void setcursorPositionChangedEvent(const char \*)
+* void setredoAvailableEvent(const char \*)
+* void setselectionChangedEvent(const char \*)
+* void settextChangedEvent(const char \*)
+* void setundoAvailableEvent(const char \*)
+* const char \*getcopyAvailableEvent(void)
+* const char \*getcurrentCharFormatChangedEvent(void)
+* const char \*getcursorPositionChangedEvent(void)
+* const char \*getredoAvailableEvent(void)
+* const char \*getselectionChangedEvent(void)
+* const char \*gettextChangedEvent(void)
+* const char \*getundoAvailableEvent(void)
+* void cyanline(void)
+* void setactivelinecolor(QColor)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextStream クラス
+
+QTextStream クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtextstream.html
+
+
+仮引数 : void
+
+* bool atEnd(void)
+* bool autoDetectUnicode(void)
+* QTextCodec \* codec(void)
+* QIODevice \* device(void)
+* QTextStream::FieldAlignment fieldAlignment(void)
+* int fieldWidth(void)
+* void flush(void)
+* bool generateByteOrderMark(void)
+* int integerBase(void)
+* QLocale locale(void)
+* QTextStream::NumberFlags numberFlags(void)
+* QChar padChar(void)
+* qint64 pos(void)
+* QString read(qint64 maxlen)
+* QString readAll(void)
+* QString readLine(qint64 maxlen)
+* QTextStream::RealNumberNotation realNumberNotation(void)
+* int realNumberPrecision(void)
+* void reset(void)
+* void resetStatus(void)
+* bool seek(qint64 pos)
+* void setAutoDetectUnicode(bool enabled)
+* void setCodec(QTextCodec \* codec)
+* void setCodec_2(char \* codecName)
+* void setDevice(QIODevice \* device)
+* void setFieldAlignment(QTextStream::FieldAlignment mode)
+* void setFieldWidth(int width)
+* void setGenerateByteOrderMark(bool generate)
+* void setIntegerBase(int base)
+* void setLocale(QLocale locale)
+* void setNumberFlags(QTextStream::NumberFlags flags)
+* void setPadChar(QChar ch)
+* void setRealNumberNotation(QTextStream::RealNumberNotation notation)
+* void setRealNumberPrecision(int precision)
+* void setStatus(QTextStream::Status status)
+* void setString(QString \* string, QIODevice::OpenMode openMode)
+* void skipWhiteSpace(void)
+* QTextStream::Status status(void)
+* QString \* string(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextStream2 クラス
+
+QTextStream2 クラス
+===================
+
+
+仮引数 : QIODevice \* device
+
+
+親クラス : QTextStream
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextStream3 クラス
+
+QTextStream3 クラス
+===================
+
+
+仮引数 : FILE \* fileHandle, QIODevice::OpenMode
+
+
+親クラス : QTextStream
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextStream4 クラス
+
+QTextStream4 クラス
+===================
+
+
+仮引数 : QString \*, QIODevice::OpenMode
+
+
+親クラス : QTextStream
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextStream5 クラス
+
+QTextStream5 クラス
+===================
+
+
+仮引数 : QByteArray \*, QIODevice::OpenMode
+
+
+親クラス : QTextStream
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextToSpeech クラス
+
+QTextToSpeech クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtexttospeech.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* QVector<QLocale> availableLocales(void)
+* QVector<QVoice> availableVoices(void)
+* QLocale locale(void)
+* double pitch(void)
+* double rate(void)
+* QTextToSpeech::State state(void)
+* QVoice voice(void)
+* double volume(void)
+* void pause(void)
+* void resume(void)
+* void say(QString text)
+* void setLocale(QLocale locale)
+* void setPitch(double pitch)
+* void setRate(double rate)
+* void setVoice(QVoice voice)
+* void setVolume(double volume)
+* void stop(void)
+* QStringList availableEngines(void)
+* void setlocaleChangedEvent(const char \*)
+* void setpitchChangedEvent(const char \*)
+* void setrateChangedEvent(const char \*)
+* void setstateChangedEvent(const char \*)
+* void setvoiceChangedEvent(const char \*)
+* void setvolumeChangedEvent(const char \*)
+* const char \*getlocaleChangedEvent(void)
+* const char \*getpitchChangedEvent(void)
+* const char \*getrateChangedEvent(void)
+* const char \*getstateChangedEvent(void)
+* const char \*getvoiceChangedEvent(void)
+* const char \*getvolumeChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextureLoader クラス
+
+QTextureLoader クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qtextureloader.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* bool isMirrored(void)
+* QUrl source(void)
+* void setMirrored(bool mirrored)
+* void setSource(QUrl source)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTextureMaterial クラス
+
+QTextureMaterial クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qtexturematerial.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* bool isAlphaBlendingEnabled(void)
+* Qt3DRender::QAbstractTexture \*texture(void)
+* QVector2D textureOffset(void)
+* QMatrix3x3 textureTransform(void)
+* void setAlphaBlendingEnabled(bool enabled)
+* void setTexture(Qt3DRender::QAbstractTexture \*texture)
+* void setTextureOffset(QVector2D textureOffset)
+* void setTextureTransform(QMatrix3x3 matrix)
+
+.. index::
+       pair: RingQt クラスリファレンス; QThread クラス
+
+QThread クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qthread.html
+
+
+仮引数 : QObject \*
+
+
+親クラス : QObject
+
+* QAbstractEventDispatcher \*eventDispatcher(void)
+* void exit(int returnCode) # In RingQt use : void exitfromthread(int returnCode)
+* bool isFinished(void)
+* bool isInterruptionRequested(void)
+* bool isRunning(void)
+* QThread::Priority priority(void)
+* void requestInterruption(void)
+* void setEventDispatcher(QAbstractEventDispatcher \*eventDispatcher)
+* void setPriority(QThread::Priority priority)
+* void setStackSize(uint stackSize)
+* uint stackSize(void)
+* bool wait(unsigned long time)
+* void quit(void)
+* void start(QThread::Priority priority)
+* void terminate(void)
+* QThread \*currentThread(void)
+* Qt::HANDLE currentThreadId(void)
+* int idealThreadCount(void)
+* void msleep(unsigned long msecs)
+* void sleep(unsigned long secs)
+* void usleep(unsigned long usecs)
+* void yieldCurrentThread(void)
+* void setStartedEvent(const char \*)
+* void setFinishedEvent(const char \*)
+* const char \*getStartedEvent(void)
+* const char \*getFinishedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QThreadPool クラス
+
+QThreadPool クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qthreadpool.html
+
+
+仮引数 : void
+
+
+親クラス : QObject
+
+* int activeThreadCount(void)
+* void clear(void)
+* int expiryTimeout(void)
+* int maxThreadCount(void)
+* void releaseThread(void)
+* void reserveThread(void)
+* void setExpiryTimeout(int expiryTimeout)
+* void setMaxThreadCount(int maxThreadCount)
+* void start(QRunnable \* runnable, int priority)
+* bool tryStart(QRunnable \* runnable)
+* bool waitForDone(int msecs)
+* QThreadPool \*globalInstance(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTime クラス
+
+QTime クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtime.html
+
+
+仮引数 : void
+
+* QTime addMSecs(int ms)
+* QTime addSecs(int s)
+* int elapsed(void)
+* int hour(void)
+* bool isNull(void)
+* bool isValid(void)
+* int minute(void)
+* int msec(void)
+* int msecsSinceStartOfDay(void)
+* int msecsTo(QTime)
+* int restart(void)
+* int second(void)
+* int secsTo(QTime)
+* bool setHMS(int h, int m, int s, int ms)
+* void start(void)
+* QString toString(QString)
+* QTime currentTime(void)
+* QTime fromMSecsSinceStartOfDay(int msecs)
+* QTime fromString(QString,QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTimer クラス
+
+QTimer クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtimer.html
+
+
+仮引数 : QObject \*parent
+
+* int interval(void)
+* bool isActive(void)
+* bool isSingleShot(void)
+* void setInterval(int msec)
+* void setSingleShot(bool singleShot)
+* int timerId(void)
+* void start(void)
+* void stop(void)
+* void settimeoutEvent(const char \*)
+* const char \*gettimeoutEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QToolBar クラス
+
+QToolBar クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtoolbar.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QWidget
+
+* QAction \*actionAt(int x, int y)
+* QAction \*addAction(QString)
+* QAction \*addSeparator(void)
+* QAction \*addWidget(QWidget \*widget)
+* int allowedAreas(void)
+* void clear(void)
+* QSize iconSize(void)
+* QAction \*insertSeparator(QAction \*before)
+* QAction \*insertWidget(QAction \*before, QWidget \*widget)
+* bool isAreaAllowed(Qt::ToolBarArea area)
+* bool isFloatable(void)
+* bool isFloating(void)
+* bool isMovable(void)
+* int orientation(void)
+* void setAllowedAreas(Qt::ToolBarArea areas)
+* void setFloatable(bool floatable)
+* void setMovable(bool movable)
+* void setOrientation(Qt::Orientation orientation)
+* QAction \*toggleViewAction(void)
+* int toolButtonStyle(void)
+* QWidget \*widgetForAction(QAction \*action)
+* void setIconSize(QSize)
+* void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
+
+.. index::
+       pair: RingQt クラスリファレンス; QToolButton クラス
+
+QToolButton クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtoolbutton.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractButton
+
+* Qt::ArrowType arrowType(void)
+* bool autoRaise(void)
+* QAction \* defaultAction(void)
+* QMenu \* menu(void)
+* QToolButton::ToolButtonPopupMode popupMode(void)
+* void setArrowType(Qt::ArrowType type)
+* void setAutoRaise(bool enable)
+* void setMenu(QMenu \* menu)
+* void setPopupMode(QToolButton::ToolButtonPopupMode mode)
+* Qt::ToolButtonStyle toolButtonStyle(void)
+* void setDefaultAction(QAction \* action)
+* void setToolButtonStyle(Qt::ToolButtonStyle style)
+* void showMenu(void)
+* void settriggeredEvent(const char \*)
+* const char \*gettriggeredEvent(void)
+* void setClickEvent(const char \*)
+* const char \*getClickEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTorusMesh クラス
+
+QTorusMesh クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qtorusmesh.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float minorRadius(void)
+* float radius(void)
+* int rings(void)
+* int slices(void)
+* void setMinorRadius(float minorRadius)
+* void setRadius(float radius)
+* void setRings(int rings)
+* void setSlices(int slices)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTransform クラス
+
+QTransform クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dcore-qtransform.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* QMatrix4x4 matrix(void)
+* QQuaternion rotation(void)
+* float rotationX(void)
+* float rotationY(void)
+* float rotationZ(void)
+* float scale(void)
+* QVector3D scale3D(void)
+* QVector3D translation(void)
+* void setMatrix(QMatrix4x4 matrix)
+* void setRotation(QQuaternion rotation)
+* void setRotationX(float rotationX)
+* void setRotationY(float rotationY)
+* void setRotationZ(float rotationZ)
+* void setScale(float scale)
+* void setScale3D(QVector3D scale)
+* void setTranslation(QVector3D translation)
+* QQuaternion fromAxes(QVector3D xAxis, QVector3D yAxis, QVector3D zAxis)
+* QQuaternion fromAxesAndAngles(QVector3D axis1, float angle1, QVector3D axis2, float angle2)
+* QQuaternion fromAxesAndAngles_2(QVector3D axis1, float angle1, QVector3D axis2, float angle2, QVector3D axis3, float angle3)
+* QQuaternion fromAxisAndAngle(QVector3D axis, float angle)
+* QQuaternion fromAxisAndAngle_2(float x, float y, float z, float angle)
+* QQuaternion fromEulerAngles(QVector3D eulerAngles)
+* QQuaternion fromEulerAngles_2(float pitch, float yaw, float roll)
+* QMatrix4x4 rotateAround(QVector3D point, float angle, QVector3D axis)
+* QMatrix4x4 rotateFromAxes(QVector3D xAxis, QVector3D yAxis, QVector3D zAxis)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTreeView クラス
+
+QTreeView クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtreeview.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QAbstractItemView
+
+* bool allColumnsShowFocus(void)
+* int autoExpandDelay(void)
+* int columnAt(int x)
+* int columnViewportPosition(int column)
+* int columnWidth(int column)
+* bool expandsOnDoubleClick(void)
+* QHeaderView \*header(void)
+* int indentation(void)
+* QModelIndex indexAbove(QModelIndex)
+* QModelIndex indexBelow(QModelIndex)
+* bool isAnimated(void)
+* bool isColumnHidden(int column)
+* bool isExpanded(QModelIndex)
+* bool isFirstColumnSpanned(int row, QModelIndex)
+* bool isHeaderHidden(void)
+* bool isRowHidden(int row,QModelIndex)
+* bool isSortingEnabled(void)
+* bool itemsExpandable(void)
+* bool rootIsDecorated(void)
+* void setAllColumnsShowFocus(bool enable)
+* void setAnimated(bool enable)
+* void setAutoExpandDelay(int delay)
+* void setColumnHidden(int column, bool hide)
+* void setColumnWidth(int column, int width)
+* void setExpanded(QModelIndex, bool expanded)
+* void setExpandsOnDoubleClick(bool enable)
+* void setFirstColumnSpanned(int row, QModelIndex, bool span)
+* void setHeader(QHeaderView \* header)
+* void setHeaderHidden(bool hide)
+* void setIndentation(int i)
+* void setItemsExpandable(bool enable)
+* void setRootIsDecorated(bool show)
+* void setRowHidden(int row,QModelIndex, bool hide)
+* void setSortingEnabled(bool enable)
+* void setUniformRowHeights(bool uniform)
+* void setWordWrap(bool on)
+* void sortByColumn(int column,Qt::SortOrder order)
+* bool uniformRowHeights(void)
+* bool wordWrap(void)
+* void dataChanged(QModelIndex,QModelIndex)
+* QModelIndex indexAt(QPoint)
+* void keyboardSearch(QString)
+* void reset(void)
+* void scrollTo(QModelIndex, QAbstractItemView::ScrollHint)
+* void selectAll(void)
+* void setModel(QAbstractItemModel \*model)
+* void setRootIndex(QModelIndex)
+* void setSelectionModel(QItemSelectionModel \*selectionModel)
+* QRect visualRect(QModelIndex)
+* void collapse(QModelIndex)
+* void collapseAll(void)
+* void expand(QModelIndex)
+* void expandAll(void)
+* void expandToDepth(int depth)
+* void hideColumn(int column)
+* void resizeColumnToContents(int column)
+* void showColumn(int column)
+* void setcollapsedEvent(const char \*)
+* void setexpandedEvent(const char \*)
+* void setactivatedEvent(const char \*)
+* void setclickedEvent(const char \*)
+* void setdoubleClickedEvent(const char \*)
+* void setenteredEvent(const char \*)
+* void setpressedEvent(const char \*)
+* void setviewportEnteredEvent(const char \*)
+* const char \*getcollapsedEvent(void)
+* const char \*getexpandedEvent(void)
+* const char \*getactivatedEvent(void)
+* const char \*getclickedEvent(void)
+* const char \*getdoubleClickedEvent(void)
+* const char \*getenteredEvent(void)
+* const char \*getpressedEvent(void)
+* const char \*getviewportEnteredEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTreeWidget クラス
+
+QTreeWidget クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtreewidget.html
+
+
+仮引数 : QWidget \*
+
+
+親クラス : QTreeView
+
+* void addTopLevelItem(QTreeWidgetItem \*item)
+* void closePersistentEditor(QTreeWidgetItem \*item, int column)
+* int columnCount(void)
+* int currentColumn(void)
+* QTreeWidgetItem \*currentItem(void)
+* void editItem(QTreeWidgetItem \*item, int column)
+* QTreeWidgetItem \*headerItem(void)
+* int indexOfTopLevelItem(QTreeWidgetItem \*item)
+* void insertTopLevelItem(int index, QTreeWidgetItem \*item)
+* QTreeWidgetItem \*invisibleRootItem(void)
+* bool isFirstItemColumnSpanned( QTreeWidgetItem \*item)
+* QTreeWidgetItem \*itemAbove(QTreeWidgetItem \*item)
+* QTreeWidgetItem \*itemAt(int x, int y)
+* QTreeWidgetItem \*itemBelow(QTreeWidgetItem \*item)
+* QWidget \*itemWidget(QTreeWidgetItem \*item, int column)
+* void openPersistentEditor(QTreeWidgetItem \*item, int column)
+* void removeItemWidget(QTreeWidgetItem \*item, int column)
+* void setColumnCount(int columns)
+* void setCurrentItem(QTreeWidgetItem \* item, QItemSelectionModel::SelectionFlag column)
+* void setFirstItemColumnSpanned(QTreeWidgetItem \*item, bool span)
+* void setHeaderItem(QTreeWidgetItem \*item)
+* void setHeaderLabel(QString)
+* void setHeaderLabels(QStringList)
+* void setItemWidget(QTreeWidgetItem \*item, int column, QWidget \* widget)
+* int sortColumn(void)
+* void sortItems(int column, Qt::SortOrder order)
+* QTreeWidgetItem \*takeTopLevelItem(int index)
+* QTreeWidgetItem \*topLevelItem(int index)
+* int topLevelItemCount(void)
+* QRect visualItemRect(QTreeWidgetItem \*item)
+* void setSelectionModel(QItemSelectionModel \*selectionModel)
+* void clear(void)
+* void collapseItem(QTreeWidgetItem \*item)
+* void expandItem(QTreeWidgetItem \*item)
+* void scrollToItem(QTreeWidgetItem \*item, QAbstractItemView::ScrollHint hint)
+* void setcollapsedEvent(const char \*)
+* void setexpandedEvent(const char \*)
+* void setactivatedEvent(const char \*)
+* void setclickedEvent(const char \*)
+* void setdoubleClickedEvent(const char \*)
+* void setenteredEvent(const char \*)
+* void setpressedEvent(const char \*)
+* void setviewportEnteredEvent(const char \*)
+* void setcurrentItemChangedEvent(const char \*)
+* void setitemActivatedEvent(const char \*)
+* void setitemChangedEvent(const char \*)
+* void setitemClickedEvent(const char \*)
+* void setitemCollapsedEvent(const char \*)
+* void setitemDoubleClickedEvent(const char \*)
+* void setitemEnteredEvent(const char \*)
+* void setitemExpandedEvent(const char \*)
+* void setitemPressedEvent(const char \*)
+* void setitemSelectionChangedEvent(const char \*)
+* const char \*getcollapsedEvent(void)
+* const char \*getexpandedEvent(void)
+* const char \*getactivatedEvent(void)
+* const char \*getclickedEvent(void)
+* const char \*getdoubleClickedEvent(void)
+* const char \*getenteredEvent(void)
+* const char \*getpressedEvent(void)
+* const char \*getviewportEnteredEvent(void)
+* const char \*getcurrentItemChangedEvent(void)
+* const char \*getitemActivatedEvent(void)
+* const char \*getitemChangedEvent(void)
+* const char \*getitemClickedEvent(void)
+* const char \*getitemCollapsedEvent(void)
+* const char \*getitemDoubleClickedEvent(void)
+* const char \*getitemEnteredEvent(void)
+* const char \*getitemExpandedEvent(void)
+* const char \*getitemPressedEvent(void)
+* const char \*getitemSelectionChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QTreeWidgetItem クラス
+
+QTreeWidgetItem クラス
+======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qtreewidgetitem.html
+
+
+仮引数 : void
+
+* void addChild(QTreeWidgetItem \*child)
+* QBrush background(int column)
+* int checkState(int column)
+* QTreeWidgetItem \*child(int index)
+* int childCount(void)
+* int childIndicatorPolicy(void)
+* QTreeWidgetItem \*clone(void)
+* int columnCount(void)
+* QVariant data(int column, int role)
+* int flags(void)
+* QFont font(int column)
+* QBrush foreground(int column)
+* QIcon icon(int column)
+* int indexOfChild(QTreeWidgetItem \*child)
+* void insertChild(int index, QTreeWidgetItem \*child)
+* bool isDisabled(void)
+* bool isExpanded(void)
+* bool isFirstColumnSpanned(void)
+* bool isHidden(void)
+* bool isSelected(void)
+* QTreeWidgetItem \*parent(void)
+* void read(QDataStream)
+* void removeChild(QTreeWidgetItem \*child)
+* void setBackground(int column,QBrush)
+* void setCheckState(int column, Qt::CheckState state)
+* void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy)
+* void setData(int column, int role,QVariant)
+* void setDisabled(bool disabled)
+* void setExpanded(bool expand)
+* void setFirstColumnSpanned(bool span)
+* void setFlags(Qt::ItemFlag flags)
+* void setFont(int column, QFont)
+* void setForeground(int column, QBrush)
+* void setHidden(bool hide)
+* void setIcon(int column, QIcon)
+* void setSelected(bool select)
+* void setSizeHint(int column, QSize)
+* void setStatusTip(int column, QString)
+* void setText(int column, QString)
+* void setTextAlignment(int column, int alignment)
+* void setToolTip(int column, QString)
+* void setWhatsThis(int column, QString)
+* QSize sizeHint(int column)
+* void sortChildren(int column, Qt::SortOrder order)
+* QString statusTip(int column)
+* QTreeWidgetItem \*takeChild(int index)
+* QString text(int column)
+* int textAlignment(int column)
+* QString toolTip(int column)
+* QTreeWidget \*treeWidget(void)
+* int type(void)
+* QString whatsThis(int column)
+* void write(QDataStream)
+
+.. index::
+       pair: RingQt クラスリファレンス; QUrl クラス
+
+QUrl クラス
+===========
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qurl.html
+
+
+仮引数 : QString
+
+* void clear(void)
+* QString errorString(void)
+* QString fileName(QUrl::ComponentFormattingOption options)
+* QString fragment(QUrl::ComponentFormattingOption options)
+* bool hasFragment(void)
+* bool hasQuery(void)
+* QString host(QUrl::ComponentFormattingOption options)
+* bool isEmpty(void)
+* bool isLocalFile(void)
+* bool isParentOf(QUrl)
+* bool isRelative(void)
+* bool isValid(void)
+* QString path(QUrl::ComponentFormattingOption options)
+* int port(int defaultPort)
+* QString query(QUrl::ComponentFormattingOption options)
+* QUrl resolved(QUrl)
+* QString scheme(void)
+* void setAuthority(QString, QUrl::ParsingMode mode)
+* void setFragment(QString, QUrl::ParsingMode mode)
+* void setHost(QString, QUrl::ParsingMode mode)
+* void setPassword(QString, QUrl::ParsingMode mode)
+* void setPath(QString, QUrl::ParsingMode mode)
+* void setPort(int port)
+* void setQuery(QString, QUrl::ParsingMode mode)
+* void setScheme(QString)
+* void setUrl(QString, QUrl::ParsingMode parsingMode)
+* void setUserInfo(QString, QUrl::ParsingMode mode)
+* void setUserName(QString, QUrl::ParsingMode mode)
+* void swap(QUrl)
+* QString topLevelDomain(QUrl::ComponentFormattingOption options)
+* QString userInfo(QUrl::ComponentFormattingOption options)
+* QString userName(QUrl::ComponentFormattingOption options)
+* QUrl fromLocalFile(QString)
+
+.. index::
+       pair: RingQt クラスリファレンス; QUuid クラス
+
+QUuid クラス
+============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/quuid.html
+
+
+仮引数 : void
+
+* QString toString(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVBoxLayout クラス
+
+QVBoxLayout クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvboxlayout.html
+
+
+仮引数 : void
+
+
+親クラス : QBoxLayout
+
+* void addWidget(QWidget \*)
+* void addLayout(QLayout \*)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariant クラス
+
+QVariant クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvariant.html
+
+
+仮引数 : void
+
+* bool canConvert(int targetTypeId)
+* void clear(void)
+* bool convert(int targetTypeId)
+* bool isNull(void)
+* bool isValid(void)
+* void swap(QVariant)
+* QBitArray toBitArray(void)
+* bool toBool(void)
+* QByteArray toByteArray(void)
+* QChar toChar(void)
+* QDate toDate(void)
+* QDateTime toDateTime(void)
+* double toDouble(bool \*ok)
+* QEasingCurve toEasingCurve(void)
+* float toFloat(bool \*ok)
+* int toInt(bool \*ok)
+* QJsonArray toJsonArray(void)
+* QJsonDocument toJsonDocument(void)
+* QJsonObject toJsonObject(void)
+* QJsonValue toJsonValue(void)
+* QLine toLine(void)
+* QLineF toLineF(void)
+* QLocale toLocale(void)
+* qlonglong toLongLong(bool \*ok)
+* QModelIndex toModelIndex(void)
+* QPointF toPointF(void)
+* qreal toReal(bool \*ok)
+* QRect toRect(void)
+* QRectF toRectF(void)
+* QRegExp toRegExp(void)
+* QRegularExpression toRegularExpression(void)
+* QSize toSize(void)
+* QSizeF toSizeF(void)
+* QStringList toStringList(void)
+* QTime toTime(void)
+* uint toUInt(bool \*ok)
+* qulonglong toULongLong(bool \*ok)
+* QUrl toUrl(void)
+* QUuid toUuid(void)
+* QVariant::Type type(void)
+* const char \*typeName(void)
+* int userType(void)
+* QString toString(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariant2 クラス
+
+QVariant2 クラス
+================
+
+
+親クラス : QVariant
+
+
+仮引数 : int
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariant3 クラス
+
+QVariant3 クラス
+================
+
+
+親クラス : QVariant
+
+
+仮引数 : float
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariant4 クラス
+
+QVariant4 クラス
+================
+
+
+親クラス : QVariant
+
+
+仮引数 : double
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariant5 クラス
+
+QVariant5 クラス
+================
+
+
+親クラス : QVariant
+
+
+仮引数 : QString
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariantDouble クラス
+
+QVariantDouble クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvariantdouble.html
+
+
+親クラス : QVariant
+
+
+仮引数 : double
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariantFloat クラス
+
+QVariantFloat クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvariantfloat.html
+
+
+親クラス : QVariant
+
+
+仮引数 : float
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariantInt クラス
+
+QVariantInt クラス
+==================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvariantint.html
+
+
+親クラス : QVariant
+
+
+仮引数 : int
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVariantString クラス
+
+QVariantString クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvariantstring.html
+
+
+親クラス : QVariant
+
+
+仮引数 : QString
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QVector2D クラス
+
+QVector2D クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvector2d.html
+
+
+仮引数 : float,float
+
+* float distanceToLine(QVector2D point, QVector2D direction)
+* float distanceToPoint(QVector2D point)
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector2D normalized(void)
+* void setX(float x)
+* void setY(float y)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector3D toVector3D(void)
+* QVector4D toVector4D(void)
+* float x(void)
+* float y(void)
+* float dotProduct(QVector2D v1, QVector2D v2)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVector3D クラス
+
+QVector3D クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvector3d.html
+
+
+仮引数 : float,float,float
+
+* float distanceToLine(QVector3D point, QVector3D direction)
+* float distanceToPlane(QVector3D plane, QVector3D normal)
+* float distanceToPlane_2(QVector3D plane1, QVector3D plane2, QVector3D plane3)
+* float distanceToPoint(QVector3D point)
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector3D normalized(void)
+* void setY(float y)
+* void setZ(float z)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector2D toVector2D(void)
+* QVector4D toVector4D(void)
+* float y(void)
+* float z(void)
+* QVector3D crossProduct(QVector3D v1, QVector3D v2)
+* float dotProduct(QVector3D v1, QVector3D v2)
+* QVector3D normal(QVector3D v1, QVector3D v2)
+* QVector3D normal_2(QVector3D v1, QVector3D v2, QVector3D v3)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVector4D クラス
+
+QVector4D クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvector4d.html
+
+
+仮引数 : float,float,float,float
+
+* bool isNull(void)
+* float length(void)
+* float lengthSquared(void)
+* void normalize(void)
+* QVector4D normalized(void)
+* void setW(float w)
+* void setX(float x)
+* void setY(float y)
+* void setZ(float z)
+* QPoint toPoint(void)
+* QPointF toPointF(void)
+* QVector2D toVector2D(void)
+* QVector2D toVector2DAffine(void)
+* QVector3D toVector3D(void)
+* QVector3D toVector3DAffine(void)
+* float w(void)
+* float x(void)
+* float y(void)
+* float z(void)
+* float dotProduct(QVector4D v1, QVector4D v2)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVectorQVoice クラス
+
+QVectorQVoice クラス
+====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvectorqvoice.html
+
+
+仮引数 : void
+
+* int count(void)
+* QVoice value(int i)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVideoWidget クラス
+
+QVideoWidget クラス
+===================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvideowidget.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* int aspectRatioMode(void)
+* int brightness(void)
+* int contrast(void)
+* int hue(void)
+* bool isFullScreen(void)
+* int saturation(void)
+* void setAspectRatioMode(Qt::AspectRatioMode mode)
+* void setBrightness(int brightness)
+* void setContrast(int contrast)
+* void setFullScreen(bool fullScreen)
+* void setHue(int hue)
+* void setSaturation(int saturation)
+* void setbrightnessChangedEvent(const char \*)
+* void setcontrastChangedEvent(const char \*)
+* void setfullScreenChangedEvent(const char \*)
+* void sethueChangedEvent(const char \*)
+* void setsaturationChangedEvent(const char \*)
+* const char \*getbrightnessChangedEvent(void)
+* const char \*getcontrastChangedEvent(void)
+* const char \*getfullScreenChangedEvent(void)
+* const char \*gethueChangedEvent(void)
+* const char \*getsaturationChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVideoWidgetControl クラス
+
+QVideoWidgetControl クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvideowidgetcontrol.html
+
+
+親クラス : QMediaControl
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QViewport クラス
+
+QViewport クラス
+================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3drender-qviewport.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+* float gamma(void)
+* QRectF normalizedRect(void)
+* void setGamma(float gamma)
+* void setNormalizedRect(QRectF normalizedRect)
+
+.. index::
+       pair: RingQt クラスリファレンス; QVoice クラス
+
+QVoice クラス
+=============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qvoice.html
+
+
+仮引数 : void
+
+* QVoice::Age age(void)
+* QVoice::Gender gender(void)
+* QString name(void)
+* QString ageName(QVoice::Age age)
+* QString genderName(QVoice::Gender gender)
+
+.. index::
+       pair: RingQt クラスリファレンス; QWebEngineView クラス
+
+QWebEngineView クラス
+=====================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qwebengineview.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* bool hasSelection(void)
+* QWebEngineHistory \*history(void)
+* void load(QUrl) # In RingQt use : void loadpage(QUrl)
+* QWebEnginePage \*page(void)
+* QAction \*pageAction(QWebEnginePage::WebAction action)
+* QString selectedText(void)
+* void setContent(QByteArray,QString,QUrl)
+* void setHtml(QString,QUrl)
+* void setPage(QWebEnginePage \*page)
+* void setUrl(QUrl)
+* void setZoomFactor(qreal factor)
+* QWebSettings \*settings(void)
+* QString title(void)
+* void triggerPageAction(QWebEnginePage::WebAction action, bool checked)
+* QUrl url(void)
+* qreal zoomFactor(void)
+* void back(void)
+* void forward(void)
+* void reload(void)
+* void stop(void)
+* void setloadFinishedEvent(const char \*)
+* void setloadProgressEvent(const char \*)
+* void setloadStartedEvent(const char \*)
+* void setselectionChangedEvent(const char \*)
+* void settitleChangedEvent(const char \*)
+* void seturlChangedEvent(const char \*)
+* const char \*getloadFinishedEvent(void)
+* const char \*getloadProgressEvent(void)
+* const char \*getloadStartedEvent(void)
+* const char \*getselectionChangedEvent(void)
+* const char \*gettitleChangedEvent(void)
+* const char \*geturlChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QWebView クラス
+
+QWebView クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qwebview.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWebEngineView
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QWebView クラス
+
+QWebView クラス
+===============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qwebview.html
+
+
+仮引数 : QWidget \*parent
+
+
+親クラス : QWidget
+
+* QWebHistory \*history(void)
+* QAction \*pageAction(QWebPage::WebAction action)
+* void setContent(QByteArray,QString,QUrl)
+* void setHtml(QString,QUrl)
+* void setPage(QWebPage \*page)
+* void setZoomFactor(qreal factor)
+* QWebSettings \*settings(void)
+* void triggerPageAction(QWebPage::WebAction action, bool checked)
+* QUrl url(void)
+* qreal zoomFactor(void)
+* void back(void)
+* void forward(void)
+* void print(QPrinter \*printer)
+* void reload(void)
+* void stop(void)
+* void setloadProgressEvent(const char \*)
+* void setloadStartedEvent(const char \*)
+* void setselectionChangedEvent(const char \*)
+* void seturlChangedEvent(const char \*)
+* const char \*getloadFinishedEvent(void)
+* const char \*getloadProgressEvent(void)
+* const char \*getloadStartedEvent(void)
+* const char \*getselectionChangedEvent(void)
+* const char \*gettitleChangedEvent(void)
+* const char \*geturlChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QWidget クラス
+
+QWidget クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qwidget.html
+
+
+仮引数 : void
+
+
+親クラス : QObject
+
+* 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)
+* int foregroundRole(void)
+* QRect frameGeometry(void)
+* QSize frameSize(void)
+* QRect geometry(void)
+* void getContentsMargins(int \*left, int \*top, int \*right, int \*bottom)
+* QPixmap grab(QRect)
+* void grabGesture(Qt::GestureType gesture, Qt::GestureFlag flags)
+* void grabKeyboard(void)
+* void grabMouse(void)
+* int grabShortcut(QKeySequence , Qt::ShortcutContext context)
+* QGraphicsEffect \*graphicsEffect(void)
+* QGraphicsProxyWidget \*graphicsProxyWidget(void)
+* bool hasFocus(void)
+* bool hasMouseTracking(void)
+* int height(void)
+* int heightForWidth(int w)
+* int inputMethodHints(void)
+* QVariant inputMethodQuery(Qt::InputMethodQuery 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(Qt::WindowType 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, QWidget::RenderFlag)
+* void repaint(void)
+* 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(Qt::WidgetAttribute attribute, bool on)
+* void setAutoFillBackground(bool enabled)
+* void setBackgroundRole(QPalette::ColorRole role)
+* void setBaseSize(int basew, int baseh)
+* void setContentsMargins(int left, int top, int right, int bottom)
+* void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
+* void setCursor(QCursor)
+* void setFixedHeight(int h)
+* void setFixedSize(int w, int h)
+* void setFixedWidth(int w)
+* void setFocus(Qt::FocusReason reason)
+* void setFocusPolicy(Qt::FocusPolicy policy)
+* void setFocusProxy(QWidget \*w)
+* void setFont(QFont)
+* void setForegroundRole(QPalette::ColorRole role)
+* void setGeometry(int x, int y, int w, int h)
+* void setGraphicsEffect(QGraphicsEffect \*effect)
+* void setInputMethodHints(Qt::InputMethodHint hints)
+* void setLayout(QLayout \*layout)
+* void setLayoutDirection(Qt::LayoutDirection 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(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
+* void setStatusTip(QString)
+* void setStyle(QStyle \*style)
+* void setToolTip(QString)
+* void setUpdatesEnabled(bool enable)
+* void setWhatsThis(QString)
+* void setWindowFilePath(QString)
+* void setWindowFlags(Qt::WindowType type)
+* void setWindowIcon(QIcon)
+* void setWindowIconText(QString)
+* void setWindowModality(Qt::WindowModality windowModality)
+* void setWindowOpacity(double level)
+* void setWindowRole(QString)
+* void setWindowState(Qt::WindowState 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(Qt::WidgetAttribute attribute)
+* QString toolTip(void)
+* bool underMouse(void)
+* void ungrabGesture(Qt::GestureType gesture)
+* void unsetCursor(void)
+* 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)
+* QWindow \*windowHandle(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)
+* QWidget \*createWindowContainer(QWindow \*window, QWidget \*parent, Qt::WindowFlags flags)
+
+.. index::
+       pair: RingQt クラスリファレンス; QWindow クラス
+
+QWindow クラス
+==============
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qwindow.html
+
+
+仮引数 : QScreen \*
+
+
+親クラス : QObject
+
+* QSize baseSize(void)
+* Qt::ScreenOrientation contentOrientation(void)
+* void create(void)
+* QCursor cursor(void)
+* void destroy(void)
+* qreal devicePixelRatio(void)
+* QString filePath(void)
+* Qt::WindowFlags flags(void)
+* QObject \* focusObject(void)
+* QRect frameGeometry(void)
+* QMargins frameMargins(void)
+* QPoint framePosition(void)
+* QRect geometry(void)
+* int height(void)
+* QIcon icon(void)
+* bool isActive(void)
+* bool isAncestorOf(QWindow \*child, QWindow::AncestorMode mode)
+* bool isExposed(void)
+* bool isModal(void)
+* bool isTopLevel(void)
+* bool isVisible(void)
+* QPoint mapFromGlobal(QPoint pos)
+* QPoint mapToGlobal(QPoint pos)
+* QRegion mask(void)
+* int maximumHeight(void)
+* QSize maximumSize(void)
+* int maximumWidth(void)
+* int minimumHeight(void)
+* QSize minimumSize(void)
+* int minimumWidth(void)
+* Qt::WindowModality modality(void)
+* qreal opacity(void)
+* QPoint position(void)
+* void reportContentOrientationChange(Qt::ScreenOrientation orientation)
+* QSurfaceFormat requestedFormat(void)
+* void resize(QSize newSize)
+* void resize_2(int w, int h)
+* QScreen \* screen(void)
+* void setBaseSize(QSize size)
+* void setCursor(QCursor cursor)
+* void setFilePath(QString filePath)
+* void setFlags(Qt::WindowFlags flags)
+* void setFormat(QSurfaceFormat format)
+* void setFramePosition(QPoint point)
+* void setGeometry(int posx, int posy, int w, int h)
+* void setGeometry_2(QRect rect)
+* void setIcon(QIcon icon)
+* bool setKeyboardGrabEnabled(bool grab)
+* void setMask(QRegion region)
+* void setMaximumSize(QSize size)
+* void setMinimumSize(QSize size)
+* void setModality(Qt::WindowModality modality)
+* bool setMouseGrabEnabled(bool grab)
+* void setOpacity(qreal level)
+* void setParent(QWindow \*parent)
+* void setPosition(QPoint pt)
+* void setPosition_2(int posx, int posy)
+* void setScreen(QScreen \*newScreen)
+* void setSizeIncrement(QSize size)
+* void setTransientParent(QWindow \*parent)
+* void setVisibility(QWindow::Visibility v)
+* void setWindowState(Qt::WindowState state)
+* QSize sizeIncrement(void)
+* QString title(void)
+* QWindow \* transientParent(void)
+* Qt::WindowType type(void)
+* void unsetCursor(void)
+* QWindow::Visibility visibility(void)
+* int width(void)
+* WId winId(void)
+* Qt::WindowState windowState(void)
+* int x(void)
+* int y(void)
+* void alert(int msec)
+* bool close(void)
+* void hide(void)
+* void lower(void)
+* void raise(void)
+* void requestActivate(void)
+* void setHeight(int arg)
+* void setMaximumHeight(int h)
+* void setMaximumWidth(int w)
+* void setMinimumHeight(int h)
+* void setMinimumWidth(int w)
+* void setTitle(QString )
+* void setVisible(bool visible)
+* void setWidth(int arg)
+* void setX(int arg)
+* void setY(int arg)
+* void show(void)
+* void showFullScreen(void)
+* void showMaximized(void)
+* void showMinimized(void)
+* void showNormal(void)
+* QWindow \* fromWinId(WId id)
+* void setactiveChangedEvent(const char \*)
+* void setcontentOrientationChangedEvent(const char \*)
+* void setfocusObjectChangedEvent(const char \*)
+* void setheightChangedEvent(const char \*)
+* void setmaximumHeightChangedEvent(const char \*)
+* void setmaximumWidthChangedEvent(const char \*)
+* void setminimumHeightChangedEvent(const char \*)
+* void setminimumWidthChangedEvent(const char \*)
+* void setmodalityChangedEvent(const char \*)
+* void setopacityChangedEvent(const char \*)
+* void setscreenChangedEvent(const char \*)
+* void setvisibilityChangedEvent(const char \*)
+* void setvisibleChangedEvent(const char \*)
+* void setwidthChangedEvent(const char \*)
+* void setwindowStateChangedEvent(const char \*)
+* void setwindowTitleChangedEvent(const char \*)
+* void setxChangedEvent(const char \*)
+* void setyChangedEvent(const char \*)
+* const char \*getactiveChangedEvent(void)
+* const char \*getcontentOrientationChangedEvent(void)
+* const char \*getfocusObjectChangedEvent(void)
+* const char \*getheightChangedEvent(void)
+* const char \*getmaximumHeightChangedEvent(void)
+* const char \*getmaximumWidthChangedEvent(void)
+* const char \*getminimumHeightChangedEvent(void)
+* const char \*getminimumWidthChangedEvent(void)
+* const char \*getmodalityChangedEvent(void)
+* const char \*getopacityChangedEvent(void)
+* const char \*getscreenChangedEvent(void)
+* const char \*getvisibilityChangedEvent(void)
+* const char \*getvisibleChangedEvent(void)
+* const char \*getwidthChangedEvent(void)
+* const char \*getwindowStateChangedEvent(void)
+* const char \*getwindowTitleChangedEvent(void)
+* const char \*getxChangedEvent(void)
+* const char \*getyChangedEvent(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamAttribute クラス
+
+QXmlStreamAttribute クラス
+==========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamattribute.html
+
+
+仮引数 : void
+
+* bool isDefault(void)
+* QStringRef name(void)
+* QStringRef namespaceUri(void)
+* QStringRef prefix(void)
+* QStringRef qualifiedName(void)
+* QStringRef value(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamAttributes クラス
+
+QXmlStreamAttributes クラス
+===========================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamattributes.html
+
+
+仮引数 : void
+
+* void append(QString  namespaceUri, QString  name, QString  value)
+* void append_2(QString  qualifiedName, QString  value)
+* bool hasAttribute(QString  qualifiedName)
+* bool hasAttribute_2(QLatin1String qualifiedName)
+* bool hasAttribute_3(QString  namespaceUri, QString  name)
+* QStringRef value(QString  namespaceUri, QString  name)
+* QStringRef value_2(QString  namespaceUri, QLatin1String name)
+* QStringRef value_3(QLatin1String namespaceUri, QLatin1String name)
+* QStringRef value_4(QString  qualifiedName)
+* QStringRef value_5(QLatin1String qualifiedName)
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamEntityDeclaration クラス
+
+QXmlStreamEntityDeclaration クラス
+==================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamentitydeclaration.html
+
+
+仮引数 : void
+
+* QStringRef name(void)
+* QStringRef notationName(void)
+* QStringRef publicId(void)
+* QStringRef systemId(void)
+* QStringRef value(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamEntityResolver クラス
+
+QXmlStreamEntityResolver クラス
+===============================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamentityresolver.html
+
+
+仮引数 : void
+
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamNamespaceDeclaration クラス
+
+QXmlStreamNamespaceDeclaration クラス
+=====================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamnamespacedeclaration.html
+
+
+仮引数 : void
+
+* QStringRef namespaceUri(void)
+* QStringRef prefix(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamNotationDeclaration クラス
+
+QXmlStreamNotationDeclaration クラス
+====================================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamnotationdeclaration.html
+
+
+仮引数 : void
+
+* QStringRef name(void)
+* QStringRef publicId(void)
+* QStringRef systemId(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamReader クラス
+
+QXmlStreamReader クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamreader.html
+
+
+仮引数 : void
+
+* void addData(QByteArray)
+* void addData_2(QString)
+* void addData_3(const char \* data)
+* void addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration)
+* void addExtraNamespaceDeclarations(QXmlStreamNamespaceDeclarations)
+* bool atEnd(void)
+* QXmlStreamAttributes attributes(void)
+* qint64 characterOffset(void)
+* void clear(void)
+* qint64 columnNumber(void)
+* QIODevice \*device(void)
+* QStringRef documentEncoding(void)
+* QStringRef documentVersion(void)
+* QStringRef dtdName(void)
+* QStringRef dtdPublicId(void)
+* QStringRef dtdSystemId(void)
+* QXmlStreamEntityDeclarations entityDeclarations(void)
+* QXmlStreamEntityResolver \*entityResolver(void)
+* Error error(void)
+* QString errorString(void)
+* bool hasError(void)
+* bool isCDATA(void)
+* bool isCharacters(void)
+* bool isComment(void)
+* bool isDTD(void)
+* bool isEndDocument(void)
+* bool isEndElement(void)
+* bool isEntityReference(void)
+* bool isProcessingInstruction(void)
+* bool isStandaloneDocument(void)
+* bool isStartDocument(void)
+* bool isStartElement(void)
+* bool isWhitespace(void)
+* qint64 lineNumber(void)
+* QStringRef name(void)
+* QXmlStreamNamespaceDeclarations namespaceDeclarations(void)
+* bool namespaceProcessing(void)
+* QStringRef namespaceUri(void)
+* QXmlStreamNotationDeclarations notationDeclarations(void)
+* QStringRef prefix(void)
+* QStringRef processingInstructionData(void)
+* QStringRef processingInstructionTarget(void)
+* QStringRef qualifiedName(void)
+* void raiseError(QString)
+* QString readElementText(QXmlStreamReader::ReadElementTextBehaviour)
+* TokenType readNext(void)
+* bool readNextStartElement(void)
+* void setDevice(QIODevice \*device)
+* void setEntityResolver(QXmlStreamEntityResolver \*resolver)
+* void setNamespaceProcessing(bool)
+* void skipCurrentElement(void)
+* QStringRef text(void)
+* QString tokenString(void)
+* TokenType tokenType(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; QXmlStreamWriter クラス
+
+QXmlStreamWriter クラス
+=======================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qxmlstreamwriter.html
+
+
+仮引数 : void
+
+* bool autoFormatting(void)
+* int autoFormattingIndent(void)
+* QTextCodec \*codec(void)
+* QIODevice \*device(void)
+* bool hasError(void)
+* void setAutoFormatting(bool enable)
+* void setAutoFormattingIndent(int spacesOrTabs)
+* void setCodec(QTextCodec \*codec)
+* void setCodec_2(const char \*codecName)
+* void setDevice(QIODevice \*device)
+* void writeAttribute(QString, QString,QString)
+* void writeAttribute_2(QString, QString)
+* void writeAttribute_3(QXmlStreamAttribute)
+* void writeAttributes(QXmlStreamAttributes)
+* void writeCDATA(QString text)
+* void writeCharacters(QString text)
+* void writeComment(QString text)
+* void writeCurrentToken(QXmlStreamReader reader)
+* void writeDTD(QString dtd)
+* void writeDefaultNamespace(QString namespaceUri)
+* void writeEmptyElement(QString namespaceUri, QString name)
+* void writeEmptyElement_2(QString qualifiedName)
+* void writeEndDocument(void)
+* void writeEndElement(void)
+* void writeEntityReference(QString name)
+* void writeNamespace(QString namespaceUri, QString prefix)
+* void writeProcessingInstruction(QString target, QString data)
+* void writeStartDocument(QString version)
+* void writeStartDocument_2(QString version, bool standalone)
+* void writeStartDocument_3(void)
+* void writeStartElement(QString namespaceUri, QString name)
+* void writeStartElement_2(QString qualifiedName)
+* void writeTextElement(QString namespaceUri, QString name, QString text)
+* void writeTextElement_2(QString qualifiedName, QString text)
+
+.. index::
+       pair: RingQt クラスリファレンス; Qt3DCamera クラス
+
+Qt3DCamera クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dcamera.html
+
+
+仮引数 : Qt3DCore::QNode \*
+
+
+親クラス : QEntity
+
+* float aspectRatio(void)
+* float bottom(void)
+* float exposure(void)
+* float farPlane(void)
+* float fieldOfView(void)
+* float left(void)
+* QCameraLens \*lens(void)
+* float nearPlane(void)
+* void pan(float angle)
+* void pan_2(float angle, QVector3D axis)
+* void panAboutViewCenter(float angle)
+* void panAboutViewCenter_2(float angle, QVector3D axis)
+* QQuaternion panRotation(float angle)
+* QVector3D position(void)
+* QMatrix4x4 projectionMatrix(void)
+* Qt3DRender::QCameraLens::ProjectionType projectionType(void)
+* float right(void)
+* void roll(float angle)
+* void rollAboutViewCenter(float angle)
+* QQuaternion rollRotation(float angle)
+* void rotate(QQuaternion q)
+* void rotateAboutViewCenter(QQuaternion q)
+* QQuaternion rotation(float angle, QVector3D axis)
+* void tilt(float angle)
+* void tiltAboutViewCenter(float angle)
+* QQuaternion tiltRotation(float angle)
+* float top(void)
+* Qt3DCore::QTransform \* transform(void)
+* void translate(QVector3D vLocal, Qt3DRender::QCamera::CameraTranslationOption option)
+* void translateWorld(QVector3D vWorld, Qt3DRender::QCamera::CameraTranslationOption option)
+* QVector3D upVector(void)
+* QVector3D viewCenter(void)
+* QVector3D viewVector(void)
+* void setAspectRatio(float aspectRatio)
+* void setBottom(float bottom)
+* void setExposure(float exposure)
+* void setFarPlane(float farPlane)
+* void setFieldOfView(float fieldOfView)
+* void setLeft(float left)
+* void setNearPlane(float nearPlane)
+* void setPosition(QVector3D position)
+* void setProjectionMatrix(QMatrix4x4 projectionMatrix)
+* void setProjectionType(Qt3DRender::QCameraLens::ProjectionType type)
+* void setRight(float right)
+* void setTop(float top)
+* void setUpVector(QVector3D upVector)
+* void setViewCenter(QVector3D viewCenter)
+* void viewAll(void)
+* void viewEntity(Qt3DCore::QEntity \*entity)
+* void viewSphere(QVector3D center, float radius)
+
+.. index::
+       pair: RingQt クラスリファレンス; Qt3DWindow クラス
+
+Qt3DWindow クラス
+=================
+
+
+C++ リファレンス : http://doc.qt.io/qt-5/qt3dextras-qt3dwindow.html
+
+
+仮引数 : void
+
+
+親クラス : QWindow
+
+* Qt3DRender::QFrameGraphNode \* activeFrameGraph(void)
+* QForwardRenderer \* defaultFrameGraph(void)
+* void registerAspect(Qt3DCore::QAbstractAspect \*aspect)
+* void registerAspect_2(QString name)
+* Qt3DRender::QRenderSettings \* renderSettings(void)
+* void setActiveFrameGraph(Qt3DRender::QFrameGraphNode \*activeFrameGraph)
+* void setRootEntity(Qt3DCore::QEntity \*root)
+* Qt3DCamera \*camera(void)
+
+.. index::
+       pair: RingQt クラスリファレンス; RingCodeHighlighter クラス
+
+RingCodeHighlighter クラス
+==========================
+
+
+仮引数 : QTextDocument \*parent
+
+* void setColors(QColor c1,QColor c2,QColor c3,QColor c4,QColor c5)
+* void setKeywordsBold(int nStatus)
+
diff --git a/docs/ja-jp/source/qtmobile.txt b/docs/ja-jp/source/qtmobile.txt
new file mode 100644 (file)
index 0000000..b99fe5e
--- /dev/null
@@ -0,0 +1,225 @@
+.. index:: 
+       single: モバイル用 RingQt アプリケーションのビルド方法; はじめに
+
+==============================================
+モバイル用 RingQt アプリケーションのビルド方法
+==============================================
+
+モバイル用 RingQt アプリケーションのビルド方法を学びます。
+
+
+.. index:: 
+       pair: モバイル用 RingQt アプリケーションのビルド方法; 開発環境のダウンロード
+
+開発環境のダウンロード
+======================
+
+このリンクをご確認ください : http://doc.qt.io/qt-5/androidgs.html
+
+ダウンロード
+
+* Android SDK ツール
+
+       https://developer.android.com/sdk/index.html
+
+* Android NDK (android-ndk-r21 で検証済み)
+
+       http://developer.android.com/tools/sdk/ndk/index.html
+
+* Java SE Development Kit (JDK) v6 以降
+
+       https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
+
+.. index:: 
+       pair: モバイル用 RingQt アプリケーションのビルド方法; Android SDK の更新
+
+Android SDK の更新
+==================
+
+開発で必要な API および、ツールのパッケージを得るには Android SDK を更新します。
+
+       Android 4.4.2 (API 19) で検証済み。
+
+* Windows では -  愛用のシステムに合わせて環境変数を定義します。
+
+(1) JAVA_HOME
+
+.. code-block:: ring
+       
+       用例 : C:\Program Files (x86)\Java\jdk1.8.0_05 
+
+(2) ANDROID_HOME       
+
+.. code-block:: ring
+
+       用例 : C:\JavaAndroid\AndroidSDK
+
+.. index:: 
+       pair: モバイル用 RingQt アプリケーションのビルド方法; Qt for Android のインストール
+
+Qt for Android のインストール
+=============================
+
+* このリンクから Qt for Android をインストールします。
+
+               https://download.qt.io/archive/qt/5.12/5.12.6/
+
+* Qt Creator を実行後に、 ツール → オプション → Android を選択して
+    Android NDK と SDK のパスを追加します。
+
+               http://doc.qt.io/qtcreator/creator-developing-android.html
+
+.. index:: 
+       pair: モバイル用 RingQt アプリケーションのビルド方法; Ring2EXE の用法
+
+
+Ring2EXE の用法
+===============
+
+Qt プロジェクトのアプリケーションを Ring2EXE で手軽に用意できます。
+
+用例:
+
+.. code-block:: none
+
+       ring2exe myapp.ring -dist -mobileqt
+
+
+.. note:: Ring ノートパッドの配布メニューからでもできます。
+
+.. tip:: Ring2EXE (Qt プロジェクトの準備 - モバイル機器用の配布) オプションは配布メニューにあります。
+
+.. index:: 
+       pair: モバイル用 RingQt アプリケーションのビルド方法; Ring アプリケーション用の Qt プロジェクト
+
+Ring アプリケーション用の Qt プロジェクト
+=========================================
+
+Ring2EXE または Ring ノートパッドの配布メニューを使用後に、
+
+*  Qt Creator で生成された Qt プロジェクトを開きます。
+
+       フォルダ : target/mobile/qtproject
+
+       プロジェクトファイル : project.pro
+
+* Qt Creator からリソース (YourAppName.ringo) にコンパイルされた Ring アプリケーションを見つけられます。
+
+       このファイル (Ring オブジェクトファイル) は Ring コンパイラで生成します。
+
+.. code-block:: none
+
+       ring YourAppName.ring -go -norun
+
+* Qt Creator でアプリケーションをビルドします。
+
+(1) リソースにはアプリケーションで使用する画像を追加できます。
+
+       またはテキストエディタを (Notepad など) で修正します : project.qrc
+
+(2) Ring アプリケーションから画像を見つけ出すには、リソースで使用されているファイル名が必要です。
+
+       用例
+
+.. code-block:: ring
+
+       if isandroid()
+               mypic = new QPixmap(":/cards.jpg")
+       else
+               mypic = new QPixmap("cards.jpg")
+       ok
+
+.. index:: 
+       pair: モバイル用 RingQt アプリケーションのビルド方法; Android 開発についての注釈 (RingQt)
+
+Android 開発についての注釈 (RingQt)
+===================================
+
+(1) メインのプロジェクトファイルは main.cpp です。
+
+       このファイルは Ring コンパイラ、仮想計算機 (VM) と RingQt で読み込まれます。
+
+       実行中にリソースの一時作業フォルダから Ring オブジェクトファイルを取得します。
+
+       そして Ring 仮想計算機 (VM) で Ring オブジェクトファイル (ringapp.ringo) を実行します。
+
+       main.cpp で追加 (複数のファイルから構成されているプロジェクト) することにより、
+       リソースの一時作業フォルダから複数のファイルを抽出できます。
+
+(2) この Ring エディションにおいて、この関数は未実装です。
+
+       * データベース (ODBC, SQLite と MySQL)
+
+       * セキュリティとインターネット関数 (LibCurl と OpenSSL)
+
+       * RingAllegro (Allegro ライブラリ)
+
+       * RingLibSDL (LibSDL ライブラリ)
+
+       Qt クラスは RingQt から使用します
+
+       データベースのアクセスには QSqlDatabase クラスを使用します。
+
+.. note:: 未実装のライブラリ (LibCurl, OpenSSL および Allegro) は全て Android 用にコンパイルできますが Qt プロジェクトは収録されていません。
+
+(3) Android 用のコードへ動作を切り替えたい場合は isandroid() を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       if isandroid()
+               // Android のコード
+       else
+               // それ以外のプラットフォーム
+       ok
+
+(4) ボタンのテキスト、または画像が繰り返し描画されることがあること気づくと思います!
+       このコードで Qt の問題を回避できます。
+
+.. code-block:: ring
+
+       if isandroid()
+               setStyleSheet("
+                       border-style: outset;
+                       border-width: 2px;
+                       border-radius: 4px;
+                       border-color: black;
+                       padding: 6px;")
+        ok
+
+(5) 手動設定によるコントロールの位置と寸法の代わりにレイアウトを常時使用します。
+       これはユーザインタフェースの問題回避を想定した最良の方法 (小規模、追加の寸法を有するコントロール) です。
+
+(6) Qt クラスを扱う場合はリソースから画像を決定できます (main.cpp で使うためのコピーは不要です)。
+
+
+用例:
+
+.. code-block:: ring
+
+       if isandroid()
+           mypic = new QPixmap(":/cards.jpg")
+       else
+           mypic = new QPixmap("cards.jpg")
+       ok
+
+RingQt にはファイル名を決定するために AppFile() 関数があります。
+
+用例:
+
+.. code-block:: ring
+
+       mypic = new QPixmap(AppFile("cards.jpg"))  # デスクトップまたは Androrid
+
+(7) プロジェクトのコード更新時、 Qt プロジェクトの生成に Ring2EXE を再実行する必要はありません。
+
+Ring ノートパッドの配布メニューからオブジェクトファイルの生成 (\*.ringo) を選択します。
+
+その後 YourAppName.ringo ファイルを target/mobile/qtproject フォルダへコピーしてファイルの置き換えに応じてください。
+
+(8) アプリケーションにフォルダに Qt リソースファイル (project.qrc) がある場合は、
+
+Ring2EXE または Ring ノートパッドの配布メニュー → Ring2EXE (Qt プロジェクトの準備 - モバイル機器用の配布) を実行するとリソースファイルが使用されるようになります。
+
+用例は ring/applications/cards ゲームを参照してください。
diff --git a/docs/ja-jp/source/raylib_3dcamera.png b/docs/ja-jp/source/raylib_3dcamera.png
new file mode 100644 (file)
index 0000000..10028ce
Binary files /dev/null and b/docs/ja-jp/source/raylib_3dcamera.png differ
diff --git a/docs/ja-jp/source/raylib_3dcamerafree.png b/docs/ja-jp/source/raylib_3dcamerafree.png
new file mode 100644 (file)
index 0000000..d976202
Binary files /dev/null and b/docs/ja-jp/source/raylib_3dcamerafree.png differ
diff --git a/docs/ja-jp/source/raylib_3dpicking.png b/docs/ja-jp/source/raylib_3dpicking.png
new file mode 100644 (file)
index 0000000..e9e2b64
Binary files /dev/null and b/docs/ja-jp/source/raylib_3dpicking.png differ
diff --git a/docs/ja-jp/source/raylib_basicshapes.png b/docs/ja-jp/source/raylib_basicshapes.png
new file mode 100644 (file)
index 0000000..459e0f7
Binary files /dev/null and b/docs/ja-jp/source/raylib_basicshapes.png differ
diff --git a/docs/ja-jp/source/raylib_basicwindow.png b/docs/ja-jp/source/raylib_basicwindow.png
new file mode 100644 (file)
index 0000000..d35e1fb
Binary files /dev/null and b/docs/ja-jp/source/raylib_basicwindow.png differ
diff --git a/docs/ja-jp/source/raylib_bezierlines.png b/docs/ja-jp/source/raylib_bezierlines.png
new file mode 100644 (file)
index 0000000..82cc471
Binary files /dev/null and b/docs/ja-jp/source/raylib_bezierlines.png differ
diff --git a/docs/ja-jp/source/raylib_camerafirstperson.png b/docs/ja-jp/source/raylib_camerafirstperson.png
new file mode 100644 (file)
index 0000000..ba0b88a
Binary files /dev/null and b/docs/ja-jp/source/raylib_camerafirstperson.png differ
diff --git a/docs/ja-jp/source/raylib_collisionarea.png b/docs/ja-jp/source/raylib_collisionarea.png
new file mode 100644 (file)
index 0000000..b362dde
Binary files /dev/null and b/docs/ja-jp/source/raylib_collisionarea.png differ
diff --git a/docs/ja-jp/source/raylib_colorspalette.png b/docs/ja-jp/source/raylib_colorspalette.png
new file mode 100644 (file)
index 0000000..3e610ce
Binary files /dev/null and b/docs/ja-jp/source/raylib_colorspalette.png differ
diff --git a/docs/ja-jp/source/raylib_cubicmap.png b/docs/ja-jp/source/raylib_cubicmap.png
new file mode 100644 (file)
index 0000000..6552ede
Binary files /dev/null and b/docs/ja-jp/source/raylib_cubicmap.png differ
diff --git a/docs/ja-jp/source/raylib_drawring.png b/docs/ja-jp/source/raylib_drawring.png
new file mode 100644 (file)
index 0000000..83ee118
Binary files /dev/null and b/docs/ja-jp/source/raylib_drawring.png differ
diff --git a/docs/ja-jp/source/raylib_drawring2.png b/docs/ja-jp/source/raylib_drawring2.png
new file mode 100644 (file)
index 0000000..31bbee1
Binary files /dev/null and b/docs/ja-jp/source/raylib_drawring2.png differ
diff --git a/docs/ja-jp/source/raylib_ex1.png b/docs/ja-jp/source/raylib_ex1.png
new file mode 100644 (file)
index 0000000..6c424dd
Binary files /dev/null and b/docs/ja-jp/source/raylib_ex1.png differ
diff --git a/docs/ja-jp/source/raylib_followingeyes.png b/docs/ja-jp/source/raylib_followingeyes.png
new file mode 100644 (file)
index 0000000..2736564
Binary files /dev/null and b/docs/ja-jp/source/raylib_followingeyes.png differ
diff --git a/docs/ja-jp/source/raylib_fullscreen.png b/docs/ja-jp/source/raylib_fullscreen.png
new file mode 100644 (file)
index 0000000..0675f7b
Binary files /dev/null and b/docs/ja-jp/source/raylib_fullscreen.png differ
diff --git a/docs/ja-jp/source/raylib_geometricshapes.png b/docs/ja-jp/source/raylib_geometricshapes.png
new file mode 100644 (file)
index 0000000..4a578e7
Binary files /dev/null and b/docs/ja-jp/source/raylib_geometricshapes.png differ
diff --git a/docs/ja-jp/source/raylib_imagedrawing.png b/docs/ja-jp/source/raylib_imagedrawing.png
new file mode 100644 (file)
index 0000000..9b1fda2
Binary files /dev/null and b/docs/ja-jp/source/raylib_imagedrawing.png differ
diff --git a/docs/ja-jp/source/raylib_imagegeneration.png b/docs/ja-jp/source/raylib_imagegeneration.png
new file mode 100644 (file)
index 0000000..c63310a
Binary files /dev/null and b/docs/ja-jp/source/raylib_imagegeneration.png differ
diff --git a/docs/ja-jp/source/raylib_inputkeys.png b/docs/ja-jp/source/raylib_inputkeys.png
new file mode 100644 (file)
index 0000000..01aad88
Binary files /dev/null and b/docs/ja-jp/source/raylib_inputkeys.png differ
diff --git a/docs/ja-jp/source/raylib_inputmouse.png b/docs/ja-jp/source/raylib_inputmouse.png
new file mode 100644 (file)
index 0000000..faad0eb
Binary files /dev/null and b/docs/ja-jp/source/raylib_inputmouse.png differ
diff --git a/docs/ja-jp/source/raylib_inputmt.png b/docs/ja-jp/source/raylib_inputmt.png
new file mode 100644 (file)
index 0000000..e232968
Binary files /dev/null and b/docs/ja-jp/source/raylib_inputmt.png differ
diff --git a/docs/ja-jp/source/raylib_mousewheel.png b/docs/ja-jp/source/raylib_mousewheel.png
new file mode 100644 (file)
index 0000000..5a77321
Binary files /dev/null and b/docs/ja-jp/source/raylib_mousewheel.png differ
diff --git a/docs/ja-jp/source/raylib_musicplaying.png b/docs/ja-jp/source/raylib_musicplaying.png
new file mode 100644 (file)
index 0000000..183e5ff
Binary files /dev/null and b/docs/ja-jp/source/raylib_musicplaying.png differ
diff --git a/docs/ja-jp/source/raylib_rectanglescaling.png b/docs/ja-jp/source/raylib_rectanglescaling.png
new file mode 100644 (file)
index 0000000..0ce9fd5
Binary files /dev/null and b/docs/ja-jp/source/raylib_rectanglescaling.png differ
diff --git a/docs/ja-jp/source/raylib_soundloading.png b/docs/ja-jp/source/raylib_soundloading.png
new file mode 100644 (file)
index 0000000..ca3e9aa
Binary files /dev/null and b/docs/ja-jp/source/raylib_soundloading.png differ
diff --git a/docs/ja-jp/source/raylib_texturesource.png b/docs/ja-jp/source/raylib_texturesource.png
new file mode 100644 (file)
index 0000000..35ca6ff
Binary files /dev/null and b/docs/ja-jp/source/raylib_texturesource.png differ
diff --git a/docs/ja-jp/source/raylib_twocubes.png b/docs/ja-jp/source/raylib_twocubes.png
new file mode 100644 (file)
index 0000000..05bd368
Binary files /dev/null and b/docs/ja-jp/source/raylib_twocubes.png differ
diff --git a/docs/ja-jp/source/reference.txt b/docs/ja-jp/source/reference.txt
new file mode 100644 (file)
index 0000000..04d2f89
--- /dev/null
@@ -0,0 +1,598 @@
+.. index:: 
+       single: 言語リファレンス; はじめに
+
+================
+言語リファレンス
+================
+
+この章では下記を学びます。
+
+* 言語のキーワード
+* 言語の関数
+* コンパイラのエラー
+* 実行時のエラー
+* 環境のエラー
+* 言語の文法
+* 仮想計算機 (VM) の命令
+
+
+.. index:: 
+       pair: 言語リファレンス; 言語のキーワード
+
+言語のキーワード
+================
+
+キーワードの総数 : 49
+
+* again
+* and
+* but
+* bye
+* call
+* case
+* catch
+* changeringkeyword
+* changeringoperator
+* class
+* def
+* do
+* done
+* else
+* elseif
+* end
+* 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
+
+
+.. index:: 
+       pair: 言語リファレンス; 言語の関数
+
+言語の関数
+==========
+
+関数の総数 : 210
+
+.. code-block:: ring
+
+       acos()                      add()                       addattribute()              adddays()
+       addmethod()                 ascii()                     asin()                      assert()
+       atan()                      atan2()                     attributes()                binarysearch()
+       bytes2double()              bytes2float()               bytes2int()                 callgc()
+       ceil()                      cfunctions()                char()                      chdir()
+       classes()                   classname()                 clearerr()                  clock()
+       clockspersecond()           closelib()                  copy()                      cos()
+       cosh()                      currentdir()                date()                      dec()
+       decimals()                  del()                       diffdays()                  dir()
+       double2bytes()              eval()                      exefilename()               exefolder()
+       exp()                       fabs()                      fclose()                    feof()
+       ferror()                    fexists()                   fflush()                    fgetc()
+       fgetpos()                   fgets()                     filename()                  find()
+       float2bytes()               floor()                     fopen()                     fputc()
+       fputs()                     fread()                     freopen()                   fseek()
+       fsetpos()                   ftell()                     functions()                 fwrite()
+       getattribute()              getchar()                   globals()                   hex()
+       hex2str()                   input()                     insert()                    int2bytes()
+       intvalue()                  isalnum()                   isalpha()                   isandroid()
+       isattribute()               iscfunction()               isclass()                   iscntrl()
+       isdigit()                   isfreebsd()                 isfunction()                isglobal()
+       isgraph()                   islinux()                   islist()                    islocal()
+       islower()                   ismacosx()                  ismethod()                  ismsdos()
+       isnull()                    isnumber()                  isobject()                  ispackage()
+       ispackageclass()            ispointer()                 isprint()                   isprivateattribute()
+       isprivatemethod()           ispunct()                   isspace()                   isstring()
+       isunix()                    isupper()                   iswindows()                 iswindows64()
+       isxdigit()                  left()                      len()                       lines()
+       list()                      list2str()                  loadlib()                   locals()
+       log()                       log10()                     lower()                     max()
+       mergemethods()              methods()                   min()                       murmur3hash()
+       nullpointer()               number()                    object2pointer()            objectid()
+       packageclasses()            packagename()               packages()                  perror()
+       pointer2object()            pow()                       prevfilename()              ptrcmp()
+       raise()                     random()                    read()                      remove()
+       rename()                    reverse()                   rewind()                    right()
+       ring_give()                 ring_see()                  
+       ring_state_delete()         ring_state_filetokens()        
+       ring_state_findvar()        ring_state_init()           ring_state_main()           
+       ring_state_mainfile()       ring_state_new()            ring_state_newvar()         
+       ring_state_runcode()        ring_state_runfile()        ring_state_runobjectfile()
+       ring_state_setvar()         ringvm_callfunc()           ringvm_calllist()           
+       ringvm_cfunctionslist()     ringvm_classeslist()        ringvm_evalinscope()        
+       ringvm_fileslist()          ringvm_functionslist()      ringvm_genarray()           
+       ringvm_give()               ringvm_hideerrormsg()       ringvm_info()               
+       ringvm_memorylist()         ringvm_packageslist()       ringvm_passerror()          
+       ringvm_scopescount()        ringvm_see()                ringvm_settrace()           
+       ringvm_tracedata()          ringvm_traceevent()         ringvm_tracefunc()
+       setattribute()              shutdown()                  sin()                       sinh()
+       sort()                      space()                     sqrt()                      srandom()
+       str2hex()                   str2hexcstyle()             str2list()                  strcmp()
+       string()                    substr()                    swap()                      sysget()
+       system()                    tan()                       tanh()                      tempfile()
+       tempname()                  time()                      timelist()                  trim()
+       type()                      ungetc()                    unsigned()                  upper()
+       varptr()                    version()                   windowsnl()                 write()
+
+.. index:: 
+       pair: 言語リファレンス; コンパイラのエラー
+
+コンパイラのエラー
+==================
+
+* Error (C1)  : 要求された識別子において、仮引数リストにエラーがあります。
+* Error (C2)  : クラス名にエラーがあります。
+* Error (C3)  : ‘ok’ が欠落しているため、制御構造を閉じることができません。
+* Error (C4)  : ‘end’ が欠落しているため、制御構造を閉じることができません。
+* Error (C5)  : next が欠落しているため、制御構造を閉じることができません。
+* Error (C6)  : 関数名にエラーがあります。
+* Error (C7)  : リストの項目にエラーがあります。
+* Error (C8)  : 丸括弧 ‘)’ が欠落しています。
+* Error (C9)  : 角括弧 ‘]’ が欠落しています。
+* Error (C10) : 親クラス名にエラーがあります。
+* Error (C11) : 演算子の式にエラーがあります。
+* Error (C12) : クラスが定義されていません。
+* Error (C13) : 変数名にエラーがあります。
+* Error (C14) : Try/Catch で Catch キーワードが欠落しています!
+* Error (C15) : Try/Catch で Done キーワードが欠落しています!
+* Error (C16) : Switch ステートメントの式でエラーがあります!
+* Error (C17) : Switch ステートメントに OFF がありません。
+* Error (C18) : 開いているブロックで括弧を閉じるのを忘れています!
+* Error (C19) : 数値オーバーフロー!
+* Error (C20) : パッケージ名にエラーがあります。
+* Error (C21) : ‘again’ が欠落しているため、制御構造を閉じることができません。
+* Error (C22) : 関数は既に存在しますが、関数が再定義されました!
+* Error (C23) : 数値の後に ‘(‘ が使用されています!
+* Error (C24) : 親クラス名はサブクラス名と重複しています。
+* Error (C25) : オブジェクト名の後に自己参照アクセスをしようとしています。”
+* Error (C26) : クラスは既に存在しますが、クラスが再定義されました!
+
+* Warning (W1) : ファイル名が重複しています。
+* Warning (W2) : コンパイラ命令 ChangeRingKeyword では二種類の語句が引数として必要です。
+* Warning (W3) : コンパイラ命令 ChangeRingKeyword - キーワードが見つかりません!
+* Warning (W4) : コンパイラ命令  ChangeRingOperator では二種類の語句が引数として必要です。
+* Warning (W5) : コンパイラ命令 ChangeRingOperator - 演算子が見つかりません!
+* Warning (W6) : ループの外側で EXIT 命令を使用しています。
+* Warning (W7) : ループの外側で LOOP 命令を使用しています。
+
+.. index:: 
+       pair: 言語リファレンス; 実行時のエラー
+
+実行時のエラー
+==============
+
+* Error (R1)  : ゼロ除算はできません!
+* Error (R2)  : 配列へのアクセス (インデックスの範囲外です)!
+* Error (R3)  : 未定義関数を呼び出そうとしました!
+* Error (R4)  : スタックオーバーフロー!
+* Error (R5)  : オブジェクトはリストではないため、リストの項目へアクセスできません!
+* Error (R6)  : 変数が必要です。
+* Error (R7)  : 文字列内にある文字には一文字以上割り当てることはできません。
+* Error (R8)  : 変数は文字列ではありません。
+* Error (R9)  : ループの外側で Exit 命令を使用しています。
+* Error (R10) : 数値の範囲外で Exit 命令を使用しています。
+* Error (R11) : クラスが見つからないため、クラス名にエラーがあります!
+* Error (R12) : プロパティが見つからないため、プロパティ名にエラーがあります!
+* Error (R13) : オブジェクトが必要です。
+* Error (R14) : 未定義メソッドを呼び出そうとしました!
+* Error (R15) : 親クラスが見つからないため、クラス名にエラーがあります!
+* Error (R16) : 未知のオブジェクトへのアクセスで括弧を使用しようしました!
+* Error (R17) : 親クラスのない状態で‘Super’を使用したためエラーになりました!
+* Error (R18) : 数値オーバーフロー!
+* Error (R19) : 関数の呼び出しで仮引数の個数が不足しています!
+* Error (R20) : 関数の呼び出しで仮引数の個数が超過しています!
+* Error (R21) : 演算子で不正な型の値を使用しています。
+* Error (R22) : ループの外側で Loop 命令を使用しています。
+* Error (R23) : 数値の範囲外で Loop 命令を使用しています。
+* Error (R24) : 未初期化変数を使用しようとしました。
+* Error (R25) : パッケージが見つからないため、パッケージ名にエラーがあります!
+* Error (R26) : クラスの外側でプライベートメソッドを使用しようとしました。
+* Error (R27) : クラスの外側でプライベート属性を使用しようとしました。
+* Error (R28) : ステップ値で不正なデータ型が使用されています。
+* Error (R29) : For ループで不正なデータ型が使用されています。
+* Error (R30) : 親クラス名は子クラス名と重複しています。
+* Error (R31) : オブジェクトを自己参照で破棄しようとしました。
+* Error (R32) : CALL 命令で要求された変数に文字列があります!
+* Error (R33) : 不正な十進数値です (正しい範囲は >= 0 から <=14 まで)!
+* Error (R34) : 代入操作には変数が必要です。
+* Error (R35) : ファイルを開く、または作成できません!
+* Error (R36) : カラム番号が正しくありません! リストのカラム番号より大きいです。
+* Error (R37) : 申し訳ございません。このコンテキストにおいてこの命令は対応していません。
+* Error (R38) : 動的ライブラリの読み込み時に実行時エラーが発生しました!
+* Error (R39) : 唯一無二のファイル名を作成するときにエラーが発生しました。
+
+
+.. index:: 
+       pair: 言語リファレンス; 環境のエラー
+
+環境のエラー
+============
+
+* Error (E1) : セグメンテーション違反が発生しました!
+* Error (E2) : メモリが足りません!
+* Error (E3) : スコープが存在しないのにスコープを削除しようとしました!
+* Error (E4) : 仮想計算機の命令が長すぎます!
+* Error (E5) : ファイルの種類が正しくありません ― VM は Ring オブジェクトファイルのみ扱えます。
+* Error (E6) : Ring オブジェクトファイルのバージョンが正しくありません!
+* Error (E7) : sscanf() 関数で内部エラーが発生しました!
+* Error (E8) : fscanf() 関数で内部エラーが発生しました!
+
+
+.. index:: 
+       pair: 言語リファレンス; 言語の文法
+
+言語の文法
+================
+
+プログラム → {ステートメント}
+
+ステートメント → ‘package’ <識別子> { ‘.’ <識別子> } [‘{‘ {ステートメント} ‘}’] [‘end’|’endpackage’]
+
+ステートメント → ‘class’ <識別子> [ ‘from’|’:’|’<’ <識別子> ] [‘{‘ {ステートメント} ‘}’][‘end’|’endclass’]
+
+ステートメント → ‘func’|’def’ <識別子> [仮引数リスト] [‘{‘ {ステートメント} ‘}’][‘end’|’endfunc’]
+
+ステートメント → ‘import’ <識別子> { ‘.’ <識別子> }
+
+ステートメント → ‘private’
+
+ステートメント → ‘load’; [‘package'|'again' ] <リテラル>
+
+ステートメント → ‘loadsyntax’ <リテラル>
+
+ステートメント → ‘changeringkeyword’ <旧キーワード> <新キーワード>
+
+ステートメント → ‘changeringoperator’ <旧演算子> <新演算子>
+
+ステートメント → ‘see’|’put’ <式>
+
+ステートメント → ‘give’|’get’ <識別子>
+
+ステートメント → ‘if’ <式> [‘{‘] {ステートメント} [ {‘but’|’elseif’ <式> {ステートメント} } ] [‘else’ {ステートメント} ] ‘ok’|’end’|’}’
+
+ステートメント → ‘Switch’ <式> [‘{‘] { ‘on’|’case’ <式> {ステートメント} } [‘other’ {ステートメント} ] ‘off’|’end’|’}’
+
+ステートメント → ‘for’ <識別子> ‘=’ <式> ‘to’ <式> [ ‘step’ <式> ] [‘{‘] {ステートメント} ‘next’|’end’|’}’
+
+ステートメント → ‘for’ <識別子> ‘in’ <式> [ ‘step’ <式> ] [‘{‘] {ステートメント} ‘next’|’end’|’}’
+
+ステートメント → ‘while’ <式> [‘{‘] {ステートメント} ‘end’|’}’
+
+ステートメント → ‘do’ {ステートメント} ‘again’ <式>
+
+ステートメント → ‘try’ {ステートメント} [‘{‘] ‘catch’ {ステートメント} ‘done’|’end’|’}’
+
+ステートメント → ‘return’ <式>
+
+ステートメント → ‘bye’
+
+ステートメント → ‘exit’
+
+ステートメント → ‘loop’
+
+ステートメント → <式>
+
+ステートメント → エプシロン
+
+仮引数リスト → エプシロン
+
+仮引数リスト → [‘(‘] <識別子> [{ ‘,’ <識別子> }] [‘)’]
+
+式 → <LogicNot> [{ ‘and’|’or’ <LogicNot> }]
+
+LogicNot → [‘not’] <EqualOrNot>
+
+EqualOrNot → [ ‘=’|’!=’ ] <比較>
+
+比較 → <BitOrXor> [ { ‘<’ | ‘>’ | ‘<=’ | ‘>=’ <BitOrXor> } ]
+
+BitOrXor → <BitAnd> [ { ‘|’ | ‘^’ <BitAnd> } ]
+
+BitAnd → <BitShift> [ { ‘&’ <BitShift> } ]
+
+BitShift → <演算> [ { ‘<<’ | ‘>>’ <演算> } ]
+
+演算 → <項> [ { ‘+’ | ‘-‘ <項> } ]
+
+項 → <範囲> [ { ‘*’ | ‘/’ | ‘%’ <範囲> } ]
+
+範囲 → <要素> [ ‘:’ <要素> ]
+
+要素 → <識別子> [ {混成} ] [ ‘=’ <式> ]
+
+要素 → <数値>
+
+要素 → <リテラル>
+
+要素 → ‘:’ <識別子>
+
+要素 → ‘-‘ <要素>
+
+要素 → ‘(‘ <式> ‘)’
+
+要素 → <リスト>
+
+要素 → ‘new’ <識別子>
+
+要素 → <無名関数>
+
+要素 → ‘call’ <識別子> { ‘.’ <識別子> } ‘(‘ <仮引数> ‘)’
+
+リスト → ‘[‘ [ <式> { ‘,’ <式> } ] ‘]’
+
+混成 → { ‘.’ <識別子> }
+
+混成 → ‘[‘ <式> ‘]’
+
+混成 → ‘(‘ [ <式> [ { ‘,’ <式> }] ] ‘)’
+
+混成 → ‘{‘ {ステートメント} ‘}’
+
+無名関数 → ‘func’|’def’| [<仮引数リスト>] ‘{‘ {ステートメント} ‘}’
+
+
+.. index:: 
+       pair: 言語リファレンス; 仮想計算機 (VM) の命令
+
+仮想計算機 (VM) の命令
+======================
+
+定義:
+
+* VM : 仮想計算機
+* Stack : VM スタック
+* IR : 命令レジスタ
+* PC : プログラムカウンタ
+* VP : 変数のポインタ
+* Stack[nSize] : スタックの最後にある項目 (LIFO 構造 : 末尾入力、先頭出力)
+* VV : 変数の値 (変数にはポインタがあり、この変数の値へアクセスします。)
+
+(スタックと変数)
+
+======================= ============================================================================
+演算                    説明
+======================= ============================================================================
+* ICO_PUSHC             IR からスタックへ文字列を追加します。
+* ICO_PUSHN             IR からスタックへ数値を追加します。
+* ICO_PUSHV             VP を stack[nSize] により変数の値で置換します。
+* ICO_LOADADDRESS       IR から変数名を読み取り VP をスタックへ退避します。
+* ICO_ASSIGNMENT        Stack[nSize-1] VV = Stack[nSize] VV , Stack[nSize] の復帰
+* ICO_INC               Stack[nSize] の数値を 1 ずつ増分します。
+* ICO_LOADAPUSHV        ICO_LOADADDRESS そして ICO_PUSHV と同じです。
+* ICO_NEWLINE           新しい行番号を格納します (デバッグ情報)。
+* ICO_FREESTACK         スタックから項目を全て削除します。 nSize = 0 になります。
+* ICO_FILENAME          ソースコードのファイル名を格納します (デバッグ情報)。
+* ICO_FREELOADASCOPE    現在の式にあるスコープリストを解放します。
+======================= ============================================================================
+
+(ジャンプ)
+
+======================= =========================================================================================
+演算                    説明
+======================= =========================================================================================
+* ICO_JUMP              IR から PC へ新しい値を設定します。
+* ICO_JUMPZERO          Stack[nSize] が number = 0 の場合は IR から PC へ新しい値を設定します。
+* ICO_JUMPFOR           For ループの終了
+* ICO_JUMPONE           Stack[nSize] が number = 1 の場合は IR から PC へ新しい値を設定します。
+* ICO_JUMPZERO2         ICO_JUMPZERO と似ていますがスタックへ 1 加算します (複数の ‘AND’条件で必要となります)。
+* ICO_JUMPONE2          ICO_JUMPONE  と似ていますがスタックへ 1 加算します (複数の ‘OR’ 条件で必要となります)。
+======================= =========================================================================================
+
+(比較)
+
+======================= ==========================================================================================================
+演算                    説明
+======================= ==========================================================================================================
+* ICO_LESSEQUAL                If stack[nSize-1] <= stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_EQUAL            If stack[nSize-1] = stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_LESS             If stack[nSize-1] < stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_GREATER          If stack[nSize-1] > stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_GREATEREQUAL     If stack[nSize-1] >= stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+* ICO_NOTEQUAL         If stack[nSize-1] != stack[nSize] , POP stack[nSize], set Stack[nSize-1] = 1 else set Stack[nSize-1] = 0
+=======================        ==========================================================================================================
+
+(算術)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_SUM              Stack[nSize-1] = Stack[nSize-1] + Stack[nSize] , POP stack[nSize]
+* ICO_SUB              Stack[nSize-1] = Stack[nSize-1] - Stack[nSize] , POP stack[nSize]
+* ICO_MUL              Stack[nSize-1] = Stack[nSize-1] * Stack[nSize] , POP stack[nSize]
+* ICO_DIV              Stack[nSize-1] = Stack[nSize-1] / Stack[nSize] , POP stack[nSize]
+* ICO_MOD              Stack[nSize-1] = Stack[nSize-1] % Stack[nSize] , POP stack[nSize]
+* ICO_NEG              Stack[nSize] = - Stack[nSize-1]
+* ICO_PLUSPLUS         Stack[nSize] = Stack[nSize] + 1
+* ICO_MINUSMINUS       Stack[nSize] = Stack[nSize] - 1
+=======================        ============================================================================
+
+(論理)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_AND              Stack[nSize-1] = Stack[nSize-1] && Stack[nSize] , POP stack[nSize]
+* ICO_OR               Stack[nSize-1] = Stack[nSize-1] || Stack[nSize] , POP stack[nSize]
+* ICO_NOT              Stack[nSize]   = ! Stack[nSize]  
+=======================        ============================================================================
+
+(リスト)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_LISTSTART                一時作業用メモリへ新しいリストを開始します。
+* ICO_LISTITEM         リスト項目を追加します。
+* ICO_LISTEND          リストを終了します。
+* ICO_LOADINDEXADDRESS Stack[nSize-1] = Stack[nSize-1] VV [ Stack[nSize] ] , POP stack[nSize]
+=======================        ============================================================================
+
+(関数)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_LOADFUNC         関数を検索します。
+* ICO_CALL             関数を呼び出します。
+* ICO_RETURN           関数から返します。
+* ICO_RETNULL          関数から NULL を返します。
+* ICO_RETFROMEVAL      eval() の後に返します。
+* ICO_RETITEMREF       リスト項目の参照を返します - 値ではありません。
+* ICO_NEWFUNC          新しい関数を開始します。
+* ICO_BLOCKFLAG                後でジャンプ先を決定するためにフラグを立てます (ICO_RETURN の後で)。
+* ICO_FUNCEXE          関数の実行を開始します。
+* ICO_ENDFUNCEXE       関数の実行を終了します。
+* ICO_ANONYMOUS                無名関数
+=======================        ============================================================================
+
+(ユーザインタフェース)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_PRINT            値を標準出力へ表示します。
+* ICO_GIVE             キーボードからの標準入力
+=======================        ============================================================================
+
+(プログラムの終了・ループ)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_BYE              仮想計算機の実行を終了します。
+* ICO_EXITMARK         ループを終了する場所です。
+* ICO_POPEXITMARK      exit マークを削除します。
+* ICO_EXIT             一階層以上のループを打ち切ります。
+* ICO_LOOP             次のループを継続します。
+=======================        ============================================================================
+
+(実行性能の改善)
+
+========================   ==============================================================================
+演算                       説明
+========================   ==============================================================================
+* ICO_PUSHP                スタックへポインタを退避します。
+* ICO_INCP                 ポインタを使用して変数の値を増分します。
+* ICO_PUSHPV               変数ポインタを使用して変数の値を退避します。
+* ICO_INCJUMP              増分後にジャンプします。
+* ICO_INCPJUMP             ポインタを使用して増分した後にジャンプします。
+* ICO_JUMPVARLENUM         変数の値が <= 数値の値ならばジャンプします。
+* ICO_JUMPVARPLENUM        変数の値が (ポインタを使用) <= 数値の値ならばジャンプします。
+* ICO_LOADFUNCP            関数ポインタを退避します。
+* ICO_PUSHPLOCAL           ローカル変数のポインタを退避します。
+* ICO_INCLPJUMP            ローカル変数のポインタで値を増分した後にジャンプします。
+* ICO_JUMPVARLPLENUM       変数の値が (ポインタを使用) <= 数値の値ならばジャンプします。
+* ICO_INCPJUMPSTEP1        変数のポインタで値を増分した後にジャンプします (For ループ step = 1)。
+* ICO_JUMPVARPLENUMSTEP1   変数のポインタで値を増分した後にジャンプします (For ループ step = 1)。
+========================   ==============================================================================
+
+(Try~Catch~Done)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_TRY              try の範囲を開始します。
+* ICO_DONE             try の範囲を終了します。
+=======================        ============================================================================
+
+(複製と範囲)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_DUPLICATE                スタックの値を複製します。
+* ICO_RANGE                    値からリストの値を作成します。
+=======================        ============================================================================
+
+オブジェクト指向プログラミング(OOP)
+
+=======================        =============================================================================================================
+演算                    説明
+=======================        =============================================================================================================
+* ICO_NEWOBJ           新しいオブジェクトの作成してから、IR からクラス名を取得を行い、スタックへオブジェクトのポインタを退避します。
+* ICO_SETSCOPE         オブジェクトのスコープへ有効なスコープを設定してから新しいオブジェクトの作成後に呼び出します。
+* ICO_LOADSUBADDRESS   ポインタをスタックに退避してからオブジェクトの属性を取得します。
+* ICO_LOADMETHOD       オブジェクトのメソッドを検索します。
+* ICO_AFTERCALLMETHOD  メソッドの呼出し後に使用されます - 通常時
+* ICO_AFTERCALLMETHOD2  メソッドの呼出し後に使用されます - 次の場合
+* ICO_NEWCLASS         新しいクラスの範囲を開始します。
+* ICO_BRACESTART       括弧を開きます。
+* ICO_BRACEEND         括弧を閉じます。
+* ICO_IMPORT           パッケージのインポート
+* ICO_PRIVATE          プライベート属性の範囲を開始します。
+* ICO_SETPROPERTY      属性の値を設定します - Setter を確認します。
+* ICO_CALLCLASSINIT    init() クラスメソッドの呼び出し。
+=======================        =============================================================================================================
+
+(その他)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_SETREFERENCE     参照によりコピーします。
+* ICO_KILLREFERENCE    参照を削除します。
+* ICO_ASSIGNMENTPOINTER 左辺側の変数を決定します。
+* ICO_BEFOREEQUAL      += , -= , ... などの演算子を決定します。
+=======================        ============================================================================
+
+(ビット操作演算子)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_BITAND           Stack[nSize-1] = Stack[nSize-1] & Stack[nSize] , POP stack[nSize]
+* ICO_BITOR            Stack[nSize-1] = Stack[nSize-1] | Stack[nSize] , POP stack[nSize]
+* ICO_BITXOR           Stack[nSize-1] = Stack[nSize-1] ^ Stack[nSize] , POP stack[nSize]
+* ICO_BITNOT           Stack[nSize] = ! Stack[nSize] 
+* ICO_BITSHL           Stack[nSize-1] = Stack[nSize-1] << Stack[nSize] , POP stack[nSize]
+* ICO_BITSHR           Stack[nSize-1] = Stack[nSize-1] >> Stack[nSize] , POP stack[nSize]
+=======================        ============================================================================
+
+(For Step)
+
+=======================        ============================================================================
+演算                    説明
+=======================        ============================================================================
+* ICO_STEPNUMBER       For ループにおけるステップ数を決定します。
+* ICO_POPSTEP          ステップスタックからステップ数を復帰 (POP) します。
+* ICO_LOADAFIRST       変数名に関連する最初のアドレスを読み込みます。
+=======================        ============================================================================
+
+(カスタムグローバルスコープ)
+
+=======================        ==============================================================================
+演算                    説明
+=======================        ==============================================================================
+* ICO_NEWGLOBALSCOPE   新しいカスタムグローバルスコープの開始 - ‘load package’ 命令で使用されます。
+* ICO_ENDGLOBALSCOPE   カスタムグローバルスコープの終了 - ‘load package’ 命令で使用されます。
+* ICO_SETGLOBALSCOPE   現在のグローバルスコープを設定します。
+=======================        ==============================================================================
+
diff --git a/docs/ja-jp/source/resources.txt b/docs/ja-jp/source/resources.txt
new file mode 100644 (file)
index 0000000..89d045e
--- /dev/null
@@ -0,0 +1,92 @@
+.. index:: 
+       single: 情報源; はじめに
+
+======
+情報源
+======
+
+Ring に関する情報源を掲載しております。
+
+.. index:: 
+       pair: 情報源; Ring のウェブサイト
+
+Ring のウェブサイト
+===================
+
+Ring の最新情報はウェブサイトをご確認ください。
+
+        http://ring-lang.net/
+
+        http://ring-lang.sf.net/
+
+        http://ring-lang-081.osdn.jp/ (日本語版非公式サイト)
+
+
+.. index:: 
+       pair: 情報源; Ring グループ
+
+Ring グループ
+=============
+
+ご質問や要望がありましたら、お気軽に Ring グループ (英語) までお願いします。
+
+       https://groups.google.com/forum/#!forum/ring-lang
+
+.. index:: 
+       pair: 情報源; ソースコード
+
+ソースコード
+============
+
+Ring は自由なオープンソースです (MIT ライセンス)
+
+ソースコード : https://github.com/ring-lang/ring/
+
+.. index:: 
+       pair: 情報源; アラビア語の情報源
+
+アラビア語の情報
+================
+
+*  サラ・ハムディさんのチュートリアル
+
+       URL : https://ringprogramming4arab.wordpress.com/%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%8A-2/
+
+* アーメド・ハッソーナさんのチュートリアル (YouTube)
+
+       URL : https://www.youtube.com/watch?v=6VIHMyrEilw&list=PLHIfW1KZRIfl6KzfLziFl650MmThnQ0jT
+
+* アラー・モハメド さんのチュートリアル (YouTube)
+
+       URL : https://www.youtube.com/watch?v=uSv5rJp6snw&list=PLgc0fyJgivssosIJu4kJGk5avIjaMzYHK
+
+* マハムード・ファイドさんのチュートリアル (Facebook (ライブ配信) + YouTube)
+
+       URL : https://github.com/ring-lang/ring/blob/master/developers/Arabic/README.md
+
+
+.. index:: 
+       pair: 情報源; 日本語の情報
+
+日本語の情報
+============
+
+* ねとめもさんによる簡単な紹介
+
+       URL : http://var.blog.jp/archives/75296385.html
+
+.. index:: 
+       pair: 情報源; 作者の連絡先
+
+作者の連絡先
+============
+
+Ring チーム
+       http://ring-lang.sourceforge.net/team.html
+
+Ring チーム (日本)
+       http://ring-lang-081.osdn.jp/team.html
+
+日本語版翻訳者 (isVowel)
+        https://twitter.com/isvowel/
+
diff --git a/docs/ja-jp/source/ring15freeglut.png b/docs/ja-jp/source/ring15freeglut.png
new file mode 100644 (file)
index 0000000..75fa0d6
Binary files /dev/null and b/docs/ja-jp/source/ring15freeglut.png differ
diff --git a/docs/ja-jp/source/ring15freeglut2.png b/docs/ja-jp/source/ring15freeglut2.png
new file mode 100644 (file)
index 0000000..0a40367
Binary files /dev/null and b/docs/ja-jp/source/ring15freeglut2.png differ
diff --git a/docs/ja-jp/source/ring15opengl.png b/docs/ja-jp/source/ring15opengl.png
new file mode 100644 (file)
index 0000000..01c18c8
Binary files /dev/null and b/docs/ja-jp/source/ring15opengl.png differ
diff --git a/docs/ja-jp/source/ring15reportshot.png b/docs/ja-jp/source/ring15reportshot.png
new file mode 100644 (file)
index 0000000..b7cacf3
Binary files /dev/null and b/docs/ja-jp/source/ring15reportshot.png differ
diff --git a/docs/ja-jp/source/ringalleg_shot1.jpg b/docs/ja-jp/source/ringalleg_shot1.jpg
new file mode 100644 (file)
index 0000000..6a301ae
Binary files /dev/null and b/docs/ja-jp/source/ringalleg_shot1.jpg differ
diff --git a/docs/ja-jp/source/ringalleg_shot2.jpg b/docs/ja-jp/source/ringalleg_shot2.jpg
new file mode 100644 (file)
index 0000000..811bc31
Binary files /dev/null and b/docs/ja-jp/source/ringalleg_shot2.jpg differ
diff --git a/docs/ja-jp/source/ringalleg_shot3.jpg b/docs/ja-jp/source/ringalleg_shot3.jpg
new file mode 100644 (file)
index 0000000..6d20f06
Binary files /dev/null and b/docs/ja-jp/source/ringalleg_shot3.jpg differ
diff --git a/docs/ja-jp/source/ringalleg_shot4.jpg b/docs/ja-jp/source/ringalleg_shot4.jpg
new file mode 100644 (file)
index 0000000..9787f3c
Binary files /dev/null and b/docs/ja-jp/source/ringalleg_shot4.jpg differ
diff --git a/docs/ja-jp/source/ringalleg_shot5.jpg b/docs/ja-jp/source/ringalleg_shot5.jpg
new file mode 100644 (file)
index 0000000..cd1588d
Binary files /dev/null and b/docs/ja-jp/source/ringalleg_shot5.jpg differ
diff --git a/docs/ja-jp/source/ringalleg_shot6.jpg b/docs/ja-jp/source/ringalleg_shot6.jpg
new file mode 100644 (file)
index 0000000..cb24fa4
Binary files /dev/null and b/docs/ja-jp/source/ringalleg_shot6.jpg differ
diff --git a/docs/ja-jp/source/ringalleg_shot7.jpg b/docs/ja-jp/source/ringalleg_shot7.jpg
new file mode 100644 (file)
index 0000000..88d24a0
Binary files /dev/null and b/docs/ja-jp/source/ringalleg_shot7.jpg differ
diff --git a/docs/ja-jp/source/ringallegrofuncsdoc.txt b/docs/ja-jp/source/ringallegrofuncsdoc.txt
new file mode 100644 (file)
index 0000000..21025fe
--- /dev/null
@@ -0,0 +1,642 @@
+.. index:: 
+     single: RingAllegro 関数リファレンス; はじめに
+
+===============================
+RingAllegro 関数リファレンス
+===============================
+
+Allegro リファレンス (英語版) : http://liballeg.org/api.html
+
+.. note:: 
+       Ring 1.10 以降で採用されている Allegro のバージョンは 5.2.4 です。予告なく変更される場合があります。
+       2019年02月08日現在、ウェブ上に日本語訳はありません。
+
+* void al_exit(void)
+* void al_run_main(void)
+* int al_init(void)
+* ALLEGRO_CONFIG \*al_create_config(void)
+* void al_destroy_config(ALLEGRO_CONFIG \*config)
+* ALLEGRO_CONFIG \*al_load_config_file(const char \*filename)
+* ALLEGRO_CONFIG \*al_load_config_file_f(ALLEGRO_FILE \*file)
+* bool al_save_config_file(const char \*filename, const ALLEGRO_CONFIG \*config)
+* bool al_save_config_file_f(ALLEGRO_FILE \*file, const ALLEGRO_CONFIG \*config)
+* void al_add_config_section(ALLEGRO_CONFIG \*config, const char \*name)
+* void al_add_config_comment(ALLEGRO_CONFIG \*config, const char \*section, const char \*comment)
+* const char \*al_get_config_value(const ALLEGRO_CONFIG \*config,const char \*section, const char \*key)
+* void al_set_config_value(ALLEGRO_CONFIG \*config,const char \*section, const char \*key, const char \*value)
+* char const \*al_get_first_config_section(ALLEGRO_CONFIG const \*config,ALLEGRO_CONFIG_SECTION \**iterator)
+* char const \*al_get_next_config_section(ALLEGRO_CONFIG_SECTION \**iterator)
+* char const \*al_get_first_config_entry(ALLEGRO_CONFIG const \*config,char const \*section, ALLEGRO_CONFIG_ENTRY \**iterator)
+* char const \*al_get_next_config_entry(ALLEGRO_CONFIG_ENTRY \**iterator)
+* ALLEGRO_CONFIG \*al_merge_config(const ALLEGRO_CONFIG \*cfg1,const ALLEGRO_CONFIG \*cfg2)
+* void al_merge_config_into(ALLEGRO_CONFIG \*master, const ALLEGRO_CONFIG \*add)
+* ALLEGRO_DISPLAY \*al_create_display(int w, int h)
+* void al_destroy_display(ALLEGRO_DISPLAY \*display)
+* int al_get_new_display_flags(void)
+* void al_set_new_display_flags(int flags)
+* int al_get_new_display_option(int option, int \*importance)
+* void al_set_new_display_option(int option, int value, int importance)
+* void al_reset_new_display_options(void)
+* void al_get_new_window_position(int \*x, int \*y)
+* void al_set_new_window_position(int x, int y)
+* int al_get_new_display_refresh_rate(void)
+* void al_set_new_display_refresh_rate(int refresh_rate)
+* ALLEGRO_EVENT_SOURCE \*al_get_display_event_source(ALLEGRO_DISPLAY \*display)
+* ALLEGRO_BITMAP \*al_get_backbuffer(ALLEGRO_DISPLAY \*display)
+* void al_flip_display(void)
+* void al_update_display_region(int x, int y, int width, int height)
+* bool al_wait_for_vsync(void)
+* int al_get_display_width(ALLEGRO_DISPLAY \*display)
+* int al_get_display_height(ALLEGRO_DISPLAY \*display)
+* bool al_resize_display(ALLEGRO_DISPLAY \*display, int width, int height)
+* bool al_acknowledge_resize(ALLEGRO_DISPLAY \*display)
+* void al_get_window_position(ALLEGRO_DISPLAY \*display, int \*x, int \*y)
+* void al_set_window_position(ALLEGRO_DISPLAY \*display, int x, int y)
+* int al_get_display_flags(ALLEGRO_DISPLAY \*display)
+* bool al_set_display_flag(ALLEGRO_DISPLAY \*display, int flag, bool onoff)
+* int al_get_display_option(ALLEGRO_DISPLAY \*display, int option)
+* int al_get_display_format(ALLEGRO_DISPLAY \*display)
+* int al_get_display_refresh_rate(ALLEGRO_DISPLAY \*display)
+* void al_set_window_title(ALLEGRO_DISPLAY \*display, const char \*title)
+* void al_set_display_icon(ALLEGRO_DISPLAY \*display, ALLEGRO_BITMAP \*icon)
+* void al_set_display_icons(ALLEGRO_DISPLAY \*display,int num_icons, ALLEGRO_BITMAP \*icons[])
+* bool al_inhibit_screensaver(bool inhibit)
+* void al_acknowledge_drawing_halt(ALLEGRO_DISPLAY \*display)
+* void al_acknowledge_drawing_resume(ALLEGRO_DISPLAY \*display)
+* int al_get_display_orientation(ALLEGRO_DISPLAY* display)
+* void al_set_display_option(ALLEGRO_DISPLAY \*display, int option, int value)
+* bool al_get_window_constraints(ALLEGRO_DISPLAY \*display,int \*min_w, int \*min_h, int \*max_w, int \*max_h)
+* bool al_set_window_constraints(ALLEGRO_DISPLAY \*display,int min_w, int min_h, int max_w, int max_h)
+* ALLEGRO_EVENT_QUEUE \*al_create_event_queue(void)
+* void al_destroy_event_queue(ALLEGRO_EVENT_QUEUE \*queue)
+* void al_register_event_source(ALLEGRO_EVENT_QUEUE \*queue,ALLEGRO_EVENT_SOURCE \*source)
+* void al_unregister_event_source(ALLEGRO_EVENT_QUEUE \*queue,ALLEGRO_EVENT_SOURCE \*source)
+* bool al_is_event_queue_empty(ALLEGRO_EVENT_QUEUE \*queue)
+* bool al_get_next_event(ALLEGRO_EVENT_QUEUE \*queue, ALLEGRO_EVENT \*ret_event)
+* bool al_peek_next_event(ALLEGRO_EVENT_QUEUE \*queue, ALLEGRO_EVENT \*ret_event)
+* bool al_drop_next_event(ALLEGRO_EVENT_QUEUE \*queue)
+* void al_flush_event_queue(ALLEGRO_EVENT_QUEUE \*queue)
+* void al_wait_for_event(ALLEGRO_EVENT_QUEUE \*queue, ALLEGRO_EVENT \*ret_event)
+* bool al_wait_for_event_timed(ALLEGRO_EVENT_QUEUE \*queue,ALLEGRO_EVENT \*ret_event, float secs)
+* bool al_wait_for_event_until(ALLEGRO_EVENT_QUEUE \*queue,ALLEGRO_EVENT \*ret_event, ALLEGRO_TIMEOUT \*timeout)
+* void al_init_user_event_source(ALLEGRO_EVENT_SOURCE \*src)
+* void al_destroy_user_event_source(ALLEGRO_EVENT_SOURCE \*src)
+* intptr_t al_get_event_source_data(const ALLEGRO_EVENT_SOURCE \*source)
+* void al_set_event_source_data(ALLEGRO_EVENT_SOURCE \*source, intptr_t data)
+* ALLEGRO_FILE \*al_fopen(const char \*path, const char \*mode)
+* ALLEGRO_FILE \*al_fopen_interface(const ALLEGRO_FILE_INTERFACE \*drv,const char \*path, const char \*mode)
+* ALLEGRO_FILE \*al_fopen_slice(ALLEGRO_FILE \*fp, size_t initial_size, const char \*mode)
+* void al_fclose(ALLEGRO_FILE \*f)
+* size_t al_fread(ALLEGRO_FILE \*f, void \*ptr, size_t size)
+* size_t al_fwrite(ALLEGRO_FILE \*f, const void \*ptr, size_t size)
+* bool al_fflush(ALLEGRO_FILE \*f)
+* int64_t al_ftell(ALLEGRO_FILE \*f)
+* bool al_fseek(ALLEGRO_FILE \*f, int64_t offset, int whence)
+* bool al_feof(ALLEGRO_FILE \*f)
+* bool al_ferror(ALLEGRO_FILE \*f)
+* void al_fclearerr(ALLEGRO_FILE \*f)
+* int al_fungetc(ALLEGRO_FILE \*f, int c)
+* int64_t al_fsize(ALLEGRO_FILE \*f)
+* int al_fgetc(ALLEGRO_FILE \*f)
+* int al_fputc(ALLEGRO_FILE \*f, int c)
+* int16_t al_fread16le(ALLEGRO_FILE \*f)
+* int16_t al_fread16be(ALLEGRO_FILE \*f)
+* size_t al_fwrite16le(ALLEGRO_FILE \*f, int16_t w)
+* size_t al_fwrite16be(ALLEGRO_FILE \*f, int16_t w)
+* int32_t al_fread32le(ALLEGRO_FILE \*f)
+* int32_t al_fread32be(ALLEGRO_FILE \*f)
+* size_t al_fwrite32le(ALLEGRO_FILE \*f, int32_t l)
+* size_t al_fwrite32be(ALLEGRO_FILE \*f, int32_t l)
+* char \*al_fgets(ALLEGRO_FILE \*f, char \* const buf, size_t max)
+* ALLEGRO_USTR \*al_fget_ustr(ALLEGRO_FILE \*f)
+* int al_fputs(ALLEGRO_FILE \*f, char const \*p)
+* ALLEGRO_FILE \*al_fopen_fd(int fd, const char \*mode)
+* ALLEGRO_FILE \*al_make_temp_file(const char \*template, ALLEGRO_PATH \**ret_path)
+* void al_set_new_file_interface(const ALLEGRO_FILE_INTERFACE \*file_interface
+* void al_set_standard_file_interface(void)
+* const ALLEGRO_FILE_INTERFACE \*al_get_new_file_interface(void)
+* ALLEGRO_FILE \*al_create_file_handle(const ALLEGRO_FILE_INTERFACE \*drv,void \*userdata)
+* void \*al_get_file_userdata(ALLEGRO_FILE \*f)
+* ALLEGRO_FS_ENTRY \*al_create_fs_entry(const char \*path)
+* void al_destroy_fs_entry(ALLEGRO_FS_ENTRY \*fh)
+* const char \*al_get_fs_entry_name(ALLEGRO_FS_ENTRY \*e)
+* bool al_update_fs_entry(ALLEGRO_FS_ENTRY \*e)
+* uint32_t al_get_fs_entry_mode(ALLEGRO_FS_ENTRY \*e)
+* time_t al_get_fs_entry_atime(ALLEGRO_FS_ENTRY \*e)
+* time_t al_get_fs_entry_ctime(ALLEGRO_FS_ENTRY \*e)
+* time_t al_get_fs_entry_mtime(ALLEGRO_FS_ENTRY \*e)
+* off_t al_get_fs_entry_size(ALLEGRO_FS_ENTRY \*e)
+* bool al_fs_entry_exists(ALLEGRO_FS_ENTRY \*e)
+* bool al_remove_fs_entry(ALLEGRO_FS_ENTRY \*e)
+* bool al_filename_exists(const char \*path)
+* bool al_remove_filename(const char \*path)
+* bool al_open_directory(ALLEGRO_FS_ENTRY \*e)
+* ALLEGRO_FS_ENTRY \*al_read_directory(ALLEGRO_FS_ENTRY \*e)
+* bool al_close_directory(ALLEGRO_FS_ENTRY \*e)
+* char \*al_get_current_directory(void)
+* bool al_change_directory(const char \*path)
+* bool al_make_directory(const char \*path)
+* ALLEGRO_FILE \*al_open_fs_entry(ALLEGRO_FS_ENTRY \*e, const char \*mode)
+* void al_set_fs_interface(const ALLEGRO_FS_INTERFACE \*fs_interface)
+* void al_set_standard_fs_interface(void)
+* const ALLEGRO_FS_INTERFACE \*al_get_fs_interface(void)
+* al_fixed al_itofix(int x);
+* int al_fixtoi(al_fixed x);
+* int al_fixfloor(al_fixed x);
+* int al_fixceil(al_fixed x);
+* al_fixed al_ftofix(double x);
+* double al_fixtof(al_fixed x);
+* al_fixed al_fixmul(al_fixed x, al_fixed y);
+* al_fixed al_fixdiv(al_fixed x, al_fixed y);
+* al_fixed al_fixadd(al_fixed x, al_fixed y);
+* al_fixed al_fixsub(al_fixed x, al_fixed y);
+* al_fixed al_fixsin(al_fixed x);
+* al_fixed al_fixcos(al_fixed x);
+* al_fixed al_fixtan(al_fixed x);
+* al_fixed al_fixasin(al_fixed x);
+* al_fixed al_fixacos(al_fixed x);
+* al_fixed al_fixatan(al_fixed x)
+* al_fixed al_fixatan2(al_fixed y, al_fixed x)
+* al_fixed al_fixsqrt(al_fixed x)
+* al_fixed al_fixhypot(al_fixed x, al_fixed y)
+* ALLEGRO_DISPLAY_MODE \*al_get_display_mode(int index, ALLEGRO_DISPLAY_MODE \*mode)
+* int al_get_num_display_modes(void)
+* ALLEGRO_COLOR al_map_rgb(unsigned char r, unsigned char g, unsigned char b)
+* ALLEGRO_COLOR al_map_rgb_f(float r, float g, float b)
+* ALLEGRO_COLOR al_map_rgba(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+* ALLEGRO_COLOR al_map_rgba_f(float r, float g, float b, float a)
+* void al_unmap_rgb(ALLEGRO_COLOR color,unsigned char \*r, unsigned char \*g, unsigned char \*b)
+* void al_unmap_rgb_f(ALLEGRO_COLOR color, float \*r, float \*g, float \*b)
+* void al_unmap_rgba(ALLEGRO_COLOR color,unsigned char \*r, unsigned char \*g, unsigned char \*b, unsigned char \*a)
+* void al_unmap_rgba_f(ALLEGRO_COLOR color,float \*r, float \*g, float \*b, float \*a)
+* int al_get_pixel_size(int format)
+* int al_get_pixel_format_bits(int format)
+* ALLEGRO_LOCKED_REGION \*al_lock_bitmap(ALLEGRO_BITMAP \*bitmap,int format, int flags)
+* ALLEGRO_LOCKED_REGION \*al_lock_bitmap_region(ALLEGRO_BITMAP \*bitmap,int x, int y, int width, int height, int format, int flags)
+* void al_unlock_bitmap(ALLEGRO_BITMAP \*bitmap)
+* ALLEGRO_BITMAP \*al_create_bitmap(int w, int h)
+* ALLEGRO_BITMAP \*al_create_sub_bitmap(ALLEGRO_BITMAP \*parent,int x, int y, int w, int h)
+* ALLEGRO_BITMAP \*al_clone_bitmap(ALLEGRO_BITMAP \*bitmap)
+* void al_destroy_bitmap(ALLEGRO_BITMAP \*bitmap)
+* int al_get_new_bitmap_flags(void)
+* int al_get_new_bitmap_format(void)
+* void al_set_new_bitmap_flags(int flags)
+* void al_add_new_bitmap_flag(int flag)
+* void al_set_new_bitmap_format(int format)
+* int al_get_bitmap_flags(ALLEGRO_BITMAP \*bitmap)
+* int al_get_bitmap_format(ALLEGRO_BITMAP \*bitmap)
+* int al_get_bitmap_height(ALLEGRO_BITMAP \*bitmap)
+* int al_get_bitmap_width(ALLEGRO_BITMAP \*bitmap)
+* ALLEGRO_COLOR al_get_pixel(ALLEGRO_BITMAP \*bitmap, int x, int y)
+* bool al_is_bitmap_locked(ALLEGRO_BITMAP \*bitmap)
+* bool al_is_compatible_bitmap(ALLEGRO_BITMAP \*bitmap)
+* bool al_is_sub_bitmap(ALLEGRO_BITMAP \*bitmap)
+* ALLEGRO_BITMAP \*al_get_parent_bitmap(ALLEGRO_BITMAP \*bitmap)
+* void al_clear_to_color(ALLEGRO_COLOR color)
+* void al_draw_bitmap(ALLEGRO_BITMAP \*bitmap, float dx, float dy, int flags)
+* void al_draw_tinted_bitmap(ALLEGRO_BITMAP \*bitmap, ALLEGRO_COLOR tint,float dx, float dy, int flags)
+* void al_draw_bitmap_region(ALLEGRO_BITMAP \*bitmap,float sx, float sy, float sw, float sh, float dx, float dy, int flags)
+* void al_draw_tinted_bitmap_region(ALLEGRO_BITMAP \*bitmap,ALLEGRO_COLOR tint,float sx, float sy, float sw, float sh, float dx, float dy,int flags)
+* void al_draw_pixel(float x, float y, ALLEGRO_COLOR color)
+* void al_draw_rotated_bitmap(ALLEGRO_BITMAP \*bitmap,float cx, float cy, float dx, float dy, float angle, int flags)
+* void al_draw_tinted_rotated_bitmap(ALLEGRO_BITMAP \*bitmap,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float angle, int flags)
+* void al_draw_scaled_rotated_bitmap(ALLEGRO_BITMAP \*bitmap,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_tinted_scaled_rotated_bitmap(ALLEGRO_BITMAP \*bitmap,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_tinted_scaled_rotated_bitmap_region(ALLEGRO_BITMAP \*bitmap,float sx, float sy, float sw, float sh,ALLEGRO_COLOR tint,float cx, float cy, float dx, float dy, float xscale, float yscale,float angle, int flags)
+* void al_draw_scaled_bitmap(ALLEGRO_BITMAP \*bitmap,float sx, float sy, float sw, float sh,float dx, float dy, float dw, float dh, int flags)
+* void al_draw_tinted_scaled_bitmap(ALLEGRO_BITMAP \*bitmap,ALLEGRO_COLOR tint,float sx, float sy, float sw, float sh,float dx, float dy, float dw, float dh, int flags)
+* ALLEGRO_BITMAP \*al_get_target_bitmap(void)
+* void al_put_pixel(int x, int y, ALLEGRO_COLOR color)
+* void al_put_blended_pixel(int x, int y, ALLEGRO_COLOR color)
+* void al_set_target_bitmap(ALLEGRO_BITMAP \*bitmap)
+* void al_set_target_backbuffer(ALLEGRO_DISPLAY \*display)
+* ALLEGRO_DISPLAY \*al_get_current_display(void)
+* void al_get_blender(int \*op, int \*src, int \*dst)
+* void al_get_separate_blender(int \*op, int \*src, int \*dst,int \*alpha_op, int \*alpha_src, int \*alpha_dst)
+* void al_set_blender(int op, int src, int dst)
+* void al_set_separate_blender(int op, int src, int dst,int alpha_op, int alpha_src, int alpha_dst)
+* void al_get_clipping_rectangle(int \*x, int \*y, int \*w, int \*h)
+* void al_set_clipping_rectangle(int x, int y, int width, int height)
+* void al_reset_clipping_rectangle(void)
+* void al_convert_mask_to_alpha(ALLEGRO_BITMAP \*bitmap, ALLEGRO_COLOR mask_color)
+* void al_hold_bitmap_drawing(bool hold)
+* bool al_is_bitmap_drawing_held(void)
+* ALLEGRO_BITMAP \*al_load_bitmap_f(ALLEGRO_FILE \*fp, const char \*ident)
+* bool al_save_bitmap(const char \*filename, ALLEGRO_BITMAP \*bitmap)
+* bool al_save_bitmap_f(ALLEGRO_FILE \*fp, const char \*ident,ALLEGRO_BITMAP \*bitmap)
+* bool al_install_joystick(void)
+* void al_uninstall_joystick(void)
+* bool al_is_joystick_installed(void)
+* bool al_reconfigure_joysticks(void)
+* int al_get_num_joysticks(void)
+* ALLEGRO_JOYSTICK \* al_get_joystick(int num)
+* void al_release_joystick(ALLEGRO_JOYSTICK \*joy)
+* bool al_get_joystick_active(ALLEGRO_JOYSTICK \*joy)
+* const char \*al_get_joystick_name(ALLEGRO_JOYSTICK \*joy)
+* const char \*al_get_joystick_stick_name(ALLEGRO_JOYSTICK \*joy, int stick)
+* const char \*al_get_joystick_axis_name(ALLEGRO_JOYSTICK \*joy, int stick, int axis)
+* const char \*al_get_joystick_button_name(ALLEGRO_JOYSTICK \*joy, int button)
+* int al_get_joystick_stick_flags(ALLEGRO_JOYSTICK \*joy, int stick)
+* int al_get_joystick_num_sticks(ALLEGRO_JOYSTICK \*joy)
+* int al_get_joystick_num_axes(ALLEGRO_JOYSTICK \*joy, int stick)
+* int al_get_joystick_num_buttons(ALLEGRO_JOYSTICK \*joy)
+* void al_get_joystick_state(ALLEGRO_JOYSTICK \*joy, ALLEGRO_JOYSTICK_STATE \*ret_state)
+* ALLEGRO_EVENT_SOURCE \*al_get_joystick_event_source(void)
+* bool al_install_keyboard(void)
+* bool al_is_keyboard_installed(void)
+* void al_uninstall_keyboard(void)
+* void al_get_keyboard_state(ALLEGRO_KEYBOARD_STATE \*ret_state)
+* bool al_key_down(const ALLEGRO_KEYBOARD_STATE \*state, int keycode)
+* const char \*al_keycode_to_name(int keycode)
+* bool al_set_keyboard_leds(int leds)
+* ALLEGRO_EVENT_SOURCE \*al_get_keyboard_event_source(void)
+* void \*al_malloc_with_context(size_t n,int line, const char \*file, const char \*func)
+* void al_free_with_context(void \*ptr, int line, const char \*file, const char \*func)
+* void \*al_realloc_with_context(void \*ptr, size_t n,int line, const char \*file, const char \*func)
+* void \*al_calloc_with_context(size_t count, size_t n,int line, const char \*file, const char \*func)
+* void al_set_memory_interface(ALLEGRO_MEMORY_INTERFACE \*memory_interface)
+* int al_get_new_display_adapter(void)
+* void al_set_new_display_adapter(int adapter)
+* bool al_get_monitor_info(int adapter, ALLEGRO_MONITOR_INFO \*info)
+* int al_get_num_video_adapters(void)
+* bool al_install_mouse(void)
+* bool al_is_mouse_installed(void)
+* void al_uninstall_mouse(void)
+* unsigned int al_get_mouse_num_axes(void)
+* unsigned int al_get_mouse_num_buttons(void)
+* void al_get_mouse_state(ALLEGRO_MOUSE_STATE \*ret_state)
+* int al_get_mouse_state_axis(const ALLEGRO_MOUSE_STATE \*state, int axis)
+* bool al_mouse_button_down(const ALLEGRO_MOUSE_STATE \*state, int button)
+* bool al_set_mouse_xy(ALLEGRO_DISPLAY \*display, int x, int y)
+* bool al_set_mouse_z(int z)
+* bool al_set_mouse_w(int w)
+* bool al_set_mouse_axis(int which, int value)
+* ALLEGRO_EVENT_SOURCE \*al_get_mouse_event_source(void)
+* ALLEGRO_MOUSE_CURSOR \*al_create_mouse_cursor(ALLEGRO_BITMAP \*bmp,int x_focus, int y_focus)
+* void al_destroy_mouse_cursor(ALLEGRO_MOUSE_CURSOR \*cursor)
+* bool al_set_mouse_cursor(ALLEGRO_DISPLAY \*display, ALLEGRO_MOUSE_CURSOR \*cursor)
+* bool al_set_system_mouse_cursor(ALLEGRO_DISPLAY \*display,ALLEGRO_SYSTEM_MOUSE_CURSOR cursor_id)
+* bool al_get_mouse_cursor_position(int \*ret_x, int \*ret_y)
+* bool al_hide_mouse_cursor(ALLEGRO_DISPLAY \*display)
+* bool al_show_mouse_cursor(ALLEGRO_DISPLAY \*display)
+* bool al_grab_mouse(ALLEGRO_DISPLAY \*display)
+* bool al_ungrab_mouse(void)
+* ALLEGRO_PATH \*al_create_path(const char \*str)
+* ALLEGRO_PATH \*al_create_path_for_directory(const char \*str)
+* void al_destroy_path(ALLEGRO_PATH \*path)
+* ALLEGRO_PATH \*al_clone_path(const ALLEGRO_PATH \*path)
+* bool al_join_paths(ALLEGRO_PATH \*path, const ALLEGRO_PATH \*tail)
+* bool al_rebase_path(const ALLEGRO_PATH \*head, ALLEGRO_PATH \*tail)
+* const char \*al_get_path_drive(const ALLEGRO_PATH \*path)
+* int al_get_path_num_components(const ALLEGRO_PATH \*path)
+* const char \*al_get_path_component(const ALLEGRO_PATH \*path, int i)
+* const char \*al_get_path_tail(const ALLEGRO_PATH \*path)
+* const char \*al_get_path_filename(const ALLEGRO_PATH \*path)
+* const char \*al_get_path_basename(const ALLEGRO_PATH \*path)
+* const char \*al_get_path_extension(const ALLEGRO_PATH \*path)
+* void al_set_path_drive(ALLEGRO_PATH \*path, const char \*drive)
+* void al_append_path_component(ALLEGRO_PATH \*path, const char \*s)
+* void al_insert_path_component(ALLEGRO_PATH \*path, int i, const char \*s)
+* void al_replace_path_component(ALLEGRO_PATH \*path, int i, const char \*s)
+* void al_remove_path_component(ALLEGRO_PATH \*path, int i)
+* void al_drop_path_tail(ALLEGRO_PATH \*path)
+* void al_set_path_filename(ALLEGRO_PATH \*path, const char \*filename)
+* bool al_set_path_extension(ALLEGRO_PATH \*path, char const \*extension)
+* const char \*al_path_cstr(const ALLEGRO_PATH \*path, char delim)
+* bool al_make_path_canonical(ALLEGRO_PATH \*path)
+* void al_restore_state(ALLEGRO_STATE const \*state)
+* void al_store_state(ALLEGRO_STATE \*state, int flags
+* int al_get_errno(void)
+* void al_set_errno(int errnum)
+* void al_uninstall_system(void)
+* bool al_is_system_installed(void)
+* uint32_t al_get_allegro_version(void)
+* ALLEGRO_PATH \*al_get_standard_path(int id)
+* void al_set_exe_name(char const \*path)
+* void al_set_app_name(const char \*app_name)
+* void al_set_org_name(const char \*org_name)
+* const char \*al_get_app_name(void)
+* const char \*al_get_org_name(void)
+* ALLEGRO_CONFIG \*al_get_system_config(void)
+* ALLEGRO_THREAD \*al_create_thread(void)
+* void al_run_detached_thread(void)
+* 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)
+* int al_wait_cond_until(ALLEGRO_COND \*cond, ALLEGRO_MUTEX \*mutex,const ALLEGRO_TIMEOUT \*timeout)
+* void al_broadcast_cond(ALLEGRO_COND \*cond)
+* void al_signal_cond(ALLEGRO_COND \*cond)
+* double al_get_time(void)
+* void al_init_timeout(ALLEGRO_TIMEOUT \*timeout, double seconds)
+* void al_rest(double seconds)
+* ALLEGRO_TIMER \*al_create_timer(double speed_secs)
+* void al_start_timer(ALLEGRO_TIMER \*timer)
+* void al_stop_timer(ALLEGRO_TIMER \*timer)
+* bool al_get_timer_started(const ALLEGRO_TIMER \*timer)
+* void al_destroy_timer(ALLEGRO_TIMER \*timer)
+* int64_t al_get_timer_count(const ALLEGRO_TIMER \*timer)
+* void al_set_timer_count(ALLEGRO_TIMER \*timer, int64_t new_count)
+* void al_add_timer_count(ALLEGRO_TIMER \*timer, int64_t diff)
+* double al_get_timer_speed(const ALLEGRO_TIMER \*timer)
+* void al_set_timer_speed(ALLEGRO_TIMER \*timer, double new_speed_secs)
+* ALLEGRO_EVENT_SOURCE \*al_get_timer_event_source(ALLEGRO_TIMER \*timer)
+* void al_copy_transform(ALLEGRO_TRANSFORM \*dest, const ALLEGRO_TRANSFORM \*src)
+* void al_use_transform(const ALLEGRO_TRANSFORM \*trans)
+* const ALLEGRO_TRANSFORM \*al_get_current_transform(void)
+* void al_invert_transform(ALLEGRO_TRANSFORM \*trans)
+* int al_check_inverse(const ALLEGRO_TRANSFORM \*trans, float tol)
+* void al_identity_transform(ALLEGRO_TRANSFORM \*trans)
+* void al_build_transform(ALLEGRO_TRANSFORM \*trans, float x, float y,float sx, float sy, float theta)
+* void al_translate_transform(ALLEGRO_TRANSFORM \*trans, float x, float y)
+* void al_rotate_transform(ALLEGRO_TRANSFORM \*trans, float theta)
+* void al_scale_transform(ALLEGRO_TRANSFORM \*trans, float sx, float sy)
+* void al_transform_coordinates(const ALLEGRO_TRANSFORM \*trans, float \*x, float \*y)
+* void al_compose_transform(ALLEGRO_TRANSFORM \*trans, const ALLEGRO_TRANSFORM \*other)
+* ALLEGRO_USTR \*al_ustr_new(const char \*s)
+* ALLEGRO_USTR \*al_ustr_new_from_buffer(const char \*s, size_t size)
+* void al_ustr_free(ALLEGRO_USTR \*us)
+* const char \*al_cstr(const ALLEGRO_USTR \*us)
+* void al_ustr_to_buffer(const ALLEGRO_USTR \*us, char \*buffer, int size)
+* char \*al_cstr_dup(const ALLEGRO_USTR \*us)
+* ALLEGRO_USTR \*al_ustr_dup(const ALLEGRO_USTR \*us)
+* ALLEGRO_USTR \*al_ustr_dup_substr(const ALLEGRO_USTR \*us, int start_pos,int end_pos)
+* const ALLEGRO_USTR \*al_ustr_empty_string(void)
+* const ALLEGRO_USTR \*al_ref_cstr(ALLEGRO_USTR_INFO \*info, const char \*s)
+* const ALLEGRO_USTR \*al_ref_buffer(ALLEGRO_USTR_INFO \*info, const char \*s, size_t size)
+* const ALLEGRO_USTR \*al_ref_ustr(ALLEGRO_USTR_INFO \*info, const ALLEGRO_USTR \*us,int start_pos, int end_pos)
+* size_t al_ustr_size(const ALLEGRO_USTR \*us)
+* size_t al_ustr_length(const ALLEGRO_USTR \*us)
+* int al_ustr_offset(const ALLEGRO_USTR \*us, int index)
+* bool al_ustr_next(const ALLEGRO_USTR \*us, int \*pos)
+* bool al_ustr_prev(const ALLEGRO_USTR \*us, int \*pos)
+* int32_t al_ustr_get(const ALLEGRO_USTR \*ub, int pos)
+* int32_t al_ustr_get_next(const ALLEGRO_USTR \*us, int \*pos)
+* int32_t al_ustr_prev_get(const ALLEGRO_USTR \*us, int \*pos)
+* bool al_ustr_insert(ALLEGRO_USTR \*us1, int pos, const ALLEGRO_USTR \*us2)
+* bool al_ustr_insert_cstr(ALLEGRO_USTR \*us, int pos, const char \*s)
+* size_t al_ustr_insert_chr(ALLEGRO_USTR \*us, int pos, int32_t c)
+* bool al_ustr_append(ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2)
+* bool al_ustr_append_cstr(ALLEGRO_USTR \*us, const char \*s)
+* size_t al_ustr_append_chr(ALLEGRO_USTR \*us, int32_t c)
+* bool al_ustr_remove_chr(ALLEGRO_USTR \*us, int pos)
+* bool al_ustr_remove_range(ALLEGRO_USTR \*us, int start_pos, int end_pos)
+* bool al_ustr_truncate(ALLEGRO_USTR \*us, int start_pos)
+* bool al_ustr_ltrim_ws(ALLEGRO_USTR \*us)
+* bool al_ustr_rtrim_ws(ALLEGRO_USTR \*us)
+* bool al_ustr_trim_ws(ALLEGRO_USTR \*us)
+* bool al_ustr_assign(ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2)
+* bool al_ustr_assign_substr(ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2,int start_pos, int end_pos)
+* bool al_ustr_assign_cstr(ALLEGRO_USTR \*us1, const char \*s)
+* size_t al_ustr_set_chr(ALLEGRO_USTR \*us, int start_pos, int32_t c)
+* bool al_ustr_replace_range(ALLEGRO_USTR \*us1, int start_pos1, int end_pos1,const ALLEGRO_USTR \*us2)
+* int al_ustr_find_chr(const ALLEGRO_USTR \*us, int start_pos, int32_t c)
+* int al_ustr_rfind_chr(const ALLEGRO_USTR \*us, int end_pos, int32_t c)
+* int al_ustr_find_set(const ALLEGRO_USTR \*us, int start_pos,const ALLEGRO_USTR \*accept)
+* int al_ustr_find_set_cstr(const ALLEGRO_USTR \*us, int start_pos,const char \*accept)
+* int al_ustr_find_cset(const ALLEGRO_USTR \*us, int start_pos,const ALLEGRO_USTR \*reject)
+* int al_ustr_find_cset_cstr(const ALLEGRO_USTR \*us, int start_pos,const char \*reject)
+* int al_ustr_find_str(const ALLEGRO_USTR \*haystack, int start_pos,const ALLEGRO_USTR \*needle)
+* int al_ustr_find_cstr(const ALLEGRO_USTR \*haystack, int start_pos,const char \*needle)
+* int al_ustr_rfind_str(const ALLEGRO_USTR \*haystack, int end_pos,const ALLEGRO_USTR \*needle)
+* int al_ustr_rfind_cstr(const ALLEGRO_USTR \*haystack, int end_pos,const char \*needle)
+* bool al_ustr_find_replace(ALLEGRO_USTR \*us, int start_pos,const ALLEGRO_USTR \*find, const ALLEGRO_USTR \*replace)
+* bool al_ustr_find_replace_cstr(ALLEGRO_USTR \*us, int start_pos,const char \*find, const char \*replace)
+* int al_ustr_compare(const ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2)
+* int al_ustr_ncompare(const ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2, int n)
+* bool al_ustr_equal(const ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2)
+* bool al_ustr_has_prefix(const ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2)
+* bool al_ustr_has_prefix_cstr(const ALLEGRO_USTR \*us1, const char \*s2)
+* bool al_ustr_has_suffix(const ALLEGRO_USTR \*us1, const ALLEGRO_USTR \*us2)
+* bool al_ustr_has_suffix_cstr(const ALLEGRO_USTR \*us1, const char \*s2)
+* ALLEGRO_USTR \*al_ustr_new_from_utf16(uint16_t const \*s)
+* size_t al_ustr_size_utf16(const ALLEGRO_USTR \*us)
+* size_t al_ustr_encode_utf16(const ALLEGRO_USTR \*us, uint16_t \*s,size_t n)
+* size_t al_utf8_width(int c)
+* size_t al_utf8_encode(char s[], int32_t c)
+* size_t al_utf16_width(int c)
+* LPDIRECT3DDEVICE9 al_get_d3d_device(ALLEGRO_DISPLAY \*display)
+* LPDIRECT3DTEXTURE9 al_get_d3d_system_texture(ALLEGRO_BITMAP \*bitmap)
+* LPDIRECT3DTEXTURE9 al_get_d3d_video_texture(ALLEGRO_BITMAP \*bitmap)
+* bool al_have_d3d_non_pow2_texture_support(void)
+* bool al_have_d3d_non_square_texture_support(void)
+* void al_get_d3d_texture_position(ALLEGRO_BITMAP \*bitmap, int \*u, int \*v)
+* bool al_is_d3d_device_lost(ALLEGRO_DISPLAY \*display)
+* ALLEGRO_OGL_EXT_LIST \*al_get_opengl_extension_list(void)
+* void \*al_get_opengl_proc_address(const char \*name)
+* GLuint al_get_opengl_texture(ALLEGRO_BITMAP \*bitmap)
+* void al_get_opengl_texture_size(ALLEGRO_BITMAP \*bitmap, int \*w, int \*h)
+* void al_get_opengl_texture_position(ALLEGRO_BITMAP \*bitmap, int \*u, int \*v)
+* GLuint al_get_opengl_fbo(ALLEGRO_BITMAP \*bitmap)
+* void al_remove_opengl_fbo(ALLEGRO_BITMAP \*bitmap)
+* bool al_have_opengl_extension(const char \*extension);
+* uint32_t al_get_opengl_version(void)
+* int al_get_opengl_variant(void)
+* void al_set_current_opengl_context(ALLEGRO_DISPLAY \*display)
+* bool al_install_audio(void)
+* void al_uninstall_audio(void)
+* bool al_is_audio_installed(void)
+* bool al_reserve_samples(int reserve_samples)
+* uint32_t al_get_allegro_audio_version(void)
+* size_t al_get_audio_depth_size(ALLEGRO_AUDIO_DEPTH depth)
+* size_t al_get_channel_count(ALLEGRO_CHANNEL_CONF conf)
+* ALLEGRO_VOICE \*al_create_voice(unsigned int freq,ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
+* void al_destroy_voice(ALLEGRO_VOICE \*voice)
+* void al_detach_voice(ALLEGRO_VOICE \*voice)
+* bool al_attach_audio_stream_to_voice(ALLEGRO_AUDIO_STREAM \*stream,ALLEGRO_VOICE \*voice)
+* bool al_attach_mixer_to_voice(ALLEGRO_MIXER \*mixer, ALLEGRO_VOICE \*voice)
+* bool al_attach_sample_instance_to_voice(ALLEGRO_SAMPLE_INSTANCE \*spl,ALLEGRO_VOICE \*voice)
+* unsigned int al_get_voice_frequency(const ALLEGRO_VOICE \*voice)
+* ALLEGRO_CHANNEL_CONF al_get_voice_channels(const ALLEGRO_VOICE \*voice)
+* ALLEGRO_AUDIO_DEPTH al_get_voice_depth(const ALLEGRO_VOICE \*voice)
+* bool al_get_voice_playing(const ALLEGRO_VOICE \*voice)
+* bool al_set_voice_playing(ALLEGRO_VOICE \*voice, bool val)
+* unsigned int al_get_voice_position(const ALLEGRO_VOICE \*voice)
+* bool al_set_voice_position(ALLEGRO_VOICE \*voice, unsigned int val)
+* ALLEGRO_SAMPLE \*al_create_sample(void \*buf, unsigned int samples,unsigned int freq, ALLEGRO_AUDIO_DEPTH depth,ALLEGRO_CHANNEL_CONF chan_conf, bool free_buf)
+* void al_destroy_sample(ALLEGRO_SAMPLE \*spl)
+* bool al_play_sample(ALLEGRO_SAMPLE \*spl, float gain, float pan, float speed,int loop, ALLEGRO_SAMPLE_ID \*ret_id)
+* void al_stop_sample(ALLEGRO_SAMPLE_ID \*spl_id)
+* void al_stop_samples(void)
+* ALLEGRO_CHANNEL_CONF al_get_sample_channels(const ALLEGRO_SAMPLE \*spl)
+* ALLEGRO_AUDIO_DEPTH al_get_sample_depth(const ALLEGRO_SAMPLE \*spl)
+* unsigned int al_get_sample_frequency(const ALLEGRO_SAMPLE \*spl)
+* unsigned int al_get_sample_length(const ALLEGRO_SAMPLE \*spl)
+* void \*al_get_sample_data(const ALLEGRO_SAMPLE \*spl)
+* ALLEGRO_SAMPLE_INSTANCE \*al_create_sample_instance(ALLEGRO_SAMPLE \*sample_data)
+* void al_destroy_sample_instance(ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_play_sample_instance(ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_stop_sample_instance(ALLEGRO_SAMPLE_INSTANCE \*spl)
+* ALLEGRO_CHANNEL_CONF al_get_sample_instance_channels(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* ALLEGRO_AUDIO_DEPTH al_get_sample_instance_depth(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* unsigned int al_get_sample_instance_frequency(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* unsigned int al_get_sample_instance_length(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample_instance_length(ALLEGRO_SAMPLE_INSTANCE \*spl,unsigned int val)
+* unsigned int al_get_sample_instance_position(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample_instance_position(ALLEGRO_SAMPLE_INSTANCE \*spl,unsigned int val)
+* float al_get_sample_instance_speed(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample_instance_speed(ALLEGRO_SAMPLE_INSTANCE \*spl, float val)
+* float al_get_sample_instance_gain(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample_instance_gain(ALLEGRO_SAMPLE_INSTANCE \*spl, float val)
+* float al_get_sample_instance_pan(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample_instance_pan(ALLEGRO_SAMPLE_INSTANCE \*spl, float val)
+* float al_get_sample_instance_time(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* ALLEGRO_PLAYMODE al_get_sample_instance_playmode(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample_instance_playmode(ALLEGRO_SAMPLE_INSTANCE \*spl,ALLEGRO_PLAYMODE val)
+* bool al_get_sample_instance_playing(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample_instance_playing(ALLEGRO_SAMPLE_INSTANCE \*spl, bool val)
+* bool al_get_sample_instance_attached(const ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_detach_sample_instance(ALLEGRO_SAMPLE_INSTANCE \*spl)
+* ALLEGRO_SAMPLE \*al_get_sample(ALLEGRO_SAMPLE_INSTANCE \*spl)
+* bool al_set_sample(ALLEGRO_SAMPLE_INSTANCE \*spl, ALLEGRO_SAMPLE \*data)
+* ALLEGRO_MIXER \*al_create_mixer(unsigned int freq,ALLEGRO_AUDIO_DEPTH depth, ALLEGRO_CHANNEL_CONF chan_conf)
+* void al_destroy_mixer(ALLEGRO_MIXER \*mixer)
+* ALLEGRO_MIXER \*al_get_default_mixer(void)
+* bool al_set_default_mixer(ALLEGRO_MIXER \*mixer)
+* bool al_restore_default_mixer(void)
+* bool al_attach_mixer_to_mixer(ALLEGRO_MIXER \*stream, ALLEGRO_MIXER \*mixer)
+* bool al_attach_sample_instance_to_mixer(ALLEGRO_SAMPLE_INSTANCE \*spl,ALLEGRO_MIXER \*mixer)
+* bool al_attach_audio_stream_to_mixer(ALLEGRO_AUDIO_STREAM \*stream, ALLEGRO_MIXER \*mixer)
+* unsigned int al_get_mixer_frequency(const ALLEGRO_MIXER \*mixer)
+* bool al_set_mixer_frequency(ALLEGRO_MIXER \*mixer, unsigned int val)
+* ALLEGRO_CHANNEL_CONF al_get_mixer_channels(const ALLEGRO_MIXER \*mixer)
+* ALLEGRO_AUDIO_DEPTH al_get_mixer_depth(const ALLEGRO_MIXER \*mixer)
+* float al_get_mixer_gain(const ALLEGRO_MIXER \*mixer)
+* bool al_set_mixer_gain(ALLEGRO_MIXER \*mixer, float new_gain)
+* ALLEGRO_MIXER_QUALITY al_get_mixer_quality(const ALLEGRO_MIXER \*mixer)
+* bool al_set_mixer_quality(ALLEGRO_MIXER \*mixer, ALLEGRO_MIXER_QUALITY new_quality)
+* bool al_get_mixer_playing(const ALLEGRO_MIXER \*mixer)
+* bool al_set_mixer_playing(ALLEGRO_MIXER \*mixer, bool val)
+* bool al_get_mixer_attached(const ALLEGRO_MIXER \*mixer)
+* bool al_detach_mixer(ALLEGRO_MIXER \*mixer)
+* void al_destroy_audio_stream(ALLEGRO_AUDIO_STREAM \*stream)
+* ALLEGRO_EVENT_SOURCE \*al_get_audio_stream_event_source(ALLEGRO_AUDIO_STREAM \*stream)
+* void al_drain_audio_stream(ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_rewind_audio_stream(ALLEGRO_AUDIO_STREAM \*stream)
+* unsigned int al_get_audio_stream_frequency(const ALLEGRO_AUDIO_STREAM \*stream)
+* ALLEGRO_CHANNEL_CONF al_get_audio_stream_channels(const ALLEGRO_AUDIO_STREAM \*stream)
+* ALLEGRO_AUDIO_DEPTH al_get_audio_stream_depth(const ALLEGRO_AUDIO_STREAM \*stream)
+* unsigned int al_get_audio_stream_length(const ALLEGRO_AUDIO_STREAM \*stream)
+* float al_get_audio_stream_speed(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_set_audio_stream_speed(ALLEGRO_AUDIO_STREAM \*stream, float val)
+* float al_get_audio_stream_gain(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_set_audio_stream_gain(ALLEGRO_AUDIO_STREAM \*stream, float val)
+* float al_get_audio_stream_pan(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_set_audio_stream_pan(ALLEGRO_AUDIO_STREAM \*stream, float val)
+* bool al_get_audio_stream_playing(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_set_audio_stream_playing(ALLEGRO_AUDIO_STREAM \*stream, bool val)
+* ALLEGRO_PLAYMODE al_get_audio_stream_playmode(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_set_audio_stream_playmode(ALLEGRO_AUDIO_STREAM \*stream,ALLEGRO_PLAYMODE val)
+* bool al_get_audio_stream_attached(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_detach_audio_stream(ALLEGRO_AUDIO_STREAM \*stream)
+* void \*al_get_audio_stream_fragment(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_set_audio_stream_fragment(ALLEGRO_AUDIO_STREAM \*stream, void \*val)
+* unsigned int al_get_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM \*stream)
+* unsigned int al_get_available_audio_stream_fragments(const ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_seek_audio_stream_secs(ALLEGRO_AUDIO_STREAM \*stream, double time)
+* double al_get_audio_stream_position_secs(ALLEGRO_AUDIO_STREAM \*stream)
+* double al_get_audio_stream_length_secs(ALLEGRO_AUDIO_STREAM \*stream)
+* bool al_set_audio_stream_loop_secs(ALLEGRO_AUDIO_STREAM \*stream,double start, double end)
+* ALLEGRO_SAMPLE \*al_load_sample(const char \*filename)
+* ALLEGRO_SAMPLE \*al_load_sample_f(ALLEGRO_FILE* fp, const char \*ident)
+* ALLEGRO_AUDIO_STREAM \*al_load_audio_stream(const char \*filename,size_t buffer_count, unsigned int samples)
+* ALLEGRO_AUDIO_STREAM \*al_load_audio_stream_f(ALLEGRO_FILE* fp, const char \*ident,size_t buffer_count, unsigned int samples)
+* bool al_save_sample(const char \*filename, ALLEGRO_SAMPLE \*spl)
+* bool al_save_sample_f(ALLEGRO_FILE \*fp, const char \*ident, ALLEGRO_SAMPLE \*spl)
+* bool al_init_acodec_addon(void)
+* uint32_t al_get_allegro_acodec_version(void)
+* ALLEGRO_COLOR al_color_cmyk(float c, float m, float y, float k)
+* void al_color_cmyk_to_rgb(float cyan, float magenta, float yellow,float key, float \*red, float \*green, float \*blue)
+* ALLEGRO_COLOR al_color_hsl(float h, float s, float l)
+* void al_color_hsl_to_rgb(float hue, float saturation, float lightness,float \*red, float \*green, float \*blue)
+* ALLEGRO_COLOR al_color_hsv(float h, float s, float v)
+* void al_color_hsv_to_rgb(float hue, float saturation, float value,float \*red, float \*green, float \*blue)
+* ALLEGRO_COLOR al_color_html(char const \*string)
+* void al_color_html_to_rgb(char const \*string,float \*red, float \*green, float \*blue)
+* void al_color_rgb_to_html(float red, float green, float blue,char \*string)
+* ALLEGRO_COLOR al_color_name(char const \*name)
+* bool al_color_name_to_rgb(char const \*name, float \*r, float \*g, float \*b)
+* void al_color_rgb_to_cmyk(float red, float green, float blue,float \*cyan, float \*magenta, float \*yellow, float \*key)
+* void al_color_rgb_to_hsl(float red, float green, float blue,float \*hue, float \*saturation, float \*lightness)
+* void al_color_rgb_to_hsv(float red, float green, float blue,float \*hue, float \*saturation, float \*value)
+* char const \*al_color_rgb_to_name(float r, float g, float b)
+* void al_color_rgb_to_yuv(float red, float green, float blue,float \*y, float \*u, float \*v)
+* ALLEGRO_COLOR al_color_yuv(float y, float u, float v)
+* void al_color_yuv_to_rgb(float y, float u, float v,float \*red, float \*green, float \*blue)
+* uint32_t al_get_allegro_color_version(void)
+* void al_init_font_addon(void)
+* void al_shutdown_font_addon(void)
+* ALLEGRO_FONT \*al_load_font(char const \*filename, int size, int flags)
+* void al_destroy_font(ALLEGRO_FONT \*f)
+* int al_get_font_ascent(const ALLEGRO_FONT \*f)
+* int al_get_font_descent(const ALLEGRO_FONT \*f)
+* int al_get_text_width(const ALLEGRO_FONT \*f, const char \*str)
+* int al_get_ustr_width(const ALLEGRO_FONT \*f, ALLEGRO_USTR const \*ustr)
+* void al_draw_text(const ALLEGRO_FONT \*font,ALLEGRO_COLOR color, float x, float y, int flags,char const \*text)
+* void al_draw_ustr(const ALLEGRO_FONT \*font,ALLEGRO_COLOR color, float x, float y, int flags,const ALLEGRO_USTR \*ustr)
+* void al_draw_justified_text(const ALLEGRO_FONT \*font,ALLEGRO_COLOR color, float x1, float x2,float y, float diff, int flags, const char \*text)
+* void al_draw_justified_ustr(const ALLEGRO_FONT \*font,ALLEGRO_COLOR color, float x1, float x2,float y, float diff, int flags, const ALLEGRO_USTR \*ustr)
+* void al_get_text_dimensions(const ALLEGRO_FONT \*f,char const \*text,int \*bbx, int \*bby, int \*bbw, int \*bbh)
+* void al_get_ustr_dimensions(const ALLEGRO_FONT \*f,ALLEGRO_USTR const \*ustr,int \*bbx, int \*bby, int \*bbw, int \*bbh)
+* uint32_t al_get_allegro_font_version(void)
+* ALLEGRO_FONT \*al_grab_font_from_bitmap(ALLEGRO_BITMAP \*bmp,int ranges_n, const int ranges[])
+* ALLEGRO_FONT \*al_load_bitmap_font(const char \*fname)
+* ALLEGRO_FONT \*al_create_builtin_font(void)
+* bool al_init_ttf_addon(void)
+* void al_shutdown_ttf_addon(void)
+* ALLEGRO_FONT \*al_load_ttf_font(char const \*filename, int size, int flags)
+* ALLEGRO_FONT \*al_load_ttf_font_f(ALLEGRO_FILE \*file,char const \*filename, int size, int flags)
+* ALLEGRO_FONT \*al_load_ttf_font_stretch(char const \*filename, int w, int h,int flags)
+* ALLEGRO_FONT \*al_load_ttf_font_stretch_f(ALLEGRO_FILE \*file,char const \*filename, int w, int h, int flags)
+* uint32_t al_get_allegro_ttf_version(void)
+* bool al_init_image_addon(void)
+* void al_shutdown_image_addon(void)
+* uint32_t al_get_allegro_image_version(void)
+* ALLEGRO_FILE \*al_open_memfile(void \*mem, int64_t size, const char \*mode)
+* uint32_t al_get_allegro_memfile_version(void)
+* bool al_init_native_dialog_addon(void)
+* void al_shutdown_native_dialog_addon(void)
+* ALLEGRO_FILECHOOSER \*al_create_native_file_dialog(char const \*initial_path,char const \*title,char const \*patterns,int mode)
+* bool al_show_native_file_dialog(ALLEGRO_DISPLAY \*display,ALLEGRO_FILECHOOSER \*dialog)
+* int al_get_native_file_dialog_count(const ALLEGRO_FILECHOOSER \*dialog)
+* const char \*al_get_native_file_dialog_path(const ALLEGRO_FILECHOOSER \*dialog, size_t i)
+* void al_destroy_native_file_dialog(ALLEGRO_FILECHOOSER \*dialog)
+* int al_show_native_message_box(ALLEGRO_DISPLAY \*display,char const \*title, char const \*heading, char const \*text,char const \*buttons, int flags)
+* ALLEGRO_TEXTLOG \*al_open_native_text_log(char const \*title, int flags)
+* void al_close_native_text_log(ALLEGRO_TEXTLOG \*textlog)
+* uint32_t al_get_allegro_native_dialog_version(void)
+* void al_set_physfs_file_interface(void)
+* uint32_t al_get_allegro_physfs_version(void)
+* uint32_t al_get_allegro_primitives_version(void)
+* bool al_init_primitives_addon(void)
+* void al_shutdown_primitives_addon(void)
+* void al_draw_line(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color, float thickness)
+* void al_draw_triangle(float x1, float y1, float x2, float y2,float x3, float y3, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_triangle(float x1, float y1, float x2, float y2,float x3, float y3, ALLEGRO_COLOR color)
+* void al_draw_rectangle(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_rectangle(float x1, float y1, float x2, float y2,ALLEGRO_COLOR color)
+* void al_draw_rounded_rectangle(float x1, float y1, float x2, float y2,float rx, float ry, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_rounded_rectangle(float x1, float y1, float x2, float y2,float rx, float ry, ALLEGRO_COLOR color)
+* void al_calculate_arc(float* dest, int stride, float cx, float cy,float rx, float ry, float start_theta, float delta_theta, float thickness,int num_points)
+* void al_draw_pieslice(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_pieslice(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color)
+* void al_draw_ellipse(float cx, float cy, float rx, float ry,ALLEGRO_COLOR color, float thickness)
+* void al_draw_filled_ellipse(float cx, float cy, float rx, float ry,ALLEGRO_COLOR color)
+* void al_draw_circle(float cx, float cy, float r, ALLEGRO_COLOR color,float thickness)
+* void al_draw_filled_circle(float cx, float cy, float r, ALLEGRO_COLOR color)
+* void al_draw_arc(float cx, float cy, float r, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_elliptical_arc(float cx, float cy, float rx, float ry, float start_theta,float delta_theta, ALLEGRO_COLOR color, float thickness)
+* void al_draw_ribbon(const float \*points, int points_stride, ALLEGRO_COLOR color,float thickness, int num_segments)
+* int al_draw_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,ALLEGRO_BITMAP* texture, int start, int end, int type)
+* int al_draw_indexed_prim(const void* vtxs, const ALLEGRO_VERTEX_DECL* decl,ALLEGRO_BITMAP* texture, const int* indices, int num_vtx, int type)
+* ALLEGRO_VERTEX_DECL* al_create_vertex_decl(const ALLEGRO_VERTEX_ELEMENT* elements, int stride)
+* void al_destroy_vertex_decl(ALLEGRO_VERTEX_DECL* decl)
diff --git a/docs/ja-jp/source/ringapps.txt b/docs/ja-jp/source/ringapps.txt
new file mode 100644 (file)
index 0000000..52470d8
--- /dev/null
@@ -0,0 +1,599 @@
+.. index:: 
+       single: アプリケーション開発期間の短縮; はじめに
+
+==============================
+アプリケーション開発期間の短縮
+==============================
+
+愛用者の皆様からは強力で、すばらしく、簡単に習得できるとの評判に加え、生産性に大満足していただいております。
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Ring の評判
+
+Ring の評判
+===========
+
+“Smalltalk が大好きですが、いまでは Ring のほうが大好きです!”
+       ─ ガル・ゾルト (ハンガリー)
+
+“言語と文法が非常に自然で理解しやすいです。”
+       ─ ブッダ (アメリカ合衆国)
+
+“この新しいプログラミング言語は非常に素晴らしい取り組みです。”
+       ─ マット・モステール (オーストリア)
+
+“非常に興味深い! 今後も目が離せません!”
+       ─ エスリパク (アルゼンチン)
+
+“ベンチマークによる性能評価をお願いします。その結果を確認できれば、本当に有望であることが確信に変わるからです。 ”
+       ─ アレックス・デヴァ (スウェーデン)
+
+“素晴らしい!”
+       ─ リジュ・サンカル (アメリカ合衆国)
+
+“このプロジェクトがもっと良くなることを祈ります。”
+       ─ デビッド・オニール (アメリカ合衆国)
+
+“素晴らしい。それ以上の言葉が見つかりません。”
+       ─ ホセ・アントニオ (メキシコ)
+
+“これは少数精鋭のチームにより開発されたと思います。”
+       ─ ジム・クラック (アメリカ合衆国)
+
+“これまでのところ Ring は、かなり興味深いです。”
+       ─ エリック・ジョンソン (アメリカ合衆国)
+
+“インストールして、すぐに Qt バインディングが使えるのがとてもいいです。素晴らしいプログラミング言語をありがとうございます。”
+       ─ マーシャル・ファエッセル
+
+“開発者コミュニティ、および初心者向けプログラミングに関する貢献は素晴らしいことです。”
+       ─  マリノ・エステバン
+
+“Ring はスゴいとしか言いようがありません。 Ring は最高のプログラミング言語であり、さらにコードをスラスラ書くことができます。Ring の成功を確信しています。”
+       ─ アーメド・ザイン
+
+“マハムード・サミルと開発チームの発展を誇りに思います。 ^_^
+        Ring を大いに応援したいと考えています。”
+               ─ ザイナブ・マハムード
+
+“親愛なる兄弟へ。私は Ring が大好きです。開発者たちは完璧なプログラミング言語を作成したと思います。”
+       ─ モエメン・グルミ
+
+“マハムードさん。お疲れ様です。 Ring をインストールしました。非常に素晴らしいプログラミング言語ですね。”
+       ─ アーメド・オマール (エジプト)
+
+“この素晴らしいスタートアップ・プログラミング言語をありがとうございます。幸運を祈ります。”
+       ─ エル・カウジャ・ハリド
+
+“おめでとうございます! 非常にうれしいです。あなたがたの成功と幸運を祈ります。”
+       ─ アボバシムラ・ハッサン
+
+“ウェブ、モバイルとデスクトップ用の汎用プログラミング言語としては優れた機能がありますね。”
+       ─ アブデリハム・ハイダー
+
+“非常に面白い取り組みですね。”
+       ─ ジャイアンナカキス・コスタス (ギリシア)
+
+“私はコメントウィンドウを開いてメッセージを投稿する気があまり起きない筆不精です。けれども、今回は「完璧」であると断言しなくてはいけません。 実際に Ring が本当の意味で完璧な成果となるよう、注目に値する斬新なプログラミング言語の開発をお願いします。少しずつでもいいので Ring ノートパッド(コードエディタ) の開発継続をお願いします……。”
+       ─ ロゼッタコードでの批評!
+
+“以前に発表された記事の読了後、数日前から用例を試した結果、このまま愛用することにしました。 Ring が大好きです。”
+       追伸: アンダース・ヘルスバーグ、ニコラウス・ヴィルト、ビャーネ・ストロヴストルップ、エイダ・ラヴレースなどの巨匠たちと一緒に名誉の殿堂入りを心待ちにしております……。
+               ─ マーティン・ネドピル (チェコ共和国)
+
+“非常にやさしい設計と Qt バインディングは非常に魅力的です。宣言型手法と豊富な解説のある取扱説明書が気に入っています。”
+       ─ シャローク・シャローム (オーストリア)
+
+“Ring (と豊富な機能拡張ライブラリ + Qt) は驚くべきものです。”
+       ─ コバックス・アッティラ (ハンガリー) 
+
+“二日間ほど Ring を試した感想としては、強力な命令と簡単に使えることに加えて、本当に非常に効率的、かつ非常に高速であることに強く感動しています。
+
+今年は Programming Without Coding Technology (PWCT) + Ring の組み合わせを、毎日学びたいです……。これは、私にとってクリスマスの贈り物です!!! ホー・ホー・ホー・ホー
+
+素晴らしい功績と祝福が続きますように。”
+       ─ ホセ・ル・ルー (フランス)
+
+“C と Python 風の三種類の記法を使用できるのがいいです。”
+       ─ シックスティフォー・レミー
+
+“Rosettacode (ロゼッタコード) を閲覧しているときに Ring を見つけました。私は Ring の明瞭で理解しやすいシンタックスを大変気に入りました。それはおまじない (Sigil) がいらない非常に明瞭な BASIC 方言風のスタイルです。今まで使用してきたプログラミング言語でもっともやさしく、もっとも BASIC 風のプログラミング言語であると言えます。”
+       ─ トマズ
+
+“労作をありがとうございます。一目で興味深いのが理解できます。
+       厳格な定義規則を用いずに、単純明快な命令にすることで Clipper 風にしようとしていますね。それは良いことです。 ”
+               ─ アナンド・グプタ
+
+“驚異のプログラミング言語をありがとうございます。”
+       ─ ヴィノード・ケーシー (インド)
+
+“非常に啓発的かつ良い成果だ!”
+       ─ サウスマウンテン (アメリカ合衆国)
+
+“ループの終了方法が気に入りました。”
+       ─ レオン・ド・ポール (オーストラリア)
+
+“プログラミングに値する秀逸で、やさしいプログラミング言語だ。”
+       ─ ケネス・ブルゴ (フィリピン)
+
+“ほかのプログラミング言語よりも理解しやすいので Ring を選びました。”
+       ─ ハリー・シン
+
+“Ring が気に入りました。予想より遥かに豊富な機能と自由な表現力があり、個性的です。”
+       ─ エビコン
+
+“マハムードさん。ありがとう! 様々な実験で Ring を使用しており、大変気に入っています。
+       実際に Ring を使い続けて、私ができることで貢献したいです。”
+               ─ ジョン・ストーム (シェンシステム)
+
+“旦那、こいつは非常に優秀だ。”
+       ─ カムレッシュ・パテール
+
+“もっとも優れた点は「クール」なシンタックスです。例えば、各単語による関数の弓括弧間の呼び出しなど自由形式によるテキストの記述です。
+       それは興味深いものです (テキストの記法を宣言するためのシンタックスは素晴らしいです)。”
+               ─ ローリ・チアーズ
+
+“Ring のページをブラウズすると 160 人の貢献者リストを確認できます。今年は TIOBE インデックスの上位 100 内へ登場しました。多大なる労力により Ring は登場して、そして大衆の注目を集めることができたと思います。”
+       ─ フトゥホラ
+
+“ANSI C に関する Ring 本来の考えかたが気に入りました。
+       それは感銘を与える創造物であり、様々な才能が注がれました。”
+               ─ ゲーリー・テイラー
+
+“非常に画期的なプログラミング言語だ! シンタックスも明瞭ですな。”
+       ─ コードプロジェクトのメンバ-
+
+“事実、開発者は困難な仕事へ取り組み、豊かなプログラミング言語のエコシステムの構築したことは賞賛すべきです。 Ring は非常に大規模であると思います。 BNF 文法とセマンティクスの簡潔な適用範囲を参照することで、実用的であると理解できます。”
+       ─ Xx-レーニスト-1917-Xx (レッドディット)
+
+“私は未来の人工知能が計算機の問題をこの技術で解決しているであろうと考えています……人類のために。”
+       ─ クリプトナイト (アメリカ合衆国) 
+
+“Ring が気に入りました。 RingQt でモバイルアプリケーションを開発する予定です。ウェブライブラリもありがたいです。”
+       ─ ドメニコ・ドリア (イタリア)
+
+“この新しいプログラミング言語による素晴らしい成果を祝福します。”
+       ─ ケニー・シルバ (ベネズエラ)
+
+“Ring は驚異的な完全機能プログラミング言語であり、上手く文章化されています (そこが大抵の新作プログラミング言語にとって悩みの種です!)。”
+       ─ アレックス・マッカリー
+       
+”昨日、 Ring を見つけました。宣言型手法により QtWidgets GUI の作成を行える Qt バインディングが気に入りました。”
+       ─ コーチス・シーザー
+
+“Ring は興味深いです。そして、取扱説明書をかなりのページまで読み進めています。”
+       ─ ジェイミー・クーパー
+
+“動的型付け、プロトタイプ型言語の設計を行い C/C++ へコンパイルする手段の開発を最近まで検討していましたが、昨晩にウェブを調べていたら、最近開発された知る人ぞ知るプログラミング言語 Ring を見つけました。
+
+Ring の設計理由と実装理由について調べるために Wikibooks で Motivation の記事を読み始めました。すると、検討中の件と同じ目的、必要性でプログラミング言語を開発している人がいることに驚きました。つまり、現在知られているプログラミング言語の各種問題への言及には心を打たれました。えーと……。
+
+* 時代遅れで、非常に不可解な C/C++ のシンタックスに悩まされるのはどうしてですか?
+
+* なぜ未だにヘッダファイル……などを取り扱うのでしょうか? Java と C# は冗長すぎること、ユーザにオブジェクト指向プログラミングを強制すること関しての意見はまさに正論です。
+
+* これらのプログラミング言語は未だに主流であり、何百万人ものプログラマが日常的な仕事で一番多く使用されています。この時点で、新しい環境への移行が行われてこなかったレガシーアプリケーションの問題と同様、学術界、そして産業界の多くの人々により共有され長年支持され続けた「衆人に訴える論証 (Appeal to Popularity)」に関する誤謬 (ごびゅう) によるものだと思います。
+
+そこで、より簡単で、より現代的であり、なおかつ、今の時代を証明するプログラミング言語に至ります。 Python などのプログラミング言語はスペースとインデント、および (既に言及したプログラミング言語なども) 条件ステートメントと関連付けられていないトークンを重視しています。当然、弓括弧やセミコロンを下方向にたどることは悪くはないことですが、インデントをひとつ踏み間違えて下方向にたどることと同じくらい苛立たしいほうがまだマシです。同じことが Ruby でさえ起きており、言及の必要すらないプログラミング言語にも、理解不能な記法が設計に組み込まれています。既に述べたプログラミング言語に限らず、 Lua などは非常に多くの機能が欠落したままになっています。
+
+そのほかのプログラミング言語でも色々な欠陥があり、 PHP はウェブページとバックエンド用のニカワ言語 (Glue Language) に過ぎないと主張できます。しかし、今日では豊富なフレームワークが利用できる状態であるのにも関わらず、急速に人気や支持を失っています。今もなお JavaScript はクローンが開発され続けています。
+
+既に知られている汎用プログラミング言語は、ドメイン特化であり、ある処理系では特定のオペレーティングシステムに対応しています (C♯ は 2016 年以前から存在しており、 Objective-C / Swift は主にMacOS アプリケーションの開発で常用されています)。それでも、ハイブリッド言語から D, GoLang, Julia, Scala など命令型言語の選択肢が色々あります。
+
+しかし、最後に新しいプログラミング言語 Ring があります。 ─ それは全てを統治することになるでしょう。最後まで紹介を遅らせていたのは伝説の一角獣 (Unicorn) だからです。 Ring は様々な問題、作業とパラダイムを処理できます。正直に言いますと、今すぐ移行するために待つことは我慢できません。恐らくそうしてしまうと、すぐには戻ってこられなくなると思います。
+
+唯一の懸念材料として Ring には Julia や Python にある算術ライブラリ、または算術基本関数が搭載されていないことです。それは別として、もし願わくば、リニア式の配列を使用したくありません (知的筆不精であることをお許しください)。
+
+Ring は一年前からある即戦力となる完成された素晴らしい実用プログラミング言語です。
+       ─ ゲダルヤ (YouTube)
+
+“マハムードさま。すべてが素晴らしい成果をありがとうございます。ソースコードを探ると、素晴らしい努力の成果を理解・関心してしまいます。さらなる発展と目覚ましい開発により、創造主は報酬として望むものをお与えになることでしょう。”
+
+       ─ アズディン・レマル
+
+“驚くべきことに比類なきプログラミング言語を見つけることができるとは…すばらしき歓喜ッ!!! 私は取扱説明書を読破して、ロゼッタコードのサンプルを調べてみると、完全なる歓喜を覚えました。これは驚異的な作品です。このプログラミング言語の開発に私の運命を委ねることにします。このプログラミング言語が爆発的に普及することを祈って良い努力を続けてください。
+
+       追伸: 配列のインデックスが 1 から始点となる仕様を維持していただき、ありがとうございます。これは非常に意味のあることです。”
+
+       ─ ネヘミヤ・ジェイコブ (オーストラリア国シドニー市)
+
+"非常におもしろいです。特に注目すべきことは、クロスプラットフォームであることです。"
+
+       ─  ボウデヴィン・ルトガーインク 
+
+"一番だいすきなプログラミング言語です。効率的、単純明快、やさしい、柔軟性があり、素晴らしいプログラミング言語です。"
+       ─ ロシャン・アリ
+
+"多様性が好きです。ツールボックスが豪華であると、ツールはより適切なものになります。"
+       ─ ジョナサン・デイ (クォーラ)
+
+"この仕事を達成されたことを大いに称賛します。"
+       ─ ウンベルト・メグリオ (イタリア)
+
+"Ring を見つけて2日後に習得を決意しました。驚くべきことに、サンプルは非常に役に立ちます。"
+       ─ ザラキ・ケン
+
+"素晴らしい。上出来だ。"
+       ─ ラグビーリーグ (コードプロジェクトのメンバ- - イギリス)
+
+"Ring 言語はたのしいです。非常に速く進歩しています。"
+       ─ ネスクック (コードプロジェクトのメンバ - スイス)
+
+"Ring を使うことができてうれしいです。"
+       ─ アキル・レディ
+
+"Ring プログラミング言語を使うことを楽しませていただいています。"
+       ─ ガブリエル・ウェント
+
+"この言語が大好きです!"
+       ─ ハブロ・プリエト
+
+"Ring の実力の一例を挙げるならば、それは Ring ノートパッドです。
+       デザイン機能対応、ドラッグ・アンド・ドロップ、オブジェクトの属性など組み込みフォームがあり、まるで NotePad++ のようです。
+       Ring ノートパッドは 素晴らしいアプリケーションです。"
+       ─ バート・マリアーニ (イタリア)
+
+"Ring は C/C++, C# と他のオブジェクト指向言語で要求される開発期間の長さと、コストに欲求不満を感じながらも、アプリケーションを開発しているプログラマにとって乗り換える可能性が最もある言語です。
+
+       2016 年の初版からの開発状況を考慮すると、 Ring チームはプログラミング言語界で非常に高い業績が称賛に値することわかりました。
+
+       Ring がデータベースアプリケーション、 Web アプリケーションと GUI アプリケーションの開発を簡単にしたことは Ring チームへの偉大な栄誉です。
+
+       Ring の オブジェクト指向実装と GUI ベースのアプリケーションは C++, C# よりも遥かに優秀です。
+
+       Ring チームの主要業績を別に挙げますと、オンライン版 Ring 取扱説明書へのアクセスをしやすくしたことで、オンライン版 C++, C# 取扱説明書と匹敵するようになったことです。
+       本当に Ring ゲームエンジンはエレガントあり、このような印象的なソフトウェア部品を制作したデザイナーは沢山の名誉を得るに値します。"
+
+       ─ エル・ゴディオレスッキー
+
+"特筆すべき強力な新型ゲームプログラミング言語です。
+そしてコミュニティは健全性が保たれています。これは非常に重要なことです。
+Mind, なでしこ、プロデル、言霊、ドリトルとは全く違う第三勢力の日本語・自然言語プログラミング言語でもあります (ようやく使える水準のものが出てきたというのが感想です)。
+
+Ring は幅広く使われる土台は揃っているとはいえ、まだまだ発展途上です。移植に必要とされるグルーレスの共有ライブラリインターフェース (Glue-less FFI) がなく、軽量 UTF-8 処理ライブラリのネイティブ未実装など不便な点もあります。 Qt は配布サイズも大きく重いので UTF-8 のためだけに使いたくありません。 Tcl/Tk はまだしも Allegro, Qt は日本国内では公式資料の完訳も存在せず資料不足です。 Ring はキラーアプリケーションの不在やドキュメンテーションの品質改善、偏見や誤解の払拭など抵抗なく受け入れられるための課題も多く残されています。改善には世界中の人々の協力、認知度向上が必要です。ですが、健全なコミュニティの支援により、だんだん良くなると信じています。微力ながら、今後もできる限り翻訳にて貢献を続けていきたい所存であります。"
+       ─ イズ・ボウエル (オープンソース翻訳者 - 日本)
+
+"この言語には興味深い機能が色々とあります。特に興味深いのが括弧でオブジェクトのフィールドとメソッドへのアクセスです。"
+       ─ ヌアウア (レッドディット)
+
+"本当に Ring VM の実装コードは非常に素晴らしいものに見えます。そしてテストコード集が利用できます ─ 素晴らしい!"
+       ─ パーフェクトファイアフライ (レッドディット)
+
+"このような着想は以前からありますが、 2016 年に初公開された Ring は前途有望であると思います。 Ring は移植性を意図してあり C/C++ プロジェクトへの組み込みも可能です。"
+       ─ ウィム・テン・ブリンク (クォーラ - 2018年の上位投稿者)
+
+"Lua に代わる興味深い選択肢です。"
+       ─ ディージェイエックスティーシー (ソースフォージ)
+
+"Ring のプログラミング言語環境は真剣に考えられているものです。この言語の価値を考慮するならば、評価の決定前に基礎を理解するべきです。設計者の明確な約束による簡明、柔軟性と学習容易性といった新機軸があります。
+
+       ほかの方法では、思考不可能な際限のないアプリケーション一式で Ring の境地を開くことにより、自然言語を思い描きます。豊かなドメイン特化型言語により、数カ月ではなく数時間で対話型チャットボットを構築しました。
+
+       宣言的プログラミングのパラダイムは、効率的な実装を賢く組み合わせることで、 Ring はどのような文法一式でも、どのような種類のプログラミング言語であっても作成できます。英語に限らず、人類の言語ならば、自作キーワードを配布することで、言語キーワードの上書きができます。
+
+       Ring は破壊的、大規模知的前進ですが、遺産的着眼点としての美しい霊魂再来説と Basic, Lisp などにある古典言語の最善実践方法も取り入れています。 Ring 設計者のマハムード・S・ファイド、そして Clojure 設計者のリック・ヒッキーによる理念は新たなるヴィジョナリーとしての人類遺産ですが、今日の複雑なプログラマビリティの世界では、忘れ去られようとしていることです。
+
+       Ring の別次元には、基本的な動機としてビジュアルプログラミング関連の制作があります。ソフトウェアは流動的で進化する生物です。そしてソースコード原文は、ほとんどの一般人が理解できません。ビジュアルプログラミングの約束とは人々にプログラミングの権利を与え、理解性の拡張と更なる直感性により、ソフトウェア開発の活躍の舞台へビジネスユーザーを誘うことです。 Ring は、より良いビジュアルパラダイムに対応するプログラミング言語と成るべく計画的に制作されました。
+
+       Ring 言語において、ゲーミフィケーションは第一級オブジェクトです。この素晴らしい利点が他の汎用プログラミング言語に匹敵します。Ring は様々なゲーミングライブラリに対応していますが、ゲーミングに限らず、ビジネスと文教用アプリケーションにも広大な境地を開きます。
+
+       Ring の実力を評価する最良の方法は説明書と既存知識・経験で早合点することでありません。先入観を捨てること、そして実際の調査・実践と問題解決能力について考えることです。"
+
+       ─ マンスール・アユウニ (チュニジア)
+
+"Ring 言語を理解するのにかかったのは数週間だけで、本当に Ring の機能と考えかたが大好きになりました: 括弧によるアクセス、クラスの範囲、宣言型と自然言語のプログラミングです。
+
+       Ring が前述のパラダイムを提供する方法は簡潔かつ見事です。 Ring が本当に大作であり完成しているものと思います。
+
+       それだけに止(とど)まらず、 Ring 言語の流儀でコードの主要部を宣言型と自然言語でプログラミングをしたイーサリアム・クライアントの開発を望みます。
+
+       さらに「自然言語 → イーサリアム仮想機械用バイトコード」コンパイラがあれば、 Ring のソリューションは素晴らしいものとなるでしょう。"
+
+       ─ アスタ
+
+"この言語は注目に値する素晴らしいものです!"
+       ─ エリック・ホーク
+
+"マハムードさん。あなたは Ring の開発に努力を惜しまない素晴らしいプログラマです。
+プロジェクトの一部である 3D の用例は期待できるものであり、それは本当に素晴らしいものです。"
+
+       ─ ラファウ・ヨペック
+
+"重要なプロジェクトであり立派な作品であると思います"
+       ─ ロホス・ケラー (スイス・チューリッヒ工科大学在籍博士)
+
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; FetchStockData アプリケーション
+
+FetchStockData アプリケーション
+===============================
+
+URL : https://groups.google.com/forum/#!topic/ring-lang/-fa1U_SXSjo
+
+作者 : バート・マリアーニ
+
+このアプリケーションは Ring で記述しました。
+
+Yahoo! (USA) から株式情報を取得して色々な種類のチャートを描画します。
+有効な株式相場表示機からの入力、またはドロップダウンリストから選択します - シンボルを選択します。
+
+これで、お金儲けができる保証はありません。
+けれども、株式履歴の視覚化になります。
+
+.. image:: getquotesmac.png
+       :alt: MacOS X での FetchStockData アプリケーション
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Fifteen Puzzle ゲーム 2
+
+Fifteen Puzzle ゲーム 2
+=======================
+
+URL : https://github.com/ring-lang/ring/blob/master/applications/fifteenpuzzle/CalmoSoftFifteenPuzzleGame.ring
+
+作者 : ガル・ゾルト (カームソフト)
+
+.. image:: fifteen2.png
+       :alt: Ring アプリケーション
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Google API Shortener アプリケーション
+
+Google API Shortener アプリケーション
+=====================================
+
+作者 : ジョン・ストーム (シェンシステム)
+
+みなさん、こんにちは。
+
+Google 短縮 API で URL を短縮するための小粒だが、素晴らしいツールの初公開バージョンを共有したいです (最終的に)。
+コードは完全に文章化されており、かなりの部分を説明してあります。
+どういう処理をしているのかに関して優れたリファレンスを提供しています。
+
+このツールでは、自前の API キーの取得、またはキーを使えます。
+
+アプリケーションをお楽みください。
+都合の良いときにお気軽にテストしてみてください。
+
+Ring をお楽しみください!!
+
+.. image:: urlappmacshot3.png
+       :alt: URLShortener - スクリーンショット 3
+
+.. image:: urlappmacshot4.png
+       :alt: URLShortener - スクリーンショット 4
+
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Analog Clock
+
+Analog Clock
+============
+
+URL : https://github.com/ring-lang/ring/blob/master/applications/analogclock/AnalogClock-Image.ring
+
+作者 : バート・マリアーニ
+
+.. image:: analogclock.png
+       :alt: Ring アプリケーション
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; TicTacToe ゲーム
+
+TicTacToe ゲーム
+================
+
+URL : https://github.com/AbdelrahmanGIT/RingSamples/blob/master/src/TecTacToe.ring
+
+作者 : アブデリハム・モハメド
+
+.. image:: tictactoe.jpg
+       :alt: Ring アプリケーション
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Squares Puzzle ゲーム
+
+Squares Puzzle ゲーム
+=====================
+
+URL : https://github.com/MajdiSobain/RingAllegro_SquaresPuzzle
+
+作者 : マジディ・ソバニ
+
+このプロジェクト (Squares Puzzle) は Ring と RingAllegro ライブラリでプログラムしたポピュラーなゲームです。
+このゲームの遊び方はほとんどの人が良くご存知だと思います。四角形にバラバラにされた原画を移動して元通りにすることです。
+
+このゲームはマウスとキーボードでも遊べます。問題が解けたら、メッセージで祝福します。
+
+.. image:: ringapps_shot2.png
+       :alt: Ring アプリケーション
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Video-Music-Player アプリケーション
+
+Video-Music-Player アプリケーション
+===================================
+
+作者 : バート・マリアーニ
+
+スクリーンショット:
+
+.. image:: videomusicplayer.jpg
+       :alt: Video Music Player
+
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Calculator アプリケーション
+
+Calculator アプリケーション
+===========================
+
+作者 : マグディ・ラガブ
+
+ガル・ゾルトとバート・マリアーニによる最新版です。
+
+スクリーンショット:
+
+.. image:: newcalc2.png
+       :alt: Ring Calculator
+
+
+.. index:: 
+       pair:  アプリケーション開発期間の短縮; Windows StartUp Manager アプリケーション
+
+Windows StartUp Manager アプリケーション
+========================================
+
+URL : https://github.com/ring-lang/WinStartupManager
+
+作者 : マジディ・ソバニ
+
+Windows Startup Manager は、ユーザーが Windows 起動時にプログラムの開始制御機能を提供するアプリケーションです。
+Windows 起動時に立ち上げる新しいプログラムエントリーの表示、編集、削除、さらに追加機能を提供します。
+
+Windows レジストリにあるスタートアップエントリーの管理に特化していますが、
+プログラムのショートカットタイプエントリーの編集でも手軽な選択肢を提供しています。
+
+スクリーンショット:
+
+.. image:: winstartupman.jpg
+       :alt: Windows Startup Manager
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; Werdy アプリケーション
+
+Werdy アプリケーション
+======================
+
+URL : https://github.com/ring-lang/werdy
+
+作者 : マグディ・ラガブ
+
+コーランのアプリケーションでありスーラの読書環境、検索、しおり機能があります。
+
+このアプリケーションは Windows, Linux および Android 用です。
+
+.. image:: ringapps_shot1.png
+       :width: 300pt
+       :height: 300pt
+       :alt: Ring アプリケーション
+
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; 本書のサンプル
+
+本書のサンプル
+==============
+
+このサンプルは短期間で開発したものを本書で紹介しています。
+
+このスクリーンショットは Ring ノートパッドです。
+
+.. image:: ringnotepad_screenshot.png
+       :alt: Ring ノートパッド
+
+このスクリーンショットは Cards ゲームです。
+
+.. image:: ringapps_shot4.png
+       :alt: Ring アプリケーション
+
+このスクリーンショットは Cards ゲーム (Android 用) です。
+
+.. image:: ringqt_shot52.jpg
+       :alt: Ring アプリケーション
+
+このスクリーンショットはウェブ開発の章からの引用です。
+
+.. image:: ex24_2.jpg
+       :alt: Ring アプリケーション
+
+このスクリーンショットはゲームエンジンの章で解説するシンプルな 2D ゲームです。
+
+Stars Fighter ゲーム
+
+.. image:: starsfighter.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring アプリケーション
+
+Flappy Bird 3000 ゲーム
+
+.. image:: flappybird.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring アプリケーション
+
+Super Man 2016 ゲーム
+
+.. image:: superman.png
+       :width: 450pt
+       :height: 350pt
+       :alt: Ring アプリケーション
+
+このスクリーンショットは TicTacToe 3D ゲームです。
+
+スクリーンショット:
+
+.. image:: tictactoe3d.png
+       :width: 450pt
+       :height: 350pt
+       :alt: TicTacToe 3D ゲーム
+
+このスクリーンショットは Gold Magic 800 ゲームです。
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 ゲーム
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; 画期的
+
+画期的
+======
+
+Ring の宣言型と自然言語プログラミングへの対応は非常に画期的かつ優秀であり、それらのパラダイムを重視しております。オブジェクト指向と関数型プログラミングの実用的な新技法によるパラダイムへの対応を導入しており、解決すべき問題に応じて多種多様・豊富で実用的なプログラミングパラダイムの選択・併用ができるマルチパラダイム言語の機能も提供しています。手続き型、オブジェクト指向、および関数型言語を使い続けるよりも優れています。プログラミングの発想転換となる優れた問題解決手段であるため、 Ring で問題を解決すると意思決定の価値が理解できます。
+
+Ring はコンパイラや構文解析などの事前知識なしで Supernova などの自然言語、あるいは REBOL や QML などの宣言型言語の構築でプログラマが求めるツールを提供します。さらに、短時間でドメイン特化言語を作成、構築できる言語構成要素を標準装備しています。
+
+記事:-
+
+* Natural Language Programming Library (自然言語プログラミングのライブラリ) : 
+       https://www.codeproject.com/Articles/1200766/Using-the-Natural-Language-Programming-Library-NLP
+
+* Natural Language Programming (自然言語プログラミング) : 
+       https://www.codeproject.com/Articles/1138605/Natural-Language-Programming-in-the-Ring-Programmi
+
+* The Declarative Approach (宣言型手法) : 
+       https://www.codeproject.com/Articles/1222105/The-declarative-approach-of-the-Ring-programming-l
+
+* Syntax Flexibility (シンタックスの柔軟性) : 
+       https://www.codeproject.com/Articles/1137388/Syntax-Flexibility-in-the-Ring-Programming-Languag
+
+* The Ring Programming Language (プログラミング言語 Ring) : 
+       https://www.codeproject.com/Articles/1089887/The-Ring-Programming-Language
+
+
+.. image:: ringnatural.png
+       :alt: Ring による自然言語プログラミング (NLP)
+
+.. index:: 
+       pair: アプリケーション開発期間の短縮; 実用性
+
+実用性
+======
+
+ほとんどの Ring ライブラリ (StdLib, WebLib, 自然言語ライブラリ、ゲームエンジンなど)、
+および Ring 統合開発環境 (Ring ノートパッド、フォームデザイナーなど) は Ring で記述されています。
+Ring は製品開発の即戦力であり、開発者の生産性を改善します。
+
+フォームデザイナーのソースコードをご確認ください : 
+       https://github.com/ring-lang/ring/tree/master/applications/formdesigner
+
+.. image:: ringformdesigner.png
+       :alt: Ring フォームデザイナ
+
+Android アプリケーションとしても実行できます!
+
+.. image:: formdesignerandroid.png
+       :alt: フォームデザイナ - Android
+
diff --git a/docs/ja-jp/source/ringapps_shot1.png b/docs/ja-jp/source/ringapps_shot1.png
new file mode 100644 (file)
index 0000000..1b8a0f1
Binary files /dev/null and b/docs/ja-jp/source/ringapps_shot1.png differ
diff --git a/docs/ja-jp/source/ringapps_shot2.png b/docs/ja-jp/source/ringapps_shot2.png
new file mode 100644 (file)
index 0000000..7dec247
Binary files /dev/null and b/docs/ja-jp/source/ringapps_shot2.png differ
diff --git a/docs/ja-jp/source/ringapps_shot3.png b/docs/ja-jp/source/ringapps_shot3.png
new file mode 100644 (file)
index 0000000..f4dd5cc
Binary files /dev/null and b/docs/ja-jp/source/ringapps_shot3.png differ
diff --git a/docs/ja-jp/source/ringapps_shot4.png b/docs/ja-jp/source/ringapps_shot4.png
new file mode 100644 (file)
index 0000000..02b2a4e
Binary files /dev/null and b/docs/ja-jp/source/ringapps_shot4.png differ
diff --git a/docs/ja-jp/source/ringapps_shot5.jpg b/docs/ja-jp/source/ringapps_shot5.jpg
new file mode 100644 (file)
index 0000000..fc3be94
Binary files /dev/null and b/docs/ja-jp/source/ringapps_shot5.jpg differ
diff --git a/docs/ja-jp/source/ringapps_shot6.jpg b/docs/ja-jp/source/ringapps_shot6.jpg
new file mode 100644 (file)
index 0000000..786bf3c
Binary files /dev/null and b/docs/ja-jp/source/ringapps_shot6.jpg differ
diff --git a/docs/ja-jp/source/ringbeep.txt b/docs/ja-jp/source/ringbeep.txt
new file mode 100644 (file)
index 0000000..88b0524
--- /dev/null
@@ -0,0 +1,90 @@
+.. index:: 
+     single: はじめての拡張機能開発; はじめに
+
+======================
+はじめての拡張機能開発
+======================
+
+RingBeep は Windows API の beep() 関数を使用するシンプルな拡張機能の作例です。
+
+.. index:: 
+     pair: はじめての拡張機能開発; 収録先
+
+収録先
+======
+
+この拡張機能は ring/extensions/ringbeep フォルダにあります。
+
+.. index:: 
+     pair: はじめての拡張機能開発; 拡張機能の作成手順
+
+拡張機能の作成手順
+==================
+
+設定ファイルを記述します : ringbeep.cf
+
+.. code-block:: none
+
+       notepad ringbeep.cf
+
+ringbeep.cf ファイルの内容
+
+.. code-block:: none
+
+       <code>
+       #include "windows.h"
+       </code>
+
+       int Beep(int dwFreq,int dwDuration)
+
+実行します : gencode.bat は ringbeep.c を生成します。
+
+.. code-block:: none
+
+       gencode.bat
+
+gencode.bat には Ring 拡張機能生成器を呼び出すための記述があります。
+
+.. code-block:: none
+
+       ring ..\codegen\parsec.ring ringbeep.cf ringbeep.c
+
+拡張機能をビルドするには :
+
+.. code-block:: none
+
+       buildvc.bat
+
+buildvc.bat には Visual C/C++ で拡張機能をビルドするための記述があります。
+
+.. code-block:: none
+
+       cls
+       call ../../src/locatevc.bat
+       cl /c /DEBUG ringbeep.c -I"..\..\include"
+       link /DEBUG ringbeep.obj  ..\..\lib\ring.lib kernel32.lib /DLL /OUT:ringbeep.dll ^
+                                                               /SUBSYSTEM:CONSOLE,"5.01" 
+       del ringbeep.obj
+
+.. index:: 
+     pair: はじめての拡張機能開発; 関数の動作検証
+
+関数の動作検証
+==============
+
+関数の動作検証をします。
+
+.. code-block:: none
+
+       ring test.ring
+
+test.ring の内容:
+
+.. code-block:: ring
+
+       loadlib("ringbeep.dll")
+
+       for f = 750 to 1000 step 50
+               beep(f,300)
+       next
+
diff --git a/docs/ja-jp/source/ringconsolecolorsfuncsdoc.txt b/docs/ja-jp/source/ringconsolecolorsfuncsdoc.txt
new file mode 100644 (file)
index 0000000..cc1cecb
--- /dev/null
@@ -0,0 +1,42 @@
+.. index:: 
+     single: RingConsoleColors 関数リファレンス; はじめに
+
+==================================
+RingConsoleColors 関数リファレンス
+==================================
+
+* CC_FG_NONE
+* CC_FG_BLACK
+* CC_FG_DARK_RED
+* CC_FG_DARK_GREEN
+* CC_FG_DARK_YELLOW
+* CC_FG_DARK_BLUE
+* CC_FG_DARK_MAGENTA
+* CC_FG_DARK_CYAN
+* CC_FG_GRAY
+* CC_FG_DARK_GRAY
+* CC_FG_RED
+* CC_FG_GREEN
+* CC_FG_YELLOW
+* CC_FG_BLUE
+* CC_FG_MAGENTA
+* CC_FG_CYAN
+* CC_FG_WHITE
+* CC_BG_NONE
+* CC_BG_BLACK
+* CC_BG_DARK_RED
+* CC_BG_DARK_GREEN
+* CC_BG_DARK_YELLOW
+* CC_BG_DARK_BLUE
+* CC_BG_DARK_MAGENTA
+* CC_BG_DARK_CYAN
+* CC_BG_GRAY
+* CC_BG_DARK_GRAY
+* CC_BG_RED
+* CC_BG_GREEN
+* CC_BG_YELLOW
+* CC_BG_BLUE
+* CC_BG_MAGENTA
+* CC_BG_CYAN
+* CC_BG_WHITE
+* void cc_print(int color,const char \*string)
diff --git a/docs/ja-jp/source/ringcube3d.png b/docs/ja-jp/source/ringcube3d.png
new file mode 100644 (file)
index 0000000..fec6ef3
Binary files /dev/null and b/docs/ja-jp/source/ringcube3d.png differ
diff --git a/docs/ja-jp/source/ringemacs.png b/docs/ja-jp/source/ringemacs.png
new file mode 100644 (file)
index 0000000..7ea4569
Binary files /dev/null and b/docs/ja-jp/source/ringemacs.png differ
diff --git a/docs/ja-jp/source/ringemb.txt b/docs/ja-jp/source/ringemb.txt
new file mode 100644 (file)
index 0000000..37b2ff7
--- /dev/null
@@ -0,0 +1,336 @@
+.. index:: 
+       single: Ring へ Ring を組み込むには; はじめに
+
+===========================
+Ring へ Ring を組み込むには
+===========================
+
+Ring プログラム、またはアプリケーションへ Ring を組み込む方法を学びます。
+
+.. index:: 
+       pair: Ring へ Ring を組み込むには; ステートを共有せずに Ring へ Ring を組み込むには
+
+ステートを共有せずに Ring へ Ring を組み込むには
+================================================
+
+Ring 1.0 より Ring を C へ組み込むための関数は実装されていました。
+また eval() 関数で Ring プログラム内で Ring のコードを実行できます。
+この公開版では、ステートを共有せずに Ring を Ring プログラムへ組み込むための関数を提供します。
+
+利点:
+
+(1) Ring プログラムとアプリケーションの統合で競合が発生しません。
+
+(2) Ring のコードを安全な環境で実行して、トレースを行えます。
+
+用例:
+
+.. code-block:: ring
+
+       pState = ring_state_init()
+       ring_state_runcode(pState,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState,"x = 10")
+
+       pState2 = ring_state_init()
+       ring_state_runcode(pState2,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState2,"x = 20")
+
+       ring_state_runcode(pState,"see x +nl")
+       ring_state_runcode(pState2,"see x +nl")
+
+       v1 = ring_state_findvar(pState,"x")
+       v2 = ring_state_findvar(pState2,"x")
+
+       see v1[3] + nl
+       see V2[3] + nl
+
+       ring_state_delete(pState)
+       ring_state_delete(pState2)
+
+実行結果:
+
+.. code-block:: ring
+
+       Hello, World!
+       Hello, World!
+       10
+       20
+       10
+       20
+
+.. index:: 
+       pair: Ring へ Ring を組み込むには; プログラムの直列実行
+
+プログラムの直列実行
+====================
+
+ring_state_main() 関数はアプリケーションの実行後に、別のアプリケーションを実行します。
+
+用例:
+
+.. code-block:: ring
+
+       chdir(exefolder()+"/../applications/formdesigner")
+       ring_state_main('formdesigner.ring')
+       chdir(exefolder()+"/../applications/cards")
+       ring_state_main('cards.ring')
+
+.. index:: 
+       pair: Ring へ Ring を組み込むには; ring_state_setvar()
+
+ring_state_setvar()
+===================
+
+ring_state_setvar() 関数は変数の値を設定します。
+
+値には「文字列、数値、リスト、または C ポインタ」を指定します。
+
+この関数は下位 Ring 環境へリストとC ポインタを手早く渡すために必要です。
+
+文法:
+
+.. code-block:: none
+
+       ring_state_setvar(oState,cVariableName,Value)
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       myapp   = null
+       win     = null
+
+       func main
+               myapp = new qApp {
+                       win = new qWidget() {
+                               setWindowTitle("Advanced Example on using ring_state_setvar()")
+                               move(100,100)
+                               resize(600,400)
+                               new qPushButton(win) {
+                                       setText("Test")
+                                       setClickEvent("Test()")
+                               }
+                               # Qt でタイマーの作成とウィンドウを閉じる動作を行います。
+                               # これだけでウィンドウを閉じるには不十分です。
+                               # このために下位環境では load 'guilib.ring' を
+                               # 必ず使用してください。
+                               oFilter = new qAllEvents(win)
+                               oFilter.setCloseEvent("myapp.quit()")
+                               win.installeventfilter(oFilter)
+                               show()
+                       }
+                       exec()
+               }
+
+       func test
+               pState = ring_state_init()
+               ring_state_runcode(pstate,"load 'guilib.ring'")
+               ring_state_runcode(pState,"x = NULL")
+               # 文字列を渡します。
+                       ring_state_setvar(pState,"x","hello")
+                       ring_state_runcode(pState,"? x")
+               # 数値を渡します。
+                       ring_state_setvar(pState,"x",100)
+                       ring_state_runcode(pState,"? x")
+               # Pass List
+                       ring_state_setvar(pState,"x",["one","two","three"])
+                       ring_state_runcode(pState,"? x")
+               # リストを渡します。
+               # Ring オブジェクトを渡すことはできません (win)。
+               # 理由としてオブジェクトはクラス情報のポインタとして格納されているからです。
+               # またクラスは Ring の親環境と関連付けられています。
+               # しかし、下位 Ring 環境にはアクセスできません。
+               # ですが win.pObject のようにすれば C ポインタを渡せます。
+                       ring_state_setvar(pState,"x",win.pObject)
+               # さて、オブジェクトを再作成しましたが同じ C ポインタを使用しています。
+               # したがって親 Ring 環境にある同じウィンドウへアクセスできます。
+                       ring_state_runcode(pState,"
+                               new qWidget {
+                                       pObject = x
+                                       setwindowtitle('Message from the Sub Ring Environment')
+                               }
+                       ")
+               ring_state_delete(pState)
+
+
+.. index:: 
+       pair: Ring へ Ring を組み込むには; ring_state_new() と ring_state_mainfile() 関数
+
+ring_state_new() と ring_state_mainfile() 関数
+==============================================
+
+ring_state_new() と ring_state_mainfile() 関数は Ring プログラムから別の Ring プログラムを実行します。
+
+ring_state_main() 関数とは異なり、こちらは Ring ステートの削除時に制御できます!
+
+これは GUI プログラムから別の GUI プログラムを実行するときに重要です。
+
+この場合の理由は GUI ライブラリ (RingQt) を共有しており、
+
+呼び出し元は qApp.Exec() を呼び出すからです。
+
+よって、下位プログラムを停止せずにメインプログラムへ戻ります。
+
+ここで下位プログラムのステートを削除してしまうと、下位プログラムのイベント実行時に問題が発生します。
+
+ステートを保持することは、下位 GUI プログラムの収容先となっている GUI プログラムでは重要です。
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       func main
+               new qApp {
+                       win = new qWidget() {
+                               setWindowTitle("Test ring_state_mainfile()")
+                               resize(400,400) move(100,100)
+                               btn = new qPushButton(Win) {
+                                       settext("test")
+                                       setclickevent("mytest()")
+                               }
+                               show()
+                       }
+                       exec()
+               }
+
+       func mytest
+               pState = ring_state_new()
+               ring_state_mainfile(pState,"runprogram.ring")
+               # ここで GUI アプリケーションを実行する場合はステートを削除しないでください。
+               # なお GUI アプリケーションのイベントを実行できます。
+                       // ring_state_delete(pState)
+
+この機能を使用する場合は、前述の用例を基にアプリケーションで必要な更新をすることを覚えておいてください。
+
+この時点で ring_state_delete() 関数を呼び出すとメモリリークを回避できます!
+
+
+.. index:: 
+       pair: Ring へ Ring を組み込むには; Ring へ Ring を組み込んだときのランタイムエラーについて
+
+Ring へ Ring を組み込んだときのランタイムエラーについて
+=======================================================
+
+Ring 1.8 から Ring へ Ring を組み込んだときに、
+
+ゲスト環境でエラーが発生してもホストは異常終了しなくなりました。
+
+用例:
+
+.. code-block:: ring
+
+       ? "Start the test!" 
+
+       pState = ring_state_init()
+
+       ring_state_runcode(pState," ? 'Let us try having an error' ? x")
+
+       ring_state_delete(pState)
+
+       ? ""
+       ? "End of test!"
+
+実行結果:
+
+.. code-block:: none
+
+       Start the test!
+       Let us try having an error
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file Ring_EmbeddedCode
+       End of test!
+
+.. index:: 
+       pair: Ring へ Ring を組み込むには; ring_state_filetokens() 関数
+
+ring_state_filetokens() 関数
+============================
+
+Ring 1.12 では ring_state_filetokens() 関数に対応しました。
+
+ring_state_filetokens() 関数は Ring ソースコードファイルにあるトークンを一括取得します。
+
+.. code-block:: ring
+
+       C_FILENAME      = "test_tokens.ring"
+       C_WIDTH         = 12
+
+       # ファイルの書き込み
+               write(C_FILENAME,'
+                               see "Hello, World!"
+                               ? 3*2+3
+                               Name = "Ring"
+                               ? Name
+       ')
+
+       # トークンの種類
+               C_KEYWORD       = 0
+               C_OPERATOR      = 1
+               C_LITERAL       = 2
+               C_NUMBER        = 3
+               C_IDENTIFIER    = 4
+               C_ENDLINE       = 5
+
+       # キーワードリスト
+       aKEYWORDS = ["IF","TO","OR","AND","NOT","FOR","NEW","FUNC", 
+       "FROM","NEXT","LOAD","ELSE","SEE","WHILE","OK","CLASS","RETURN","BUT", 
+       "END","GIVE","BYE","EXIT","TRY","CATCH","DONE","SWITCH","ON","OTHER","OFF", 
+       "IN","LOOP","PACKAGE","IMPORT","PRIVATE","STEP","DO","AGAIN","CALL","ELSEIF", 
+       "PUT","GET","CASE","DEF","ENDFUNC","ENDCLASS","ENDPACKAGE", 
+       "CHANGERINGKEYWORD","CHANGERINGOPERATOR","LOADSYNTAX"]
+
+       pState = ring_state_new()
+       aList = ring_state_filetokens(pState,C_FILENAME)
+       PrintTokens(aList)
+       ring_state_delete(pState)
+
+       func PrintTokens aList
+               for aToken in aList
+                       switch aToken[1]
+                       on C_KEYWORD 
+                               ? Width("Keyword",C_WIDTH) + ": "  + aKeywords[0+aToken[2]]
+                       on C_OPERATOR 
+                               ? Width("Operator",C_WIDTH)  + ": " + aToken[2]
+                       on C_LITERAL 
+                               ? Width("Literal",C_WIDTH)  + ": " + aToken[2]
+                       on C_NUMBER 
+                               ? Width("Number",C_WIDTH)  + ": " + aToken[2]
+                       on C_IDENTIFIER 
+                               ? Width("Identifier",C_WIDTH)  + ": " + aToken[2]
+                       on C_ENDLINE 
+                               ? "EndLine"
+                       other
+                               
+                       off
+               next
+
+       func Width cText,nWidth
+               return cText+copy(" ",nWidth-len(cText))
+
+実行結果:
+
+.. code-block:: none
+
+       EndLine
+       Keyword     : SEE
+       Literal     : Hello, World!
+       EndLine
+       Operator    : ?
+       Number      : 3
+       Operator    : *
+       Number      : 2
+       Operator    : +
+       Number      : 3
+       EndLine
+       Identifier  : name
+       Operator    : =
+       Literal     : Ring
+       EndLine
+       Operator    : ?
+       Identifier  : name
+       EndLine
diff --git a/docs/ja-jp/source/ringformdesigner.png b/docs/ja-jp/source/ringformdesigner.png
new file mode 100644 (file)
index 0000000..47bd6bb
Binary files /dev/null and b/docs/ja-jp/source/ringformdesigner.png differ
diff --git a/docs/ja-jp/source/ringfreeglutfuncsdoc.txt b/docs/ja-jp/source/ringfreeglutfuncsdoc.txt
new file mode 100644 (file)
index 0000000..02db1c2
--- /dev/null
@@ -0,0 +1,297 @@
+.. index:: 
+     single: RingFreeGLUT 関数リファレンス; はじめに
+
+=============================
+RingFreeGLUT 関数リファレンス
+=============================
+
+* GLUT_RGB
+* GLUT_RGBA
+* GLUT_INDEX
+* GLUT_SINGLE
+* GLUT_DOUBLE
+* GLUT_ACCUM
+* GLUT_ALPHA
+* GLUT_DEPTH
+* GLUT_STENCIL
+* GLUT_MULTISAMPLE
+* GLUT_STEREO
+* GLUT_LUMINANCE
+* GLUT_KEY_F1
+* GLUT_KEY_F2
+* GLUT_KEY_F3
+* GLUT_KEY_F4
+* GLUT_KEY_F5
+* GLUT_KEY_F6
+* GLUT_KEY_F7
+* GLUT_KEY_F8
+* GLUT_KEY_F9
+* GLUT_KEY_F10
+* GLUT_KEY_F11
+* GLUT_KEY_F12
+* GLUT_KEY_LEFT
+* GLUT_KEY_UP
+* GLUT_KEY_RIGHT
+* GLUT_KEY_DOWN
+* GLUT_KEY_PAGE_UP
+* GLUT_KEY_PAGE_DOWN
+* GLUT_KEY_HOME
+* GLUT_KEY_END
+* GLUT_KEY_INSERT
+* GLUT_LEFT_BUTTON
+* GLUT_MIDDLE_BUTTON
+* GLUT_RIGHT_BUTTON
+* GLUT_DOWN
+* GLUT_UP
+* GLUT_LEFT
+* GLUT_ENTERED
+* GLUT_MENU_NOT_IN_USE
+* GLUT_MENU_IN_USE
+* GLUT_NOT_VISIBLE
+* GLUT_VISIBLE
+* GLUT_HIDDEN
+* GLUT_FULLY_RETAINED
+* GLUT_PARTIALLY_RETAINED
+* GLUT_FULLY_COVERED
+* GLUT_WINDOW_X
+* GLUT_WINDOW_Y
+* GLUT_WINDOW_WIDTH
+* GLUT_WINDOW_HEIGHT
+* GLUT_WINDOW_BUFFER_SIZE
+* GLUT_WINDOW_STENCIL_SIZE
+* GLUT_WINDOW_DEPTH_SIZE
+* GLUT_WINDOW_RED_SIZE
+* GLUT_WINDOW_GREEN_SIZE
+* GLUT_WINDOW_BLUE_SIZE
+* GLUT_WINDOW_ALPHA_SIZE
+* GLUT_WINDOW_ACCUM_RED_SIZE
+* GLUT_WINDOW_ACCUM_GREEN_SIZE
+* GLUT_WINDOW_ACCUM_BLUE_SIZE
+* GLUT_WINDOW_ACCUM_ALPHA_SIZE
+* GLUT_WINDOW_DOUBLEBUFFER
+* GLUT_WINDOW_RGBA
+* GLUT_WINDOW_PARENT
+* GLUT_WINDOW_NUM_CHILDREN
+* GLUT_WINDOW_COLORMAP_SIZE
+* GLUT_WINDOW_NUM_SAMPLES
+* GLUT_WINDOW_STEREO
+* GLUT_WINDOW_CURSOR
+* GLUT_SCREEN_WIDTH
+* GLUT_SCREEN_HEIGHT
+* GLUT_SCREEN_WIDTH_MM
+* GLUT_SCREEN_HEIGHT_MM
+* GLUT_MENU_NUM_ITEMS
+* GLUT_DISPLAY_MODE_POSSIBLE
+* GLUT_INIT_WINDOW_X
+* GLUT_INIT_WINDOW_Y
+* GLUT_INIT_WINDOW_WIDTH
+* GLUT_INIT_WINDOW_HEIGHT
+* GLUT_INIT_DISPLAY_MODE
+* GLUT_ELAPSED_TIME
+* GLUT_WINDOW_FORMAT_ID
+* GLUT_HAS_KEYBOARD
+* GLUT_HAS_MOUSE
+* GLUT_HAS_SPACEBALL
+* GLUT_HAS_DIAL_AND_BUTTON_BOX
+* GLUT_HAS_TABLET
+* GLUT_NUM_MOUSE_BUTTONS
+* GLUT_NUM_SPACEBALL_BUTTONS
+* GLUT_NUM_BUTTON_BOX_BUTTONS
+* GLUT_NUM_DIALS
+* GLUT_NUM_TABLET_BUTTONS
+* GLUT_DEVICE_IGNORE_KEY_REPEAT
+* GLUT_DEVICE_KEY_REPEAT
+* GLUT_HAS_JOYSTICK
+* GLUT_OWNS_JOYSTICK
+* GLUT_JOYSTICK_BUTTONS
+* GLUT_JOYSTICK_AXES
+* GLUT_JOYSTICK_POLL_RATE
+* GLUT_OVERLAY_POSSIBLE
+* GLUT_LAYER_IN_USE
+* GLUT_HAS_OVERLAY
+* GLUT_TRANSPARENT_INDEX
+* GLUT_NORMAL_DAMAGED
+* GLUT_OVERLAY_DAMAGED
+* GLUT_VIDEO_RESIZE_POSSIBLE
+* GLUT_VIDEO_RESIZE_IN_USE
+* GLUT_VIDEO_RESIZE_X_DELTA
+* GLUT_VIDEO_RESIZE_Y_DELTA
+* GLUT_VIDEO_RESIZE_WIDTH_DELTA
+* GLUT_VIDEO_RESIZE_HEIGHT_DELTA
+* GLUT_VIDEO_RESIZE_X
+* GLUT_VIDEO_RESIZE_Y
+* GLUT_VIDEO_RESIZE_WIDTH
+* GLUT_VIDEO_RESIZE_HEIGHT
+* GLUT_NORMAL
+* GLUT_OVERLAY
+* GLUT_ACTIVE_SHIFT
+* GLUT_ACTIVE_CTRL
+* GLUT_ACTIVE_ALT
+* GLUT_CURSOR_RIGHT_ARROW
+* GLUT_CURSOR_LEFT_ARROW
+* GLUT_CURSOR_INFO
+* GLUT_CURSOR_DESTROY
+* GLUT_CURSOR_HELP
+* GLUT_CURSOR_CYCLE
+* GLUT_CURSOR_SPRAY
+* GLUT_CURSOR_WAIT
+* GLUT_CURSOR_TEXT
+* GLUT_CURSOR_CROSSHAIR
+* GLUT_CURSOR_UP_DOWN
+* GLUT_CURSOR_LEFT_RIGHT
+* GLUT_CURSOR_TOP_SIDE
+* GLUT_CURSOR_BOTTOM_SIDE
+* GLUT_CURSOR_LEFT_SIDE
+* GLUT_CURSOR_RIGHT_SIDE
+* GLUT_CURSOR_TOP_LEFT_CORNER
+* GLUT_CURSOR_TOP_RIGHT_CORNER
+* GLUT_CURSOR_BOTTOM_RIGHT_CORNER
+* GLUT_CURSOR_BOTTOM_LEFT_CORNER
+* GLUT_CURSOR_INHERIT
+* GLUT_CURSOR_NONE
+* GLUT_CURSOR_FULL_CROSSHAIR
+* GLUT_RED
+* GLUT_GREEN
+* GLUT_BLUE
+* GLUT_KEY_REPEAT_OFF
+* GLUT_KEY_REPEAT_ON
+* GLUT_KEY_REPEAT_DEFAULT
+* GLUT_JOYSTICK_BUTTON_A
+* GLUT_JOYSTICK_BUTTON_B
+* GLUT_JOYSTICK_BUTTON_C
+* GLUT_JOYSTICK_BUTTON_D
+* GLUT_GAME_MODE_ACTIVE
+* GLUT_GAME_MODE_POSSIBLE
+* GLUT_GAME_MODE_WIDTH
+* GLUT_GAME_MODE_HEIGHT
+* GLUT_GAME_MODE_PIXEL_DEPTH
+* GLUT_GAME_MODE_REFRESH_RATE
+* GLUT_GAME_MODE_DISPLAY_CHANGED
+* GLUT_STROKE_ROMAN
+* GLUT_STROKE_MONO_ROMAN
+* GLUT_BITMAP_9_BY_15
+* GLUT_BITMAP_8_BY_13
+* GLUT_BITMAP_TIMES_ROMAN_10
+* GLUT_BITMAP_TIMES_ROMAN_24
+* GLUT_BITMAP_HELVETICA_10
+* GLUT_BITMAP_HELVETICA_12
+* GLUT_BITMAP_HELVETICA_18
+* void glutInit(void)
+* void glutDisplayFunc(const char \*)
+* void glutReshapeFunc(const char \*)
+* int glutEventWidth(void)
+* int glutEventHeight(void)
+* void glutIdleFunc(const char \*)
+* void glutKeyboardFunc(const char \*)
+* void glutSpecialFunc(const char \*)
+* void glutSpecialUpFunc(const char \*)
+* void glutMouseFunc(const char \*)
+* void glutMotionFunc(const char \*)
+* int glutCreateMenu(const char \*)
+* void glutMenuStatusFunc(const char \*)
+* int glutEventKey(void)
+* int glutEventX(void)
+* int glutEventY(void)
+* int glutEventButton(void)
+* int glutEventState(void)
+* int glutEventValue(void)
+* int glutEventStatus(void)
+* void test_draw(void)
+* void glutInitWindowPosition(int x, int y)
+* void glutInitWindowSize(int width, int height)
+* void glutInitDisplayMode(unsigned displayMode)
+* void glutInitDisplayString(const char \* displayMode)
+* int glutCreateWindow(const char \* title)
+* int glutCreateSubWindow(int window, int x, int y, int width, int height)
+* void glutDestroyWindow(int window)
+* void glutSetWindow(int window)
+* int glutGetWindow(void)
+* void glutSetWindowTitle(const char \* title)
+* void glutSetIconTitle(const char \* title)
+* void glutReshapeWindow(int width, int height)
+* void glutPositionWindow(int x, int y)
+* void glutShowWindow(void)
+* void glutHideWindow(void)
+* void glutIconifyWindow(void)
+* void glutPushWindow(void)
+* void glutPopWindow(void)
+* void glutFullScreen(void)
+* void glutPostWindowRedisplay(int window)
+* void glutPostRedisplay(void)
+* void glutSwapBuffers(void)
+* void glutWarpPointer(int x, int y)
+* void glutSetCursor(int cursor)
+* void glutEstablishOverlay(void)
+* void glutRemoveOverlay(void)
+* void glutUseLayer(GLenum layer)
+* void glutPostOverlayRedisplay(void)
+* void glutPostWindowOverlayRedisplay(int window)
+* void glutShowOverlay(void)
+* void glutHideOverlay(void)
+* void glutDestroyMenu(int menu)
+* int glutGetMenu(void)
+* void glutSetMenu(int menu)
+* void glutAddMenuEntry(const char \* label, int value)
+* void glutAddSubMenu(const char \* label, int subMenu)
+* void glutChangeToMenuEntry(int item, const char \* label, int value)
+* void glutChangeToSubMenu(int item, const char \* label, int value)
+* void glutRemoveMenuItem(int item)
+* void glutAttachMenu(int button)
+* void glutDetachMenu(int button)
+* int glutGet(GLenum query)
+* int glutDeviceGet(GLenum query)
+* int glutGetModifiers(void)
+* int glutLayerGet(GLenum query)
+* void glutBitmapCharacter(void \*font, int character)
+* int glutBitmapWidth(void \*font, int character)
+* void glutStrokeCharacter(void \*font, int character)
+* int glutStrokeWidth(void \*font, int character)
+* GLfloat glutStrokeWidthf(void \*font, int character)
+* int glutBitmapLength(void \*font, char \* string)
+* int glutStrokeLength(void \*font, char \* string)
+* GLfloat glutStrokeLengthf(void \*font, char \*string)
+* void glutWireCube(double size)
+* void glutSolidCube(double size)
+* void glutWireSphere(double radius, GLint slices, GLint stacks)
+* void glutSolidSphere(double radius, GLint slices, GLint stacks)
+* void glutWireCone(double base, double height, GLint slices, GLint stacks)
+* void glutSolidCone(double base, double height, GLint slices, GLint stacks)
+* void glutWireTorus(double innerRadius, double outerRadius, GLint sides, GLint rings)
+* void glutSolidTorus(double innerRadius, double outerRadius, GLint sides, GLint rings)
+* void glutWireDodecahedron(void)
+* void glutSolidDodecahedron(void)
+* void glutWireOctahedron(void)
+* void glutSolidOctahedron(void)
+* void glutWireTetrahedron(void)
+* void glutSolidTetrahedron(void)
+* void glutWireIcosahedron(void)
+* void glutSolidIcosahedron(void)
+* void glutWireTeapot(double size)
+* void glutSolidTeapot(double size)
+* void glutGameModeString(const char \* string)
+* int glutEnterGameMode(void)
+* void glutLeaveGameMode(void)
+* int glutGameModeGet(GLenum query)
+* int glutVideoResizeGet(GLenum query)
+* void glutSetupVideoResizing(void)
+* void glutStopVideoResizing(void)
+* void glutVideoResize(int x, int y, int width, int height)
+* void glutVideoPan(int x, int y, int width, int height)
+* void glutSetColor(int color, GLfloat red, GLfloat green, GLfloat blue)
+* GLfloat glutGetColor(int color, int component)
+* void glutCopyColormap(int window)
+* void glutIgnoreKeyRepeat(int ignore)
+* void glutSetKeyRepeat(int repeatMode)
+* void glutForceJoystickFunc(void)
+* int glutExtensionSupported(const char \* extension)
+* void glutReportErrors(void)
+* void glutMainLoop(void)
+
+.. index:: 
+     single: RingFreeGLUT 関数リファレンス; 参考文献
+
+参考文献
+========
+
+* The OpenGL Utility Toolkit (GLUT) Programming Interface API version 3 日本語翻訳版 : http://opengl.jp/glut/index.html
+* GULTによる「手抜き」OpenGL入門 : https://tokoik.github.io/opengl/libglut.html
diff --git a/docs/ja-jp/source/ringincloud.png b/docs/ja-jp/source/ringincloud.png
new file mode 100644 (file)
index 0000000..7e37d21
Binary files /dev/null and b/docs/ja-jp/source/ringincloud.png differ
diff --git a/docs/ja-jp/source/ringinvscode.png b/docs/ja-jp/source/ringinvscode.png
new file mode 100644 (file)
index 0000000..f12d24d
Binary files /dev/null and b/docs/ja-jp/source/ringinvscode.png differ
diff --git a/docs/ja-jp/source/ringlibcurlfuncsdoc.txt b/docs/ja-jp/source/ringlibcurlfuncsdoc.txt
new file mode 100644 (file)
index 0000000..7726faf
--- /dev/null
@@ -0,0 +1,285 @@
+.. index:: 
+     single: RingLibCurl 関数リファレンス; はじめに
+
+============================
+RingLibCurl 関数リファレンス
+============================
+
+* CURLOPT_VERBOSE
+* CURLOPT_HEADER
+* CURLOPT_NOPROGRESS
+* CURLOPT_NOSIGNAL
+* CURLOPT_WILDCARDMATCH
+* CURLOPT_WRITEFUNCTION
+* CURLOPT_WRITEDATA
+* CURLOPT_READFUNCTION
+* CURLOPT_READDATA
+* CURLOPT_IOCTLFUNCTION
+* CURLOPT_IOCTLDATA
+* CURLOPT_SEEKFUNCTION
+* CURLOPT_SEEKDATA
+* CURLOPT_SOCKOPTFUNCTION
+* CURLOPT_SOCKOPTDATA
+* CURLOPT_OPENSOCKETFUNCTION
+* CURLOPT_OPENSOCKETDATA
+* CURLOPT_CLOSESOCKETFUNCTION
+* CURLOPT_CLOSESOCKETDATA
+* CURLOPT_PROGRESSFUNCTION
+* CURLOPT_PROGRESSDATA
+* CURLOPT_HEADERFUNCTION
+* CURLOPT_HEADERDATA
+* CURLOPT_DEBUGFUNCTION
+* CURLOPT_DEBUGDATA
+* CURLOPT_SSL_CTX_FUNCTION
+* CURLOPT_SSL_CTX_DATA
+* CURLOPT_CONV_TO_NETWORK_FUNCTION
+* CURLOPT_CONV_FROM_NETWORK_FUNCTION
+* CURLOPT_CONV_FROM_UTF8_FUNCTION
+* CURLOPT_INTERLEAVEFUNCTION
+* CURLOPT_INTERLEAVEDATA
+* CURLOPT_CHUNK_BGN_FUNCTION
+* CURLOPT_CHUNK_END_FUNCTION
+* CURLOPT_CHUNK_DATA
+* CURLOPT_FNMATCH_FUNCTION
+* CURLOPT_FNMATCH_DATA
+* CURLOPT_ERRORBUFFER
+* CURLOPT_STDERR
+* CURLOPT_FAILONERROR
+* CURLOPT_URL
+* CURLOPT_PROTOCOLS
+* CURLOPT_REDIR_PROTOCOLS
+* CURLOPT_PROXY
+* CURLOPT_PROXYPORT
+* CURLOPT_PROXYTYPE
+* CURLOPT_NOPROXY
+* CURLOPT_HTTPPROXYTUNNEL
+* CURLOPT_SOCKS5_GSSAPI_SERVICE
+* CURLOPT_SOCKS5_GSSAPI_NEC
+* CURLOPT_INTERFACE
+* CURLOPT_LOCALPORT
+* CURLOPT_LOCALPORTRANGE
+* CURLOPT_DNS_CACHE_TIMEOUT
+* CURLOPT_DNS_USE_GLOBAL_CACHE
+* CURLOPT_BUFFERSIZE
+* CURLOPT_PORT
+* CURLOPT_TCP_NODELAY
+* CURLOPT_ADDRESS_SCOPE
+* CURLOPT_NETRC
+* CURLOPT_NETRC_FILE
+* CURLOPT_USERPWD
+* CURLOPT_PROXYUSERPWD
+* CURLOPT_USERNAME
+* CURLOPT_PASSWORD
+* CURLOPT_PROXYUSERNAME
+* CURLOPT_PROXYPASSWORD
+* CURLOPT_HTTPAUTH
+* CURLOPT_TLSAUTH_USERNAME
+* CURLOPT_TLSAUTH_PASSWORD
+* CURLOPT_TLSAUTH_TYPE
+* CURLOPT_PROXYAUTH
+* CURLOPT_AUTOREFERER
+* CURLOPT_ACCEPT_ENCODING
+* CURLOPT_TRANSFER_ENCODING
+* CURLOPT_FOLLOWLOCATION
+* CURLOPT_UNRESTRICTED_AUTH
+* CURLOPT_MAXREDIRS
+* CURLOPT_POSTREDIR
+* CURLOPT_PUT
+* CURLOPT_POST
+* CURLOPT_POSTFIELDS
+* CURLOPT_POSTFIELDSIZE
+* CURLOPT_POSTFIELDSIZE_LARGE
+* CURLOPT_COPYPOSTFIELDS
+* CURLOPT_HTTPPOST
+* CURLOPT_REFERER
+* CURLOPT_USERAGENT
+* CURLOPT_HTTPHEADER
+* CURLOPT_HTTP200ALIASES
+* CURLOPT_COOKIE
+* CURLOPT_COOKIEFILE
+* CURLOPT_COOKIEJAR
+* CURLOPT_COOKIESESSION
+* CURLOPT_COOKIELIST
+* CURLOPT_HTTPGET
+* CURLOPT_HTTP_VERSION
+* CURLOPT_IGNORE_CONTENT_LENGTH
+* CURLOPT_HTTP_CONTENT_DECODING
+* CURLOPT_HTTP_TRANSFER_DECODING
+* CURLOPT_MAIL_FROM
+* CURLOPT_MAIL_RCPT
+* CURLOPT_TFTP_BLKSIZE
+* CURLOPT_FTPPORT
+* CURLOPT_QUOTE
+* CURLOPT_POSTQUOTE
+* CURLOPT_PREQUOTE
+* CURLOPT_APPEND
+* CURLOPT_FTP_USE_EPRT
+* CURLOPT_FTP_USE_EPSV
+* CURLOPT_FTP_USE_PRET
+* CURLOPT_FTP_CREATE_MISSING_DIRS
+* CURLOPT_FTP_RESPONSE_TIMEOUT
+* CURLOPT_FTP_ALTERNATIVE_TO_USER
+* CURLOPT_FTP_SKIP_PASV_IP
+* CURLOPT_FTPSSLAUTH
+* CURLOPT_FTP_SSL_CCC
+* CURLOPT_FTP_ACCOUNT
+* CURLOPT_FTP_FILEMETHOD
+* CURLOPT_RTSP_REQUEST
+* CURLOPT_RTSP_SESSION_ID
+* CURLOPT_RTSP_STREAM_URI
+* CURLOPT_RTSP_TRANSPORT
+* CURLOPT_RTSP_CLIENT_CSEQ
+* CURLOPT_RTSP_SERVER_CSEQ
+* CURLOPT_TRANSFERTEXT
+* CURLOPT_PROXY_TRANSFER_MODE
+* CURLOPT_CRLF
+* CURLOPT_RANGE
+* CURLOPT_RESUME_FROM
+* CURLOPT_RESUME_FROM_LARGE
+* CURLOPT_CUSTOMREQUEST
+* CURLOPT_FILETIME
+* CURLOPT_DIRLISTONLY
+* CURLOPT_NOBODY
+* CURLOPT_INFILESIZE
+* CURLOPT_INFILESIZE_LARGE
+* CURLOPT_UPLOAD
+* CURLOPT_MAXFILESIZE
+* CURLOPT_MAXFILESIZE_LARGE
+* CURLOPT_TIMECONDITION
+* CURLOPT_TIMEVALUE
+* CURLOPT_TIMEOUT
+* CURLOPT_TIMEOUT_MS
+* CURLOPT_LOW_SPEED_LIMIT
+* CURLOPT_LOW_SPEED_TIME
+* CURLOPT_MAX_SEND_SPEED_LARGE
+* CURLOPT_MAX_RECV_SPEED_LARGE
+* CURLOPT_MAXCONNECTS
+* CURLOPT_FRESH_CONNECT
+* CURLOPT_FORBID_REUSE
+* CURLOPT_CONNECTTIMEOUT
+* CURLOPT_CONNECTTIMEOUT_MS
+* CURLOPT_IPRESOLVE
+* CURLOPT_CONNECT_ONLY
+* CURLOPT_USE_SSL
+* CURLOPT_RESOLVE
+* CURLOPT_SSLCERT
+* CURLOPT_SSLCERTTYPE
+* CURLOPT_SSLKEY
+* CURLOPT_SSLKEYTYPE
+* CURLOPT_KEYPASSWD
+* CURLOPT_SSLENGINE
+* CURLOPT_SSLENGINE_DEFAULT
+* CURLOPT_SSLVERSION
+* CURLOPT_SSL_VERIFYHOST
+* CURLOPT_SSL_VERIFYPEER
+* CURLOPT_CAINFO
+* CURLOPT_ISSUERCERT
+* CURLOPT_CAPATH
+* CURLOPT_CRLFILE
+* CURLOPT_CERTINFO
+* CURLOPT_RANDOM_FILE
+* CURLOPT_EGDSOCKET
+* CURLOPT_SSL_CIPHER_LIST
+* CURLOPT_SSL_SESSIONID_CACHE
+* CURLOPT_KRBLEVEL
+* CURLOPT_GSSAPI_DELEGATION
+* CURLOPT_SSH_AUTH_TYPES
+* CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+* CURLOPT_SSH_PUBLIC_KEYFILE
+* CURLOPT_SSH_PRIVATE_KEYFILE
+* CURLOPT_SSH_KNOWNHOSTS
+* CURLOPT_SSH_KEYFUNCTION
+* CURLOPT_SSH_KEYDATA
+* CURLOPT_PRIVATE
+* CURLOPT_SHARE
+* CURLOPT_NEW_FILE_PERMS
+* CURLOPT_NEW_DIRECTORY_PERMS
+* CURLOPT_TELNETOPTIONS
+* CURLE_OK
+* CURLE_UNKNOWN_OPTION
+* CURLE_NOT_BUILT_IN
+* CURLINFO_EFFECTIVE_URL
+* CURLINFO_RESPONSE_CODE
+* CURLINFO_HTTP_CONNECTCODE
+* CURLINFO_FILETIME
+* CURLINFO_TOTAL_TIME
+* CURLINFO_NAMELOOKUP_TIME
+* CURLINFO_CONNECT_TIME
+* CURLINFO_APPCONNECT_TIME
+* CURLINFO_PRETRANSFER_TIME
+* CURLINFO_STARTTRANSFER_TIME
+* CURLINFO_REDIRECT_TIME
+* CURLINFO_REDIRECT_COUNT
+* CURLINFO_REDIRECT_URL
+* CURLINFO_SIZE_UPLOAD
+* CURLINFO_SIZE_DOWNLOAD
+* CURLINFO_SPEED_DOWNLOAD
+* CURLINFO_SPEED_UPLOAD
+* CURLINFO_HEADER_SIZE
+* CURLINFO_REQUEST_SIZE
+* CURLINFO_SSL_VERIFYRESULT
+* CURLINFO_SSL_ENGINES
+* CURLINFO_CONTENT_LENGTH_DOWNLOAD
+* CURLINFO_CONTENT_LENGTH_UPLOAD
+* CURLINFO_CONTENT_TYPE
+* CURLINFO_PRIVATE
+* CURLINFO_HTTPAUTH_AVAIL
+* CURLINFO_PROXYAUTH_AVAIL
+* CURLINFO_OS_ERRNO
+* CURLINFO_NUM_CONNECTS
+* CURLINFO_PRIMARY_IP
+* CURLINFO_PRIMARY_PORT
+* CURLINFO_LOCAL_IP
+* CURLINFO_LOCAL_PORT
+* CURLINFO_COOKIELIST
+* CURLINFO_LASTSOCKET
+* CURLINFO_FTP_ENTRY_PATH
+* CURLINFO_CERTINFO
+* CURLINFO_CONDITION_UNMET
+* CURLINFO_RTSP_SESSION_ID
+* CURLINFO_RTSP_CLIENT_CSEQ
+* CURLINFO_RTSP_SERVER_CSEQ
+* CURLINFO_RTSP_CSEQ_RECV
+* CURLFORM_COPYNAME
+* CURLFORM_PTRNAME
+* CURLFORM_COPYCONTENTS
+* CURLFORM_PTRCONTENTS
+* CURLFORM_CONTENTSLENGTH
+* CURLFORM_FILECONTENT
+* CURLFORM_FILE
+* CURLFORM_CONTENTTYPE
+* CURLFORM_FILENAME
+* CURLFORM_BUFFER
+* CURLFORM_BUFFERPTR
+* CURLFORM_BUFFERLENGTH
+* CURLFORM_STREAM
+* CURLFORM_ARRAY
+* CURLFORM_CONTENTHEADER
+* CURL \*curl_easy_init(void)
+* void curl_easy_cleanup(CURL \* handle )
+* CURLcode curl_easy_setopt_1(CURL \*handle, CURLoption option, int)
+* CURLcode curl_easy_setopt_2(CURL \*handle, CURLoption option, const char \*)
+* CURLcode curl_easy_setopt_3(CURL \*handle, CURLoption option, void \*)
+* CURLcode curl_easy_setopt_4(CURL \*handle, CURLoption option, CURLLIST \*)
+* CURLcode curl_easy_perform(CURL \* easy_handle )
+* String \*curl_easy_perform_silent(CURL \* easy_handle )
+* CURLcode curl_easy_getinfo_1(CURL \*handle, CURLINFO info, char \**urlp)
+* CURLcode curl_easy_getinfo_2(CURL \*handle, CURLINFO info, long \*codep)
+* CURLcode curl_easy_getinfo_3(CURL \*handle, CURLINFO info, double \*timep)
+* CURLcode curl_easy_getinfo_4(CURL \*handle, CURLINFO info, CURLLIST \**engine_list)
+* CURLcode curl_easy_getinfo_5(CURL \*handle, CURLINFO info, struct curl_certinfo \*chainp)
+* CURLcode curl_easy_getinfo_6(CURL \*handle, CURLINFO info, struct curl_tlssessioninfo \**session)
+* char \*curl_version(void)
+* time_t curl_getdate(char \* datestring , time_t \*now )
+* CURLFORMcode curl_formadd_1(struct curl_httppost \**firstitem, struct curl_httppost \**lastitem, CURLformoption, const char \*, CURLformoption, const char \*, CURLformoption)
+* CURLFORMcode curl_formadd_2(struct curl_httppost \**firstitem, struct curl_httppost \**lastitem, CURLformoption, const char \*, CURLformoption, const char \*,CURLformoption, const char \*, CURLformoption)
+* CURLFORMcode curl_formadd_3(struct curl_httppost \**firstitem, struct curl_httppost \**lastitem, CURLformoption, const char \*, CURLformoption, void \*, CURLformoption)
+* CURLFORMcode curl_formadd_4(struct curl_httppost \**firstitem, struct curl_httppost \**lastitem, CURLformoption, const char \*, CURLformoption, void \*,CURLformoption, long , CURLformoption)
+* CURLFORMcode curl_formadd_5(struct curl_httppost \**firstitem, struct curl_httppost \**lastitem, CURLformoption, const char \*, CURLformoption, void \*,CURLformoption, long , CURLformoption, const char* , CURLformoption)
+* CURLFORMcode curl_formadd_6(struct curl_httppost \**firstitem, struct curl_httppost \**lastitem, CURLformoption, const char \*, CURLformoption, const char \*,CURLformoption, void \* , CURLformoption, long , CURLformoption)
+* CURLFORMcode curl_formadd_7(struct curl_httppost \**firstitem, struct curl_httppost \**lastitem, CURLformoption, const char \*, CURLformoption,  struct curl_forms [], CURLformoption)
+* void curl_formfree(struct curl_httppost \* form)
+* CURLLIST \*curl_slist_append(CURLLIST \* list, const char \* string )
+* void curl_slist_free_all(CURLLIST \* list)
+* char \*curl_easy_escape( CURL \* curl , const char \* string , int length )
+* char \*curl_easy_unescape( CURL \* curl , const char \* url , int inlength , int \* outlength )
diff --git a/docs/ja-jp/source/ringlibsdlandroid_shot1.png b/docs/ja-jp/source/ringlibsdlandroid_shot1.png
new file mode 100644 (file)
index 0000000..d1b733f
Binary files /dev/null and b/docs/ja-jp/source/ringlibsdlandroid_shot1.png differ
diff --git a/docs/ja-jp/source/ringlibsdlandroid_shot2.png b/docs/ja-jp/source/ringlibsdlandroid_shot2.png
new file mode 100644 (file)
index 0000000..8439b7a
Binary files /dev/null and b/docs/ja-jp/source/ringlibsdlandroid_shot2.png differ
diff --git a/docs/ja-jp/source/ringlibsdlfuncsdoc.txt b/docs/ja-jp/source/ringlibsdlfuncsdoc.txt
new file mode 100644 (file)
index 0000000..0c5ffa7
--- /dev/null
@@ -0,0 +1,909 @@
+.. index:: 
+     single: RingLibSDL 関数リファレンス; はじめに
+
+===========================
+RingLibSDL 関数リファレンス
+===========================
+
+* MIX_DEFAULT_FORMAT
+* SDL_QUIT
+* SDL_BUTTON_LEFT
+* SDL_BUTTON_MIDDLE
+* SDL_BUTTON_RIGHT
+* SDL_PRESSED
+* SDL_RELEASED
+* SDL_APP_TERMINATING
+* SDL_APP_LOWMEMORY
+* SDL_APP_WILLENTERBACKGROUND
+* SDL_APP_DIDENTERBACKGROUND
+* SDL_APP_WILLENTERFOREGROUND
+* SDL_APP_DIDENTERFOREGROUND
+* SDL_WINDOWEVENT
+* SDL_SYSWMEVENT
+* SDL_KEYDOWN
+* SDL_KEYUP
+* SDL_TEXTEDITING
+* SDL_TEXTINPUT
+* SDL_MOUSEMOTION
+* SDL_MOUSEBUTTONDOWN
+* SDL_MOUSEBUTTONUP
+* SDL_MOUSEWHEEL
+* SDL_JOYAXISMOTION
+* SDL_JOYBALLMOTION
+* SDL_JOYHATMOTION
+* SDL_JOYBUTTONDOWN
+* SDL_JOYBUTTONUP
+* SDL_JOYDEVICEADDED
+* SDL_JOYDEVICEREMOVED
+* SDL_CONTROLLERAXISMOTION
+* SDL_CONTROLLERBUTTONDOWN
+* SDL_CONTROLLERBUTTONUP
+* SDL_CONTROLLERDEVICEADDED
+* SDL_CONTROLLERDEVICEREMOVED
+* SDL_CONTROLLERDEVICEREMAPPED
+* SDL_FINGERDOWN
+* SDL_FINGERUP
+* SDL_FINGERMOTION
+* SDL_DOLLARGESTURE
+* SDL_DOLLARRECORD
+* SDL_MULTIGESTURE
+* SDL_CLIPBOARDUPDATE
+* SDL_DROPFILE
+* SDL_RENDER_TARGETS_RESET
+* SDL_USEREVENT
+* SDL_LASTEVENT
+* SDL_NET_MAJOR_VERSION
+* SDL_NET_MINOR_VERSION
+* SDL_NET_PATCHLEVEL
+* INADDR_ANY
+* INADDR_NONE
+* INADDR_BROADCAST
+* SDLNET_MAX_UDPCHANNELS
+* SDLNET_MAX_UDPADDRESSES
+* SDLK_0
+* SDLK_1
+* SDLK_2
+* SDLK_3
+* SDLK_4
+* SDLK_5
+* SDLK_6
+* SDLK_7
+* SDLK_8
+* SDLK_9
+* SDLK_a
+* SDLK_AC_BACK
+* SDLK_AC_BOOKMARKS
+* SDLK_AC_FORWARD
+* SDLK_AC_HOME
+* SDLK_AC_REFRESH
+* SDLK_AC_SEARCH
+* SDLK_AC_STOP
+* SDLK_AGAIN
+* SDLK_ALTERASE
+* SDLK_QUOTE
+* SDLK_APPLICATION
+* SDLK_AUDIOMUTE
+* SDLK_AUDIONEXT
+* SDLK_AUDIOPLAY
+* SDLK_AUDIOPREV
+* SDLK_BRIGHTNESSDOWN
+* SDLK_BRIGHTNESSUP
+* SDLK_c
+* SDLK_CALCULATOR
+* SDLK_CANCEL
+* SDLK_CAPSLOCK
+* SDLK_CLEAR
+* SDLK_CLEARAGAIN
+* SDLK_COMMA
+* SDLK_COMPUTER
+* SDLK_COPY
+* SDLK_CRSEL
+* SDLK_CURRENCYSUBUNIT
+* SDLK_CURRENCYUNIT
+* SDLK_CUT
+* SDLK_d
+* SDLK_DECIMALSEPARATOR
+* SDLK_DELETE
+* SDLK_DISPLAYSWITCH
+* SDLK_DOWN
+* SDLK_e
+* SDLK_EJECT
+* SDLK_END
+* SDLK_EQUALS
+* SDLK_ESCAPE
+* SDLK_EXECUTE
+* SDLK_EXSEL
+* SDLK_f
+* SDLK_F1
+* SDLK_F10
+* SDLK_F11
+* SDLK_F12
+* SDLK_F13
+* SDLK_F14
+* SDLK_F15
+* SDLK_F16
+* SDLK_F17
+* SDLK_F18
+* SDLK_F19
+* SDLK_F2
+* SDLK_F20
+* SDLK_F21
+* SDLK_F22
+* SDLK_F23
+* SDLK_F24
+* SDLK_F3
+* SDLK_F4
+* SDLK_F5
+* SDLK_F6
+* SDLK_F7
+* SDLK_F8
+* SDLK_F9
+* SDLK_FIND
+* SDLK_g
+* SDLK_BACKQUOTE
+* SDLK_h
+* SDLK_HELP
+* SDLK_HOME
+* SDLK_i
+* SDLK_INSERT
+* SDLK_j
+* SDLK_k
+* SDLK_KBDILLUMDOWN
+* SDLK_KBDILLUMTOGGLE
+* SDLK_KBDILLUMUP
+* SDLK_KP_0
+* SDLK_KP_00
+* SDLK_KP_000
+* SDLK_KP_1
+* SDLK_KP_2
+* SDLK_KP_3
+* SDLK_KP_4
+* SDLK_KP_5
+* SDLK_KP_6
+* SDLK_KP_7
+* SDLK_KP_8
+* SDLK_KP_9
+* SDLK_KP_A
+* SDLK_KP_AMPERSAND
+* SDLK_KP_AT
+* SDLK_KP_B
+* SDLK_KP_BACKSPACE
+* SDLK_KP_BINARY
+* SDLK_KP_C
+* SDLK_KP_CLEAR
+* SDLK_KP_CLEARENTRY
+* SDLK_KP_COLON
+* SDLK_KP_COMMA
+* SDLK_KP_D
+* SDLK_KP_DBLAMPERSAND
+* SDLK_KP_DBLVERTICALBAR
+* SDLK_KP_DECIMAL
+* SDLK_KP_DIVIDE
+* SDLK_KP_E
+* SDLK_KP_ENTER
+* SDLK_KP_EQUALS
+* SDLK_KP_EQUALSAS400
+* SDLK_KP_EXCLAM
+* SDLK_KP_F
+* SDLK_KP_GREATER
+* SDLK_KP_HASH
+* SDLK_KP_HEXADECIMAL
+* SDLK_KP_LEFTBRACE
+* SDLK_KP_LEFTPAREN
+* SDLK_KP_LESS
+* SDLK_KP_MEMADD
+* SDLK_KP_MEMCLEAR
+* SDLK_KP_MEMDIVIDE
+* SDLK_KP_MEMMULTIPLY
+* SDLK_KP_MEMRECALL
+* SDLK_KP_MEMSTORE
+* SDLK_KP_MEMSUBTRACT
+* SDLK_KP_MINUS
+* SDLK_KP_MULTIPLY
+* SDLK_KP_OCTAL
+* SDLK_KP_PERCENT
+* SDLK_KP_PERIOD
+* SDLK_KP_PLUS
+* SDLK_KP_PLUSMINUS
+* SDLK_KP_POWER
+* SDLK_KP_RIGHTBRACE
+* SDLK_KP_RIGHTPAREN
+* SDLK_KP_SPACE
+* SDLK_KP_TAB
+* SDLK_KP_VERTICALBAR
+* SDLK_KP_XOR
+* SDLK_l
+* SDLK_LALT
+* SDLK_LCTRL
+* SDLK_LEFT
+* SDLK_LEFTBRACKET
+* SDLK_LGUI
+* SDLK_LSHIFT
+* SDLK_m
+* SDLK_MAIL
+* SDLK_MEDIASELECT
+* SDLK_MENU
+* SDLK_MINUS
+* SDLK_MODE
+* SDLK_MUTE
+* SDLK_n
+* SDLK_NUMLOCKCLEAR
+* SDLK_o
+* SDLK_OPER
+* SDLK_OUT
+* SDLK_p
+* SDLK_PAGEDOWN
+* SDLK_PAGEUP
+* SDLK_PASTE
+* SDLK_PAUSE
+* SDLK_PERIOD
+* SDLK_POWER
+* SDLK_PRINTSCREEN
+* SDLK_PRIOR
+* SDLK_q
+* SDLK_r
+* SDLK_RALT
+* SDLK_RCTRL
+* SDLK_RETURN
+* SDLK_RETURN2
+* SDLK_RGUI
+* SDLK_RIGHT
+* SDLK_RIGHTBRACKET
+* SDLK_RSHIFT
+* SDLK_s
+* SDLK_SCROLLLOCK
+* SDLK_SELECT
+* SDLK_SEMICOLON
+* SDLK_SEPARATOR
+* SDLK_SLASH
+* SDLK_SLEEP
+* SDLK_SPACE
+* SDLK_STOP
+* SDLK_SYSREQ
+* SDLK_t
+* SDLK_TAB
+* SDLK_THOUSANDSSEPARATOR
+* SDLK_u
+* SDLK_UNDO
+* SDLK_UNKNOWN
+* SDLK_UP
+* SDLK_v
+* SDLK_VOLUMEDOWN
+* SDLK_VOLUMEUP
+* SDLK_w
+* SDLK_WWW
+* SDLK_x
+* SDLK_y
+* SDLK_z
+* SDLK_AMPERSAND
+* SDLK_ASTERISK
+* SDLK_AT
+* SDLK_CARET
+* SDLK_COLON
+* SDLK_DOLLAR
+* SDLK_EXCLAIM
+* SDLK_GREATER
+* SDLK_HASH
+* SDLK_LEFTPAREN
+* SDLK_LESS
+* SDLK_PERCENT
+* SDLK_PLUS
+* SDLK_QUESTION
+* SDLK_QUOTEDBL
+* SDLK_RIGHTPAREN
+* SDLK_UNDERSCORE
+* SDL_THREAD_PRIORITY_LOW
+* SDL_THREAD_PRIORITY_NORMAL
+* SDL_THREAD_PRIORITY_HIGH
+* void SDL_RenderCopy2(SDL_Renderer \*,SDL_Texture \*)
+* void SDL_Delay(int)
+* void SDL_Init(int)
+* int SDL_InitSubSystem(Uint32 flags)
+* void SDL_Quit(void)
+* void SDL_QuitSubSystem(Uint32 flags)
+* void SDL_SetMainReady(void)
+* Uint32 SDL_WasInit(Uint32 flags)
+* SDL_bool SDL_SetHint(const char \*name,const char \*value)
+* SDL_bool SDL_SetHintWithPriority(const char \*name,const char \*value,SDL_HintPriority priority)
+* void SDL_ClearError(void)
+* const char \*SDL_GetError(void)
+* SDL_LogPriority SDL_LogGetPriority(int category)
+* void SDL_LogResetPriorities(void)
+* void SDL_LogSetAllPriority(SDL_LogPriority priority)
+* SDL_AssertionHandler SDL_GetDefaultAssertionHandler(void)
+* void SDL_ResetAssertionReport(void)
+* void SDL_SetAssertionHandler(SDL_AssertionHandler handler,void \*userdata)
+* void SDL_TriggerBreakpoint(void)
+* void SDL_assert(int)
+* void SDL_assert_paranoid(int)
+* void SDL_assert_release(int)
+* const char \* SDL_GetRevision(void)
+* int SDL_GetRevisionNumber(void)
+* void SDL_GetVersion(SDL_version \*ver)
+* SDL_Window \*SDL_CreateWindow(const char \* title,int x, int y,int w,int h,Uint32 flags)
+* void SDL_DestroyWindow(SDL_Window \*window)
+* void SDL_DisableScreenSaver(void)
+* void SDL_EnableScreenSaver(void)
+* SDL_GLContext SDL_GL_CreateContext(SDL_Window \*window)
+* void SDL_GL_DeleteContext(SDL_GLContext context)
+* SDL_bool SDL_GL_ExtensionSupported(const char \*extension)
+* int SDL_GL_GetAttribute(SDL_GLattr attr,int \*value)
+* SDL_GLContext SDL_GL_GetCurrentContext(void)
+* SDL_Window \*SDL_GL_GetCurrentWindow(void)
+* void SDL_GL_GetDrawableSize(SDL_Window \*window,int \*w,int \*h)
+* void \*SDL_GL_GetProcAddress(const char \*proc)
+* int SDL_GL_GetSwapInterval(void)
+* int SDL_GL_LoadLibrary(const char \*path)
+* int SDL_GL_MakeCurrent(SDL_Window \*window,SDL_GLContext context)
+* void SDL_GL_ResetAttributes(void)
+* int SDL_GL_SetAttribute(SDL_GLattr attr,int value)
+* int SDL_GL_SetSwapInterval(int interval)
+* void SDL_GL_SwapWindow(SDL_Window \*window)
+* void SDL_GL_UnloadLibrary(void)
+* SDL_DisplayMode \*SDL_GetClosestDisplayMode(int displayIndex,SDL_DisplayMode \*mode,SDL_DisplayMode \*closest)
+* int SDL_GetCurrentDisplayMode(int displayIndex,SDL_DisplayMode \*mode)
+* const char \*SDL_GetCurrentVideoDriver(void)
+* int SDL_GetDesktopDisplayMode(int displayIndex,SDL_DisplayMode \*mode)
+* int SDL_GetDisplayBounds(int displayIndex,SDL_Rect \*rect)
+* int SDL_GetNumVideoDisplays(void)
+* int SDL_GetNumVideoDrivers(void)
+* const char \* SDL_GetVideoDriver(int index)
+* void \*SDL_GetWindowData(SDL_Window \*window,const char \*name)
+* int SDL_GetWindowDisplayIndex(SDL_Window \*window)
+* int SDL_GetWindowDisplayMode(SDL_Window \*window,SDL_DisplayMode \*mode)
+* Uint32 SDL_GetWindowFlags(SDL_Window \*window)
+* SDL_Window \*SDL_GetWindowFromID(Uint32 id)
+* int SDL_GetWindowGammaRamp(SDL_Window \*window,Uint16 \*red,Uint16 \*green,Uint16 \*blue)
+* SDL_bool SDL_GetWindowGrab(SDL_Window \*window)
+* Uint32 SDL_GetWindowID(SDL_Window* window)
+* void SDL_GetWindowMaximumSize(SDL_Window \*window,int \*w,int \*h)
+* void SDL_GetWindowMinimumSize(SDL_Window \*window,int \*w,int \*h)
+* void SDL_GetWindowPosition(SDL_Window \*window,int \*x,int \*y)
+* void SDL_GetWindowSize(SDL_Window \*window,int \*w,int \*h)
+* SDL_Surface \*SDL_GetWindowSurface(SDL_Window \*window)
+* const char \*SDL_GetWindowTitle(SDL_Window \*window)
+* SDL_bool SDL_IsScreenSaverEnabled(void)
+* void SDL_MaximizeWindow(SDL_Window \*window)
+* void SDL_MinimizeWindow(SDL_Window \*window)
+* void SDL_RaiseWindow(SDL_Window \*window)
+* void SDL_RestoreWindow(SDL_Window \*window)
+* void SDL_SetWindowBordered(SDL_Window \*window,SDL_bool bordered)
+* int SDL_SetWindowBrightness(SDL_Window \*window,float brightness)
+* void \*SDL_SetWindowData(SDL_Window \*window,const char \*name,void \*userdata)
+* int SDL_SetWindowDisplayMode(SDL_Window \*window,const SDL_DisplayMode \*mode)
+* int SDL_SetWindowFullscreen(SDL_Window \*window,Uint32 flags)
+* int SDL_SetWindowGammaRamp(SDL_Window \*window,const Uint16 \*red,const Uint16 \*green,const Uint16* blue)
+* void SDL_SetWindowGrab(SDL_Window \*window,SDL_bool grabbed)
+* void SDL_SetWindowMinimumSize(SDL_Window* window,int min_w,int min_h)
+* void SDL_SetWindowSize(SDL_Window \*window,int w,int h)
+* void SDL_SetWindowTitle(SDL_Window \*window,const char \*title)
+* int SDL_ShowMessageBox(const SDL_MessageBoxData \*messageboxdata,int \*buttonid)
+* int SDL_ShowSimpleMessageBox(Uint32 flags,const char \*title,const char \*message,SDL_Window \*window)
+* void SDL_ShowWindow(SDL_Window \*window)
+* int SDL_UpdateWindowSurface(SDL_Window \*window)
+* int SDL_UpdateWindowSurfaceRects(SDL_Window \*window,const SDL_Rect \*rects,int numrects)
+* int SDL_VideoInit(const char \*driver_name)
+* void SDL_VideoQuit(void)
+* SDL_Renderer \*SDL_CreateRenderer(SDL_Window \*window,int index,Uint32 flags)
+* SDL_Renderer \*SDL_CreateSoftwareRenderer(SDL_Surface \*surface)
+* SDL_Texture \*SDL_CreateTexture(SDL_Renderer \*renderer,Uint32 format,int access,int w,int h)
+* SDL_Texture \*SDL_CreateTextureFromSurface(SDL_Renderer \*renderer,SDL_Surface \*surface)
+* void SDL_DestroyTexture(SDL_Texture \*texture)
+* int SDL_GL_BindTexture(SDL_Texture \*texture,float \*texw,float \*texh)
+* int SDL_GL_UnbindTexture(SDL_Texture \*texture)
+* int SDL_GetNumRenderDrivers(void)
+* int SDL_GetRenderDrawBlendMode(SDL_Renderer \*renderer,SDL_BlendMode \*blendMode)
+* int SDL_GetRenderDrawColor(SDL_Renderer \*renderer,Uint8 \*r,Uint8 \*g,Uint8 \*b,Uint8 \*a)
+* int SDL_GetRenderDriverInfo(int index,SDL_RendererInfo \*info)
+* SDL_Texture \*SDL_GetRenderTarget(SDL_Renderer \*renderer)
+* SDL_Renderer \*SDL_GetRenderer(SDL_Window \*window)
+* int SDL_GetRendererInfo(SDL_Renderer \*renderer,SDL_RendererInfo \*info)
+* int SDL_GetRendererOutputSize(SDL_Renderer \*renderer,int \*w,int \*h)
+* int SDL_GetTextureAlphaMod(SDL_Texture \*texture,Uint8 \*alpha)
+* int SDL_GetTextureBlendMode(SDL_Texture \*texture,SDL_BlendMode \*blendMode)
+* int SDL_GetTextureColorMod(SDL_Texture \*texture,Uint8 \*r,Uint8 \*g,Uint8 \*b)
+* int SDL_LockTexture(SDL_Texture \*texture,const SDL_Rect \*rect,void \**pixels,int \*pitch)
+* int SDL_QueryTexture(SDL_Texture \*texture,int \*format,int \*access,int \*w,int \*h)
+* int SDL_RenderClear(SDL_Renderer \*renderer)
+* int SDL_RenderCopy(SDL_Renderer \*renderer,SDL_Texture \*texture,const SDL_Rect \*srcrect,const SDL_Rect \*dstrect)
+* int SDL_RenderCopyEx(SDL_Renderer \*renderer,SDL_Texture \*texture,const SDL_Rect \*srcrect,const SDL_Rect \*dstrect,const double angle,const SDL_Point \*center,const SDL_RendererFlip flip)
+* int SDL_RenderDrawLine(SDL_Renderer \*renderer,int x1,int y1,int x2,int y2)
+* int SDL_RenderDrawLines(SDL_Renderer \*renderer,const SDL_Point \*points,int count)
+* int SDL_RenderDrawPoint(SDL_Renderer \*renderer,int x, int y)
+* int SDL_RenderDrawPoints(SDL_Renderer \*renderer,const SDL_Point \*points,int count)
+* int SDL_RenderDrawRect(SDL_Renderer \*renderer,const SDL_Rect \*rect)
+* int SDL_RenderDrawRects(SDL_Renderer \*renderer,const SDL_Rect \*rects,int count)
+* int SDL_RenderFillRect(SDL_Renderer \*renderer,const SDL_Rect \*rect)
+* int SDL_RenderFillRects(SDL_Renderer \*renderer,const SDL_Rect* rects,int count)
+* void SDL_RenderGetClipRect(SDL_Renderer \*renderer,SDL_Rect \*rect)
+* void SDL_RenderGetScale(SDL_Renderer \*renderer,float \*scaleX,float \*scaleY)
+* void SDL_RenderGetViewport(SDL_Renderer \*renderer,SDL_Rect \*rect)
+* int SDL_RenderReadPixels(SDL_Renderer \*renderer,const SDL_Rect \*rect,Uint32 format,void \*pixels,int pitch)
+* int SDL_RenderSetClipRect(SDL_Renderer \*renderer,const SDL_Rect \*rect)
+* int SDL_RenderSetScale(SDL_Renderer \*renderer,float scaleX,float scaleY)
+* int SDL_RenderSetViewport(SDL_Renderer \*renderer,const SDL_Rect \*rect)
+* SDL_bool SDL_RenderTargetSupported(SDL_Renderer \*renderer)
+* int SDL_SetRenderDrawBlendMode(SDL_Renderer \*renderer,SDL_BlendMode blendMode)
+* int SDL_SetRenderDrawColor(SDL_Renderer \*renderer,Uint8 r,Uint8 g,Uint8 b,Uint8 a)
+* int SDL_SetRenderTarget(SDL_Renderer \*renderer,SDL_Texture \*texture)
+* int SDL_SetTextureAlphaMod(SDL_Texture \*texture,Uint8 alpha)
+* int SDL_SetTextureBlendMode(SDL_Texture \*texture,SDL_BlendMode blendMode)
+* int SDL_SetTextureColorMod(SDL_Texture \*texture,Uint8 r,Uint8 g,Uint8 b)
+* void SDL_UnlockTexture(SDL_Texture \*texture)
+* int SDL_UpdateTexture(SDL_Texture \*texture,const SDL_Rect \*rect,const void*pixels,int pitch)
+* int SDL_UpdateYUVTexture(SDL_Texture \*texture,const SDL_Rect \*rect,const Uint8 \*Yplane,int Ypitch,const Uint8 \*Uplane,int Upitch,const Uint8 \*Vplane,int Vpitch)
+* SDL_PixelFormat \*SDL_AllocFormat(Uint32 pixel_format)
+* SDL_Palette \*SDL_AllocPalette(int ncolors)
+* void SDL_CalculateGammaRamp(float gamma,Uint16 \*ramp)
+* void SDL_FreeFormat(SDL_PixelFormat \*format)
+* void SDL_FreePalette(SDL_Palette \*palette)
+* const char \*SDL_GetPixelFormatName(Uint32 format)
+* void SDL_GetRGB(Uint32 pixel,const SDL_PixelFormat* format,Uint8 \*r,Uint8 \*g,Uint8 \*b)
+* void SDL_GetRGBA(Uint32 pixel,const SDL_PixelFormat* format,Uint8 \*r,Uint8 \*g,Uint8 \*b,Uint8 \*a)
+* Uint32 SDL_MapRGB(const SDL_PixelFormat* format,Uint8 r,Uint8 g, Uint8 b)
+* Uint32 SDL_MapRGBA(const SDL_PixelFormat* format,Uint8 r,Uint8 g, Uint8 b, Uint8 a)
+* Uint32 SDL_MasksToPixelFormatEnum(int bpp,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)
+* SDL_bool SDL_PixelFormatEnumToMasks(Uint32 format,int \*bpp,Uint32 \*Rmask,Uint32 \*Gmask,Uint32 \*Bmask,Uint32 \*Amask)
+* int SDL_SetPaletteColors(SDL_Palette \*palette,const SDL_Color \*colors,int firstcolor,int ncolors)
+* int SDL_SetPixelFormatPalette(SDL_PixelFormat \*format,SDL_Palette \*palette)
+* SDL_bool SDL_EnclosePoints(const SDL_Point* points,int count,const SDL_Rect \*clip,SDL_Rect \*result)
+* SDL_bool SDL_HasIntersection(const SDL_Rect \*A,const SDL_Rect \*B)
+* SDL_bool SDL_IntersectRect(const SDL_Rect \*A,const SDL_Rect \*B,SDL_Rect \*result)
+* SDL_bool SDL_IntersectRectAndLine(const SDL_Rect \*rect,int \*X1,int \*Y1,int \*X2,int \*Y2)
+* SDL_bool SDL_RectEquals(const SDL_Rect \*a,const SDL_Rect \*b)
+* void SDL_UnionRect(const SDL_Rect \*A,const SDL_Rect \*B,SDL_Rect \*result)
+* int SDL_BlitScaled(SDL_Surface \*src,const SDL_Rect \*srcrect,SDL_Surface \*dst,SDL_Rect \*dstrect)
+* int SDL_BlitSurface(SDL_Surface \*src,const SDL_Rect* srcrect,SDL_Surface \*dst,SDL_Rect \*dstrect)
+* int SDL_ConvertPixels(int width,int height,Uint32 src_format,const void \*src,int src_pitch,Uint32 dst_format,void \*dst,int dst_pitch)
+* SDL_Surface \*SDL_ConvertSurface(SDL_Surface \*src,const SDL_PixelFormat \*fmt,Uint32 flags)
+* SDL_Surface \*SDL_ConvertSurfaceFormat(SDL_Surface \*src,Uint32 pixel_format,Uint32 flags)
+* SDL_Surface \*SDL_CreateRGBSurface(Uint32 flags,int width,int height,int depth,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)
+* SDL_Surface* SDL_CreateRGBSurfaceFrom(void \*pixels,int width,int height,int depth,int pitch,Uint32 Rmask,Uint32 Gmask,Uint32 Bmask,Uint32 Amask)
+* int SDL_FillRect(SDL_Surface \*dst,const SDL_Rect \*rect,Uint32 color)
+* int SDL_FillRects(SDL_Surface \*dst,const SDL_Rect \*rects,int count,Uint32 color)
+* void SDL_FreeSurface(SDL_Surface \*surface)
+* void SDL_GetClipRect(SDL_Surface \*surface,SDL_Rect \*rect)
+* int SDL_GetColorKey(SDL_Surface \*surface,Uint32 \*key)
+* int SDL_GetSurfaceAlphaMod(SDL_Surface \*surface,Uint8 \*alpha)
+* int SDL_GetSurfaceBlendMode(SDL_Surface \*surface,SDL_BlendMode \*blendMode)
+* int SDL_GetSurfaceColorMod(SDL_Surface \*surface,Uint8 \*r,Uint8 \*g,Uint8 \*b)
+* SDL_Surface \*SDL_LoadBMP(const char \*file)
+* SDL_Surface \*SDL_LoadBMP_RW(SDL_RWops \*src,int freesrc)
+* int SDL_LockSurface(SDL_Surface \*surface)
+* int SDL_LowerBlit(SDL_Surface \*src,SDL_Rect \*srcrect,SDL_Surface \*dst,SDL_Rect \*dstrect)
+* int SDL_LowerBlitScaled(SDL_Surface \*src,SDL_Rect \*srcrect,SDL_Surface \*dst,SDL_Rect \*dstrect)
+* SDL_bool SDL_MUSTLOCK(SDL_Surface \*surface)
+* int SDL_SaveBMP(SDL_Surface \*surface,const char \*file)
+* int SDL_SaveBMP_RW(SDL_Surface \*surface,SDL_RWops \*dst,int freedst)
+* SDL_bool SDL_SetClipRect(SDL_Surface \*surface,const SDL_Rect \*rect)
+* int SDL_SetColorKey(SDL_Surface \*surface,int flag,Uint32 key)
+* int SDL_SetSurfaceAlphaMod(SDL_Surface \*surface,Uint8 alpha)
+* int SDL_SetSurfaceBlendMode(SDL_Surface \*surface,SDL_BlendMode blendMode)
+* int SDL_SetSurfaceColorMod(SDL_Surface \*surface,Uint8 r,Uint8 g,Uint8 b)
+* int SDL_SetSurfacePalette(SDL_Surface \*surface,SDL_Palette \*palette)
+* int SDL_SetSurfaceRLE(SDL_Surface \*surface,int flag)
+* void SDL_UnlockSurface(SDL_Surface* surface)
+* SDL_bool SDL_GetWindowWMInfo(SDL_Window \*window,SDL_SysWMinfo \*info)
+* char \*SDL_GetClipboardText(void)
+* SDL_bool SDL_HasClipboardText(void)
+* int SDL_SetClipboardText(const char \*text)
+* void SDL_AddEventWatch(SDL_EventFilter filter,void \*userdata)
+* void SDL_DelEventWatch(SDL_EventFilter filter,void \*userdata)
+* Uint8 SDL_EventState(Uint32 type,int state)
+* void SDL_FilterEvents(SDL_EventFilter filter,void \*userdata)
+* void SDL_FlushEvent(Uint32 type)
+* void SDL_FlushEvents(Uint32 minType,Uint32 maxType)
+* SDL_bool SDL_GetEventFilter(SDL_EventFilter \*filter,void \**userdata)
+* Uint8 SDL_GetEventState(Uint32 type)
+* int SDL_GetNumTouchDevices(void)
+* int SDL_GetNumTouchFingers(SDL_TouchID touchID)
+* SDL_TouchID SDL_GetTouchDevice(int index)
+* SDL_Finger* SDL_GetTouchFinger(SDL_TouchID touchID,int index)
+* SDL_bool SDL_HasEvent(Uint32 type)
+* SDL_bool SDL_HasEvents(Uint32 minType,Uint32 maxType)
+* int SDL_LoadDollarTemplates(SDL_TouchID touchId,SDL_RWops \*src)
+* int SDL_PeepEvents(SDL_Event \*events,int numevents,SDL_eventaction action,Uint32 minType,Uint32 maxType)
+* int SDL_PollEvent(SDL_Event \*event)
+* void SDL_PumpEvents(void)
+* int SDL_PushEvent(SDL_Event \*event)
+* SDL_bool SDL_QuitRequested(void)
+* int SDL_RecordGesture(SDL_TouchID touchId)
+* Uint32 SDL_RegisterEvents(int numevents)
+* int SDL_SaveAllDollarTemplates(SDL_RWops \*dst)
+* int SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops \*dst)
+* void SDL_SetEventFilter(SDL_EventFilter filter,void \*userdata)
+* int SDL_WaitEvent(SDL_Event \*event)
+* int SDL_WaitEventTimeout(SDL_Event \*event,int timeout)
+* SDL_Keycode SDL_GetKeyFromName(const char \* name)
+* SDL_Keycode SDL_GetKeyFromScancode(SDL_Scancode scancode)
+* const char \* SDL_GetKeyName(SDL_Keycode key)
+* SDL_Window* SDL_GetKeyboardFocus(void)
+* const Uint8* SDL_GetKeyboardState(int* numkeys)
+* SDL_Keymod SDL_GetModState(void)
+* SDL_Scancode SDL_GetScancodeFromKey(SDL_Keycode key)
+* SDL_Scancode SDL_GetScancodeFromName(const char \* name)
+* const char \* SDL_GetScancodeName(SDL_Scancode scancode)
+* SDL_bool SDL_HasScreenKeyboardSupport(void)
+* SDL_bool SDL_IsScreenKeyboardShown(SDL_Window* window)
+* SDL_bool SDL_IsTextInputActive(void)
+* void SDL_SetModState(SDL_Keymod modstate)
+* void SDL_SetTextInputRect(SDL_Rect* rect)
+* void SDL_StartTextInput(void)
+* void SDL_StopTextInput(void)
+* SDL_Cursor \*SDL_CreateCursor(const Uint8 \*data,const Uint8 \*mask,int w,int h,int hot_x,int hot_y)
+* void SDL_FreeCursor(SDL_Cursor \*cursor)
+* SDL_Cursor \*SDL_GetCursor(void)
+* SDL_Cursor \*SDL_GetDefaultCursor(void)
+* Uint32 SDL_GetMouseState(int \*x,int \* y)
+* SDL_bool SDL_GetRelativeMouseMode(void)
+* Uint32 SDL_GetRelativeMouseState(int \*x,int \*y)
+* void SDL_SetCursor(SDL_Cursor \*cursor)
+* int SDL_SetRelativeMouseMode(SDL_bool enabled)
+* int SDL_ShowCursor(int toggle)
+* void SDL_JoystickClose(SDL_Joystick \*joystick)
+* SDL_bool SDL_JoystickGetAttached(SDL_Joystick \*joystick)
+* Sint16 SDL_JoystickGetAxis(SDL_Joystick \*joystick,int axis)
+* int SDL_JoystickGetBall(SDL_Joystick \*joystick,int ball,int \*dx,int \*dy)
+* Uint8 SDL_JoystickGetButton(SDL_Joystick \*joystick,int button)
+* SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)
+* SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick \*joystick)
+* SDL_JoystickGUID SDL_JoystickGetGUIDFromString(const char \*pchGUID)
+* void SDL_JoystickGetGUIDString(SDL_JoystickGUID guid,char \*pszGUID,int cbGUID)
+* Uint8 SDL_JoystickGetHat(SDL_Joystick \*joystick,int hat)
+* SDL_JoystickID SDL_JoystickInstanceID(SDL_Joystick \*joystick)
+* const char \*SDL_JoystickName(SDL_Joystick \*joystick)
+* const char \*SDL_JoystickNameForIndex(int device_index)
+* int SDL_JoystickNumAxes(SDL_Joystick \*joystick)
+* int SDL_JoystickNumBalls(SDL_Joystick \*joystick)
+* int SDL_JoystickNumButtons(SDL_Joystick \*joystick)
+* int SDL_JoystickNumHats(SDL_Joystick \*joystick)
+* SDL_Joystick \*SDL_JoystickOpen(int device_index)
+* void SDL_JoystickUpdate(void)
+* int SDL_NumJoysticks(void)
+* int SDL_GameControllerAddMapping(const char \*mappingString)
+* int SDL_GameControllerAddMappingsFromFile(const char \*filename)
+* int SDL_GameControllerAddMappingsFromRW(SDL_RWops \*rw,int freerw)
+* void SDL_GameControllerClose(SDL_GameController \*gamecontroller)
+* int SDL_GameControllerEventState(int state)
+* Sint16 SDL_GameControllerGetAxis(SDL_GameController \*gamecontroller,SDL_GameControllerAxis axis)
+* SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const char \*pchString)
+* SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController \*gamecontroller,SDL_GameControllerAxis axis)
+* SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController \*gamecontroller,SDL_GameControllerButton button)
+* Uint8 SDL_GameControllerGetButton(SDL_GameController \*gamecontroller,SDL_GameControllerButton button)
+* SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const char \*pchString)
+* SDL_Joystick \*SDL_GameControllerGetJoystick(SDL_GameController \*gamecontroller)
+* const char \*SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis)
+* const char \*SDL_GameControllerGetStringForButton(SDL_GameControllerButton button)
+* char \*SDL_GameControllerMapping(SDL_GameController \*gamecontroller)
+* char \*SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid)
+* const char \*SDL_GameControllerName(SDL_GameController \*gamecontroller)
+* const char \*SDL_GameControllerNameForIndex(int joystick_index)
+* SDL_GameController* SDL_GameControllerOpen(int joystick_index)
+* void SDL_GameControllerUpdate(void)
+* SDL_bool SDL_IsGameController(int joystick_index)
+* void SDL_HapticClose(SDL_Haptic* haptic)
+* void SDL_HapticDestroyEffect(SDL_Haptic \*haptic,int effect)
+* int SDL_HapticEffectSupported(SDL_Haptic \*haptic,SDL_HapticEffect \*effect)
+* int SDL_HapticGetEffectStatus(SDL_Haptic \*haptic,int effect)
+* int SDL_HapticIndex(SDL_Haptic \*haptic)
+* const char \*SDL_HapticName(int device_index)
+* int SDL_HapticNewEffect(SDL_Haptic \*haptic,SDL_HapticEffect \*effect)
+* int SDL_HapticNumAxes(SDL_Haptic \*haptic)
+* int SDL_HapticNumEffects(SDL_Haptic \*haptic)
+* int SDL_HapticNumEffectsPlaying(SDL_Haptic \*haptic)
+* SDL_Haptic \*SDL_HapticOpen(int device_index)
+* SDL_Haptic \*SDL_HapticOpenFromJoystick(SDL_Joystick \*joystick)
+* SDL_Haptic \*SDL_HapticOpenFromMouse(void)
+* int SDL_HapticOpened(int device_index)
+* int SDL_HapticPause(SDL_Haptic \*haptic)
+* unsigned int SDL_HapticQuery(SDL_Haptic \*haptic)
+* int SDL_HapticRumbleInit(SDL_Haptic \*haptic)
+* int SDL_HapticRumblePlay(SDL_Haptic \*haptic,float strength,Uint32 length)
+* int SDL_HapticRumbleStop(SDL_Haptic \*haptic)
+* int SDL_HapticRumbleSupported(SDL_Haptic \*haptic)
+* int SDL_HapticRunEffect(SDL_Haptic \*haptic,int effect,Uint32 iterations)
+* int SDL_HapticSetAutocenter(SDL_Haptic \*haptic,int autocenter)
+* int SDL_HapticSetGain(SDL_Haptic \*haptic,int gain)
+* int SDL_HapticStopAll(SDL_Haptic \*haptic)
+* int SDL_HapticStopEffect(SDL_Haptic \*haptic,int effect)
+* int SDL_HapticUnpause(SDL_Haptic \*haptic)
+* int SDL_HapticUpdateEffect(SDL_Haptic \*haptic,int effect,SDL_HapticEffect \*data)
+* int SDL_JoystickIsHaptic(SDL_Joystick \*joystick)
+* int SDL_MouseIsHaptic(void)
+* int SDL_NumHaptics(void)
+* int SDL_AudioInit(const char \* driver_name)
+* void SDL_AudioQuit(void)
+* int SDL_BuildAudioCVT(SDL_AudioCVT \*cvt,SDL_AudioFormat src_format,Uint8 src_channels,int src_rate,SDL_AudioFormat dst_format,Uint8 dst_channels,int dst_rate)
+* void SDL_CloseAudioDevice(SDL_AudioDeviceID dev)
+* int SDL_ConvertAudio(SDL_AudioCVT \*cvt)
+* void SDL_FreeWAV(Uint8 \*audio_buf)
+* const char \* SDL_GetAudioDeviceName(int index,int iscapture)
+* SDL_AudioStatus SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev)
+* const char \* SDL_GetAudioDriver(int index)
+* SDL_AudioStatus SDL_GetAudioStatus(void)
+* const char \* SDL_GetCurrentAudioDriver(void)
+* int SDL_GetNumAudioDevices(int iscapture)
+* int SDL_GetNumAudioDrivers(void)
+* SDL_AudioSpec \*SDL_LoadWAV_RW(SDL_RWops \*src,int freesrc,SDL_AudioSpec \*spec,Uint8 \**audio_buf,Uint32 \*audio_len)
+* void SDL_LockAudio(void)
+* void SDL_LockAudioDevice(SDL_AudioDeviceID dev)
+* void SDL_MixAudio(Uint8 \*dst,const Uint8* src,Uint32 len,int volume)
+* void SDL_MixAudioFormat(Uint8 \*dst,const Uint8 \*src,SDL_AudioFormat format,Uint32 len,int volume)
+* int SDL_OpenAudio(SDL_AudioSpec \*desired,SDL_AudioSpec \*obtained)
+* SDL_AudioDeviceID SDL_OpenAudioDevice(const char \*device,int iscapture,const SDL_AudioSpec \*desired,SDL_AudioSpec \*obtained,int allowed_changes)
+* void SDL_PauseAudio(int pause_on)
+* void SDL_PauseAudioDevice(SDL_AudioDeviceID dev,int pause_on)
+* void SDL_UnlockAudio(void)
+* void SDL_UnlockAudioDevice(SDL_AudioDeviceID dev)
+* char \*SDL_GetBasePath(void)
+* char \*SDL_GetPrefPath(const char \*org,const char \*app)
+* SDL_RWops \*SDL_AllocRW(void)
+* void SDL_FreeRW(SDL_RWops \*area)
+* SDL_RWops \*SDL_RWFromConstMem(const void* mem,int size)
+* SDL_RWops \*SDL_RWFromFP(void \*fp,SDL_bool autoclose)
+* SDL_RWops \*SDL_RWFromFile(const char \*file,const char \*mode)
+* SDL_RWops \*SDL_RWFromMem(void \*mem,int   size)
+* int SDL_RWclose(struct SDL_RWops \*context)
+* size_t SDL_RWread(struct SDL_RWops \*context,void \*ptr,size_t size,size_t maxnum)
+* Sint64 SDL_RWseek(SDL_RWops \*context,Sint64 offset,int whence)
+* Sint64 SDL_RWsize(SDL_RWops \*context)
+* Sint64 SDL_RWtell(struct SDL_RWops \*context)
+* size_t SDL_RWwrite(struct SDL_RWops \*context,const void \*ptr,size_t size,size_t num)
+* Uint16 SDL_ReadBE16(SDL_RWops \*src)
+* Uint32 SDL_ReadBE32(SDL_RWops \*src)
+* Uint64 SDL_ReadBE64(SDL_RWops \*src)
+* Uint16 SDL_ReadLE16(SDL_RWops \*src)
+* Uint32 SDL_ReadLE32(SDL_RWops \*src)
+* Uint64 SDL_ReadLE64(SDL_RWops \*src)
+* Uint8 SDL_ReadU8(SDL_RWops \*src)
+* size_t SDL_WriteBE16(SDL_RWops \*dst,Uint16 value)
+* size_t SDL_WriteBE32(SDL_RWops \*dst,Uint32 value)
+* size_t SDL_WriteBE64(SDL_RWops \*dst,Uint64 value)
+* size_t SDL_WriteLE16(SDL_RWops \*dst,Uint16 value)
+* size_t SDL_WriteLE32(SDL_RWops \*dst,Uint32 value)
+* size_t SDL_WriteLE64(SDL_RWops \*dst,Uint64 value)
+* size_t SDL_WriteU8(SDL_RWops \*dst,Uint8 value)
+* void \*SDL_LoadFunction(void \*handle,const char \*name)
+* void \*SDL_LoadObject(const char \*sofile)
+* void SDL_UnloadObject(void \*handle)
+* const char \*SDL_GetPlatform(void)
+* int SDL_GetCPUCacheLineSize(void)
+* int SDL_GetCPUCount(void)
+* int SDL_GetSystemRAM(void)
+* SDL_bool SDL_Has3DNow(void)
+* SDL_bool SDL_HasAVX(void)
+* SDL_bool SDL_HasMMX(void)
+* SDL_bool SDL_HasRDTSC(void)
+* SDL_bool SDL_HasSSE(void)
+* SDL_bool SDL_HasSSE2(void)
+* SDL_bool SDL_HasSSE3(void)
+* SDL_bool SDL_HasSSE41(void)
+* SDL_bool SDL_HasSSE42(void)
+* SDL_PowerState SDL_GetPowerInfo(int \*secs,int \*pct)
+* double SDL_acos(double x)
+* int IMG_Init(int flags)
+
+* void IMG_Quit(void)
+* SDL_Surface \*IMG_Load(const char \*file)
+* SDL_Surface \*IMG_Load_RW(SDL_RWops \*src, int freesrc)
+* SDL_Surface \*IMG_LoadTyped_RW(SDL_RWops \*src, int freesrc, char \*type)
+* SDL_Surface \*IMG_LoadCUR_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadBMP_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadPNM_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadXPM_RW(SDL_RWops \*src)
+
+* SDL_Surface \*IMG_LoadXCF_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadPCX_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadGIF_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadJPG_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadTIF_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadPNG_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadTGA_RW(SDL_RWops \*src)
+
+* SDL_Surface \*IMG_LoadLBM_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_LoadXV_RW(SDL_RWops \*src)
+* SDL_Surface \*IMG_ReadXPMFromArray(char \**xpm)
+* int IMG_isCUR(SDL_RWops \*src)
+* int IMG_isICO(SDL_RWops \*src)
+* int IMG_isBMP(SDL_RWops \*src)
+
+* int IMG_isPNM(SDL_RWops \*src)
+* int IMG_isXPM(SDL_RWops \*src)
+* int IMG_isXCF(SDL_RWops \*src)
+
+* int IMG_isPCX(SDL_RWops \*src)
+
+* int IMG_isGIF(SDL_RWops \*src)
+* int IMG_isJPG(SDL_RWops \*src)
+
+* int IMG_isTIF(SDL_RWops \*src)
+
+* int IMG_isPNG(SDL_RWops \*src)
+* int IMG_isLBM(SDL_RWops \*src)
+* int IMG_isXV(SDL_RWops \*src)
+* int TTF_Init(void)
+* int TTF_WasInit(void)
+* void TTF_Quit(void)
+* TTF_Font \*TTF_OpenFont(const char \*file, int ptsize)
+* TTF_Font \*TTF_OpenFontRW(SDL_RWops \*src, int freesrc, int ptsize)
+* TTF_Font \*TTF_OpenFontIndex(const char \*file, int ptsize, long index)
+
+* TTF_Font \*TTF_OpenFontIndexRW(SDL_RWops \*src, int freesrc, int ptsize, long index)
+* void TTF_CloseFont(TTF_Font \*font)
+* void TTF_ByteSwappedUNICODE(int swapped)
+* int TTF_GetFontStyle(TTF_Font \*font)
+* void TTF_SetFontStyle(TTF_Font \*font, int style)
+
+* int TTF_GetFontOutline(TTF_Font \*font)
+* void TTF_SetFontOutline(TTF_Font \*font, int outline)
+
+* int TTF_GetFontHinting(TTF_Font \*font)
+* void TTF_SetFontHinting(TTF_Font \*font, int hinting)
+* int TTF_GetFontKerning(TTF_Font \*font)
+
+* void TTF_SetFontKerning(TTF_Font \*font, int allowed)
+* int TTF_FontHeight(const TTF_Font \*font)
+* int TTF_FontAscent(const TTF_Font \*font)
+
+* int TTF_FontDescent(const TTF_Font \*font)
+
+* int TTF_FontLineSkip(const TTF_Font \*font)
+* long TTF_FontFaces(const TTF_Font \*font)
+
+* int TTF_FontFaceIsFixedWidth(const TTF_Font \*font)
+* char \*TTF_FontFaceFamilyName(const TTF_Font \*font)
+* char \*TTF_FontFaceStyleName(const TTF_Font \*font)
+* int TTF_GlyphIsProvided(const TTF_Font \*font, Uint16 ch)
+
+* int TTF_GlyphMetrics(TTF_Font \*font, Uint16 ch, int \*minx, int \*maxx, int \*miny, int \*maxy, int \*advance)
+* int TTF_SizeText(TTF_Font \*font, const char \*text, int \*w, int \*h)
+* int TTF_SizeUTF8(TTF_Font \*font, const char \*text, int \*w, int \*h)
+
+* int TTF_SizeUNICODE(TTF_Font \*font, const Uint16 \*text, int \*w, int \*h)
+
+* SDL_Surface \*TTF_RenderText_Solid(TTF_Font \*font, const char \*text, SDL_Color fg)
+* SDL_Surface \*TTF_RenderUTF8_Solid(TTF_Font \*font, const char \*text,SDL_Color fg)
+* SDL_Surface \*TTF_RenderUNICODE_Solid(TTF_Font \*font, const Uint16 \*text,SDL_Color fg)
+
+* SDL_Surface \*TTF_RenderGlyph_Solid(TTF_Font \*font, Uint16 ch, SDL_Color fg)
+* SDL_Surface \*TTF_RenderText_Shaded(TTF_Font \*font, const char \*text,SDL_Color fg, SDL_Color bg)
+
+* SDL_Surface \*TTF_RenderUTF8_Shaded(TTF_Font \*font, const char \*text,SDL_Color fg, SDL_Color bg)
+
+* SDL_Surface \*TTF_RenderUNICODE_Shaded(TTF_Font \*font, const Uint16 \*text,SDL_Color fg, SDL_Color bg)
+
+* SDL_Surface \*TTF_RenderGlyph_Shaded(TTF_Font \*font, Uint16 ch, SDL_Color fg,SDL_Color bg)
+
+* SDL_Surface \*TTF_RenderText_Blended(TTF_Font \*font, const char \*text,SDL_Color fg)
+
+* SDL_Surface \*TTF_RenderUTF8_Blended(TTF_Font \*font, const char \*text,SDL_Color fg)
+
+* SDL_Surface \*TTF_RenderUNICODE_Blended(TTF_Font \*font, const Uint16 \*text,SDL_Color fg)
+
+* SDL_Surface \*TTF_RenderGlyph_Blended(TTF_Font \*font, Uint16 ch, SDL_Color fg)
+* int Mix_Init(int flags)
+* void Mix_Quit(void)
+* int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize)
+* void Mix_CloseAudio(void)
+* int Mix_QuerySpec(int \*frequency, Uint16 \*format, int \*channels)
+* int Mix_GetNumChunkDecoders(void)
+* const char \*Mix_GetChunkDecoder(int index)
+* Mix_Chunk \*Mix_LoadWAV(char \*file)
+* Mix_Chunk \*Mix_LoadWAV_RW(SDL_RWops \*src, int freesrc)
+* Mix_Chunk \*Mix_QuickLoad_WAV(Uint8 \*mem)
+* void Mix_FreeChunk(Mix_Chunk \*chunk)
+* int Mix_AllocateChannels(int numchans)
+* int Mix_Volume(int channel, int volume)
+* int Mix_PlayChannel(int channel, Mix_Chunk \*chunk, int loops)
+* int Mix_PlayChannelTimed(int channel, Mix_Chunk \*chunk, int loops, int ticks)
+* int Mix_FadeInChannel(int channel, Mix_Chunk \*chunk, int loops, int ms)
+* int Mix_FadeInChannelTimed(int channel, Mix_Chunk \*chunk,int loops, int ms, int ticks)
+* void Mix_Pause(int channel)
+* void Mix_Resume(int channel)
+* int Mix_HaltChannel(int channel)
+* int Mix_ExpireChannel(int channel, int ticks)
+* int Mix_FadeOutChannel(int channel, int ms)
+* int Mix_Paused(int channel)
+* Mix_Fading Mix_FadingChannel(int which)
+* Mix_Chunk \*Mix_GetChunk(int channel)
+* int Mix_ReserveChannels(int num)
+* int Mix_GroupChannel(int which, int tag)
+* int Mix_GroupChannels(int from, int to, int tag)
+* int Mix_GroupCount(int tag)
+* int Mix_GroupAvailable(int tag)
+* int Mix_GroupOldest(int tag)
+* int Mix_GroupNewer(int tag)
+* int Mix_FadeOutGroup(int tag, int ms)
+* int Mix_HaltGroup(int tag)
+* int Mix_GetNumMusicDecoders(void)
+* const char \*Mix_GetMusicDecoder(int index)
+* Mix_Music \*Mix_LoadMUS(const char \*file)
+* void Mix_FreeMusic(Mix_Music \*music)
+* int Mix_PlayMusic(Mix_Music \*music, int loops)
+* int Mix_FadeInMusic(Mix_Music \*music, int loops, int ms)
+* int Mix_FadeInMusicPos(Mix_Music \*music, int loops, int ms, double position)
+* int Mix_PlayingMusic(void)
+* int Mix_PausedMusic(void)
+* Mix_Fading Mix_FadingMusic(void)
+* void \*Mix_GetMusicHookData(void)
+* int Mix_RegisterEffect(int chan, Mix_EffectFunc_t f, Mix_EffectDone_t d,void \*arg)
+* int Mix_UnregisterEffect(int channel, Mix_EffectFunc_t f)
+* int Mix_UnregisterAllEffects(int channel)
+* int Mix_SetDistance(int channel, Uint8 distance)
+* int Mix_SetPosition(int channel, Sint16 angle, Uint8 distance)
+* int Mix_SetReverseStereo(int channel, int flip)
+* int SDLNet_Init(void)
+* void SDLNet_Quit(void)
+* char \*SDLNet_GetError(void)
+* void SDLNet_Write16(Uint16 value, void \*area)
+* void SDLNet_Write32(Uint32 value, void \*area)
+* Uint16 SDLNet_Read16(void \*area)
+* Uint32 SDLNet_Read32(void \*area)
+* int SDLNet_ResolveHost(IPaddress \*address, const char \*host, Uint16 port)
+* const char \*SDLNet_ResolveIP(IPaddress \*address)
+* TCPsocket SDLNet_TCP_Open(IPaddress \*ip)
+* void SDLNet_TCP_Close(TCPsocket sock)
+* TCPsocket SDLNet_TCP_Accept(TCPsocket server)
+* int SDLNet_TCP_Send(TCPsocket sock, const void \*data, int len)
+* int SDLNet_TCP_Recv(TCPsocket sock, void \*data, int maxlen)
+* UDPsocket SDLNet_UDP_Open(Uint16 port)
+* void SDLNet_UDP_Close(UDPsocket sock)
+* int SDLNet_UDP_Bind(UDPsocket sock, int channel, IPaddress \*address)
+* void SDLNet_UDP_Unbind(UDPsocket sock, int channel)
+* IPaddress \*SDLNet_UDP_GetPeerAddress(UDPsocket sock, int channel)
+* int SDLNet_UDP_Send(UDPsocket sock, int channel, UDPpacket \*packet)
+* int SDLNet_UDP_Recv(UDPsocket sock, UDPpacket \*packet)
+* int SDLNet_UDP_SendV(UDPsocket sock, UDPpacket \**packetV, int npackets)
+* int SDLNet_UDP_RecvV(UDPsocket sock, UDPpacket \**packetV)
+* UDPpacket \*SDLNet_AllocPacket(int size)
+* int SDLNet_ResizePacket(UDPpacket \*packet, int size)
+* void SDLNet_FreePacket(UDPpacket \*packet)
+* UDPpacket \**SDLNet_AllocPacketV(int howmany, int size)
+* void SDLNet_FreePacketV(UDPpacket \**packetV)
+* SDLNet_SocketSet SDLNet_AllocSocketSet(int maxsockets)
+* void SDLNet_FreeSocketSet(SDLNet_SocketSet set)
+* int SDLNet_AddSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock)
+* int SDLNet_TCP_AddSocket(SDLNet_SocketSet set, TCPsocket sock)
+* int SDLNet_UDP_AddSocket(SDLNet_SocketSet set, UDPsocket sock)
+* int SDLNet_DelSocket(SDLNet_SocketSet set, SDLNet_GenericSocket sock)
+* int SDLNet_TCP_DelSocket(SDLNet_SocketSet set, TCPsocket sock)
+* int SDLNet_UDP_DelSocket(SDLNet_SocketSet set, UDPsocket sock)
+* int SDLNet_CheckSockets(SDLNet_SocketSet set, Uint32 timeout)
+* int SDLNet_SocketReady(TCPsocket sock)
+* int circleRGBA(SDL_Renderer \* renderer, Sint16 x, Sint16 y, Sint16 rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
+* SDL_Thread \*SDL_CreateThread(SDL_ThreadFunction fn,const char \*name,void \*data)
+* void SDL_DetachThread(SDL_Thread \*thread)
+* SDL_threadID SDL_GetThreadID(SDL_Thread \*thread)
+* const char \*SDL_GetThreadName(SDL_Thread* thread)
+* int SDL_SetThreadPriority(SDL_ThreadPriority priority)
+* SDL_TLSID SDL_TLSCreate(void)
+* void \*SDL_TLSGet(SDL_TLSID id)
+* int SDL_TLSSet(SDL_TLSID   id,const void \*value,void \*)
+* SDL_threadID SDL_ThreadID(void)
+* void SDL_WaitThread(SDL_Thread \*thread,int \*status)
+* int SDL_CondBroadcast(SDL_cond \*cond)
+* int SDL_CondSignal(SDL_cond \*cond)
+* int SDL_CondWait(SDL_cond \*cond,SDL_mutex \*mutex)
+* int SDL_CondWaitTimeout(SDL_cond \*cond,SDL_mutex \*mutex,Uint32 ms)
+* SDL_cond \*SDL_CreateCond(void)
+* SDL_mutex \*SDL_CreateMutex(void)
+* SDL_sem \*SDL_CreateSemaphore(Uint32 initial_value)
+* void SDL_DestroyCond(SDL_cond \*cond)
+* void SDL_DestroyMutex(SDL_mutex \*mutex)
+* void SDL_DestroySemaphore(SDL_sem \*sem)
+* int SDL_LockMutex(SDL_mutex \*mutex)
+* int SDL_SemPost(SDL_sem \*sem)
+* int SDL_SemTryWait(SDL_sem \*sem)
+* Uint32 SDL_SemValue(SDL_sem \*sem)
+* int SDL_SemWait(SDL_sem \*sem)
+* int SDL_SemWaitTimeout(SDL_sem \*sem,Uint32   ms)
+* int SDL_TryLockMutex(SDL_mutex \*mutex)
+* int SDL_UnlockMutex(SDL_mutex \*mutex)
+
+.. index:: 
+     single: RingLibSDL 関数リファレンス; 参考文献
+
+参考文献
+========
+
+* SDL 2.0 日本語リファレンスマニュアル : http://ja.osdn.net/projects/sdl2referencejp/
diff --git a/docs/ja-jp/source/ringlibuvfuncsdoc.txt b/docs/ja-jp/source/ringlibuvfuncsdoc.txt
new file mode 100644 (file)
index 0000000..7a6069f
--- /dev/null
@@ -0,0 +1,286 @@
+.. index:: 
+     single: RingLibuv 関数リファレンス; はじめに
+
+==========================
+RingLibuv 関数リファレンス
+==========================
+
+* int uv_loop_init(uv_loop_t* loop)
+* int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, int)
+* int uv_loop_close(uv_loop_t* loop)
+* uv_loop_t* uv_default_loop(void)
+* int uv_run(uv_loop_t* loop, uv_run_mode mode)
+* int uv_loop_alive(const uv_loop_t* loop)
+* void uv_stop(uv_loop_t* loop)
+* size_t uv_loop_size(void)
+* int uv_backend_fd(const uv_loop_t* loop)
+* int uv_backend_timeout(const uv_loop_t* loop)
+* uint64_t uv_now(const uv_loop_t* loop)
+* void uv_update_time(uv_loop_t* loop)
+* void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg)
+* void uv_walk_2(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg)
+* int uv_loop_fork(uv_loop_t* loop)
+* int uv_is_active(const uv_handle_t* handle)
+* int uv_is_closing(const uv_handle_t* handle)
+* void uv_close(uv_handle_t* handle, uv_close_cb close_cb)
+* void uv_close_2(uv_handle_t* handle, uv_close_cb close_cb)
+* void uv_ref(uv_handle_t* handle)
+* void uv_unref(uv_handle_t* handle)
+* int uv_has_ref(const uv_handle_t* handle)
+* size_t uv_handle_size(uv_handle_type type)
+* int uv_send_buffer_size(uv_handle_t* handle, int* value)
+* int uv_recv_buffer_size(uv_handle_t* handle, int* value)
+* int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd)
+* int uv_cancel(uv_req_t* req)
+* size_t uv_req_size(uv_req_type type)
+* int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle)
+* int uv_timer_start(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)
+* int uv_timer_start_2(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)
+* int uv_timer_stop(uv_timer_t* handle)
+* int uv_timer_again(uv_timer_t* handle)
+* void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat)
+* uint64_t uv_timer_get_repeat(const uv_timer_t* handle)
+* int uv_prepare_init(uv_loop_t* loop, uv_prepare_t* prepare)
+* int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb)
+* int uv_prepare_start_2(uv_prepare_t* prepare, uv_prepare_cb cb)
+* int uv_prepare_stop(uv_prepare_t* prepare)
+* int uv_check_init(uv_loop_t* loop, uv_check_t* check)
+* int uv_check_start(uv_check_t* check, uv_check_cb cb)
+* int uv_check_start_2(uv_check_t* check, uv_check_cb cb)
+* int uv_check_stop(uv_check_t* check)
+* int uv_idle_init(uv_loop_t* loop, uv_idle_t* idle)
+* int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb)
+* int uv_idle_start_2(uv_idle_t* idle, uv_idle_cb cb)
+* int uv_idle_stop(uv_idle_t* idle)
+* int uv_async_init(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb)
+* int uv_async_init_2(uv_loop_t* loop, uv_async_t* async, uv_async_cb async_cb)
+* int uv_async_send(uv_async_t* async)
+* int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd)
+* int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle, uv_os_sock_t socket)
+* int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb)
+* int uv_poll_start_2(uv_poll_t* handle, int events, uv_poll_cb cb)
+* int uv_poll_stop(uv_poll_t* poll)
+* int uv_signal_init(uv_loop_t* loop, uv_signal_t* signal)
+* int uv_signal_start(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_2(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_oneshot(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_start_oneshot_2(uv_signal_t* signal, uv_signal_cb cb, int signum)
+* int uv_signal_stop(uv_signal_t* signal)
+* void uv_disable_stdio_inheritance(void)
+* int uv_spawn(uv_loop_t* loop, uv_process_t* handle, const uv_process_options_t* options)
+* int uv_process_kill(uv_process_t* handle, int signum)
+* int uv_kill(int pid, int signum)
+* int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb)
+* int uv_shutdown_2(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb)
+* int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb)
+* int uv_listen_2(uv_stream_t* stream, int backlog, uv_connection_cb cb)
+* int uv_accept(uv_stream_t* server, uv_stream_t* client)
+* int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
+* int uv_read_start_2(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
+* int uv_read_stop(uv_stream_t*)
+* int uv_write(uv_write_t* req, uv_stream_t* handle, uv_buf_t \*bufs, unsigned int nbufs, uv_write_cb cb)
+* int uv_write_2(uv_write_t* req, uv_stream_t* handle, uv_buf_t \*bufs, unsigned int nbufs, uv_write_cb cb)
+* int uv_write2(uv_write_t* req, uv_stream_t* handle, uv_buf_t \*bufs, unsigned int nbufs, uv_stream_t* send_handle, uv_write_cb cb)
+* int uv_write2_2(uv_write_t* req, uv_stream_t* handle, uv_buf_t \*bufs, unsigned int nbufs, uv_stream_t* send_handle, uv_write_cb cb)
+* int uv_try_write(uv_stream_t* handle, uv_buf_t \*bufs, unsigned int nbufs)
+* int uv_is_readable(const uv_stream_t* handle)
+* int uv_is_writable(const uv_stream_t* handle)
+* int uv_stream_set_blocking(uv_stream_t* handle, int blocking)
+* int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle)
+* int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags)
+* int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock)
+* int uv_tcp_nodelay(uv_tcp_t* handle, int enable)
+* int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay)
+* int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable)
+* int uv_tcp_bind(uv_tcp_t \*handle,sockaddr \*addr,unsigned int flags)
+* int uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_tcp_getpeername(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, sockaddr \* addr, uv_connect_cb cb)
+* int uv_tcp_connect_2(uv_connect_t* req, uv_tcp_t* handle, sockaddr \* addr, uv_connect_cb cb)
+* int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc)
+* int uv_pipe_open(uv_pipe_t* handle, uv_file file)
+* int uv_pipe_bind(uv_pipe_t* handle, const char \* name)
+* void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, const char \* name, uv_connect_cb cb)
+* void uv_pipe_connect_2(uv_connect_t* req, uv_pipe_t* handle, const char \* name, uv_connect_cb cb)
+* int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* size)
+* int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* size)
+* void uv_pipe_pending_instances(uv_pipe_t* handle, int count)
+* int uv_pipe_pending_count(uv_pipe_t* handle)
+* uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle)
+* int uv_pipe_chmod(uv_pipe_t* handle, int flags)
+* int uv_tty_init(uv_loop_t* loop, uv_tty_t* handle, uv_file fd, int readable)
+* int uv_tty_set_mode(uv_tty_t* handle, uv_tty_mode_t mode)
+* int uv_tty_reset_mode(void)
+* int uv_tty_get_winsize(uv_tty_t* handle, int* width, int* height)
+* int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle)
+* int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned int flags)
+* int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock)
+* int uv_udp_bind(uv_udp_t* handle, sockaddr \* addr, unsigned int flags)
+* int uv_udp_getsockname(const uv_udp_t* handle, struct sockaddr* name, int* namelen)
+* int uv_udp_set_membership(uv_udp_t* handle, const char \* multicast_addr, const char \* interface_addr, uv_membership membership)
+* int uv_udp_set_multicast_loop(uv_udp_t* handle, int on)
+* int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl)
+* int uv_udp_set_multicast_interface(uv_udp_t* handle, const char \* interface_addr)
+* int uv_udp_set_broadcast(uv_udp_t* handle, int on)
+* int uv_udp_set_ttl(uv_udp_t* handle, int ttl)
+* int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t \*bufs, unsigned int nbufs, sockaddr \* addr, uv_udp_send_cb send_cb)
+* int uv_udp_send_2(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t \*bufs, unsigned int nbufs, sockaddr \* addr, uv_udp_send_cb send_cb)
+* int uv_udp_try_send(uv_udp_t* handle, uv_buf_t \*bufs, unsigned int nbufs, sockaddr \* addr)
+* int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb)
+* int uv_udp_recv_start_2(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb)
+* int uv_udp_recv_stop(uv_udp_t* handle)
+* int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle)
+* int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb, const char \* path, unsigned int flags)
+* int uv_fs_event_start_2(uv_fs_event_t* handle, uv_fs_event_cb cb, const char \* path, unsigned int flags)
+* int uv_fs_event_stop(uv_fs_event_t* handle)
+* int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* size)
+* int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle)
+* int uv_fs_poll_start(uv_fs_poll_t* handle, uv_fs_poll_cb poll_cb, const char \* path, unsigned int interval)
+* int uv_fs_poll_start_2(uv_fs_poll_t* handle, uv_fs_poll_cb poll_cb, const char \* path, unsigned int interval)
+* int uv_fs_poll_stop(uv_fs_poll_t* handle)
+* int uv_fs_poll_getpath(uv_fs_poll_t* handle, char* buffer, size_t* size)
+* void uv_fs_req_cleanup(uv_fs_t* req)
+* int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char \* path, int flags, int mode, uv_fs_cb cb)
+* int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t \*bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t \*bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char \* path, int mode, uv_fs_cb cb)
+* int uv_fs_mkdtemp(uv_loop_t* loop, uv_fs_t* req, const char \* tpl, uv_fs_cb cb)
+* int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char \* path, int flags, uv_fs_cb cb)
+* int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent)
+* int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, uv_fs_cb cb)
+* int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb)
+* int uv_fs_copyfile(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, int flags, uv_fs_cb cb)
+* int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb)
+* int uv_fs_access(uv_loop_t* loop, uv_fs_t* req, const char \* path, int mode, uv_fs_cb cb)
+* int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char \* path, int mode, uv_fs_cb cb)
+* int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb)
+* int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char \* path, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, uv_fs_cb cb)
+* int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, int flags, uv_fs_cb cb)
+* int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_close_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_open_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, int flags, int mode, uv_fs_cb cb)
+* int uv_fs_read_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t \*bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_unlink_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_write_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_buf_t \*bufs, unsigned int nbufs, int64_t offset, uv_fs_cb cb)
+* int uv_fs_mkdir_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, int mode, uv_fs_cb cb)
+* int uv_fs_mkdtemp_2(uv_loop_t* loop, uv_fs_t* req, const char \* tpl, uv_fs_cb cb)
+* int uv_fs_rmdir_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_scandir_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, int flags, uv_fs_cb cb)
+* int uv_fs_stat_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_fstat_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_lstat_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_rename_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, uv_fs_cb cb)
+* int uv_fs_fsync_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_fdatasync_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
+* int uv_fs_ftruncate_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb)
+* int uv_fs_copyfile_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, int flags, uv_fs_cb cb)
+* int uv_fs_sendfile_2(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb)
+* int uv_fs_access_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, int mode, uv_fs_cb cb)
+* int uv_fs_chmod_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, int mode, uv_fs_cb cb)
+* int uv_fs_fchmod_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb)
+* int uv_fs_utime_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_futime_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb)
+* int uv_fs_link_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, uv_fs_cb cb)
+* int uv_fs_symlink_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, const char \* new_path, int flags, uv_fs_cb cb)
+* int uv_fs_readlink_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_realpath_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_fs_cb cb)
+* int uv_fs_chown_2(uv_loop_t* loop, uv_fs_t* req, const char \* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_fs_fchown_2(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
+* int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
+* int uv_queue_work_2(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
+* int uv_getaddrinfo(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char \* node, const char \* service, const struct addrinfo* hints)
+* int uv_getaddrinfo_2(uv_loop_t* loop, uv_getaddrinfo_t* req, uv_getaddrinfo_cb getaddrinfo_cb, const char \* node, const char \* service, const struct addrinfo* hints)
+* void uv_freeaddrinfo(struct addrinfo* ai)
+* int uv_getnameinfo(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, sockaddr \* addr, int flags)
+* int uv_getnameinfo_2(uv_loop_t* loop, uv_getnameinfo_t* req, uv_getnameinfo_cb getnameinfo_cb, sockaddr \* addr, int flags)
+* int uv_dlopen(const char \* filename, uv_lib_t* lib)
+* void uv_dlclose(uv_lib_t* lib)
+* int uv_dlsym(uv_lib_t* lib, const char \* name, void** ptr)
+* const char \* uv_dlerror(const uv_lib_t* lib)
+* int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg)
+* int uv_thread_create_2(uv_thread_t* tid, uv_thread_cb entry, void* arg)
+* uv_thread_t uv_thread_self(void)
+* int uv_thread_join(uv_thread_t \*tid)
+* int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2)
+* int uv_key_create(uv_key_t* key)
+* void uv_key_delete(uv_key_t* key)
+* void* uv_key_get(uv_key_t* key)
+* void uv_key_set(uv_key_t* key, void* value)
+* int uv_mutex_init(uv_mutex_t* handle)
+* int uv_mutex_init_recursive(uv_mutex_t* handle)
+* void uv_mutex_destroy(uv_mutex_t* handle)
+* void uv_mutex_lock(uv_mutex_t* handle)
+* int uv_mutex_trylock(uv_mutex_t* handle)
+* void uv_mutex_unlock(uv_mutex_t* handle)
+* int uv_rwlock_init(uv_rwlock_t* rwlock)
+* void uv_rwlock_destroy(uv_rwlock_t* rwlock)
+* void uv_rwlock_rdlock(uv_rwlock_t* rwlock)
+* int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_rdunlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_wrlock(uv_rwlock_t* rwlock)
+* int uv_rwlock_trywrlock(uv_rwlock_t* rwlock)
+* void uv_rwlock_wrunlock(uv_rwlock_t* rwlock)
+* int uv_sem_init(uv_sem_t* sem, unsigned int value)
+* void uv_sem_destroy(uv_sem_t* sem)
+* void uv_sem_post(uv_sem_t* sem)
+* void uv_sem_wait(uv_sem_t* sem)
+* int uv_sem_trywait(uv_sem_t* sem)
+* int uv_cond_init(uv_cond_t* cond)
+* void uv_cond_destroy(uv_cond_t* cond)
+* void uv_cond_signal(uv_cond_t* cond)
+* void uv_cond_broadcast(uv_cond_t* cond)
+* void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex)
+* int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeout)
+* int uv_barrier_init(uv_barrier_t* barrier, unsigned int count)
+* void uv_barrier_destroy(uv_barrier_t* barrier)
+* int uv_barrier_wait(uv_barrier_t* barrier)
+* uv_handle_type uv_guess_handle(uv_file file)
+* int uv_replace_allocator(uv_malloc_func malloc_func, uv_realloc_func realloc_func, uv_calloc_func calloc_func, uv_free_func free_func)
+* uv_buf_t uv_buf_init(char* base, unsigned int len)
+* char** uv_setup_args(int argc, char** argv)
+* int uv_get_process_title(char* buffer, size_t size)
+* int uv_set_process_title(const char \* title)
+* int uv_resident_set_memory(size_t* rss)
+* int uv_uptime(double* uptime)
+* int uv_getrusage(uv_rusage_t* rusage)
+* uv_pid_t uv_os_getpid(void)
+* uv_pid_t uv_os_getppid(void)
+* int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count)
+* void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count)
+* int uv_interface_addresses(uv_interface_address_t** addresses, int* count)
+* void uv_free_interface_addresses(uv_interface_address_t* addresses, int count)
+* int uv_ip6_addr(const char \* ip, int port, sockaddr_in6* addr)
+* int uv_ip4_name(sockaddr_in* src, char* dst, size_t size)
+* int uv_ip6_name(sockaddr_in6* src, char* dst, size_t size)
+* int uv_inet_ntop(int af, const void* src, char* dst, size_t size)
+* int uv_inet_pton(int af, const char \* src, void* dst)
+* int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size)
+* int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size)
+* int uv_exepath(char* buffer, size_t* size)
+* int uv_cwd(char* buffer, size_t* size)
+* int uv_chdir(const char \* dir)
+* int uv_os_homedir(char* buffer, size_t* size)
+* int uv_os_tmpdir(char* buffer, size_t* size)
+* int uv_os_get_passwd(uv_passwd_t* pwd)
+* void uv_os_free_passwd(uv_passwd_t* pwd)
+* uint64_t uv_get_total_memory(void)
+* uint64_t uv_hrtime(void)
+* void uv_print_all_handles(uv_loop_t* loop, FILE* stream)
+* void uv_print_active_handles(uv_loop_t* loop, FILE* stream)
+* int uv_os_getenv(const char \* name, char* buffer, size_t* size)
+* int uv_os_setenv(const char \* name, const char \* value)
+* int uv_os_unsetenv(const char \* name)
+* int uv_os_gethostname(char* buffer, size_t* size)
diff --git a/docs/ja-jp/source/ringlibzipfuncsdoc.txt b/docs/ja-jp/source/ringlibzipfuncsdoc.txt
new file mode 100644 (file)
index 0000000..f04fb4d
--- /dev/null
@@ -0,0 +1,19 @@
+.. index:: 
+     single: RingLibZip 関数リファレンス; はじめに
+
+===========================
+RingLibZip 関数リファレンス
+===========================
+
+* ZIP_T \*zip_openfile(const char \*, const char \*)
+* int zip_entry_open(ZIP_T*, const char \*)
+* int zip_entry_write(ZIP_T*, const char \*,int)
+* int zip_entry_fwrite(ZIP_T*, const char \*)
+* int zip_entry_read(ZIP_T*, void \*, size_t \*)
+* int zip_entry_fread(ZIP_T*, const char \*cFile)
+* int zip_entry_close(ZIP_T*)
+* void zip_extract_file(const char \*cZIPFile,const char \*cFile)
+* void zip_extract_allfiles(const char \*cFile, const char \*cFolder)
+* void zip_close(ZIP_T*)
+* int zip_filescount(ZIP_T \*)
+* const char \*zip_getfilenamebyindex(ZIP_T \*pZip,int index)
diff --git a/docs/ja-jp/source/ringmurmurhashfuncsdoc.txt b/docs/ja-jp/source/ringmurmurhashfuncsdoc.txt
new file mode 100644 (file)
index 0000000..484ff11
--- /dev/null
@@ -0,0 +1,75 @@
+.. index:: 
+     single: RingMurmurHash 関数リファレンス; はじめに
+
+===============================
+RingMurmurHash 関数リファレンス
+===============================
+
+    "MurmurHash は、一般的なハッシュベースの探索に適した平文ハッシュ関数です。
+    2008 年に Austin Appleby (オースティン・アップルビー) により開発されました。テストスイートの 'SMHasher' と併せて GitHub にて公開されています。 
+    MurmurHash には様々な亜種 (すべてパブリック・ドメイン) が存在または公開されています。
+    名前の由来はループ内部で使用されている二種類の基本操作である乗算 (MUltiply) と 回転 (Rotate) からきています。"
+
+拡張機能 Murmurhash は MurmurHash ライブラリの完全な実装を行うために記述された拡張機能です。
+
+開発者: ハッサン・アーメド
+
+.. index:: 
+     pair: RingMurmurHash 関数リファレンス; MurmurHash1 関数
+
+MurmurHash1 関数
+=====================
+
+uint32_t murmurhash1(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash1_aligned(string key, int seed, [bool return_type]);
+
+
+.. index:: 
+     pair: RingMurmurHash 関数リファレンス; MurmurHash2 関数
+
+MurmurHash2 関数
+=====================
+
+uint32_t murmurhash2(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash2a(string key, int seed, [bool return_type]);
+
+uint64_t murmurhash64a(string key, int seed, [bool return_type]);
+
+uint64_t murmurhash64b(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash_neutral2(string key, int seed, [bool return_type]);
+
+uint32_t murmurhash_aligned2(string key, int seed, [bool return_type]);
+
+.. index:: 
+     pair: RingMurmurHash 関数リファレンス; MurmurHash3 関数
+
+MurmurHash3 関数
+=====================
+
+uint32_t murmurhash3_x86_32(string key, int seed, [bool return_type]);
+
+list murmurhash3_x86_128(string key, int seed, [bool return_type]);
+
+list murmurhash3_x64_128(string key, int seed, [bool return_type]);
+
+第三仮引数はオプション扱いであり、返値の型を設定するためのものです。この仮引数はブール値 [ true, false ] を受け取ります。 true ならば16進数値を返し、 false ならば整数値を返します。
+
+.. index:: 
+     pair: RingMurmurHash 関数リファレンス; 用例
+
+用例
+=======
+
+
+.. code-block:: ring
+
+       load "murmurhashlib.ring"
+
+       key = "Ring Language"
+
+       see murmurhash3_x86_32(key, 0, 0) + nl // 実行結果: 1894444853
+       see murmurhash3_x86_32(key, 0, 1) + nl // 実行結果: 70eaef35
+
diff --git a/docs/ja-jp/source/ringnatural.png b/docs/ja-jp/source/ringnatural.png
new file mode 100644 (file)
index 0000000..b6d9738
Binary files /dev/null and b/docs/ja-jp/source/ringnatural.png differ
diff --git a/docs/ja-jp/source/ringnotepad.txt b/docs/ja-jp/source/ringnotepad.txt
new file mode 100644 (file)
index 0000000..49ee20b
--- /dev/null
@@ -0,0 +1,339 @@
+.. index:: 
+       single: Ring ノートパッド; はじめに
+
+=======================
+Ring ノートパッドの用法
+=======================
+
+この章では Ring ノートパッドの用法、および Ring プログラムの作成と実行方法を学びます。
+
+Ring ノートパッドは Ring で作成された Ring 用の簡易統合開発環境アプリケーションです。
+
+.. index:: 
+       pair: Ring ノートパッド; Ring ノートパッド - メインウィンドウ
+
+Ring ノートパッド - メインウィンドウ
+====================================
+
+Ring ノートパッドの実行後に着脱可能なウィンドウが表示されます。
+
+.. image:: urn_shot1.png
+       :alt: Ring ノートパッドの用法
+
+
+ウィンドウの機能と用途:
+
+.. csv-table::
+       :header: "名称", "説明"
+       :widths:       20,     80
+
+       "プロジェクトファイル",               "Ring ファイル (\*.ring) を選択して開くことができます。"
+       "ソースコード",                           "ソースコードを記述する場所です。"
+       "フォームデザイナー",          "フォームデザイナーでは GUI アプリケーションのフォームを作成します。"
+       "ウェブブラウザ",                        "取扱説明書を読む、またはウェブサイトを開くことができます。"
+       "実行結果",                                 "標準出力への表示を行うプログラムを実行すると結果が出力されます。"
+       "関数",                                               "現在のソースにおける関数のリストです。"
+       "クラス",                                    "現在のソースにおけるクラスのリストです。"
+
+.. index:: 
+       pair: Ring ノートパッド; Ring ノートパッド - コンソールアプリケーションの作成と実行
+
+コンソールアプリケーションの作成と実行
+======================================
+
+ソースコードを入力します。
+
+.. code-block:: ring
+
+       See "Hello, World!"
+
+この画像の通りにします。
+
+.. image:: urn_shot2.png
+       :alt: Ring ノートパッドの用法
+
+ツールバーの保存ボタンをクリックします (または CTRL+S を押します)。
+
+.. image:: urn_shot3.png
+       :alt: Ring ノートパッドの用法
+
+ソースコード名と保存場所を指定します。
+
+例えば、このように入力します : hello
+
+新しいソースコードファイルを作成します : hello.ring
+
+.. image:: urn_shot4.png
+       :alt: Ring ノートパッドの用法
+
+プログラムを実行するには、ツールバーの“デバッグ - 実行後に待機”ボタンをクリックします。
+
+.. image:: urn_shot5.png
+       :alt: Ring ノートパッドの用法
+
+このスクリーンショットでは、実行中のアプリケーションを表示しています。
+
+Ring ノートパッドへ戻って作業を続行するには Enter キーを押します。
+
+.. image:: urn_shot6.png
+       :alt: Ring ノートパッドの用法
+
+.. index:: 
+       pair: Ring ノートパッド; Ring ノートパッド - GUI / モバイル・アプリケーションの作成と実行
+
+GUI / モバイル・アプリケーションの作成と実行
+============================================
+
+Ring による GUI アプリケーションの作成方法は“RingQt を使用したデスクトップとモバイルの開発”の章を参照してください。
+
+ソースコード:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       New qApp {
+               new qWidget() {
+                       resize(400,400)
+                       setWindowTitle("Hello, World!")
+                       show()
+               }
+               exec()
+       }
+
+Ring ノートパッドには、コンソールウィンドウの表示を行わずに GUI アプリケーションを実行するための特別なボタンがあります。
+
+.. image:: urn_shot7.png
+       :alt: Ring ノートパッドの用法
+
+このスクリーンショットでは、実行中のアプリケーションを表示しています。
+
+.. image:: urn_shot8.png
+       :alt: Ring ノートパッドの用法
+
+       
+.. index:: 
+       pair: Ring ノートパッド; Ring ノートパッド - ウェブアプリケーションの作成と実行
+
+ウェブアプリケーションの作成と実行
+==================================
+
+ウェブサーバーでの Ring 対応方法、そして Ring でウェブアプリケーションを作成する方法については “ウェブ開発 (CGI ライブラリ)” の章を参照してください。
+
+.. note:: この用例を実行するには、ウェブサーバーで Ring に対応する必要があります。
+
+ソースコード:
+
+.. code-block:: ring
+
+       #!ring.exe -cgi
+
+       load "weblib.ring"
+
+       Import System.Web
+
+       new page {
+
+               text("Hello, World!")
+
+       }
+
+
+Ring ノートパッド内蔵のブラウザ、または外部ウェブブラウザでアプリケーションを実行できます。
+
+.. image:: urn_shot9.png
+       :alt: Ring ノートパッドの用法
+
+Ring には Apache ウェブサーバー (Windows 版) が添付されています!
+
+設定は一切不要で指定フォルダからウェブアプリケーションを実行できます。
+
+.. image:: runwebapp1.png
+       :alt: Ring ノートパッド - ウェブアプリケーションの実行 - スクリーンショット 1
+
+.. index:: 
+       pair: Ring ノートパッド; Ring ノートパッド - デスクトップとモバイルゲームの作成と実行
+
+デスクトップとモバイルゲームの作成と実行
+========================================
+
+Ring で 2D ゲームを作成する方法は“デモプロジェクト - 2D ゲームエンジン”の章を参照してください。
+
+ソースコード:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"                           
+
+       func main                                        
+
+               oGame = New Game                         
+               {
+                       title = "My First Game"
+                       sprite
+                       {
+                               type = GE_TYPE_PLAYER            
+                               x=400 y=400 width=100 height=100
+                               file = "images/player.png"      
+                               transparent = true                      
+                               Animate=false 
+                               Move=true        
+                               Scaled=true
+                       }
+               }
+
+
+アプリケーションは GUI アプリケーションとして実行できます。
+
+.. image:: urn_shot10.png
+       :alt: Ring ノートパッドの用法
+
+
+.. index:: 
+       pair: Ring ノートパッド; プロジェクトのメインファイル
+
+プロジェクトのメインファイル
+============================
+
+メインファイルツールバーの考えは、プロジェクトに複数のソースコードのファイルがある場合にプロジェクトのメインファイルを決定することです。
+
+この機能を使うとプロジェクトでほかのファイルを開いているときに、プロジェクトを実行するためにメインファイルを切り替えることなくプロジェクトを実行できます。
+
+この機能を使うには、プロジェクトのメインファイルを開きます。
+
+現在のソースコードファイルをメインファイルとして設定するには Ctrl+Shift+M を押してください。
+
+プロジェクトで別のソースコードファイルを開いて修正します。
+
+プロジェクト (メインファイル) を実行したいときは Ctrl+Shift+F5 (GUI) または Ctrl+Shift+D (コンソール) を押してください。
+
+スクリーンショット:
+
+.. image:: urn_shot11.png
+       :alt: Ring ノートパッド
+
+.. image:: urn_shot12.png
+       :alt: Ring ノートパッド
+
+
+.. index:: 
+       pair: Ring ノートパッド; ファイルメニュー
+
+ファイルメニュー
+================
+
+このメニューからソースコードの新規作成、開く、保存ができます。
+
+このメニューには“PDF へ出力”もあります。
+
+.. image:: rnotemenu_file.png
+       :alt: Ring ノートパッド - ファイルメニュー
+
+
+.. index:: 
+       pair: Ring ノートパッド; 編集メニュー
+
+編集メニュー
+=============
+
+編集メニューからテキストの切り取り、コピーと貼り付けます。
+
+フォントと配色の変更もできます。
+
+指定行へ移動、または検索と置換ウィンドウを使うことでテキストの検索と置換ができます。
+
+さらに、タブ幅も設定できます (スペースの文字数)
+
+Ring 1.8 からファイルの検索オプションがあります。
+
+Ring 1.11 からテキストの挿入、小文字へ変換、大文字へ変換、および単語の一文字目を大文字へ変換のオプションがあります。
+
+
+.. image:: rnotemenu_edit.png
+       :alt: Ring ノートパッド - 編集メニュー
+
+.. index:: 
+       pair: Ring ノートパッド; 表示メニュー
+
+表示メニュー
+============
+
+このメニューから着脱可能なウィンドウの表示、または非表示にできます。
+
+また、 Ring ノートパッドのスタイルを変更できます。
+
+通常のスタイルは「フュージョン : 白」と「フュージョン : 黒」です。
+
+.. image:: rnotemenu_view.png
+       :alt: Ring ノートパッド - 表示メニュー
+
+さらにコンテキストにより着脱可能なウィンドウのグループを表示、または非表示にできます。
+
+.. image:: rnotemenu_mode.png
+       :alt: Ring ノートパッド - 表示メニュー - モード の設定
+
+
+.. index:: 
+       pair: Ring ノートパッド; プログラムメニュー
+
+プログラムメニュー
+==================
+
+このメニューからプログラムを実行します。
+
+また、メインファイルをプロジェクトに設定できます。
+
+.. image:: rnotemenu_program.png
+       :alt: Ring ノートパッド - プログラムメニュー
+
+.. index:: 
+       pair: Ring ノートパッド; ブラウザメニュー
+
+ブラウザメニュー
+================
+
+このメニューからウェブサイトのリンクをブラウザで開きます。
+
+.. image:: rnotemenu_browser.png
+       :alt: Ring ノートパッド - ブラウザメニュー
+
+
+.. index:: 
+       pair: Ring ノートパッド; ツールメニュー
+
+ツールメニュー
+==============
+
+このメニューからフォームデザイナーを別のウィンドウで実行します。
+
+また REPL (Read-Eval-Print-Loop : 読み取り、評価、出力、繰り返し) を実行できます。
+
+.. image:: rnotemenu_tools.png
+       :alt: Ring ノートパッド - ツールメニュー
+
+
+.. index:: 
+       pair: Ring ノートパッド; 配布メニュー
+
+配布メニュー
+============
+
+このメニューからアプリケーションの実行可能ファイルをビルドします。
+
+またアプリケーションの配布準備を行うこともできます。
+
+.. image:: rnotedistributemenu.png
+       :alt: Ring ノートパッド - 配布メニュー
+
+
+.. index:: 
+       pair: Ring ノートパッド; ヘルプメニュー
+
+ヘルプメニュー
+==============
+
+このメニューからヘルプファイルを閲覧できます。 (CHM と PDF 形式)
+
+.. image:: rnotemenu_help.png
+       :alt: Ring ノートパッド - ヘルプメニュー
+
diff --git a/docs/ja-jp/source/ringnotepad_screenshot.png b/docs/ja-jp/source/ringnotepad_screenshot.png
new file mode 100644 (file)
index 0000000..a204e82
Binary files /dev/null and b/docs/ja-jp/source/ringnotepad_screenshot.png differ
diff --git a/docs/ja-jp/source/ringonmanjarolinux.png b/docs/ja-jp/source/ringonmanjarolinux.png
new file mode 100644 (file)
index 0000000..844fcba
Binary files /dev/null and b/docs/ja-jp/source/ringonmanjarolinux.png differ
diff --git a/docs/ja-jp/source/ringopengl11funcsdoc.txt b/docs/ja-jp/source/ringopengl11funcsdoc.txt
new file mode 100644 (file)
index 0000000..f50ab9a
--- /dev/null
@@ -0,0 +1,877 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.1) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 1.1) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint \*textures, GLboolean \*residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte \*bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void \*lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble \*equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte \*v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble \*v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat \*v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint \*v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort \*v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte \*v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint \*v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort \*v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte \*v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble \*v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat \*v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint \*v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort \*v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte \*v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint \*v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort \*v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint \*textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void \*indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void \*pointer)
+* void glEdgeFlagv(const GLboolean \*flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble \*u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat \*u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble \*u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat \*u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat \*buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat \*params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint \*params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetClipPlane(GLenum plane, GLdouble \*equation)
+* void glGetDoublev(GLenum pname, GLdouble \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat \*params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint \*params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble \*v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat \*v)
+* void glGetMapiv(GLenum target, GLenum query, GLint \*v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat \*params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint \*params)
+* void glGetPixelMapfv(GLenum map, GLfloat \*values)
+* void glGetPixelMapuiv(GLenum map, GLuint \*values)
+* void glGetPixelMapusv(GLenum map, GLushort \*values)
+* void glGetPointerv(GLenum pname, void* \*params)
+* void glGetPolygonStipple(GLubyte \*mask)
+* GLubyte \* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble \*params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat \*params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint \*params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void \*pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat \*params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint \*params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble \*c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat \*c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint \*c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort \*c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte \*c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void \*pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat \*params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint \*params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat \*params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint \*params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \*m)
+* void glLoadMatrixf(const GLfloat \*m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble \*points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat \*points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble \*points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat \*points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat \*params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint \*params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble \*m)
+* void glMultMatrixf(const GLfloat \*m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte \*v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble \*v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat \*v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint \*v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort \*v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat \*values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint \*values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort \*values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte \*mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint \*textures, const GLclampf \*priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble \*v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat \*v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint \*v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort \*v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble \*v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat \*v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint \*v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort \*v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble \*v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat \*v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint \*v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort \*v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void \*pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble \*v1, const GLdouble \*v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat \*v1, const GLfloat \*v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint \*v1, const GLint \*v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort \*v1, const GLshort \*v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint \*buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble \*v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat \*v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint \*v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort \*v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble \*v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat \*v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint \*v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort \*v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble \*v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat \*v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint \*v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort \*v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble \*v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat \*v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint \*v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort \*v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble \*params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat \*params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint \*params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void \*pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble \*v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat \*v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint \*v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort \*v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble \*v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat \*v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint \*v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort \*v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble \*v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat \*v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint \*v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort \*v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/ja-jp/source/ringopengl12funcsdoc.txt b/docs/ja-jp/source/ringopengl12funcsdoc.txt
new file mode 100644 (file)
index 0000000..8803772
--- /dev/null
@@ -0,0 +1,917 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.2) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 1.2) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint \*textures, GLboolean \*residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte \*bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void \*lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble \*equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte \*v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble \*v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat \*v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint \*v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort \*v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte \*v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint \*v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort \*v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte \*v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble \*v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat \*v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint \*v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort \*v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte \*v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint \*v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort \*v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint \*textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void \*indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void \*pointer)
+* void glEdgeFlagv(const GLboolean \*flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble \*u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat \*u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble \*u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat \*u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat \*buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat \*params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint \*params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetClipPlane(GLenum plane, GLdouble \*equation)
+* void glGetDoublev(GLenum pname, GLdouble \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat \*params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint \*params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble \*v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat \*v)
+* void glGetMapiv(GLenum target, GLenum query, GLint \*v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat \*params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint \*params)
+* void glGetPixelMapfv(GLenum map, GLfloat \*values)
+* void glGetPixelMapuiv(GLenum map, GLuint \*values)
+* void glGetPixelMapusv(GLenum map, GLushort \*values)
+* void glGetPointerv(GLenum pname, void* \*params)
+* void glGetPolygonStipple(GLubyte \*mask)
+* GLubyte \* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble \*params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat \*params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint \*params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void \*pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat \*params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint \*params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble \*c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat \*c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint \*c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort \*c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte \*c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void \*pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat \*params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint \*params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat \*params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint \*params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \*m)
+* void glLoadMatrixf(const GLfloat \*m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble \*points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat \*points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble \*points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat \*points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat \*params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint \*params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble \*m)
+* void glMultMatrixf(const GLfloat \*m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte \*v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble \*v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat \*v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint \*v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort \*v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat \*values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint \*values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort \*values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte \*mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint \*textures, const GLclampf \*priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble \*v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat \*v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint \*v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort \*v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble \*v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat \*v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint \*v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort \*v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble \*v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat \*v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint \*v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort \*v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void \*pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble \*v1, const GLdouble \*v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat \*v1, const GLfloat \*v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint \*v1, const GLint \*v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort \*v1, const GLshort \*v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint \*buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble \*v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat \*v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint \*v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort \*v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble \*v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat \*v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint \*v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort \*v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble \*v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat \*v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint \*v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort \*v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble \*v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat \*v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint \*v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort \*v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble \*params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat \*params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint \*params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void \*pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble \*v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat \*v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint \*v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort \*v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble \*v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat \*v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint \*v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort \*v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble \*v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat \*v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint \*v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort \*v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/ja-jp/source/ringopengl13funcsdoc.txt b/docs/ja-jp/source/ringopengl13funcsdoc.txt
new file mode 100644 (file)
index 0000000..008d753
--- /dev/null
@@ -0,0 +1,1013 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.3) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 1.3) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint \*textures, GLboolean \*residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte \*bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void \*lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble \*equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte \*v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble \*v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat \*v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint \*v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort \*v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte \*v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint \*v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort \*v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte \*v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble \*v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat \*v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint \*v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort \*v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte \*v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint \*v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort \*v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint \*textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void \*indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void \*pointer)
+* void glEdgeFlagv(const GLboolean \*flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble \*u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat \*u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble \*u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat \*u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat \*buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat \*params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint \*params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetClipPlane(GLenum plane, GLdouble \*equation)
+* void glGetDoublev(GLenum pname, GLdouble \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat \*params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint \*params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble \*v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat \*v)
+* void glGetMapiv(GLenum target, GLenum query, GLint \*v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat \*params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint \*params)
+* void glGetPixelMapfv(GLenum map, GLfloat \*values)
+* void glGetPixelMapuiv(GLenum map, GLuint \*values)
+* void glGetPixelMapusv(GLenum map, GLushort \*values)
+* void glGetPointerv(GLenum pname, void* \*params)
+* void glGetPolygonStipple(GLubyte \*mask)
+* GLubyte \* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble \*params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat \*params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint \*params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void \*pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat \*params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint \*params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble \*c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat \*c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint \*c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort \*c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte \*c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void \*pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat \*params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint \*params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat \*params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint \*params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \*m)
+* void glLoadMatrixf(const GLfloat \*m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble \*points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat \*points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble \*points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat \*points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat \*params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint \*params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble \*m)
+* void glMultMatrixf(const GLfloat \*m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte \*v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble \*v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat \*v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint \*v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort \*v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat \*values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint \*values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort \*values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte \*mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint \*textures, const GLclampf \*priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble \*v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat \*v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint \*v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort \*v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble \*v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat \*v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint \*v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort \*v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble \*v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat \*v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint \*v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort \*v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void \*pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble \*v1, const GLdouble \*v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat \*v1, const GLfloat \*v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint \*v1, const GLint \*v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort \*v1, const GLshort \*v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint \*buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble \*v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat \*v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint \*v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort \*v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble \*v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat \*v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint \*v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort \*v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble \*v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat \*v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint \*v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort \*v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble \*v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat \*v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint \*v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort \*v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble \*params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat \*params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint \*params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void \*pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble \*v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat \*v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint \*v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort \*v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble \*v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat \*v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint \*v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort \*v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble \*v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat \*v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint \*v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort \*v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/ja-jp/source/ringopengl14funcsdoc.txt b/docs/ja-jp/source/ringopengl14funcsdoc.txt
new file mode 100644 (file)
index 0000000..e3ecc4c
--- /dev/null
@@ -0,0 +1,1052 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.4) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 1.4) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint \*textures, GLboolean \*residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte \*bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void \*lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble \*equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte \*v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble \*v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat \*v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint \*v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort \*v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte \*v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint \*v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort \*v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte \*v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble \*v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat \*v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint \*v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort \*v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte \*v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint \*v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort \*v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint \*textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void \*indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void \*pointer)
+* void glEdgeFlagv(const GLboolean \*flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble \*u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat \*u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble \*u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat \*u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat \*buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat \*params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint \*params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetClipPlane(GLenum plane, GLdouble \*equation)
+* void glGetDoublev(GLenum pname, GLdouble \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat \*params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint \*params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble \*v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat \*v)
+* void glGetMapiv(GLenum target, GLenum query, GLint \*v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat \*params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint \*params)
+* void glGetPixelMapfv(GLenum map, GLfloat \*values)
+* void glGetPixelMapuiv(GLenum map, GLuint \*values)
+* void glGetPixelMapusv(GLenum map, GLushort \*values)
+* void glGetPointerv(GLenum pname, void* \*params)
+* void glGetPolygonStipple(GLubyte \*mask)
+* GLubyte \* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble \*params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat \*params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint \*params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void \*pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat \*params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint \*params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble \*c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat \*c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint \*c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort \*c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte \*c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void \*pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat \*params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint \*params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat \*params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint \*params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \*m)
+* void glLoadMatrixf(const GLfloat \*m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble \*points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat \*points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble \*points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat \*points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat \*params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint \*params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble \*m)
+* void glMultMatrixf(const GLfloat \*m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte \*v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble \*v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat \*v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint \*v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort \*v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat \*values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint \*values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort \*values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte \*mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint \*textures, const GLclampf \*priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble \*v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat \*v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint \*v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort \*v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble \*v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat \*v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint \*v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort \*v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble \*v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat \*v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint \*v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort \*v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void \*pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble \*v1, const GLdouble \*v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat \*v1, const GLfloat \*v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint \*v1, const GLint \*v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort \*v1, const GLshort \*v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint \*buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble \*v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat \*v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint \*v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort \*v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble \*v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat \*v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint \*v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort \*v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble \*v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat \*v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint \*v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort \*v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble \*v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat \*v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint \*v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort \*v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble \*params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat \*params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint \*params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void \*pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble \*v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat \*v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint \*v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort \*v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble \*v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat \*v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint \*v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort \*v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble \*v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat \*v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint \*v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort \*v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/ja-jp/source/ringopengl15funcsdoc.txt b/docs/ja-jp/source/ringopengl15funcsdoc.txt
new file mode 100644 (file)
index 0000000..5849eed
--- /dev/null
@@ -0,0 +1,1102 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 1.5) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 1.5) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint \*textures, GLboolean \*residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte \*bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void \*lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble \*equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte \*v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble \*v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat \*v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint \*v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort \*v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte \*v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint \*v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort \*v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte \*v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble \*v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat \*v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint \*v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort \*v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte \*v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint \*v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort \*v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint \*textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void \*indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void \*pointer)
+* void glEdgeFlagv(const GLboolean \*flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble \*u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat \*u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble \*u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat \*u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat \*buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat \*params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint \*params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetClipPlane(GLenum plane, GLdouble \*equation)
+* void glGetDoublev(GLenum pname, GLdouble \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat \*params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint \*params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble \*v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat \*v)
+* void glGetMapiv(GLenum target, GLenum query, GLint \*v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat \*params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint \*params)
+* void glGetPixelMapfv(GLenum map, GLfloat \*values)
+* void glGetPixelMapuiv(GLenum map, GLuint \*values)
+* void glGetPixelMapusv(GLenum map, GLushort \*values)
+* void glGetPointerv(GLenum pname, void* \*params)
+* void glGetPolygonStipple(GLubyte \*mask)
+* GLubyte \* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble \*params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat \*params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint \*params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void \*pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat \*params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint \*params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble \*c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat \*c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint \*c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort \*c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte \*c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void \*pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat \*params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint \*params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat \*params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint \*params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \*m)
+* void glLoadMatrixf(const GLfloat \*m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble \*points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat \*points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble \*points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat \*points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat \*params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint \*params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble \*m)
+* void glMultMatrixf(const GLfloat \*m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte \*v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble \*v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat \*v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint \*v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort \*v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat \*values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint \*values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort \*values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte \*mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint \*textures, const GLclampf \*priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble \*v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat \*v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint \*v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort \*v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble \*v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat \*v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint \*v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort \*v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble \*v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat \*v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint \*v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort \*v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void \*pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble \*v1, const GLdouble \*v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat \*v1, const GLfloat \*v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint \*v1, const GLint \*v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort \*v1, const GLshort \*v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint \*buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble \*v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat \*v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint \*v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort \*v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble \*v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat \*v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint \*v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort \*v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble \*v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat \*v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint \*v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort \*v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble \*v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat \*v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint \*v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort \*v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble \*params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat \*params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint \*params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void \*pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble \*v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat \*v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint \*v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort \*v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble \*v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat \*v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint \*v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort \*v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble \*v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat \*v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint \*v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort \*v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/ja-jp/source/ringopengl20funcsdoc.txt b/docs/ja-jp/source/ringopengl20funcsdoc.txt
new file mode 100644 (file)
index 0000000..97a6bfd
--- /dev/null
@@ -0,0 +1,1186 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 2.0) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 2.0) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* void glAccum(GLenum op, GLfloat value)
+* void glAlphaFunc(GLenum func, GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n, const GLuint \*textures, GLboolean \*residences)
+* void glArrayElement(GLint i)
+* void glBegin(GLenum mode)
+* void glBindTexture(GLenum target, GLuint texture)
+* void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte \*bitmap)
+* void glBlendFunc(GLenum sfactor, GLenum dfactor)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n, GLenum type, const void \*lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClipPlane(GLenum plane, const GLdouble \*equation)
+* void glColor3b(GLbyte red, GLbyte green, GLbyte blue)
+* void glColor3bv(const GLbyte \*v)
+* void glColor3d(GLdouble red, GLdouble green, GLdouble blue)
+* void glColor3dv(const GLdouble \*v)
+* void glColor3f(GLfloat red, GLfloat green, GLfloat blue)
+* void glColor3fv(const GLfloat \*v)
+* void glColor3i(GLint red, GLint green, GLint blue)
+* void glColor3iv(const GLint \*v)
+* void glColor3s(GLshort red, GLshort green, GLshort blue)
+* void glColor3sv(const GLshort \*v)
+* void glColor3ub(GLubyte red, GLubyte green, GLubyte blue)
+* void glColor3ubv(const GLubyte \*v)
+* void glColor3ui(GLuint red, GLuint green, GLuint blue)
+* void glColor3uiv(const GLuint \*v)
+* void glColor3us(GLushort red, GLushort green, GLushort blue)
+* void glColor3usv(const GLushort \*v)
+* void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha)
+* void glColor4bv(const GLbyte \*v)
+* void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
+* void glColor4dv(const GLdouble \*v)
+* void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+* void glColor4fv(const GLfloat \*v)
+* void glColor4i(GLint red, GLint green, GLint blue, GLint alpha)
+* void glColor4iv(const GLint \*v)
+* void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha)
+* void glColor4sv(const GLshort \*v)
+* void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+* void glColor4ubv(const GLubyte \*v)
+* void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha)
+* void glColor4uiv(const GLuint \*v)
+* void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha)
+* void glColor4usv(const GLushort \*v)
+* void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+* void glColorMaterial(GLenum face, GLenum mode)
+* void glColorPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
+* void glCopyTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border)
+* void glCopyTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+* void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width)
+* void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+* void glCullFace(GLenum mode)
+* void glDeleteLists(GLuint list, GLsizei range)
+* void glDeleteTextures(GLsizei n, const GLuint \*textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd zNear, GLclampd zFar)
+* void glDisable(GLenum cap)
+* void glDisableClientState(GLenum array)
+* void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void \*indices)
+* void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride, const void \*pointer)
+* void glEdgeFlagv(const GLboolean \*flag)
+* void glEnable(GLenum cap)
+* void glEnableClientState(GLenum array)
+* void glEnd(void)
+* void glEndList(void)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord1dv(const GLdouble \*u)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1fv(const GLfloat \*u)
+* void glEvalCoord2d(GLdouble u, GLdouble v)
+* void glEvalCoord2dv(const GLdouble \*u)
+* void glEvalCoord2f(GLfloat u, GLfloat v)
+* void glEvalCoord2fv(const GLfloat \*u)
+* void glEvalMesh1(GLenum mode, GLint i1, GLint i2)
+* void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i, GLint j)
+* void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat \*buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname, GLfloat param)
+* void glFogfv(GLenum pname, const GLfloat \*params)
+* void glFogi(GLenum pname, GLint param)
+* void glFogiv(GLenum pname, const GLint \*params)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* GLuint glGenLists(GLsizei range)
+* void glGenTextures(GLsizei n, GLuint \*textures)
+* void glGetBooleanv(GLenum pname, GLboolean \*params)
+* void glGetClipPlane(GLenum plane, GLdouble \*equation)
+* void glGetDoublev(GLenum pname, GLdouble \*params)
+* GLenum glGetError(void)
+* void glGetFloatv(GLenum pname, GLfloat \*params)
+* void glGetIntegerv(GLenum pname, GLint \*params)
+* void glGetLightfv(GLenum light, GLenum pname, GLfloat \*params)
+* void glGetLightiv(GLenum light, GLenum pname, GLint \*params)
+* void glGetMapdv(GLenum target, GLenum query, GLdouble \*v)
+* void glGetMapfv(GLenum target, GLenum query, GLfloat \*v)
+* void glGetMapiv(GLenum target, GLenum query, GLint \*v)
+* void glGetMaterialfv(GLenum face, GLenum pname, GLfloat \*params)
+* void glGetMaterialiv(GLenum face, GLenum pname, GLint \*params)
+* void glGetPixelMapfv(GLenum map, GLfloat \*values)
+* void glGetPixelMapuiv(GLenum map, GLuint \*values)
+* void glGetPixelMapusv(GLenum map, GLushort \*values)
+* void glGetPointerv(GLenum pname, void* \*params)
+* void glGetPolygonStipple(GLubyte \*mask)
+* GLubyte \* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexEnviv(GLenum target, GLenum pname, GLint \*params)
+* void glGetTexGendv(GLenum coord, GLenum pname, GLdouble \*params)
+* void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat \*params)
+* void glGetTexGeniv(GLenum coord, GLenum pname, GLint \*params)
+* void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void \*pixels)
+* void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat \*params)
+* void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint \*params)
+* void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat \*params)
+* void glGetTexParameteriv(GLenum target, GLenum pname, GLint \*params)
+* void glHint(GLenum target, GLenum mode)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glIndexd(GLdouble c)
+* void glIndexdv(const GLdouble \*c)
+* void glIndexf(GLfloat c)
+* void glIndexfv(const GLfloat \*c)
+* void glIndexi(GLint c)
+* void glIndexiv(const GLint \*c)
+* void glIndexs(GLshort c)
+* void glIndexsv(const GLshort \*c)
+* void glIndexub(GLubyte c)
+* void glIndexubv(const GLubyte \*c)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format, GLsizei stride, const void \*pointer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightModelf(GLenum pname, GLfloat param)
+* void glLightModelfv(GLenum pname, const GLfloat \*params)
+* void glLightModeli(GLenum pname, GLint param)
+* void glLightModeliv(GLenum pname, const GLint \*params)
+* void glLightf(GLenum light, GLenum pname, GLfloat param)
+* void glLightfv(GLenum light, GLenum pname, const GLfloat \*params)
+* void glLighti(GLenum light, GLenum pname, GLint param)
+* void glLightiv(GLenum light, GLenum pname, const GLint \*params)
+* void glLineStipple(GLint factor, GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \*m)
+* void glLoadMatrixf(const GLfloat \*m)
+* void glLoadName(GLuint name)
+* void glLogicOp(GLenum opcode)
+* void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble \*points)
+* void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat \*points)
+* void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble \*points)
+* void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat \*points)
+* void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2)
+* void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2)
+* void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2)
+* void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2)
+* void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+* void glMaterialfv(GLenum face, GLenum pname, const GLfloat \*params)
+* void glMateriali(GLenum face, GLenum pname, GLint param)
+* void glMaterialiv(GLenum face, GLenum pname, const GLint \*params)
+* void glMatrixMode(GLenum mode)
+* void glMultMatrixd(const GLdouble \*m)
+* void glMultMatrixf(const GLfloat \*m)
+* void glNewList(GLuint list, GLenum mode)
+* void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz)
+* void glNormal3bv(const GLbyte \*v)
+* void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz)
+* void glNormal3dv(const GLdouble \*v)
+* void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+* void glNormal3fv(const GLfloat \*v)
+* void glNormal3i(GLint nx, GLint ny, GLint nz)
+* void glNormal3iv(const GLint \*v)
+* void glNormal3s(GLshort nx, GLshort ny, GLshort nz)
+* void glNormal3sv(const GLshort \*v)
+* void glNormalPointer(GLenum type, GLsizei stride, const void \*pointer)
+* void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat \*values)
+* void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint \*values)
+* void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort \*values)
+* void glPixelStoref(GLenum pname, GLfloat param)
+* void glPixelStorei(GLenum pname, GLint param)
+* void glPixelTransferf(GLenum pname, GLfloat param)
+* void glPixelTransferi(GLenum pname, GLint param)
+* void glPixelZoom(GLfloat xfactor, GLfloat yfactor)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face, GLenum mode)
+* void glPolygonOffset(GLfloat factor, GLfloat units)
+* void glPolygonStipple(const GLubyte \*mask)
+* void glPopAttrib(void)
+* void glPopClientAttrib(void)
+* void glPopMatrix(void)
+* void glPopName(void)
+* void glPrioritizeTextures(GLsizei n, const GLuint \*textures, const GLclampf \*priorities)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glRasterPos2d(GLdouble x, GLdouble y)
+* void glRasterPos2dv(const GLdouble \*v)
+* void glRasterPos2f(GLfloat x, GLfloat y)
+* void glRasterPos2fv(const GLfloat \*v)
+* void glRasterPos2i(GLint x, GLint y)
+* void glRasterPos2iv(const GLint \*v)
+* void glRasterPos2s(GLshort x, GLshort y)
+* void glRasterPos2sv(const GLshort \*v)
+* void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+* void glRasterPos3dv(const GLdouble \*v)
+* void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+* void glRasterPos3fv(const GLfloat \*v)
+* void glRasterPos3i(GLint x, GLint y, GLint z)
+* void glRasterPos3iv(const GLint \*v)
+* void glRasterPos3s(GLshort x, GLshort y, GLshort z)
+* void glRasterPos3sv(const GLshort \*v)
+* void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glRasterPos4dv(const GLdouble \*v)
+* void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glRasterPos4fv(const GLfloat \*v)
+* void glRasterPos4i(GLint x, GLint y, GLint z, GLint w)
+* void glRasterPos4iv(const GLint \*v)
+* void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glRasterPos4sv(const GLshort \*v)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void \*pixels)
+* void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
+* void glRectdv(const GLdouble \*v1, const GLdouble \*v2)
+* void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)
+* void glRectfv(const GLfloat \*v1, const GLfloat \*v2)
+* void glRecti(GLint x1, GLint y1, GLint x2, GLint y2)
+* void glRectiv(const GLint \*v1, const GLint \*v2)
+* void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
+* void glRectsv(const GLshort \*v1, const GLshort \*v2)
+* GLint glRenderMode(GLenum mode)
+* void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z)
+* void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+* void glScaled(GLdouble x, GLdouble y, GLdouble z)
+* void glScalef(GLfloat x, GLfloat y, GLfloat z)
+* void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+* void glSelectBuffer(GLsizei size, GLuint \*buffer)
+* void glShadeModel(GLenum mode)
+* void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord1dv(const GLdouble \*v)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1fv(const GLfloat \*v)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1iv(const GLint \*v)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1sv(const GLshort \*v)
+* void glTexCoord2d(GLdouble s, GLdouble t)
+* void glTexCoord2dv(const GLdouble \*v)
+* void glTexCoord2f(GLfloat s, GLfloat t)
+* void glTexCoord2fv(const GLfloat \*v)
+* void glTexCoord2i(GLint s, GLint t)
+* void glTexCoord2iv(const GLint \*v)
+* void glTexCoord2s(GLshort s, GLshort t)
+* void glTexCoord2sv(const GLshort \*v)
+* void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r)
+* void glTexCoord3dv(const GLdouble \*v)
+* void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r)
+* void glTexCoord3fv(const GLfloat \*v)
+* void glTexCoord3i(GLint s, GLint t, GLint r)
+* void glTexCoord3iv(const GLint \*v)
+* void glTexCoord3s(GLshort s, GLshort t, GLshort r)
+* void glTexCoord3sv(const GLshort \*v)
+* void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q)
+* void glTexCoord4dv(const GLdouble \*v)
+* void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+* void glTexCoord4fv(const GLfloat \*v)
+* void glTexCoord4i(GLint s, GLint t, GLint r, GLint q)
+* void glTexCoord4iv(const GLint \*v)
+* void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q)
+* void glTexCoord4sv(const GLshort \*v)
+* void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+* void glTexEnvfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexEnvi(GLenum target, GLenum pname, GLint param)
+* void glTexEnviv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexGend(GLenum coord, GLenum pname, GLdouble param)
+* void glTexGendv(GLenum coord, GLenum pname, const GLdouble \*params)
+* void glTexGenf(GLenum coord, GLenum pname, GLfloat param)
+* void glTexGenfv(GLenum coord, GLenum pname, const GLfloat \*params)
+* void glTexGeni(GLenum coord, GLenum pname, GLint param)
+* void glTexGeniv(GLenum coord, GLenum pname, const GLint \*params)
+* void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void \*pixels)
+* void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+* void glTexParameterfv(GLenum target, GLenum pname, const GLfloat \*params)
+* void glTexParameteri(GLenum target, GLenum pname, GLint param)
+* void glTexParameteriv(GLenum target, GLenum pname, const GLint \*params)
+* void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void \*pixels)
+* void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void \*pixels)
+* void glTranslated(GLdouble x, GLdouble y, GLdouble z)
+* void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex2d(GLdouble x, GLdouble y)
+* void glVertex2dv(const GLdouble \*v)
+* void glVertex2f(GLfloat x, GLfloat y)
+* void glVertex2fv(const GLfloat \*v)
+* void glVertex2i(GLint x, GLint y)
+* void glVertex2iv(const GLint \*v)
+* void glVertex2s(GLshort x, GLshort y)
+* void glVertex2sv(const GLshort \*v)
+* void glVertex3d(GLdouble x, GLdouble y, GLdouble z)
+* void glVertex3dv(const GLdouble \*v)
+* void glVertex3f(GLfloat x, GLfloat y, GLfloat z)
+* void glVertex3fv(const GLfloat \*v)
+* void glVertex3i(GLint x, GLint y, GLint z)
+* void glVertex3iv(const GLint \*v)
+* void glVertex3s(GLshort x, GLshort y, GLshort z)
+* void glVertex3sv(const GLshort \*v)
+* void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+* void glVertex4dv(const GLdouble \*v)
+* void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+* void glVertex4fv(const GLfloat \*v)
+* void glVertex4i(GLint x, GLint y, GLint z, GLint w)
+* void glVertex4iv(const GLint \*v)
+* void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w)
+* void glVertex4sv(const GLshort \*v)
+* void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void \*pointer)
+* void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
diff --git a/docs/ja-jp/source/ringopengl21funcsdoc.txt b/docs/ja-jp/source/ringopengl21funcsdoc.txt
new file mode 100644 (file)
index 0000000..70faafa
--- /dev/null
@@ -0,0 +1,1466 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 2.1) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 2.1) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl30funcsdoc.txt b/docs/ja-jp/source/ringopengl30funcsdoc.txt
new file mode 100644 (file)
index 0000000..3929e62
--- /dev/null
@@ -0,0 +1,1571 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.0) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 3.0) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl31funcsdoc.txt b/docs/ja-jp/source/ringopengl31funcsdoc.txt
new file mode 100644 (file)
index 0000000..29c94e3
--- /dev/null
@@ -0,0 +1,1605 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.1) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 3.1) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl32funcsdoc.txt b/docs/ja-jp/source/ringopengl32funcsdoc.txt
new file mode 100644 (file)
index 0000000..12e6888
--- /dev/null
@@ -0,0 +1,1627 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.2) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 3.2) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl33funcsdoc.txt b/docs/ja-jp/source/ringopengl33funcsdoc.txt
new file mode 100644 (file)
index 0000000..e13805c
--- /dev/null
@@ -0,0 +1,1628 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 3.3) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 3.3) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_RGB10_A2UI
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl40funcsdoc.txt b/docs/ja-jp/source/ringopengl40funcsdoc.txt
new file mode 100644 (file)
index 0000000..6de4600
--- /dev/null
@@ -0,0 +1,1641 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.0) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 4.0) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl41funcsdoc.txt b/docs/ja-jp/source/ringopengl41funcsdoc.txt
new file mode 100644 (file)
index 0000000..d1a14fb
--- /dev/null
@@ -0,0 +1,1641 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.1) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 4.1) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl42funcsdoc.txt b/docs/ja-jp/source/ringopengl42funcsdoc.txt
new file mode 100644 (file)
index 0000000..f0713a4
--- /dev/null
@@ -0,0 +1,1649 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.2) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 4.2) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl43funcsdoc.txt b/docs/ja-jp/source/ringopengl43funcsdoc.txt
new file mode 100644 (file)
index 0000000..86ef7d4
--- /dev/null
@@ -0,0 +1,1651 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.3) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 4.3) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl44funcsdoc.txt b/docs/ja-jp/source/ringopengl44funcsdoc.txt
new file mode 100644 (file)
index 0000000..12096bf
--- /dev/null
@@ -0,0 +1,1654 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.4) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 4.4) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl45funcsdoc.txt b/docs/ja-jp/source/ringopengl45funcsdoc.txt
new file mode 100644 (file)
index 0000000..8374c9e
--- /dev/null
@@ -0,0 +1,1655 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.5) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 4.5) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringopengl46funcsdoc.txt b/docs/ja-jp/source/ringopengl46funcsdoc.txt
new file mode 100644 (file)
index 0000000..c11e6b3
--- /dev/null
@@ -0,0 +1,1676 @@
+.. index:: 
+     single: RingOpenGL (OpenGL 4.6) 関数リファレンス; はじめに
+
+========================================
+RingOpenGL (OpenGL 4.6) 関数リファレンス
+========================================
+
+* GL_ZERO
+* GL_FALSE
+* GL_LOGIC_OP
+* GL_NONE
+* GL_TEXTURE_COMPONENTS
+* GL_NO_ERROR
+* GL_POINTS
+* GL_CURRENT_BIT
+* GL_TRUE
+* GL_ONE
+* GL_CLIENT_PIXEL_STORE_BIT
+* GL_LINES
+* GL_LINE_LOOP
+* GL_POINT_BIT
+* GL_CLIENT_VERTEX_ARRAY_BIT
+* GL_LINE_STRIP
+* GL_LINE_BIT
+* GL_TRIANGLES
+* GL_TRIANGLE_STRIP
+* GL_TRIANGLE_FAN
+* GL_QUADS
+* GL_QUAD_STRIP
+* GL_POLYGON_BIT
+* GL_POLYGON
+* GL_POLYGON_STIPPLE_BIT
+* GL_PIXEL_MODE_BIT
+* GL_LIGHTING_BIT
+* GL_FOG_BIT
+* GL_DEPTH_BUFFER_BIT
+* GL_ACCUM
+* GL_LOAD
+* GL_RETURN
+* GL_MULT
+* GL_ADD
+* GL_NEVER
+* GL_ACCUM_BUFFER_BIT
+* GL_LESS
+* GL_EQUAL
+* GL_LEQUAL
+* GL_GREATER
+* GL_NOTEQUAL
+* GL_GEQUAL
+* GL_ALWAYS
+* GL_SRC_COLOR
+* GL_ONE_MINUS_SRC_COLOR
+* GL_SRC_ALPHA
+* GL_ONE_MINUS_SRC_ALPHA
+* GL_DST_ALPHA
+* GL_ONE_MINUS_DST_ALPHA
+* GL_DST_COLOR
+* GL_ONE_MINUS_DST_COLOR
+* GL_SRC_ALPHA_SATURATE
+* GL_STENCIL_BUFFER_BIT
+* GL_FRONT_LEFT
+* GL_FRONT_RIGHT
+* GL_BACK_LEFT
+* GL_BACK_RIGHT
+* GL_FRONT
+* GL_BACK
+* GL_LEFT
+* GL_RIGHT
+* GL_FRONT_AND_BACK
+* GL_AUX0
+* GL_AUX1
+* GL_AUX2
+* GL_AUX3
+* GL_INVALID_ENUM
+* GL_INVALID_VALUE
+* GL_INVALID_OPERATION
+* GL_STACK_OVERFLOW
+* GL_STACK_UNDERFLOW
+* GL_OUT_OF_MEMORY
+* GL_2D
+* GL_3D
+* GL_3D_COLOR
+* GL_3D_COLOR_TEXTURE
+* GL_4D_COLOR_TEXTURE
+* GL_PASS_THROUGH_TOKEN
+* GL_POINT_TOKEN
+* GL_LINE_TOKEN
+* GL_POLYGON_TOKEN
+* GL_BITMAP_TOKEN
+* GL_DRAW_PIXEL_TOKEN
+* GL_COPY_PIXEL_TOKEN
+* GL_LINE_RESET_TOKEN
+* GL_EXP
+* GL_VIEWPORT_BIT
+* GL_EXP2
+* GL_CW
+* GL_CCW
+* GL_COEFF
+* GL_ORDER
+* GL_DOMAIN
+* GL_CURRENT_COLOR
+* GL_CURRENT_INDEX
+* GL_CURRENT_NORMAL
+* GL_CURRENT_TEXTURE_COORDS
+* GL_CURRENT_RASTER_COLOR
+* GL_CURRENT_RASTER_INDEX
+* GL_CURRENT_RASTER_TEXTURE_COORDS
+* GL_CURRENT_RASTER_POSITION
+* GL_CURRENT_RASTER_POSITION_VALID
+* GL_CURRENT_RASTER_DISTANCE
+* GL_POINT_SMOOTH
+* GL_POINT_SIZE
+* GL_POINT_SIZE_RANGE
+* GL_POINT_SIZE_GRANULARITY
+* GL_LINE_SMOOTH
+* GL_LINE_WIDTH
+* GL_LINE_WIDTH_RANGE
+* GL_LINE_WIDTH_GRANULARITY
+* GL_LINE_STIPPLE
+* GL_LINE_STIPPLE_PATTERN
+* GL_LINE_STIPPLE_REPEAT
+* GL_LIST_MODE
+* GL_MAX_LIST_NESTING
+* GL_LIST_BASE
+* GL_LIST_INDEX
+* GL_POLYGON_MODE
+* GL_POLYGON_SMOOTH
+* GL_POLYGON_STIPPLE
+* GL_EDGE_FLAG
+* GL_CULL_FACE
+* GL_CULL_FACE_MODE
+* GL_FRONT_FACE
+* GL_LIGHTING
+* GL_LIGHT_MODEL_LOCAL_VIEWER
+* GL_LIGHT_MODEL_TWO_SIDE
+* GL_LIGHT_MODEL_AMBIENT
+* GL_SHADE_MODEL
+* GL_COLOR_MATERIAL_FACE
+* GL_COLOR_MATERIAL_PARAMETER
+* GL_COLOR_MATERIAL
+* GL_FOG
+* GL_FOG_INDEX
+* GL_FOG_DENSITY
+* GL_FOG_START
+* GL_FOG_END
+* GL_FOG_MODE
+* GL_FOG_COLOR
+* GL_DEPTH_RANGE
+* GL_DEPTH_TEST
+* GL_DEPTH_WRITEMASK
+* GL_DEPTH_CLEAR_VALUE
+* GL_DEPTH_FUNC
+* GL_ACCUM_CLEAR_VALUE
+* GL_STENCIL_TEST
+* GL_STENCIL_CLEAR_VALUE
+* GL_STENCIL_FUNC
+* GL_STENCIL_VALUE_MASK
+* GL_STENCIL_FAIL
+* GL_STENCIL_PASS_DEPTH_FAIL
+* GL_STENCIL_PASS_DEPTH_PASS
+* GL_STENCIL_REF
+* GL_STENCIL_WRITEMASK
+* GL_MATRIX_MODE
+* GL_NORMALIZE
+* GL_VIEWPORT
+* GL_MODELVIEW_STACK_DEPTH
+* GL_PROJECTION_STACK_DEPTH
+* GL_TEXTURE_STACK_DEPTH
+* GL_MODELVIEW_MATRIX
+* GL_PROJECTION_MATRIX
+* GL_TEXTURE_MATRIX
+* GL_ATTRIB_STACK_DEPTH
+* GL_CLIENT_ATTRIB_STACK_DEPTH
+* GL_ALPHA_TEST
+* GL_ALPHA_TEST_FUNC
+* GL_ALPHA_TEST_REF
+* GL_DITHER
+* GL_BLEND_DST
+* GL_BLEND_SRC
+* GL_BLEND
+* GL_LOGIC_OP_MODE
+* GL_INDEX_LOGIC_OP
+* GL_COLOR_LOGIC_OP
+* GL_AUX_BUFFERS
+* GL_DRAW_BUFFER
+* GL_READ_BUFFER
+* GL_SCISSOR_BOX
+* GL_SCISSOR_TEST
+* GL_INDEX_CLEAR_VALUE
+* GL_INDEX_WRITEMASK
+* GL_COLOR_CLEAR_VALUE
+* GL_COLOR_WRITEMASK
+* GL_INDEX_MODE
+* GL_RGBA_MODE
+* GL_DOUBLEBUFFER
+* GL_STEREO
+* GL_RENDER_MODE
+* GL_PERSPECTIVE_CORRECTION_HINT
+* GL_POINT_SMOOTH_HINT
+* GL_LINE_SMOOTH_HINT
+* GL_POLYGON_SMOOTH_HINT
+* GL_FOG_HINT
+* GL_TEXTURE_GEN_S
+* GL_TEXTURE_GEN_T
+* GL_TEXTURE_GEN_R
+* GL_TEXTURE_GEN_Q
+* GL_PIXEL_MAP_I_TO_I
+* GL_PIXEL_MAP_S_TO_S
+* GL_PIXEL_MAP_I_TO_R
+* GL_PIXEL_MAP_I_TO_G
+* GL_PIXEL_MAP_I_TO_B
+* GL_PIXEL_MAP_I_TO_A
+* GL_PIXEL_MAP_R_TO_R
+* GL_PIXEL_MAP_G_TO_G
+* GL_PIXEL_MAP_B_TO_B
+* GL_PIXEL_MAP_A_TO_A
+* GL_PIXEL_MAP_I_TO_I_SIZE
+* GL_PIXEL_MAP_S_TO_S_SIZE
+* GL_PIXEL_MAP_I_TO_R_SIZE
+* GL_PIXEL_MAP_I_TO_G_SIZE
+* GL_PIXEL_MAP_I_TO_B_SIZE
+* GL_PIXEL_MAP_I_TO_A_SIZE
+* GL_PIXEL_MAP_R_TO_R_SIZE
+* GL_PIXEL_MAP_G_TO_G_SIZE
+* GL_PIXEL_MAP_B_TO_B_SIZE
+* GL_PIXEL_MAP_A_TO_A_SIZE
+* GL_UNPACK_SWAP_BYTES
+* GL_UNPACK_LSB_FIRST
+* GL_UNPACK_ROW_LENGTH
+* GL_UNPACK_SKIP_ROWS
+* GL_UNPACK_SKIP_PIXELS
+* GL_UNPACK_ALIGNMENT
+* GL_PACK_SWAP_BYTES
+* GL_PACK_LSB_FIRST
+* GL_PACK_ROW_LENGTH
+* GL_PACK_SKIP_ROWS
+* GL_PACK_SKIP_PIXELS
+* GL_PACK_ALIGNMENT
+* GL_MAP_COLOR
+* GL_MAP_STENCIL
+* GL_INDEX_SHIFT
+* GL_INDEX_OFFSET
+* GL_RED_SCALE
+* GL_RED_BIAS
+* GL_ZOOM_X
+* GL_ZOOM_Y
+* GL_GREEN_SCALE
+* GL_GREEN_BIAS
+* GL_BLUE_SCALE
+* GL_BLUE_BIAS
+* GL_ALPHA_SCALE
+* GL_ALPHA_BIAS
+* GL_DEPTH_SCALE
+* GL_DEPTH_BIAS
+* GL_MAX_EVAL_ORDER
+* GL_MAX_LIGHTS
+* GL_MAX_CLIP_PLANES
+* GL_MAX_TEXTURE_SIZE
+* GL_MAX_PIXEL_MAP_TABLE
+* GL_MAX_ATTRIB_STACK_DEPTH
+* GL_MAX_MODELVIEW_STACK_DEPTH
+* GL_MAX_NAME_STACK_DEPTH
+* GL_MAX_PROJECTION_STACK_DEPTH
+* GL_MAX_TEXTURE_STACK_DEPTH
+* GL_MAX_VIEWPORT_DIMS
+* GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
+* GL_SUBPIXEL_BITS
+* GL_INDEX_BITS
+* GL_RED_BITS
+* GL_GREEN_BITS
+* GL_BLUE_BITS
+* GL_ALPHA_BITS
+* GL_DEPTH_BITS
+* GL_STENCIL_BITS
+* GL_ACCUM_RED_BITS
+* GL_ACCUM_GREEN_BITS
+* GL_ACCUM_BLUE_BITS
+* GL_ACCUM_ALPHA_BITS
+* GL_NAME_STACK_DEPTH
+* GL_AUTO_NORMAL
+* GL_MAP1_COLOR_4
+* GL_MAP1_INDEX
+* GL_MAP1_NORMAL
+* GL_MAP1_TEXTURE_COORD_1
+* GL_MAP1_TEXTURE_COORD_2
+* GL_MAP1_TEXTURE_COORD_3
+* GL_MAP1_TEXTURE_COORD_4
+* GL_MAP1_VERTEX_3
+* GL_MAP1_VERTEX_4
+* GL_MAP2_COLOR_4
+* GL_MAP2_INDEX
+* GL_MAP2_NORMAL
+* GL_MAP2_TEXTURE_COORD_1
+* GL_MAP2_TEXTURE_COORD_2
+* GL_MAP2_TEXTURE_COORD_3
+* GL_MAP2_TEXTURE_COORD_4
+* GL_MAP2_VERTEX_3
+* GL_MAP2_VERTEX_4
+* GL_MAP1_GRID_DOMAIN
+* GL_MAP1_GRID_SEGMENTS
+* GL_MAP2_GRID_DOMAIN
+* GL_MAP2_GRID_SEGMENTS
+* GL_TEXTURE_1D
+* GL_TEXTURE_2D
+* GL_FEEDBACK_BUFFER_POINTER
+* GL_FEEDBACK_BUFFER_SIZE
+* GL_FEEDBACK_BUFFER_TYPE
+* GL_SELECTION_BUFFER_POINTER
+* GL_SELECTION_BUFFER_SIZE
+* GL_TEXTURE_WIDTH
+* GL_TRANSFORM_BIT
+* GL_TEXTURE_HEIGHT
+* GL_TEXTURE_INTERNAL_FORMAT
+* GL_TEXTURE_BORDER_COLOR
+* GL_TEXTURE_BORDER
+* GL_DONT_CARE
+* GL_FASTEST
+* GL_NICEST
+* GL_AMBIENT
+* GL_DIFFUSE
+* GL_SPECULAR
+* GL_POSITION
+* GL_SPOT_DIRECTION
+* GL_SPOT_EXPONENT
+* GL_SPOT_CUTOFF
+* GL_CONSTANT_ATTENUATION
+* GL_LINEAR_ATTENUATION
+* GL_QUADRATIC_ATTENUATION
+* GL_COMPILE
+* GL_COMPILE_AND_EXECUTE
+* GL_BYTE
+* GL_UNSIGNED_BYTE
+* GL_SHORT
+* GL_UNSIGNED_SHORT
+* GL_INT
+* GL_UNSIGNED_INT
+* GL_FLOAT
+* GL_2_BYTES
+* GL_3_BYTES
+* GL_4_BYTES
+* GL_DOUBLE
+* GL_CLEAR
+* GL_AND
+* GL_AND_REVERSE
+* GL_COPY
+* GL_AND_INVERTED
+* GL_NOOP
+* GL_XOR
+* GL_OR
+* GL_NOR
+* GL_EQUIV
+* GL_INVERT
+* GL_OR_REVERSE
+* GL_COPY_INVERTED
+* GL_OR_INVERTED
+* GL_NAND
+* GL_SET
+* GL_EMISSION
+* GL_SHININESS
+* GL_AMBIENT_AND_DIFFUSE
+* GL_COLOR_INDEXES
+* GL_MODELVIEW
+* GL_PROJECTION
+* GL_TEXTURE
+* GL_COLOR
+* GL_DEPTH
+* GL_STENCIL
+* GL_COLOR_INDEX
+* GL_STENCIL_INDEX
+* GL_DEPTH_COMPONENT
+* GL_RED
+* GL_GREEN
+* GL_BLUE
+* GL_ALPHA
+* GL_RGB
+* GL_RGBA
+* GL_LUMINANCE
+* GL_LUMINANCE_ALPHA
+* GL_BITMAP
+* GL_POINT
+* GL_LINE
+* GL_FILL
+* GL_RENDER
+* GL_FEEDBACK
+* GL_SELECT
+* GL_FLAT
+* GL_SMOOTH
+* GL_KEEP
+* GL_REPLACE
+* GL_INCR
+* GL_DECR
+* GL_VENDOR
+* GL_RENDERER
+* GL_VERSION
+* GL_EXTENSIONS
+* GL_S
+* GL_ENABLE_BIT
+* GL_T
+* GL_R
+* GL_Q
+* GL_MODULATE
+* GL_DECAL
+* GL_TEXTURE_ENV_MODE
+* GL_TEXTURE_ENV_COLOR
+* GL_TEXTURE_ENV
+* GL_EYE_LINEAR
+* GL_OBJECT_LINEAR
+* GL_SPHERE_MAP
+* GL_TEXTURE_GEN_MODE
+* GL_OBJECT_PLANE
+* GL_EYE_PLANE
+* GL_NEAREST
+* GL_LINEAR
+* GL_NEAREST_MIPMAP_NEAREST
+* GL_LINEAR_MIPMAP_NEAREST
+* GL_NEAREST_MIPMAP_LINEAR
+* GL_LINEAR_MIPMAP_LINEAR
+* GL_TEXTURE_MAG_FILTER
+* GL_TEXTURE_MIN_FILTER
+* GL_TEXTURE_WRAP_S
+* GL_TEXTURE_WRAP_T
+* GL_CLAMP
+* GL_REPEAT
+* GL_POLYGON_OFFSET_UNITS
+* GL_POLYGON_OFFSET_POINT
+* GL_POLYGON_OFFSET_LINE
+* GL_R3_G3_B2
+* GL_V2F
+* GL_V3F
+* GL_C4UB_V2F
+* GL_C4UB_V3F
+* GL_C3F_V3F
+* GL_N3F_V3F
+* GL_C4F_N3F_V3F
+* GL_T2F_V3F
+* GL_T4F_V4F
+* GL_T2F_C4UB_V3F
+* GL_T2F_C3F_V3F
+* GL_T2F_N3F_V3F
+* GL_T2F_C4F_N3F_V3F
+* GL_T4F_C4F_N3F_V4F
+* GL_CLIP_PLANE0
+* GL_CLIP_PLANE1
+* GL_CLIP_PLANE2
+* GL_CLIP_PLANE3
+* GL_CLIP_PLANE4
+* GL_CLIP_PLANE5
+* GL_LIGHT0
+* GL_COLOR_BUFFER_BIT
+* GL_LIGHT1
+* GL_LIGHT2
+* GL_LIGHT3
+* GL_LIGHT4
+* GL_LIGHT5
+* GL_LIGHT6
+* GL_LIGHT7
+* GL_HINT_BIT
+* GL_POLYGON_OFFSET_FILL
+* GL_POLYGON_OFFSET_FACTOR
+* GL_ALPHA4
+* GL_ALPHA8
+* GL_ALPHA12
+* GL_ALPHA16
+* GL_LUMINANCE4
+* GL_LUMINANCE8
+* GL_LUMINANCE12
+* GL_LUMINANCE16
+* GL_LUMINANCE4_ALPHA4
+* GL_LUMINANCE6_ALPHA2
+* GL_LUMINANCE8_ALPHA8
+* GL_LUMINANCE12_ALPHA4
+* GL_LUMINANCE12_ALPHA12
+* GL_LUMINANCE16_ALPHA16
+* GL_INTENSITY
+* GL_INTENSITY4
+* GL_INTENSITY8
+* GL_INTENSITY12
+* GL_INTENSITY16
+* GL_RGB4
+* GL_RGB5
+* GL_RGB8
+* GL_RGB10
+* GL_RGB12
+* GL_RGB16
+* GL_RGBA2
+* GL_RGBA4
+* GL_RGB5_A1
+* GL_RGBA8
+* GL_RGB10_A2
+* GL_RGBA12
+* GL_RGBA16
+* GL_TEXTURE_RED_SIZE
+* GL_TEXTURE_GREEN_SIZE
+* GL_TEXTURE_BLUE_SIZE
+* GL_TEXTURE_ALPHA_SIZE
+* GL_TEXTURE_LUMINANCE_SIZE
+* GL_TEXTURE_INTENSITY_SIZE
+* GL_PROXY_TEXTURE_1D
+* GL_PROXY_TEXTURE_2D
+* GL_TEXTURE_PRIORITY
+* GL_TEXTURE_RESIDENT
+* GL_TEXTURE_BINDING_1D
+* GL_TEXTURE_BINDING_2D
+* GL_VERTEX_ARRAY
+* GL_NORMAL_ARRAY
+* GL_COLOR_ARRAY
+* GL_INDEX_ARRAY
+* GL_TEXTURE_COORD_ARRAY
+* GL_EDGE_FLAG_ARRAY
+* GL_VERTEX_ARRAY_SIZE
+* GL_VERTEX_ARRAY_TYPE
+* GL_VERTEX_ARRAY_STRIDE
+* GL_NORMAL_ARRAY_TYPE
+* GL_NORMAL_ARRAY_STRIDE
+* GL_COLOR_ARRAY_SIZE
+* GL_COLOR_ARRAY_TYPE
+* GL_COLOR_ARRAY_STRIDE
+* GL_INDEX_ARRAY_TYPE
+* GL_INDEX_ARRAY_STRIDE
+* GL_TEXTURE_COORD_ARRAY_SIZE
+* GL_TEXTURE_COORD_ARRAY_TYPE
+* GL_TEXTURE_COORD_ARRAY_STRIDE
+* GL_EDGE_FLAG_ARRAY_STRIDE
+* GL_VERTEX_ARRAY_POINTER
+* GL_NORMAL_ARRAY_POINTER
+* GL_COLOR_ARRAY_POINTER
+* GL_INDEX_ARRAY_POINTER
+* GL_TEXTURE_COORD_ARRAY_POINTER
+* GL_EDGE_FLAG_ARRAY_POINTER
+* GL_COLOR_INDEX1_EXT
+* GL_COLOR_INDEX2_EXT
+* GL_COLOR_INDEX4_EXT
+* GL_COLOR_INDEX8_EXT
+* GL_COLOR_INDEX12_EXT
+* GL_COLOR_INDEX16_EXT
+* GL_EVAL_BIT
+* GL_LIST_BIT
+* GL_TEXTURE_BIT
+* GL_SCISSOR_BIT
+* GL_ALL_ATTRIB_BITS
+* GL_CLIENT_ALL_ATTRIB_BITS
+* GL_SMOOTH_POINT_SIZE_RANGE
+* GL_SMOOTH_POINT_SIZE_GRANULARITY
+* GL_SMOOTH_LINE_WIDTH_RANGE
+* GL_SMOOTH_LINE_WIDTH_GRANULARITY
+* GL_UNSIGNED_BYTE_3_3_2
+* GL_UNSIGNED_SHORT_4_4_4_4
+* GL_UNSIGNED_SHORT_5_5_5_1
+* GL_UNSIGNED_INT_8_8_8_8
+* GL_UNSIGNED_INT_10_10_10_2
+* GL_RESCALE_NORMAL
+* GL_TEXTURE_BINDING_3D
+* GL_PACK_SKIP_IMAGES
+* GL_PACK_IMAGE_HEIGHT
+* GL_UNPACK_SKIP_IMAGES
+* GL_UNPACK_IMAGE_HEIGHT
+* GL_TEXTURE_3D
+* GL_PROXY_TEXTURE_3D
+* GL_TEXTURE_DEPTH
+* GL_TEXTURE_WRAP_R
+* GL_MAX_3D_TEXTURE_SIZE
+* GL_BGR
+* GL_BGRA
+* GL_MAX_ELEMENTS_VERTICES
+* GL_MAX_ELEMENTS_INDICES
+* GL_CLAMP_TO_EDGE
+* GL_TEXTURE_MIN_LOD
+* GL_TEXTURE_MAX_LOD
+* GL_TEXTURE_BASE_LEVEL
+* GL_TEXTURE_MAX_LEVEL
+* GL_LIGHT_MODEL_COLOR_CONTROL
+* GL_SINGLE_COLOR
+* GL_SEPARATE_SPECULAR_COLOR
+* GL_UNSIGNED_BYTE_2_3_3_REV
+* GL_UNSIGNED_SHORT_5_6_5
+* GL_UNSIGNED_SHORT_5_6_5_REV
+* GL_UNSIGNED_SHORT_4_4_4_4_REV
+* GL_UNSIGNED_SHORT_1_5_5_5_REV
+* GL_UNSIGNED_INT_8_8_8_8_REV
+* GL_ALIASED_POINT_SIZE_RANGE
+* GL_ALIASED_LINE_WIDTH_RANGE
+* GL_MULTISAMPLE
+* GL_SAMPLE_ALPHA_TO_COVERAGE
+* GL_SAMPLE_ALPHA_TO_ONE
+* GL_SAMPLE_COVERAGE
+* GL_SAMPLE_BUFFERS
+* GL_SAMPLES
+* GL_SAMPLE_COVERAGE_VALUE
+* GL_SAMPLE_COVERAGE_INVERT
+* GL_CLAMP_TO_BORDER
+* GL_TEXTURE0
+* GL_TEXTURE1
+* GL_TEXTURE2
+* GL_TEXTURE3
+* GL_TEXTURE4
+* GL_TEXTURE5
+* GL_TEXTURE6
+* GL_TEXTURE7
+* GL_TEXTURE8
+* GL_TEXTURE9
+* GL_TEXTURE10
+* GL_TEXTURE11
+* GL_TEXTURE12
+* GL_TEXTURE13
+* GL_TEXTURE14
+* GL_TEXTURE15
+* GL_TEXTURE16
+* GL_TEXTURE17
+* GL_TEXTURE18
+* GL_TEXTURE19
+* GL_TEXTURE20
+* GL_TEXTURE21
+* GL_TEXTURE22
+* GL_TEXTURE23
+* GL_TEXTURE24
+* GL_TEXTURE25
+* GL_TEXTURE26
+* GL_TEXTURE27
+* GL_TEXTURE28
+* GL_TEXTURE29
+* GL_TEXTURE30
+* GL_TEXTURE31
+* GL_ACTIVE_TEXTURE
+* GL_CLIENT_ACTIVE_TEXTURE
+* GL_MAX_TEXTURE_UNITS
+* GL_TRANSPOSE_MODELVIEW_MATRIX
+* GL_TRANSPOSE_PROJECTION_MATRIX
+* GL_TRANSPOSE_TEXTURE_MATRIX
+* GL_TRANSPOSE_COLOR_MATRIX
+* GL_SUBTRACT
+* GL_COMPRESSED_ALPHA
+* GL_COMPRESSED_LUMINANCE
+* GL_COMPRESSED_LUMINANCE_ALPHA
+* GL_COMPRESSED_INTENSITY
+* GL_COMPRESSED_RGB
+* GL_COMPRESSED_RGBA
+* GL_TEXTURE_COMPRESSION_HINT
+* GL_NORMAL_MAP
+* GL_REFLECTION_MAP
+* GL_TEXTURE_CUBE_MAP
+* GL_TEXTURE_BINDING_CUBE_MAP
+* GL_TEXTURE_CUBE_MAP_POSITIVE_X
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_X
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Y
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
+* GL_TEXTURE_CUBE_MAP_POSITIVE_Z
+* GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+* GL_PROXY_TEXTURE_CUBE_MAP
+* GL_MAX_CUBE_MAP_TEXTURE_SIZE
+* GL_COMBINE
+* GL_COMBINE_RGB
+* GL_COMBINE_ALPHA
+* GL_RGB_SCALE
+* GL_ADD_SIGNED
+* GL_INTERPOLATE
+* GL_CONSTANT
+* GL_PRIMARY_COLOR
+* GL_PREVIOUS
+* GL_SOURCE0_RGB
+* GL_SOURCE1_RGB
+* GL_SOURCE2_RGB
+* GL_SOURCE0_ALPHA
+* GL_SOURCE1_ALPHA
+* GL_SOURCE2_ALPHA
+* GL_OPERAND0_RGB
+* GL_OPERAND1_RGB
+* GL_OPERAND2_RGB
+* GL_OPERAND0_ALPHA
+* GL_OPERAND1_ALPHA
+* GL_OPERAND2_ALPHA
+* GL_TEXTURE_COMPRESSED_IMAGE_SIZE
+* GL_TEXTURE_COMPRESSED
+* GL_NUM_COMPRESSED_TEXTURE_FORMATS
+* GL_COMPRESSED_TEXTURE_FORMATS
+* GL_DOT3_RGB
+* GL_DOT3_RGBA
+* GL_MULTISAMPLE_BIT
+* GL_BLEND_DST_RGB
+* GL_BLEND_SRC_RGB
+* GL_BLEND_DST_ALPHA
+* GL_BLEND_SRC_ALPHA
+* GL_POINT_SIZE_MIN
+* GL_POINT_SIZE_MAX
+* GL_POINT_FADE_THRESHOLD_SIZE
+* GL_POINT_DISTANCE_ATTENUATION
+* GL_GENERATE_MIPMAP
+* GL_GENERATE_MIPMAP_HINT
+* GL_DEPTH_COMPONENT16
+* GL_DEPTH_COMPONENT24
+* GL_DEPTH_COMPONENT32
+* GL_MIRRORED_REPEAT
+* GL_FOG_COORDINATE_SOURCE
+* GL_FOG_COORDINATE
+* GL_FRAGMENT_DEPTH
+* GL_CURRENT_FOG_COORDINATE
+* GL_FOG_COORDINATE_ARRAY_TYPE
+* GL_FOG_COORDINATE_ARRAY_STRIDE
+* GL_FOG_COORDINATE_ARRAY_POINTER
+* GL_FOG_COORDINATE_ARRAY
+* GL_COLOR_SUM
+* GL_CURRENT_SECONDARY_COLOR
+* GL_SECONDARY_COLOR_ARRAY_SIZE
+* GL_SECONDARY_COLOR_ARRAY_TYPE
+* GL_SECONDARY_COLOR_ARRAY_STRIDE
+* GL_SECONDARY_COLOR_ARRAY_POINTER
+* GL_SECONDARY_COLOR_ARRAY
+* GL_MAX_TEXTURE_LOD_BIAS
+* GL_TEXTURE_FILTER_CONTROL
+* GL_TEXTURE_LOD_BIAS
+* GL_INCR_WRAP
+* GL_DECR_WRAP
+* GL_TEXTURE_DEPTH_SIZE
+* GL_DEPTH_TEXTURE_MODE
+* GL_TEXTURE_COMPARE_MODE
+* GL_TEXTURE_COMPARE_FUNC
+* GL_COMPARE_R_TO_TEXTURE
+* GL_CURRENT_FOG_COORD
+* GL_FOG_COORD
+* GL_FOG_COORD_ARRAY
+* GL_FOG_COORD_ARRAY_BUFFER_BINDING
+* GL_FOG_COORD_ARRAY_POINTER
+* GL_FOG_COORD_ARRAY_STRIDE
+* GL_FOG_COORD_ARRAY_TYPE
+* GL_FOG_COORD_SRC
+* GL_SRC0_ALPHA
+* GL_SRC0_RGB
+* GL_SRC1_ALPHA
+* GL_SRC1_RGB
+* GL_SRC2_ALPHA
+* GL_SRC2_RGB
+* GL_BUFFER_SIZE
+* GL_BUFFER_USAGE
+* GL_QUERY_COUNTER_BITS
+* GL_CURRENT_QUERY
+* GL_QUERY_RESULT
+* GL_QUERY_RESULT_AVAILABLE
+* GL_ARRAY_BUFFER
+* GL_ELEMENT_ARRAY_BUFFER
+* GL_ARRAY_BUFFER_BINDING
+* GL_ELEMENT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ARRAY_BUFFER_BINDING
+* GL_NORMAL_ARRAY_BUFFER_BINDING
+* GL_COLOR_ARRAY_BUFFER_BINDING
+* GL_INDEX_ARRAY_BUFFER_BINDING
+* GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING
+* GL_EDGE_FLAG_ARRAY_BUFFER_BINDING
+* GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING
+* GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
+* GL_WEIGHT_ARRAY_BUFFER_BINDING
+* GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+* GL_READ_ONLY
+* GL_WRITE_ONLY
+* GL_READ_WRITE
+* GL_BUFFER_ACCESS
+* GL_BUFFER_MAPPED
+* GL_BUFFER_MAP_POINTER
+* GL_STREAM_DRAW
+* GL_STREAM_READ
+* GL_STREAM_COPY
+* GL_STATIC_DRAW
+* GL_STATIC_READ
+* GL_STATIC_COPY
+* GL_DYNAMIC_DRAW
+* GL_DYNAMIC_READ
+* GL_DYNAMIC_COPY
+* GL_SAMPLES_PASSED
+* GL_BLEND_EQUATION_RGB
+* GL_VERTEX_ATTRIB_ARRAY_ENABLED
+* GL_VERTEX_ATTRIB_ARRAY_SIZE
+* GL_VERTEX_ATTRIB_ARRAY_STRIDE
+* GL_VERTEX_ATTRIB_ARRAY_TYPE
+* GL_CURRENT_VERTEX_ATTRIB
+* GL_VERTEX_PROGRAM_POINT_SIZE
+* GL_VERTEX_PROGRAM_TWO_SIDE
+* GL_VERTEX_ATTRIB_ARRAY_POINTER
+* GL_STENCIL_BACK_FUNC
+* GL_STENCIL_BACK_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_FAIL
+* GL_STENCIL_BACK_PASS_DEPTH_PASS
+* GL_MAX_DRAW_BUFFERS
+* GL_DRAW_BUFFER0
+* GL_DRAW_BUFFER1
+* GL_DRAW_BUFFER2
+* GL_DRAW_BUFFER3
+* GL_DRAW_BUFFER4
+* GL_DRAW_BUFFER5
+* GL_DRAW_BUFFER6
+* GL_DRAW_BUFFER7
+* GL_DRAW_BUFFER8
+* GL_DRAW_BUFFER9
+* GL_DRAW_BUFFER10
+* GL_DRAW_BUFFER11
+* GL_DRAW_BUFFER12
+* GL_DRAW_BUFFER13
+* GL_DRAW_BUFFER14
+* GL_DRAW_BUFFER15
+* GL_BLEND_EQUATION_ALPHA
+* GL_POINT_SPRITE
+* GL_COORD_REPLACE
+* GL_MAX_VERTEX_ATTRIBS
+* GL_VERTEX_ATTRIB_ARRAY_NORMALIZED
+* GL_MAX_TEXTURE_COORDS
+* GL_MAX_TEXTURE_IMAGE_UNITS
+* GL_FRAGMENT_SHADER
+* GL_VERTEX_SHADER
+* GL_MAX_FRAGMENT_UNIFORM_COMPONENTS
+* GL_MAX_VERTEX_UNIFORM_COMPONENTS
+* GL_MAX_VARYING_FLOATS
+* GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS
+* GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
+* GL_SHADER_TYPE
+* GL_FLOAT_VEC2
+* GL_FLOAT_VEC3
+* GL_FLOAT_VEC4
+* GL_INT_VEC2
+* GL_INT_VEC3
+* GL_INT_VEC4
+* GL_BOOL
+* GL_BOOL_VEC2
+* GL_BOOL_VEC3
+* GL_BOOL_VEC4
+* GL_FLOAT_MAT2
+* GL_FLOAT_MAT3
+* GL_FLOAT_MAT4
+* GL_SAMPLER_1D
+* GL_SAMPLER_2D
+* GL_SAMPLER_3D
+* GL_SAMPLER_CUBE
+* GL_SAMPLER_1D_SHADOW
+* GL_SAMPLER_2D_SHADOW
+* GL_DELETE_STATUS
+* GL_COMPILE_STATUS
+* GL_LINK_STATUS
+* GL_VALIDATE_STATUS
+* GL_INFO_LOG_LENGTH
+* GL_ATTACHED_SHADERS
+* GL_ACTIVE_UNIFORMS
+* GL_ACTIVE_UNIFORM_MAX_LENGTH
+* GL_SHADER_SOURCE_LENGTH
+* GL_ACTIVE_ATTRIBUTES
+* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH
+* GL_FRAGMENT_SHADER_DERIVATIVE_HINT
+* GL_SHADING_LANGUAGE_VERSION
+* GL_CURRENT_PROGRAM
+* GL_POINT_SPRITE_COORD_ORIGIN
+* GL_LOWER_LEFT
+* GL_UPPER_LEFT
+* GL_STENCIL_BACK_REF
+* GL_STENCIL_BACK_VALUE_MASK
+* GL_STENCIL_BACK_WRITEMASK
+* GL_CURRENT_RASTER_SECONDARY_COLOR
+* GL_PIXEL_PACK_BUFFER
+* GL_PIXEL_UNPACK_BUFFER
+* GL_PIXEL_PACK_BUFFER_BINDING
+* GL_PIXEL_UNPACK_BUFFER_BINDING
+* GL_FLOAT_MAT2x3
+* GL_FLOAT_MAT2x4
+* GL_FLOAT_MAT3x2
+* GL_FLOAT_MAT3x4
+* GL_FLOAT_MAT4x2
+* GL_FLOAT_MAT4x3
+* GL_SRGB
+* GL_SRGB8
+* GL_SRGB_ALPHA
+* GL_SRGB8_ALPHA8
+* GL_SLUMINANCE_ALPHA
+* GL_SLUMINANCE8_ALPHA8
+* GL_SLUMINANCE
+* GL_SLUMINANCE8
+* GL_COMPRESSED_SRGB
+* GL_COMPRESSED_SRGB_ALPHA
+* GL_COMPRESSED_SLUMINANCE
+* GL_COMPRESSED_SLUMINANCE_ALPHA
+* GL_CLIP_DISTANCE0
+* GL_CLIP_DISTANCE1
+* GL_CLIP_DISTANCE2
+* GL_CLIP_DISTANCE3
+* GL_CLIP_DISTANCE4
+* GL_CLIP_DISTANCE5
+* GL_COMPARE_REF_TO_TEXTURE
+* GL_MAX_CLIP_DISTANCES
+* GL_MAX_VARYING_COMPONENTS
+* GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
+* GL_MAJOR_VERSION
+* GL_MINOR_VERSION
+* GL_NUM_EXTENSIONS
+* GL_CONTEXT_FLAGS
+* GL_DEPTH_BUFFER
+* GL_STENCIL_BUFFER
+* GL_RGBA32F
+* GL_RGB32F
+* GL_RGBA16F
+* GL_RGB16F
+* GL_VERTEX_ATTRIB_ARRAY_INTEGER
+* GL_MAX_ARRAY_TEXTURE_LAYERS
+* GL_MIN_PROGRAM_TEXEL_OFFSET
+* GL_MAX_PROGRAM_TEXEL_OFFSET
+* GL_CLAMP_VERTEX_COLOR
+* GL_CLAMP_FRAGMENT_COLOR
+* GL_CLAMP_READ_COLOR
+* GL_FIXED_ONLY
+* GL_TEXTURE_RED_TYPE
+* GL_TEXTURE_GREEN_TYPE
+* GL_TEXTURE_BLUE_TYPE
+* GL_TEXTURE_ALPHA_TYPE
+* GL_TEXTURE_LUMINANCE_TYPE
+* GL_TEXTURE_INTENSITY_TYPE
+* GL_TEXTURE_DEPTH_TYPE
+* GL_TEXTURE_1D_ARRAY
+* GL_PROXY_TEXTURE_1D_ARRAY
+* GL_TEXTURE_2D_ARRAY
+* GL_PROXY_TEXTURE_2D_ARRAY
+* GL_TEXTURE_BINDING_1D_ARRAY
+* GL_TEXTURE_BINDING_2D_ARRAY
+* GL_R11F_G11F_B10F
+* GL_UNSIGNED_INT_10F_11F_11F_REV
+* GL_RGB9_E5
+* GL_UNSIGNED_INT_5_9_9_9_REV
+* GL_TEXTURE_SHARED_SIZE
+* GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH
+* GL_TRANSFORM_FEEDBACK_BUFFER_MODE
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+* GL_TRANSFORM_FEEDBACK_VARYINGS
+* GL_TRANSFORM_FEEDBACK_BUFFER_START
+* GL_TRANSFORM_FEEDBACK_BUFFER_SIZE
+* GL_PRIMITIVES_GENERATED
+* GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+* GL_RASTERIZER_DISCARD
+* GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+* GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+* GL_INTERLEAVED_ATTRIBS
+* GL_SEPARATE_ATTRIBS
+* GL_TRANSFORM_FEEDBACK_BUFFER
+* GL_TRANSFORM_FEEDBACK_BUFFER_BINDING
+* GL_RGBA32UI
+* GL_RGB32UI
+* GL_RGBA16UI
+* GL_RGB16UI
+* GL_RGBA8UI
+* GL_RGB8UI
+* GL_RGBA32I
+* GL_RGB32I
+* GL_RGBA16I
+* GL_RGB16I
+* GL_RGBA8I
+* GL_RGB8I
+* GL_RED_INTEGER
+* GL_GREEN_INTEGER
+* GL_BLUE_INTEGER
+* GL_ALPHA_INTEGER
+* GL_RGB_INTEGER
+* GL_RGBA_INTEGER
+* GL_BGR_INTEGER
+* GL_BGRA_INTEGER
+* GL_SAMPLER_1D_ARRAY
+* GL_SAMPLER_2D_ARRAY
+* GL_SAMPLER_1D_ARRAY_SHADOW
+* GL_SAMPLER_2D_ARRAY_SHADOW
+* GL_SAMPLER_CUBE_SHADOW
+* GL_UNSIGNED_INT_VEC2
+* GL_UNSIGNED_INT_VEC3
+* GL_UNSIGNED_INT_VEC4
+* GL_INT_SAMPLER_1D
+* GL_INT_SAMPLER_2D
+* GL_INT_SAMPLER_3D
+* GL_INT_SAMPLER_CUBE
+* GL_INT_SAMPLER_1D_ARRAY
+* GL_INT_SAMPLER_2D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_1D
+* GL_UNSIGNED_INT_SAMPLER_2D
+* GL_UNSIGNED_INT_SAMPLER_3D
+* GL_UNSIGNED_INT_SAMPLER_CUBE
+* GL_UNSIGNED_INT_SAMPLER_1D_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
+* GL_QUERY_WAIT
+* GL_QUERY_NO_WAIT
+* GL_QUERY_BY_REGION_WAIT
+* GL_QUERY_BY_REGION_NO_WAIT
+* GL_TEXTURE_RECTANGLE
+* GL_TEXTURE_BINDING_RECTANGLE
+* GL_PROXY_TEXTURE_RECTANGLE
+* GL_MAX_RECTANGLE_TEXTURE_SIZE
+* GL_SAMPLER_2D_RECT
+* GL_SAMPLER_2D_RECT_SHADOW
+* GL_TEXTURE_BUFFER
+* GL_MAX_TEXTURE_BUFFER_SIZE
+* GL_TEXTURE_BINDING_BUFFER
+* GL_TEXTURE_BUFFER_DATA_STORE_BINDING
+* GL_TEXTURE_BUFFER_FORMAT
+* GL_SAMPLER_BUFFER
+* GL_INT_SAMPLER_2D_RECT
+* GL_INT_SAMPLER_BUFFER
+* GL_UNSIGNED_INT_SAMPLER_2D_RECT
+* GL_UNSIGNED_INT_SAMPLER_BUFFER
+* GL_RED_SNORM
+* GL_RG_SNORM
+* GL_RGB_SNORM
+* GL_RGBA_SNORM
+* GL_R8_SNORM
+* GL_RG8_SNORM
+* GL_RGB8_SNORM
+* GL_RGBA8_SNORM
+* GL_R16_SNORM
+* GL_RG16_SNORM
+* GL_RGB16_SNORM
+* GL_RGBA16_SNORM
+* GL_SIGNED_NORMALIZED
+* GL_PRIMITIVE_RESTART
+* GL_PRIMITIVE_RESTART_INDEX
+* GL_BUFFER_ACCESS_FLAGS
+* GL_BUFFER_MAP_LENGTH
+* GL_BUFFER_MAP_OFFSET
+* GL_CONTEXT_CORE_PROFILE_BIT
+* GL_CONTEXT_COMPATIBILITY_PROFILE_BIT
+* GL_LINES_ADJACENCY
+* GL_LINE_STRIP_ADJACENCY
+* GL_TRIANGLES_ADJACENCY
+* GL_TRIANGLE_STRIP_ADJACENCY
+* GL_PROGRAM_POINT_SIZE
+* GL_GEOMETRY_VERTICES_OUT
+* GL_GEOMETRY_INPUT_TYPE
+* GL_GEOMETRY_OUTPUT_TYPE
+* GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS
+* GL_FRAMEBUFFER_ATTACHMENT_LAYERED
+* GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
+* GL_GEOMETRY_SHADER
+* GL_MAX_GEOMETRY_UNIFORM_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_VERTICES
+* GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
+* GL_MAX_VERTEX_OUTPUT_COMPONENTS
+* GL_MAX_GEOMETRY_INPUT_COMPONENTS
+* GL_MAX_GEOMETRY_OUTPUT_COMPONENTS
+* GL_MAX_FRAGMENT_INPUT_COMPONENTS
+* GL_CONTEXT_PROFILE_MASK
+* GL_VERTEX_ATTRIB_ARRAY_DIVISOR
+* GL_RGB10_A2UI
+* GL_SAMPLE_SHADING
+* GL_MIN_SAMPLE_SHADING_VALUE
+* GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET
+* GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS
+* GL_TEXTURE_CUBE_MAP_ARRAY
+* GL_TEXTURE_BINDING_CUBE_MAP_ARRAY
+* GL_PROXY_TEXTURE_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY
+* GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW
+* GL_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY
+* GL_TRANSFORM_FEEDBACK_PAUSED
+* GL_TRANSFORM_FEEDBACK_ACTIVE
+* GL_COMPRESSED_RGBA_BPTC_UNORM
+* GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
+* GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
+* GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
+* GL_COPY_READ_BUFFER_BINDING
+* GL_COPY_WRITE_BUFFER_BINDING
+* GL_NUM_SHADING_LANGUAGE_VERSIONS
+* GL_VERTEX_ATTRIB_ARRAY_LONG
+* GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED
+* GL_MAX_VERTEX_ATTRIB_STRIDE
+* GL_TEXTURE_BUFFER_BINDING
+* GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT
+* GL_PARAMETER_BUFFER
+* GL_PARAMETER_BUFFER_BINDING
+* GL_TRANSFORM_FEEDBACK_OVERFLOW
+* GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW
+* GL_VERTICES_SUBMITTED
+* GL_PRIMITIVES_SUBMITTED
+* GL_VERTEX_SHADER_INVOCATIONS
+* GL_TESS_CONTROL_SHADER_PATCHES
+* GL_TESS_EVALUATION_SHADER_INVOCATIONS
+* GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED
+* GL_FRAGMENT_SHADER_INVOCATIONS
+* GL_COMPUTE_SHADER_INVOCATIONS
+* GL_CLIPPING_INPUT_PRIMITIVES
+* GL_CLIPPING_OUTPUT_PRIMITIVES
+* GL_TEXTURE_MAX_ANISOTROPY
+* GL_MAX_TEXTURE_MAX_ANISOTROPY
+* GL_POLYGON_OFFSET_CLAMP
+* GL_SHADER_BINARY_FORMAT_SPIR_V
+* GL_SPIR_V_BINARY
+* GL_SPIR_V_EXTENSIONS
+* GL_NUM_SPIR_V_EXTENSIONS
+* void glAccum(GLenum op,GLfloat value)
+* void glActiveTexture(GLenum texture)
+* void glAlphaFunc(GLenum func,GLclampf ref)
+* GLboolean glAreTexturesResident(GLsizei n,const GLuint \* textures,GLboolean \* residences)
+* void glArrayElement(GLint i)
+* void glAttachShader(GLuint program,GLuint shader)
+* void glBegin(GLenum mode)
+* void glBeginQuery(GLenum target,GLuint id)
+* void glBindAttribLocation(GLuint program,GLuint index,const GLchar \*name)
+* void glBindBuffer(GLenum target,GLuint buffer)
+* void glBindTexture(GLenum target,GLuint texture)
+* void glBitmap(GLsizei width,GLsizei height,GLfloat xorig,GLfloat yorig,GLfloat xmove,GLfloat ymove,const GLubyte \* bitmap)
+* void glBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glBlendEquation(GLenum mode)
+* void glBlendEquationSeparate(GLenum modeRGB,GLenum modeAlpha)
+* void glBlendFunc(GLenum sfactor,GLenum dfactor)
+* void glBlendFuncSeparate(GLenum srcRGB,GLenum dstRGB,GLenum srcAlpha,GLenum dstAlpha)
+* void glBufferData(GLenum target,GLsizeiptr size,const GLvoid \* data,GLenum usage)
+* void glBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const GLvoid \* data)
+* void glCallList(GLuint list)
+* void glCallLists(GLsizei n,GLenum type,const GLvoid \* lists)
+* void glClear(GLbitfield mask)
+* void glClearAccum(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)
+* void glClearDepth(GLclampd depth)
+* void glClearIndex(GLfloat c)
+* void glClearStencil(GLint s)
+* void glClientActiveTexture(GLenum texture)
+* void glClipPlane(GLenum plane,const GLdouble \* equation)
+* void glColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glColor3s(GLshort red,GLshort green,GLshort blue)
+* void glColor3i(GLint red,GLint green,GLint blue)
+* void glColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glColor3us(GLushort red,GLushort green,GLushort blue)
+* void glColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glColor4b(GLbyte red,GLbyte green,GLbyte blue,GLbyte alpha)
+* void glColor4s(GLshort red,GLshort green,GLshort blue,GLshort alpha)
+* void glColor4i(GLint red,GLint green,GLint blue,GLint alpha)
+* void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha)
+* void glColor4d(GLdouble red,GLdouble green,GLdouble blue,GLdouble alpha)
+* void glColor4ub(GLubyte red,GLubyte green,GLubyte blue,GLubyte alpha)
+* void glColor4us(GLushort red,GLushort green,GLushort blue,GLushort alpha)
+* void glColor4ui(GLuint red,GLuint green,GLuint blue,GLuint alpha)
+* void glColor3bv(const GLbyte \* v)
+* void glColor3sv(const GLshort \* v)
+* void glColor3iv(const GLint \* v)
+* void glColor3fv(const GLfloat \* v)
+* void glColor3dv(const GLdouble \* v)
+* void glColor3ubv(const GLubyte \* v)
+* void glColor3usv(const GLushort \* v)
+* void glColor3uiv(const GLuint \* v)
+* void glColor4bv(const GLbyte \* v)
+* void glColor4sv(const GLshort \* v)
+* void glColor4iv(const GLint \* v)
+* void glColor4fv(const GLfloat \* v)
+* void glColor4dv(const GLdouble \* v)
+* void glColor4ubv(const GLubyte \* v)
+* void glColor4usv(const GLushort \* v)
+* void glColor4uiv(const GLuint \* v)
+* void glColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)
+* void glColorMaterial(GLenum face,GLenum mode)
+* void glColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glColorSubTable(GLenum target,GLsizei start,GLsizei count,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTable(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glColorTableParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glColorTableParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCompileShader(GLuint shader)
+* void glCompressedTexImage1D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexImage3D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei imageSize,const GLvoid \* data)
+* void glConvolutionFilter1D(GLenum target,GLenum internalformat,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glConvolutionParameterf(GLenum target,GLenum pname,GLfloat params)
+* void glConvolutionParameteri(GLenum target,GLenum pname,GLint params)
+* void glConvolutionParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glConvolutionParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glCopyColorSubTable(GLenum target,GLsizei start,GLint x,GLint y,GLsizei width)
+* void glCopyColorTable(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter1D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width)
+* void glCopyConvolutionFilter2D(GLenum target,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum type)
+* void glCopyTexImage1D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLint border)
+* void glCopyTexImage2D(GLenum target,GLint level,GLenum internalformat,GLint x,GLint y,GLsizei width,GLsizei height,GLint border)
+* void glCopyTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLint x,GLint y,GLsizei width)
+* void glCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* void glCopyTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLint x,GLint y,GLsizei width,GLsizei height)
+* GLuint glCreateProgram(void)
+* GLuint glCreateShader(GLenum shaderType)
+* void glCullFace(GLenum mode)
+* void glDeleteBuffers(GLsizei n,const GLuint \* buffers)
+* void glDeleteLists(GLuint list,GLsizei range)
+* void glDeleteProgram(GLuint program)
+* void glDeleteQueries(GLsizei n,const GLuint \* ids)
+* void glDeleteShader(GLuint shader)
+* void glDeleteTextures(GLsizei n,const GLuint \* textures)
+* void glDepthFunc(GLenum func)
+* void glDepthMask(GLboolean flag)
+* void glDepthRange(GLclampd nearVal,GLclampd farVal)
+* void glDetachShader(GLuint program,GLuint shader)
+* void glEnable(GLenum  cap)
+* void glEnableClientState(GLenum cap)
+* void glEnableVertexAttribArray(GLuint index)
+* void glDisableVertexAttribArray(GLuint index)
+* void glDrawArrays(GLenum mode,GLint first,GLsizei count)
+* void glDrawBuffer(GLenum mode)
+* void glDrawBuffers(GLsizei n,const GLenum \*bufs)
+* void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glDrawRangeElements(GLenum mode,GLuint start,GLuint end,GLsizei count,GLenum type,const GLvoid \* indices)
+* void glEdgeFlag(GLboolean flag)
+* void glEdgeFlagPointer(GLsizei stride,const GLvoid \* pointer)
+* void glEnd(void)
+* void glEndList(void)
+* void glEndQuery(GLenum target)
+* void glEvalCoord1f(GLfloat u)
+* void glEvalCoord1d(GLdouble u)
+* void glEvalCoord2f(GLfloat u,GLfloat v)
+* void glEvalCoord2d(GLdouble u,GLdouble v)
+* void glEvalMesh1(GLenum mode,GLint i1,GLint i2)
+* void glEvalPoint1(GLint i)
+* void glEvalPoint2(GLint i,GLint j)
+* void glFeedbackBuffer(GLsizei size,GLenum type,GLfloat \* buffer)
+* void glFinish(void)
+* void glFlush(void)
+* void glFogf(GLenum pname,GLfloat param)
+* void glFogi(GLenum pname,GLint param)
+* void glFogfv(GLenum pname,const GLfloat \* params)
+* void glFogiv(GLenum pname,const GLint \* params)
+* void glFogCoordd(GLdouble coord)
+* void glFogCoordf(GLfloat coord)
+* void glFogCoorddv(GLdouble \* coord)
+* void glFogCoordfv(GLfloat \* coord)
+* void glFogCoordPointer(GLenum type,GLsizei stride,GLvoid \* pointer)
+* void glFrontFace(GLenum mode)
+* void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glGenBuffers(GLsizei n,GLuint \* buffers)
+* GLuint glGenLists(GLsizei range)
+* void glGenQueries(GLsizei n,GLuint \* ids)
+* void glGenTextures(GLsizei n,GLuint \* textures)
+* void glGetBooleanv(GLenum pname,GLboolean \* params)
+* void glGetDoublev(GLenum pname,GLdouble \* params)
+* void glGetFloatv(GLenum pname,GLfloat \* params)
+* void glGetIntegerv(GLenum pname,GLint \* params)
+* void glGetActiveAttrib(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetActiveUniform(GLuint program,GLuint index,GLsizei bufSize,GLsizei \*length,GLint \*size,GLenum \*type,GLchar \*name)
+* void glGetAttachedShaders(GLuint program,GLsizei maxCount,GLsizei \*count,GLuint \*shaders)
+* GLint glGetAttribLocation(GLuint program,const GLchar \*name)
+* void glGetBufferParameteriv(GLenum target,GLenum value,GLint \* data)
+* void glGetBufferPointerv(GLenum target,GLenum pname,GLvoid \** params)
+* void glGetBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,GLvoid \* data)
+* void glGetClipPlane(GLenum plane,GLdouble \* equation)
+* void glGetColorTable(GLenum target,GLenum format,GLenum type,GLvoid \* table)
+* void glGetColorTableParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetColorTableParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetCompressedTexImage(GLenum target,GLint lod,GLvoid \* img)
+* void glGetConvolutionFilter(GLenum target,GLenum format,GLenum type,GLvoid \* image)
+* void glGetConvolutionParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetConvolutionParameteriv(GLenum target,GLenum pname,GLint \* params)
+* GLenum glGetError(void)
+* void glGetHistogram(GLenum target,GLboolean reset,GLenum format,GLenum type,GLvoid \* values)
+* void glGetHistogramParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetHistogramParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetLightfv(GLenum light,GLenum pname,GLfloat \* params)
+* void glGetLightiv(GLenum light,GLenum pname,GLint \* params)
+* void glGetMapdv(GLenum target,GLenum query,GLdouble \* v)
+* void glGetMapfv(GLenum target,GLenum query,GLfloat \* v)
+* void glGetMapiv(GLenum target,GLenum query,GLint \* v)
+* void glGetMaterialfv(GLenum face,GLenum pname,GLfloat \* params)
+* void glGetMaterialiv(GLenum face,GLenum pname,GLint \* params)
+* void glGetMinmax(GLenum target,GLboolean reset,GLenum format,GLenum types,GLvoid \* values)
+* void glGetMinmaxParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetMinmaxParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetPixelMapfv(GLenum map,GLfloat \* data)
+* void glGetPixelMapuiv(GLenum map,GLuint \* data)
+* void glGetPixelMapusv(GLenum map,GLushort \* data)
+* void glGetPointerv(GLenum pname,GLvoid \** params)
+* void glGetPolygonStipple(GLubyte \* pattern)
+* void glGetProgramiv(GLuint program,GLenum pname,GLint \*params)
+* void glGetProgramInfoLog(GLuint program,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetQueryObjectiv(GLuint id,GLenum pname,GLint \* params)
+* void glGetQueryObjectuiv(GLuint id,GLenum pname,GLuint \* params)
+* void glGetQueryiv(GLenum target,GLenum pname,GLint \* params)
+* void glGetSeparableFilter(GLenum target,GLenum format,GLenum type,GLvoid \* row,GLvoid \* column,GLvoid \* span)
+* void glGetShaderiv(GLuint shader,GLenum pname,GLint \*params)
+* void glGetShaderInfoLog(GLuint shader,GLsizei maxLength,GLsizei \*length,GLchar \*infoLog)
+* void glGetShaderSource(GLuint shader,GLsizei bufSize,GLsizei \*length,GLchar \*source)
+* const GLubyte* glGetString(GLenum name)
+* void glGetTexEnvfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexEnviv(GLenum target,GLenum pname,GLint \* params)
+* void glGetTexGendv(GLenum coord,GLenum pname,GLdouble \* params)
+* void glGetTexGenfv(GLenum coord,GLenum pname,GLfloat \* params)
+* void glGetTexGeniv(GLenum coord,GLenum pname,GLint \* params)
+* void glGetTexImage(GLenum target,GLint level,GLenum format,GLenum type,GLvoid \* img)
+* void glGetTexLevelParameterfv(GLenum target,GLint level,GLenum pname,GLfloat \* params)
+* void glGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint \* params)
+* void glGetTexParameterfv(GLenum target,GLenum pname,GLfloat \* params)
+* void glGetTexParameteriv(GLenum target,GLenum pname,GLint \* params)
+* void glGetUniformfv(GLuint program,GLint location,GLfloat \*params)
+* void glGetUniformiv(GLuint program,GLint location,GLint \*params)
+* GLint glGetUniformLocation(GLuint program,const GLchar \*name)
+* void glGetVertexAttribdv(GLuint index,GLenum pname,GLdouble \*params)
+* void glGetVertexAttribfv(GLuint index,GLenum pname,GLfloat \*params)
+* void glGetVertexAttribiv(GLuint index,GLenum pname,GLint \*params)
+* void glGetVertexAttribPointerv(GLuint index,GLenum pname,GLvoid \**pointer)
+* void glHint(GLenum target,GLenum mode)
+* void glHistogram(GLenum target,GLsizei width,GLenum internalformat,GLboolean sink)
+* void glIndexs(GLshort c)
+* void glIndexi(GLint c)
+* void glIndexf(GLfloat c)
+* void glIndexd(GLdouble c)
+* void glIndexub(GLubyte c)
+* void glIndexsv(const GLshort \* c)
+* void glIndexiv(const GLint \* c)
+* void glIndexfv(const GLfloat \* c)
+* void glIndexdv(const GLdouble \* c)
+* void glIndexubv(const GLubyte \* c)
+* void glIndexMask(GLuint mask)
+* void glIndexPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glInitNames(void)
+* void glInterleavedArrays(GLenum format,GLsizei stride,const GLvoid \* pointer)
+* GLboolean glIsBuffer(GLuint buffer)
+* GLboolean glIsEnabled(GLenum cap)
+* GLboolean glIsList(GLuint list)
+* GLboolean glIsProgram(GLuint program)
+* GLboolean glIsQuery(GLuint id)
+* GLboolean glIsShader(GLuint shader)
+* GLboolean glIsTexture(GLuint texture)
+* void glLightf(GLenum light,GLenum pname,GLfloat param)
+* void glLighti(GLenum light,GLenum pname,GLint param)
+* void glLightfv(GLenum light,GLenum pname,const GLfloat \* params)
+* void glLightiv(GLenum light,GLenum pname,const GLint \* params)
+* void glLightModelf(GLenum pname,GLfloat param)
+* void glLightModeli(GLenum pname,GLint param)
+* void glLightModelfv(GLenum pname,const GLfloat \* params)
+* void glLightModeliv(GLenum pname,const GLint \* params)
+* void glLineStipple(GLint factor,GLushort pattern)
+* void glLineWidth(GLfloat width)
+* void glLinkProgram(GLuint program)
+* void glListBase(GLuint base)
+* void glLoadIdentity(void)
+* void glLoadMatrixd(const GLdouble \* m)
+* void glLoadMatrixf(const GLfloat \* m)
+* void glLoadName(GLuint name)
+* void glLoadTransposeMatrixd(const GLdouble \* m)
+* void glLoadTransposeMatrixf(const GLfloat \* m)
+* void glLogicOp(GLenum opcode)
+* void glMap1f(GLenum target,GLfloat u1,GLfloat u2,GLint stride,GLint order,const GLfloat \* points)
+* void glMap1d(GLenum target,GLdouble u1,GLdouble u2,GLint stride,GLint order,const GLdouble \* points)
+* void glMap2f(GLenum target,GLfloat u1,GLfloat u2,GLint ustride,GLint uorder,GLfloat v1,GLfloat v2,GLint vstride,GLint vorder,const GLfloat \* points)
+* void glMap2d(GLenum target,GLdouble u1,GLdouble u2,GLint ustride,GLint uorder,GLdouble v1,GLdouble v2,GLint vstride,GLint vorder,const GLdouble \* points)
+* void \* glMapBuffer(GLenum target,GLenum access)
+* void glMapGrid1d(GLint un,GLdouble u1,GLdouble u2)
+* void glMapGrid1f(GLint un,GLfloat u1,GLfloat u2)
+* void glMapGrid2d(GLint un,GLdouble u1,GLdouble u2,GLint vn,GLdouble v1,GLdouble v2)
+* void glMapGrid2f(GLint un,GLfloat u1,GLfloat u2,GLint vn,GLfloat v1,GLfloat v2)
+* void glMaterialf(GLenum face,GLenum pname,GLfloat param)
+* void glMateriali(GLenum face,GLenum pname,GLint param)
+* void glMatrixMode(GLenum mode)
+* void glMinmax(GLenum target,GLenum internalformat,GLboolean sink)
+* void glMultMatrixd(const GLdouble \* m)
+* void glMultMatrixf(const GLfloat \* m)
+* void glMultTransposeMatrixd(const GLdouble \* m)
+* void glMultTransposeMatrixf(const GLfloat \* m)
+* void glMultiDrawArrays(GLenum mode,GLint \* first,GLsizei \* count,GLsizei primcount)
+* void glMultiDrawElements(GLenum mode,const GLsizei \* count,GLenum type,const GLvoid \** indices,GLsizei primcount)
+* void glMultiTexCoord1s(GLenum target,GLshort s)
+* void glMultiTexCoord1i(GLenum target,GLint s)
+* void glMultiTexCoord1f(GLenum target,GLfloat s)
+* void glMultiTexCoord1d(GLenum target,GLdouble s)
+* void glMultiTexCoord2s(GLenum target,GLshort s,GLshort t)
+* void glMultiTexCoord2i(GLenum target,GLint s,GLint t)
+* void glMultiTexCoord2f(GLenum target,GLfloat s,GLfloat t)
+* void glMultiTexCoord2d(GLenum target,GLdouble s,GLdouble t)
+* void glMultiTexCoord3s(GLenum target,GLshort s,GLshort t,GLshort r)
+* void glMultiTexCoord3i(GLenum target,GLint s,GLint t,GLint r)
+* void glMultiTexCoord3f(GLenum target,GLfloat s,GLfloat t,GLfloat r)
+* void glMultiTexCoord3d(GLenum target,GLdouble s,GLdouble t,GLdouble r)
+* void glMultiTexCoord4s(GLenum target,GLshort s,GLshort t,GLshort r,GLshort q)
+* void glMultiTexCoord4i(GLenum target,GLint s,GLint t,GLint r,GLint q)
+* void glMultiTexCoord4f(GLenum target,GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glMultiTexCoord4d(GLenum target,GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glMultiTexCoord1sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord1iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord1fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord1dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord2sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord2iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord2fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord2dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord3sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord3iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord3fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord3dv(GLenum target,const GLdouble \* v)
+* void glMultiTexCoord4sv(GLenum target,const GLshort \* v)
+* void glMultiTexCoord4iv(GLenum target,const GLint \* v)
+* void glMultiTexCoord4fv(GLenum target,const GLfloat \* v)
+* void glMultiTexCoord4dv(GLenum target,const GLdouble \* v)
+* void glNewList(GLuint list,GLenum mode)
+* void glNormal3b(GLbyte nx,GLbyte ny,GLbyte nz)
+* void glNormal3d(GLdouble nx,GLdouble ny,GLdouble nz)
+* void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)
+* void glNormal3i(GLint nx,GLint ny,GLint nz)
+* void glNormal3s(GLshort nx,GLshort ny,GLshort nz)
+* void glNormal3bv(const GLbyte \* v)
+* void glNormal3dv(const GLdouble \* v)
+* void glNormal3fv(const GLfloat \* v)
+* void glNormal3iv(const GLint \* v)
+* void glNormal3sv(const GLshort \* v)
+* void glNormalPointer(GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble nearVal,GLdouble farVal)
+* void glPassThrough(GLfloat token)
+* void glPixelMapfv(GLenum map,GLsizei mapsize,const GLfloat \* values)
+* void glPixelMapuiv(GLenum map,GLsizei mapsize,const GLuint \* values)
+* void glPixelMapusv(GLenum map,GLsizei mapsize,const GLushort \* values)
+* void glPixelStoref(GLenum pname,GLfloat param)
+* void glPixelStorei(GLenum pname,GLint param)
+* void glPixelTransferf(GLenum pname,GLfloat param)
+* void glPixelTransferi(GLenum pname,GLint param)
+* void glPixelZoom(GLfloat xfactor,GLfloat yfactor)
+* void glPointParameterf(GLenum pname,GLfloat param)
+* void glPointParameteri(GLenum pname,GLint param)
+* void glPointSize(GLfloat size)
+* void glPolygonMode(GLenum face,GLenum mode)
+* void glPolygonOffset(GLfloat factor,GLfloat units)
+* void glPolygonStipple(const GLubyte \* pattern)
+* void glPushAttrib(GLbitfield mask)
+* void glPushClientAttrib(GLbitfield mask)
+* void glPushMatrix(void)
+* void glPushName(GLuint name)
+* void glPrioritizeTextures(GLsizei n,const GLuint \* textures,const GLclampf \* priorities)
+* void glPopMatrix(void)
+* void glRasterPos2s(GLshort x,GLshort y)
+* void glRasterPos2i(GLint x,GLint y)
+* void glRasterPos2f(GLfloat x,GLfloat y)
+* void glRasterPos2d(GLdouble x,GLdouble y)
+* void glRasterPos3s(GLshort x,GLshort y,GLshort z)
+* void glRasterPos3i(GLint x,GLint y,GLint z)
+* void glRasterPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glRasterPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glRasterPos4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glRasterPos4i(GLint x,GLint y,GLint z,GLint w)
+* void glRasterPos4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glRasterPos4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glReadBuffer(GLenum mode)
+* void glReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,GLvoid \* data)
+* void glRectd(GLdouble x1,GLdouble y1,GLdouble x2,GLdouble y2)
+* void glRectf(GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
+* void glRecti(GLint x1,GLint y1,GLint x2,GLint y2)
+* void glRects(GLshort x1,GLshort y1,GLshort x2,GLshort y2)
+* void glRectdv(const GLdouble \* v1,const GLdouble \* v2)
+* void glRectfv(const GLfloat \* v1,const GLfloat \* v2)
+* void glRectiv(const GLint \* v1,const GLint \* v2)
+* void glRectsv(const GLshort \* v1,const GLshort \* v2)
+* GLint glRenderMode(GLenum mode)
+* void glResetHistogram(GLenum target)
+* void glRotated(GLdouble angle,GLdouble x,GLdouble y,GLdouble z)
+* void glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)
+* void glSampleCoverage(GLclampf value,GLboolean invert)
+* void glScaled(GLdouble x,GLdouble y,GLdouble z)
+* void glScalef(GLfloat x,GLfloat y,GLfloat z)
+* void glScissor(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glSecondaryColor3b(GLbyte red,GLbyte green,GLbyte blue)
+* void glSecondaryColor3s(GLshort red,GLshort green,GLshort blue)
+* void glSecondaryColor3i(GLint red,GLint green,GLint blue)
+* void glSecondaryColor3f(GLfloat red,GLfloat green,GLfloat blue)
+* void glSecondaryColor3d(GLdouble red,GLdouble green,GLdouble blue)
+* void glSecondaryColor3ub(GLubyte red,GLubyte green,GLubyte blue)
+* void glSecondaryColor3us(GLushort red,GLushort green,GLushort blue)
+* void glSecondaryColor3ui(GLuint red,GLuint green,GLuint blue)
+* void glSecondaryColor3bv(const GLbyte \* v)
+* void glSecondaryColor3sv(const GLshort \* v)
+* void glSecondaryColor3iv(const GLint \* v)
+* void glSecondaryColor3fv(const GLfloat \* v)
+* void glSecondaryColor3dv(const GLdouble \* v)
+* void glSecondaryColor3ubv(const GLubyte \* v)
+* void glSecondaryColor3usv(const GLushort \* v)
+* void glSecondaryColor3uiv(const GLuint \* v)
+* void glSecondaryColorPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glSelectBuffer(GLsizei size,GLuint \* buffer)
+* void glSeparableFilter2D(GLenum target,GLenum internalformat,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* row,const GLvoid \* column)
+* void glShadeModel(GLenum mode)
+* void glShaderSource(GLuint shader,GLsizei count,const GLchar \**string,const GLint \*length)
+* void glStencilFunc(GLenum func,GLint ref,GLuint mask)
+* void glStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)
+* void glStencilMask(GLuint mask)
+* void glStencilMaskSeparate(GLenum face,GLuint mask)
+* void glStencilOp(GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glStencilOpSeparate(GLenum face,GLenum sfail,GLenum dpfail,GLenum dppass)
+* void glTexCoord1s(GLshort s)
+* void glTexCoord1i(GLint s)
+* void glTexCoord1f(GLfloat s)
+* void glTexCoord1d(GLdouble s)
+* void glTexCoord2s(GLshort s,GLshort t)
+* void glTexCoord2i(GLint s,GLint t)
+* void glTexCoord2f(GLfloat s,GLfloat t)
+* void glTexCoord2d(GLdouble s,GLdouble t)
+* void glTexCoord3s(GLshort s,GLshort t,GLshort r)
+* void glTexCoord3i(GLint s,GLint t,GLint r)
+* void glTexCoord3f(GLfloat s,GLfloat t,GLfloat r)
+* void glTexCoord3d(GLdouble s,GLdouble t,GLdouble r)
+* void glTexCoord4s(GLshort s,GLshort t,GLshort r,GLshort q)
+* void glTexCoord4i(GLint s,GLint t,GLint r,GLint q)
+* void glTexCoord4f(GLfloat s,GLfloat t,GLfloat r,GLfloat q)
+* void glTexCoord4d(GLdouble s,GLdouble t,GLdouble r,GLdouble q)
+* void glTexCoord1sv(const GLshort \* v)
+* void glTexCoord1iv(const GLint \* v)
+* void glTexCoord1fv(const GLfloat \* v)
+* void glTexCoord1dv(const GLdouble \* v)
+* void glTexCoord2sv(const GLshort \* v)
+* void glTexCoord2iv(const GLint \* v)
+* void glTexCoord2fv(const GLfloat \* v)
+* void glTexCoord2dv(const GLdouble \* v)
+* void glTexCoord3sv(const GLshort \* v)
+* void glTexCoord3iv(const GLint \* v)
+* void glTexCoord3fv(const GLfloat \* v)
+* void glTexCoord3dv(const GLdouble \* v)
+* void glTexCoord4sv(const GLshort \* v)
+* void glTexCoord4iv(const GLint \* v)
+* void glTexCoord4fv(const GLfloat \* v)
+* void glTexCoord4dv(const GLdouble \* v)
+* void glTexCoordPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glTexEnvf(GLenum target,GLenum pname,GLfloat param)
+* void glTexEnvi(GLenum target,GLenum pname,GLint param)
+* void glTexGeni(GLenum coord,GLenum pname,GLint param)
+* void glTexGenf(GLenum coord,GLenum pname,GLfloat param)
+* void glTexGend(GLenum coord,GLenum pname,GLdouble param)
+* void glTexGeniv(GLenum coord,GLenum pname,const GLint \* params)
+* void glTexGenfv(GLenum coord,GLenum pname,const GLfloat \* params)
+* void glTexGendv(GLenum coord,GLenum pname,const GLdouble \* params)
+* void glTexImage1D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage2D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexImage3D(GLenum target,GLint level,GLint internalFormat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexParameterf(GLenum target,GLenum pname,GLfloat param)
+* void glTexParameteri(GLenum target,GLenum pname,GLint param)
+* void glTexParameterfv(GLenum target,GLenum pname,const GLfloat \* params)
+* void glTexParameteriv(GLenum target,GLenum pname,const GLint \* params)
+* void glTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid \* data)
+* void glTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLenum type,const GLvoid \* data)
+* void glTranslated(GLdouble x,GLdouble y,GLdouble z)
+* void glTranslatef(GLfloat x,GLfloat y,GLfloat z)
+* void glUniform1f(GLint location,GLfloat v0)
+* void glUniform2f(GLint location,GLfloat v0,GLfloat v1)
+* void glUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glUniform1i(GLint location,GLint v0)
+* void glUniform2i(GLint location,GLint v0,GLint v1)
+* void glUniform3i(GLint location,GLint v0,GLint v1,GLint v2)
+* void glUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)
+* void glUniform1fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform2fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform3fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform4fv(GLint location,GLsizei count,const GLfloat \*value)
+* void glUniform1iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform2iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform3iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniform4iv(GLint location,GLsizei count,const GLint \*value)
+* void glUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix2x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix3x4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUniformMatrix4x3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat \*value)
+* void glUseProgram(GLuint program)
+* void glValidateProgram(GLuint program)
+* void glVertex2s(GLshort x,GLshort y)
+* void glVertex2i(GLint x,GLint y)
+* void glVertex2f(GLfloat x,GLfloat y)
+* void glVertex2d(GLdouble x,GLdouble y)
+* void glVertex3s(GLshort x,GLshort y,GLshort z)
+* void glVertex3i(GLint x,GLint y,GLint z)
+* void glVertex3f(GLfloat x,GLfloat y,GLfloat z)
+* void glVertex3d(GLdouble x,GLdouble y,GLdouble z)
+* void glVertex4s(GLshort x,GLshort y,GLshort z,GLshort w)
+* void glVertex4i(GLint x,GLint y,GLint z,GLint w)
+* void glVertex4f(GLfloat x,GLfloat y,GLfloat z,GLfloat w)
+* void glVertex4d(GLdouble x,GLdouble y,GLdouble z,GLdouble w)
+* void glVertex2sv(const GLshort \* v)
+* void glVertex2iv(const GLint \* v)
+* void glVertex2fv(const GLfloat \* v)
+* void glVertex2dv(const GLdouble \* v)
+* void glVertex3sv(const GLshort \* v)
+* void glVertex3iv(const GLint \* v)
+* void glVertex3fv(const GLfloat \* v)
+* void glVertex3dv(const GLdouble \* v)
+* void glVertex4sv(const GLshort \* v)
+* void glVertex4iv(const GLint \* v)
+* void glVertex4fv(const GLfloat \* v)
+* void glVertex4dv(const GLdouble \* v)
+* void glVertexAttrib1f(GLuint index,GLfloat v0)
+* void glVertexAttrib1s(GLuint index,GLshort v0)
+* void glVertexAttrib1d(GLuint index,GLdouble v0)
+* void glVertexAttrib2f(GLuint index,GLfloat v0,GLfloat v1)
+* void glVertexAttrib2s(GLuint index,GLshort v0,GLshort v1)
+* void glVertexAttrib2d(GLuint index,GLdouble v0,GLdouble v1)
+* void glVertexAttrib3f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2)
+* void glVertexAttrib3s(GLuint index,GLshort v0,GLshort v1,GLshort v2)
+* void glVertexAttrib3d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2)
+* void glVertexAttrib4f(GLuint index,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)
+* void glVertexAttrib4s(GLuint index,GLshort v0,GLshort v1,GLshort v2,GLshort v3)
+* void glVertexAttrib4d(GLuint index,GLdouble v0,GLdouble v1,GLdouble v2,GLdouble v3)
+* void glVertexAttrib4Nub(GLuint index,GLubyte v0,GLubyte v1,GLubyte v2,GLubyte v3)
+* void glVertexAttrib1fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib1sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib1dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib2fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib2sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib2dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib3fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib3sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib3dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4fv(GLuint index,const GLfloat \*v)
+* void glVertexAttrib4sv(GLuint index,const GLshort \*v)
+* void glVertexAttrib4dv(GLuint index,const GLdouble \*v)
+* void glVertexAttrib4iv(GLuint index,const GLint \*v)
+* void glVertexAttrib4bv(GLuint index,const GLbyte \*v)
+* void glVertexAttrib4ubv(GLuint index,const GLubyte \*v)
+* void glVertexAttrib4usv(GLuint index,const GLushort \*v)
+* void glVertexAttrib4uiv(GLuint index,const GLuint \*v)
+* void glVertexAttribPointer(GLuint index,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const GLvoid \* pointer)
+* void glVertexPointer(GLint size,GLenum type,GLsizei stride,const GLvoid \* pointer)
+* void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
+* void glWindowPos2s(GLshort x,GLshort y)
+* void glWindowPos2i(GLint x,GLint y)
+* void glWindowPos2f(GLfloat x,GLfloat y)
+* void glWindowPos2d(GLdouble x,GLdouble y)
+* void glWindowPos3s(GLshort x,GLshort y,GLshort z)
+* void glWindowPos3i(GLint x,GLint y,GLint z)
+* void glWindowPos3f(GLfloat x,GLfloat y,GLfloat z)
+* void glWindowPos3d(GLdouble x,GLdouble y,GLdouble z)
+* void glWindowPos2sv(const GLshort \* v)
+* void glWindowPos2iv(const GLint \* v)
+* void glWindowPos2fv(const GLfloat \* v)
+* void glWindowPos2dv(const GLdouble \* v)
+* void glWindowPos3sv(const GLshort \* v)
+* void glWindowPos3iv(const GLint \* v)
+* void glWindowPos3fv(const GLfloat \* v)
+* void glWindowPos3dv(const GLdouble \* v)
+* void gluBeginCurve(GLUnurbs* nurb)
+* void gluBeginPolygon(GLUtesselator* tess)
+* void gluBeginSurface(GLUnurbs* nurb)
+* void gluBeginTrim(GLUnurbs* nurb)
+* void gluCylinder(GLUquadric* quad,GLdouble base,GLdouble top,GLdouble height,GLint slices,GLint stacks)
+* void gluDeleteNurbsRenderer(GLUnurbs* nurb)
+* void gluDeleteQuadric(GLUquadric* quad)
+* void gluDeleteTess(GLUtesselator* tess)
+* void gluDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops)
+* void gluEndCurve(GLUnurbs* nurb)
+* void gluEndPolygon(GLUtesselator* tess)
+* void gluEndSurface(GLUnurbs* nurb)
+* void gluEndTrim(GLUnurbs* nurb)
+* const GLubyte \* gluErrorString(GLenum error)
+* void gluGetNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat* data)
+* const GLubyte \* gluGetString(GLenum name)
+* void gluGetTessProperty(GLUtesselator* tess,GLenum which,GLdouble* data)
+* void gluLoadSamplingMatrices(GLUnurbs* nurb,const GLfloat \* model,const GLfloat \* perspective,const GLint \* view)
+* void gluLookAt(GLdouble eyeX,GLdouble eyeY,GLdouble eyeZ,GLdouble centerX,GLdouble centerY,GLdouble centerZ,GLdouble upX,GLdouble upY,GLdouble upZ)
+* GLUnurbs \*gluNewNurbsRenderer(void)
+* GLUquadric \*gluNewQuadric(void)
+* GLUtesselator* gluNewTess(void)
+* void gluNextContour(GLUtesselator* tess,GLenum type)
+* void gluNurbsCurve(GLUnurbs* nurb,GLint knotCount,GLfloat \* knots,GLint stride,GLfloat \* control,GLint order,GLenum type)
+* void gluNurbsProperty(GLUnurbs* nurb,GLenum property,GLfloat value)
+* void gluNurbsSurface(GLUnurbs* nurb,GLint sKnotCount,GLfloat* sKnots,GLint tKnotCount,GLfloat* tKnots,GLint sStride,GLint tStride,GLfloat* control,GLint sOrder,GLint tOrder,GLenum type)
+* void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
+* void gluPartialDisk(GLUquadric* quad,GLdouble inner,GLdouble outer,GLint slices,GLint loops,GLdouble start,GLdouble sweep)
+* void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar)
+* void gluPickMatrix(GLdouble x,GLdouble y,GLdouble delX,GLdouble delY,GLint \* viewport)
+* GLint gluProject(GLdouble objX,GLdouble objY,GLdouble objZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* winX,GLdouble* winY,GLdouble* winZ)
+* void gluPwlCurve(GLUnurbs* nurb,GLint count,GLfloat* data,GLint stride,GLenum type)
+* void gluQuadricDrawStyle(GLUquadric* quad,GLenum draw)
+* void gluQuadricNormals(GLUquadric* quad,GLenum normal)
+* void gluQuadricOrientation(GLUquadric* quad,GLenum orientation)
+* void gluQuadricTexture(GLUquadric* quad,GLboolean texture)
+* GLint gluScaleImage(GLenum format,GLsizei wIn,GLsizei hIn,GLenum typeIn,const void \* dataIn,GLsizei wOut,GLsizei hOut,GLenum typeOut,GLvoid* dataOut)
+* void gluSphere(GLUquadric* quad,GLdouble radius,GLint slices,GLint stacks)
+* void gluTessBeginContour(GLUtesselator* tess)
+* void gluTessBeginPolygon(GLUtesselator* tess,GLvoid* data)
+* void gluTessEndContour(GLUtesselator* tess)
+* void gluTessEndPolygon(GLUtesselator* tess)
+* void gluTessNormal(GLUtesselator* tess,GLdouble valueX,GLdouble valueY,GLdouble valueZ)
+* void gluTessProperty(GLUtesselator* tess,GLenum which,GLdouble data)
+* void gluTessVertex(GLUtesselator* tess,GLdouble \* location,GLvoid* data)
+* GLint gluUnProject(GLdouble winX,GLdouble winY,GLdouble winZ,const GLdouble \* model,const GLdouble \* proj,const GLint \* view,GLdouble* objX,GLdouble* objY,GLdouble* objZ)
+* void glDisable(GLenum cap)
diff --git a/docs/ja-jp/source/ringpm.txt b/docs/ja-jp/source/ringpm.txt
new file mode 100644 (file)
index 0000000..6a04530
--- /dev/null
@@ -0,0 +1,630 @@
+.. index:: 
+       single: Ring パッケージ管理プログラム (RingPM); はじめに
+
+======================================
+Ring パッケージ管理プログラム (RingPM)
+======================================
+
+Ring パッケージ管理プログラム (RingPM) の用法を学びます。
+
+RingPM ツールは Ring パッケージの検索、インストール、および更新をします。
+
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); 特徴
+
+特徴
+====
+
+パッケージ管理プログラムではパッケージ間の互換性確認のために意味つきバージョン管理を使用しています。
+
+このようなオプションがパッケージ管理プログラムにあります。
+
+.. code-block:: none
+
+       用法 : ringpm [コマンド]
+       コマンド : search  [キーワード...]
+       コマンド : refresh : レジストリの更新 (パッケージリスト)
+       コマンド : install [ <パッケージ名> [from <ユーザ名>] [branch <ブランチ名>] ]
+       コマンド : list    [-u : 更新の確認]
+       コマンド : run     [パッケージ名]
+       コマンド : update  <パッケージ名>
+       コマンド : remove  <パッケージ名>
+       コマンド : format  : すべてのパッケージを削除
+       コマンド : new     <パッケージ名>
+       コマンド : package : 現在のフォルダにパッケージを作成
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージの検索
+
+パッケージの検索
+================
+
+新しいパッケージを検索するには Search コマンドを使用します。
+
+このコマンドは RingPM レジストリ (パッケージのインデックス) を検索します。
+
+RingPM レジストリは登録済み全パッケージのローカルコピーです。
+
+.. code-block:: none
+
+       ringpm search [キーワード...]
+
+用例:
+
+.. code-block:: none
+
+       ringpm search notepad
+
+実行結果:
+
+.. code-block:: none
+
+       Package : ringnotepad (Ring Notepad)
+       Package : notepadppeditorextension (Notepad++ Editor Extension package)
+
+RingPM レジストリにある全パッケージを表示するには、キーワード無指定で Search コマンドを使用してください。
+
+用例:
+
+.. code-block:: none
+
+       ringpm search
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); RingPM レジストリの更新
+
+RingPM レジストリの更新
+=======================
+
+RingPM レジストリは登録済み全パッケージのローカルコピーです。
+
+ローカルコピーを更新するには Refresh コマンドを使用します。
+
+用例:
+
+.. code-block:: none
+
+       ringpm refresh
+
+実行結果:
+
+.. code-block:: none
+
+       No updates to the Registry, Nothing to do!
+
+または
+
+.. code-block:: none
+
+       The Registry is updated from revision 110 (2019/01/13) to revision 112 (2019/01/15)
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージのインストール
+
+パッケージのインストール
+========================
+
+
+新しいパッケージをインストールするには Install コマンドを使用します。
+
+.. code-block:: none
+
+       ringpm install [ <パッケージ名> [from <ユーザ名>] [branch <ブランチ名>] ]
+
+RingPM レジストリからパッケージ情報を取得するには、パッケージ名のみ打鍵します。
+または、ユーザ名 (GitHub) と GitHub プロジェクトのブランチ名を決定します。
+
+カレントフォルダがパッケージフォルダならば、パッケージ名の記述は不要です。
+
+用例 (1) :
+
+.. code-block:: none
+
+       ringpm install ringnotepad
+
+用例 (2) :
+
+.. code-block:: none
+
+       ringpm install goldmagic800
+
+用例 (3) :
+
+.. code-block:: none
+
+       ringpm install gameoflife
+
+RingPM レジストリにパッケージが追加されていない場合は、 GitHub ユーザから直接インストールできます
+
+用例 (4) :
+
+.. code-block:: none
+
+       ringpm install firstpackage from mahmoudfayed
+
+インストール後にパッケージを実行するには
+
+.. code-block:: none
+
+       ringpm run firstpackage
+
+カレントフォルダへパッケージをインストールするには
+
+用例 (5) :
+
+.. code-block:: none
+
+       ringpm install
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); インストール済みパッケージのリスト表示
+
+インストール済みパッケージのリスト表示
+======================================
+
+インストール済みパッケージを確認するには List コマンドを使用します。
+
+.. code-block:: none
+
+       ringpm list [-u : 更新の確認]
+
+用例:
+
+.. code-block:: none
+
+       ringpm list
+
+実行結果:
+
+.. code-block:: none
+
+       (analogclock)          : The AnalogClock Package [master]         -- (1.0.0)
+       (androidringlibsdl)    : The AndroidRingLibSDL Package [master]   -- (1.0.0)
+       (androidringqt)        : The AndroidRingQt Package [master]       -- (1.0.0)
+       (atomeditorextension)  : The AtomEditorExtension Package [master] -- (1.0.0)
+       (bignumber)            : The BigNumber Package [master]           -- (1.0.0)
+       (calculator)           : The Calculator Package [master]          -- (1.0.0)
+       (cards)                : The Cards Package [master]               -- (1.0.0)
+       (checkers)             : The Checkers Package [master]            -- (1.0.0)
+       (chess)                : The Chess Package [master]               -- (1.0.0)
+       ....
+
+新しい更新を確認するには
+
+.. code-block:: none
+
+       ringpm list -u
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージの実行
+
+パッケージの実行
+================
+
+インストール後にパッケージを実行するには Run コマンドを使用します。
+
+.. code-block:: none
+
+       ringpm run [パッケージ名]
+
+用例(1):
+
+.. code-block:: none
+
+       ringpm run ringnotepad
+
+用例(2):
+
+.. code-block:: none
+
+       ringpm run goldmagic800
+
+用例(3):
+
+.. code-block:: none
+
+       ringpm run gameoflife
+
+カレントフォルダでパッケージを実行するには
+
+用例(4):
+
+.. code-block:: none
+
+       ringpm run
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージの更新
+
+パッケージの更新
+================
+
+パッケージを更新するには Update コマンドを使用します。
+
+.. code-block:: none
+
+       ringpm update <パッケージ名>
+
+用例:
+
+.. code-block:: none
+
+       ringpm update ringnotepad
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージの削除
+
+パッケージの削除
+================
+
+パッケージを削除するには Remove コマンドを使用します。
+
+.. code-block:: none
+
+       ringpm remove <パッケージ名>
+
+用例:
+
+.. code-block:: none
+
+       ringpm remove ringnotepad
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージの全削除
+
+パッケージの全削除
+==================
+
+全てのパッケージを削除するには Format コマンドを使用します。
+
+用例:
+
+.. code-block:: none
+
+       ringpm format
+
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージの新規作成
+
+パッケージの新規作成
+====================
+
+パッケージを新規作成するには New コマンドを使用します。
+
+.. code-block:: none
+
+       ringpm new <パッケージ名>
+
+用例:
+
+.. code-block:: none
+
+       ringpm new myapp
+
+これは新しいフォルダ myapp を作成します。
+
+このようなファイルが新しいフォルダにあります。
+
+* package.ring : パッケージの概要とファイル 
+* main.ring : メインプログラム (Run コマンドで使用)
+* lib.ring : パッケージと関連するライブラリファイル
+
+ファイル : main.ring
+
+.. code-block:: ring
+
+       # メインファイル
+
+       load "lib.ring"
+
+       func main
+
+               ? "Hello, World!"
+
+
+ファイル : lib.ring
+
+.. code-block:: ring
+
+       # ライブラリファイル
+
+ファイル : package.ring
+
+.. code-block:: ring
+
+       aPackageInfo = [
+               :name = "The myapp Package",
+               :description = "Our myapp package using the Ring programming language",
+               :folder = "myapp",
+               :developer = "",
+               :email = "",
+               :license = "MIT License",
+               :version = "1.0.0",
+               :ringversion = "1.10",
+               :versions =     [
+                       [
+                               :version = "1.0.0",
+                               :branch = "master"
+                       ]
+               ],
+               :libs =         [
+                       [
+                               :name = "",
+                               :version = "",
+                               :providerusername = ""
+                       ]
+               ],
+               :files =        [
+                       "lib.ring",
+                       "main.ring"
+               ],
+               :ringfolderfiles =      [
+
+               ],
+               :windowsfiles =         [
+
+               ],
+               :linuxfiles =   [
+
+               ],
+               :ubuntufiles =  [
+
+               ],
+               :fedorafiles =  [
+
+               ],
+               :macosfiles =   [
+
+               ],
+               :windowsringfolderfiles =       [
+
+               ],
+               :linuxringfolderfiles =         [
+
+               ],
+               :ubunturingfolderfiles =        [
+
+               ],
+               :fedoraringfolderfiles =        [
+
+               ],
+               :macosringfolderfiles =         [
+
+               ],
+               :run = "ring main.ring",
+               :windowsrun = "",
+               :linuxrun = "",
+               :macosrun = "",
+               :ubunturun = "",
+               :fedorarun = "",
+               :setup = "",
+               :windowssetup = "",
+               :linuxsetup = "",
+               :macossetup = "",
+               :ubuntusetup = "",
+               :fedorasetup = "",
+               :remove = "",
+               :windowsremove = "",
+               :linuxremove = "",
+               :macosremove = "",
+               :ubunturemove = "",
+               :fedoraremove = ""
+       ]
+       
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); パッケージ概要ファイル
+
+パッケージ概要ファイル
+======================
+
+パッケージ概要ファイルには、 aPackageInfo のリストで定義されたパッケージ情報があります。
+
+=======================        =================================================================================
+属性                 説明
+=======================        =================================================================================
+Name                   パッケージ名
+Description            パッケージの概要
+Folder                 フォルダ名 (ring/ringpm/packages へ作成されます)
+Developer              パッケージ開発者名
+Email                  パッケージ開発者の電子メールアドレス
+License                        パッケージの使用許諾条件
+Version                        パッケージの現行バージョン (最新版数)
+RingVersion            必要とされる Ring 言語のバージョン (最小版数)
+Versions               GitHub プロジェクトの別ブランチにより提示されるバージョンのリスト
+Libs                   依存性リスト (名前、バージョンと GitHub のユーザ名)
+Files                  ファイルリスト (ring/ringpm/packages/[フォルダ] へインストールされます)
+RingFolderFiles                ファイルリスト (Ring のフォルダへインストールされます)
+WindowsFiles           Files と同じですが Microsoft Windows のみで行う処理を指定
+LinuxFiles             Files と同じですが Linux のみで行う処理を指定
+MacOSFiles             Files と同じですが macOS のみで行う処理を指定
+UbuntuFiles            Files と同じですが Ubuntu のみで行う処理を指定
+FedoraFiles            Files と同じですが Fedora のみで行う処理を指定
+WindowsRingFolderFiles         RingFolderFiles と同じですが Microsoft Windows のみで行う処理を指定
+LinuxRingFolderFiles   RingFolderFiles と同じですが Linux のみで行う処理を指定
+MacOSRingFolderFiles   RingFolderFiles と同じですが macOS のみで行う処理を指定
+UbuntuRingFolderFiles  RingFolderFiles と同じですが Ubuntu のみで行う処理を指定
+FedoraRingFolderFiles  RingFolderFiles と同じですが Fedora のみで行う処理を指定
+Run                    パッケージで実行するシステムコマンド (コマンドプロンプトまたは端末)
+WindowsRun             Run と同じですが Microsoft Windows のみで行う処理を指定
+LinuxRun               Run と同じですが Linux のみで行う処理を指定
+MacOSRun               Run と同じですが macOS のみで行う処理を指定
+UbuntuRun              Run と同じですが Ubuntu のみで行う処理を指定
+FedoraRun              Run と同じですが Fedora のみで行う処理を指定
+Setup                  パッケージファイルのダウンロード後に実行するシステムコマンド (コマンドプロンプトまたは端末)
+WindowsSetup           Setup と同じですが Microsoft Windows のみで行う処理を指定
+LinuxSetup             Setup と同じですが Linux のみで行う処理を指定
+MacOSSetup             Setup と同じですが macOS のみで行う処理を指定
+UbuntuSetup            Setup と同じですが Ubuntu のみで行う処理を指定
+FedoraSetup            Setup と同じですが Fedora のみで行う処理を指定
+Remove                 パッケージファイルの削除前に実行するシステムコマンド (コマンドプロンプトまたは端末)
+WindowsRemove          Remove と同じですが Microsoft Windows のみで行う処理を指定
+LinuxRemove            Remove と同じですが Linux のみで行う処理を指定
+MacOSRemove            Remove と同じですが macOS のみで行う処理を指定
+UbuntuRemove           Remove と同じですが Ubuntu のみで行う処理を指定
+FedoraRemove           Remove と同じですが Fedora のみで行う処理を指定
+=======================        =================================================================================
+
+
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); カレントフォルダでのパッケージ作成
+
+カレントフォルダでのパッケージ作成
+==================================
+
+既存アプリケーションでパッケージを作成するには、このコマンドをアプリケーションのフォルダへ移動後に実行します。
+
+.. code-block:: none
+
+       ringpm package
+
+これは、パッケージ定義ファイル (package.ring) の作成を行い、パッケージ定義へアプリケーションのファイルを全追加します。
+
+RingPM で作成したパッケージには、パッケージ情報とファイルリストを記したパッケージ定義ファイル (package.ring) が収録されています。
+
+用例:
+
+「Ring ノートパッド」パッケージのパッケージファイル定義は
+
+.. code-block:: ring
+
+       aPackageInfo = [
+               :name = "The RingNotepad Package",
+               :description = "Our RingNotepad package using the Ring programming language",
+               :folder = "ringnotepad",
+               :developer = "Mahmoud Fayed",
+               :email = "msfclipper@yahoo.com",
+               :license = "MIT License",
+               :version = "1.0.0",
+               :ringversion = "1.10",
+               :versions =     [
+                       [
+                               :version = "1.0.0",
+                               :branch = "master"
+                       ]
+               ],
+               :libs =         [
+                       [
+                               :name = "stdlib",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "ringqt",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "findinfiles",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "formdesigner",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ],
+                       [
+                               :name = "libdepwin_apache",
+                               :version = "1.0",
+                               :providerusername = ""
+                       ]
+               ],
+               :files =        [
+                       "main.ring",
+                       "README.md"
+               ],
+               :ringfolderfiles =      [
+                       "applications/rnote/batch/killwebserver.bat",
+                       "applications/rnote/batch/run.bat",
+                       "applications/rnote/batch/run2.bat",
+                       "applications/rnote/image/back.jpg",
+                       "applications/rnote/image/back2.jpg",
+                       "applications/rnote/image/close.png",
+                       "applications/rnote/image/colors.png",
+                       "applications/rnote/image/copy.png",
+                       "applications/rnote/image/cut.png",
+                       "applications/rnote/image/debug.png",
+                       "applications/rnote/image/font.png",
+                       "applications/rnote/image/formdesigner.png",
+                       "applications/rnote/image/new.png",
+                       "applications/rnote/image/notepad.png",
+                       "applications/rnote/image/open.png",
+                       "applications/rnote/image/paste.png",
+                       "applications/rnote/image/print.png",
+                       "applications/rnote/image/project.png",
+                       "applications/rnote/image/richtext.png",
+                       "applications/rnote/image/run.png",
+                       "applications/rnote/image/rungui.png",
+                       "applications/rnote/image/save.png",
+                       "applications/rnote/image/saveas.png",
+                       "applications/rnote/image/search.png",
+                       "applications/rnote/image/source.png",
+                       "applications/rnote/image/undo.png",
+                       "applications/rnote/image/web.png",
+                       "applications/rnote/README.md",
+                       "applications/rnote/rnote.ring",
+                       "applications/rnote/rnoteactivefile.ring",
+                       "applications/rnote/rnoteactivefolder.ring",
+                       "applications/rnote/rnoteautocomplete.ring",
+                       "applications/rnote/rnotebase.ring",
+                       "applications/rnote/rnotecontroller.ring",
+                       "applications/rnote/rnotedistribute.ring",
+                       "applications/rnote/rnoteeditmenu.ring",
+                       "applications/rnote/rnoteeditorevents.ring",
+                       "applications/rnote/rnotefilemenu.ring",
+                       "applications/rnote/rnotefiles.ring",
+                       "applications/rnote/rnotefilestabs.ring",
+                       "applications/rnote/rnotefind.ring",
+                       "applications/rnote/rnotefindinfiles.ring",
+                       "applications/rnote/rnoteformdesigner.ring",
+                       "applications/rnote/rnotegoto.ring",
+                       "applications/rnote/rnotehelp.ring",
+                       "applications/rnote/rnotelists.ring",
+                       "applications/rnote/rnotemainfiletoolbar.ring",
+                       "applications/rnote/rnotemainwindow.ring",
+                       "applications/rnote/rnotemode.ring",
+                       "applications/rnote/rnoteoutputwindow.ring",
+                       "applications/rnote/rnoteprogrammenu.ring",
+                       "applications/rnote/rnoterun.ring",
+                       "applications/rnote/rnotesettings.ring",
+                       "applications/rnote/rnotestyle.ring",
+                       "applications/rnote/rnotetabwidth.ring",
+                       "applications/rnote/rnotetools.ring",
+                       "applications/rnote/rnotetreeviewevents.ring",
+                       "applications/rnote/rnoteviewmenu.ring",
+                       "applications/rnote/rnotewebbrowser.ring"
+               ],
+               :run = "ring main.ring"
+       ]
+
+.. index:: 
+       pair: Ring パッケージ管理プログラム (RingPM); RingPM レジストリファイル
+
+RingPM レジストリファイル
+=========================
+
+RingPM レジストリは、登録済み全パッケージのローカルコピーです。
+
+.. code-block:: ring
+
+       aPackagesRegistry = [
+               [ :name = "ringpresentation",
+                 :description = "Powerpoint presentation for the Ring programming language",
+                 :ProviderUserName = "ringpackages"
+               ]
+               # ...
+       ]
+
+このリストでパッケージを定義しています。
+
+* パッケージ名
+* パッケージの概要
+* 提供者のユーザ名 (GitHub ユーザ名)
+
+新しいパッケージを登録するには、レジストリファイルを更新後に Pull リクエストを送信します。
+
+URL : https://github.com/ring-lang/ring/blob/master/ringpm/registry/registry.ring
+
diff --git a/docs/ja-jp/source/ringqt_shot1.jpg b/docs/ja-jp/source/ringqt_shot1.jpg
new file mode 100644 (file)
index 0000000..6be6b88
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot1.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot10.jpg b/docs/ja-jp/source/ringqt_shot10.jpg
new file mode 100644 (file)
index 0000000..77f98d0
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot10.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot11.jpg b/docs/ja-jp/source/ringqt_shot11.jpg
new file mode 100644 (file)
index 0000000..af53b68
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot11.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot12.jpg b/docs/ja-jp/source/ringqt_shot12.jpg
new file mode 100644 (file)
index 0000000..cebc4bb
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot12.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot13.jpg b/docs/ja-jp/source/ringqt_shot13.jpg
new file mode 100644 (file)
index 0000000..d5f69ab
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot13.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot14.jpg b/docs/ja-jp/source/ringqt_shot14.jpg
new file mode 100644 (file)
index 0000000..5919832
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot14.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot15-B.jpg b/docs/ja-jp/source/ringqt_shot15-B.jpg
new file mode 100644 (file)
index 0000000..46491bd
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot15-B.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot15.jpg b/docs/ja-jp/source/ringqt_shot15.jpg
new file mode 100644 (file)
index 0000000..c2a2f00
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot15.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot16.jpg b/docs/ja-jp/source/ringqt_shot16.jpg
new file mode 100644 (file)
index 0000000..d6c13ae
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot16.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot17.jpg b/docs/ja-jp/source/ringqt_shot17.jpg
new file mode 100644 (file)
index 0000000..4c2f196
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot17.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot18.jpg b/docs/ja-jp/source/ringqt_shot18.jpg
new file mode 100644 (file)
index 0000000..c5e0fda
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot18.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot19.jpg b/docs/ja-jp/source/ringqt_shot19.jpg
new file mode 100644 (file)
index 0000000..6ccb1dd
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot19.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot2.jpg b/docs/ja-jp/source/ringqt_shot2.jpg
new file mode 100644 (file)
index 0000000..85df266
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot2.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot20.jpg b/docs/ja-jp/source/ringqt_shot20.jpg
new file mode 100644 (file)
index 0000000..add0364
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot20.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot21.jpg b/docs/ja-jp/source/ringqt_shot21.jpg
new file mode 100644 (file)
index 0000000..e02df0a
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot21.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot22.jpg b/docs/ja-jp/source/ringqt_shot22.jpg
new file mode 100644 (file)
index 0000000..6d86117
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot22.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot23.jpg b/docs/ja-jp/source/ringqt_shot23.jpg
new file mode 100644 (file)
index 0000000..2dabd0d
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot23.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot24.jpg b/docs/ja-jp/source/ringqt_shot24.jpg
new file mode 100644 (file)
index 0000000..95e585f
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot24.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot25.jpg b/docs/ja-jp/source/ringqt_shot25.jpg
new file mode 100644 (file)
index 0000000..4db7f4b
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot25.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot26.jpg b/docs/ja-jp/source/ringqt_shot26.jpg
new file mode 100644 (file)
index 0000000..86d5a36
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot26.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot27.jpg b/docs/ja-jp/source/ringqt_shot27.jpg
new file mode 100644 (file)
index 0000000..8093a83
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot27.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot28.jpg b/docs/ja-jp/source/ringqt_shot28.jpg
new file mode 100644 (file)
index 0000000..d37333c
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot28.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot29.jpg b/docs/ja-jp/source/ringqt_shot29.jpg
new file mode 100644 (file)
index 0000000..8c121ce
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot29.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot3.jpg b/docs/ja-jp/source/ringqt_shot3.jpg
new file mode 100644 (file)
index 0000000..e06b786
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot3.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot30.jpg b/docs/ja-jp/source/ringqt_shot30.jpg
new file mode 100644 (file)
index 0000000..70c477d
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot30.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot31.jpg b/docs/ja-jp/source/ringqt_shot31.jpg
new file mode 100644 (file)
index 0000000..6e2abe7
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot31.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot32.jpg b/docs/ja-jp/source/ringqt_shot32.jpg
new file mode 100644 (file)
index 0000000..31ab916
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot32.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot33.jpg b/docs/ja-jp/source/ringqt_shot33.jpg
new file mode 100644 (file)
index 0000000..3063664
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot33.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot34.jpg b/docs/ja-jp/source/ringqt_shot34.jpg
new file mode 100644 (file)
index 0000000..b30e2e9
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot34.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot35.jpg b/docs/ja-jp/source/ringqt_shot35.jpg
new file mode 100644 (file)
index 0000000..d178473
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot35.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot36.jpg b/docs/ja-jp/source/ringqt_shot36.jpg
new file mode 100644 (file)
index 0000000..d684307
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot36.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot37.jpg b/docs/ja-jp/source/ringqt_shot37.jpg
new file mode 100644 (file)
index 0000000..2bbd564
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot37.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot38.jpg b/docs/ja-jp/source/ringqt_shot38.jpg
new file mode 100644 (file)
index 0000000..ec6f632
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot38.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot39.jpg b/docs/ja-jp/source/ringqt_shot39.jpg
new file mode 100644 (file)
index 0000000..e2365ca
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot39.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot4.jpg b/docs/ja-jp/source/ringqt_shot4.jpg
new file mode 100644 (file)
index 0000000..02e58c9
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot4.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot40.jpg b/docs/ja-jp/source/ringqt_shot40.jpg
new file mode 100644 (file)
index 0000000..ed63658
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot40.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot41.jpg b/docs/ja-jp/source/ringqt_shot41.jpg
new file mode 100644 (file)
index 0000000..dc8ec01
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot41.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot42.jpg b/docs/ja-jp/source/ringqt_shot42.jpg
new file mode 100644 (file)
index 0000000..124f6cb
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot42.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot43.jpg b/docs/ja-jp/source/ringqt_shot43.jpg
new file mode 100644 (file)
index 0000000..ab8e07f
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot43.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot44.jpg b/docs/ja-jp/source/ringqt_shot44.jpg
new file mode 100644 (file)
index 0000000..cd29ce2
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot44.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot45.jpg b/docs/ja-jp/source/ringqt_shot45.jpg
new file mode 100644 (file)
index 0000000..cb8b58b
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot45.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot46.jpg b/docs/ja-jp/source/ringqt_shot46.jpg
new file mode 100644 (file)
index 0000000..2caef03
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot46.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot47.jpg b/docs/ja-jp/source/ringqt_shot47.jpg
new file mode 100644 (file)
index 0000000..0815aed
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot47.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot48.jpg b/docs/ja-jp/source/ringqt_shot48.jpg
new file mode 100644 (file)
index 0000000..fd422d6
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot48.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot49.jpg b/docs/ja-jp/source/ringqt_shot49.jpg
new file mode 100644 (file)
index 0000000..c529f50
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot49.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot5-b.jpg b/docs/ja-jp/source/ringqt_shot5-b.jpg
new file mode 100644 (file)
index 0000000..a42cbf9
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot5-b.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot5.jpg b/docs/ja-jp/source/ringqt_shot5.jpg
new file mode 100644 (file)
index 0000000..9407d53
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot5.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot50.jpg b/docs/ja-jp/source/ringqt_shot50.jpg
new file mode 100644 (file)
index 0000000..e0c4500
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot50.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot51.jpg b/docs/ja-jp/source/ringqt_shot51.jpg
new file mode 100644 (file)
index 0000000..09446fb
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot51.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot52.jpg b/docs/ja-jp/source/ringqt_shot52.jpg
new file mode 100644 (file)
index 0000000..66c5524
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot52.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot6.jpg b/docs/ja-jp/source/ringqt_shot6.jpg
new file mode 100644 (file)
index 0000000..54188f8
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot6.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot7.jpg b/docs/ja-jp/source/ringqt_shot7.jpg
new file mode 100644 (file)
index 0000000..d1d5cac
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot7.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot8.jpg b/docs/ja-jp/source/ringqt_shot8.jpg
new file mode 100644 (file)
index 0000000..a43f210
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot8.jpg differ
diff --git a/docs/ja-jp/source/ringqt_shot9.jpg b/docs/ja-jp/source/ringqt_shot9.jpg
new file mode 100644 (file)
index 0000000..a851ba1
Binary files /dev/null and b/docs/ja-jp/source/ringqt_shot9.jpg differ
diff --git a/docs/ja-jp/source/ringqtandroid_shot1.png b/docs/ja-jp/source/ringqtandroid_shot1.png
new file mode 100644 (file)
index 0000000..7a745eb
Binary files /dev/null and b/docs/ja-jp/source/ringqtandroid_shot1.png differ
diff --git a/docs/ja-jp/source/ringqtobjects.txt b/docs/ja-jp/source/ringqtobjects.txt
new file mode 100644 (file)
index 0000000..31d6469
--- /dev/null
@@ -0,0 +1,212 @@
+.. index:: 
+       single: RingQt アプリケーション用のオブジェクトライブラリ; はじめに
+
+=================================================
+RingQt アプリケーション用のオブジェクトライブラリ
+=================================================
+
+RingQt アプリケーション用のオブジェクトライブラリを学びます。
+
+Ring には RingQt アプリケーション用のオブジェクトライブラリが付属しています。
+ウィンドウオブジェクトへのグローバル変数の使用、
+およびオブジェクト名でイベントをオブジェクトへ接続するのではなく、
+オブジェクトライブラリは GUI オブジェクトの管理を行います。また、同一クラスから複数ウィンドウを手軽に作成するために、普遍的な API を提供しています。
+さらにライブラリでは、イベントが発行されたときに実行されるメソッドを手軽に設定する方法を提供しています。
+同じく子またはサブウィンドウから親または呼び出し元のウィンドウを手軽に使える違和感のないインタフェースを提供しています。
+
+オブジェクトライブラリは MVC デザインパターンで設計しています。
+
+オブジェクトライブラリは RingQt へ統合されており RingQt から使えます。
+
+
+.. index:: 
+       pair: RingQt アプリケーション用のオブジェクトライブラリ; ライブラリの用法
+
+ライブラリの用法
+====================
+
+* Open_Window(cWindowControllerClassName) 関数で新しいウィンドウを開きます。
+* 最低でも Controller と View のクラス二本を各ウィンドウごとに作成してください。
+* WindowsControllerParent クラスから各 Controller クラスを作成します。
+* WindowsViewParent クラスから各 View クラスを作成します。
+* Last_Window() 関数は最後に作成されたウィンドウのオブジェクト (Controller オブジェクト) を取得します。
+* サブウィンドウを呼び出すときは SetParentObject() メソッドの使用、および Self オブジェクトを渡します。
+* View クラスでは、イベントメソッドを決定するために Method(cMethodName) 関数を使用します。
+* Method(cMethodName) 関数を実行することで Controller クラスでメソッドを決定します。
+* 各 Controller クラスはデフォルトで CloseAction() クラスがあり、呼び出すことでウィンドウを閉じます。
+* ウィンドウごとの Show() メソッドの呼び出しは不要です。 Open_Window() の使用時に呼び出します。
+* View クラスでは GUI ウィンドウオブジェクトを win 属性で定義します。
+* Open_WindowNoShow() 関数はウィンドウが表示されるのを回避します。
+* Open_WindowAndLink() を使うとメソッドからウィンドウへ手軽にアクセスできます。
+
+
+.. index:: 
+       pair: RingQt アプリケーション用のオブジェクトライブラリ; 用例
+
+用例
+====
+
+この用例では、二種類のウィンドウを作成します。
+
+* メインウィンドウにはボタンがあります。ユーザがボタンをクリックしたときにサブウィンドウが開かれます。
+* ユーザは複数のサブウィンドウを開くためにボタンを何回もクリックできます。
+* サブウィンドウごとに二つのボタンがあります。
+* 最初のボタンはサブウィンドウにありメイン、およびサブウィンドウのタイトルのタイトルを変更します。
+* 次のボタンはサブウィンドウにありサブウィンドウを閉じます。
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               open_window( :MainWindowController )
+               exec()
+       }
+
+       class MainWindowController from WindowsControllerParent
+               oView = new MainWindowView
+               func SubWindowAction
+                       Open_window( :SubWindowController )
+                       Last_Window().SetParentObject(self)
+
+       class MainWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Main Window")
+                       btnSub = new qPushButton(win) {
+                               setText("Sub Window")
+                               setClickEvent( Method( :SubWindowAction ) )
+                       }
+                       resize(400,400)
+               }
+
+       class SubWindowController from WindowsControllerParent
+               oView = new SubWindowView
+               func SetMainWindowTitleAction
+                       Parent().oView.win.SetWindowTitle("Message from the Sub Window")
+                       oView.win.SetWindowTitle("Click Event Done!")
+
+       class SubWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Sub Window")
+                       btnMsg = new qPushButton(win) {
+                               setText("Set Main Window Title")
+                               setClickEvent( Method( :SetMainWindowTitleAction ) )
+                       }
+                       btnClose = new qPushButton(win) {
+                               Move(200,0)
+                               setText("Close")
+                               setClickEvent( Method( :CloseAction ) )
+                       }
+                       resize(400,400)
+               }
+
+このスクリーンショットはサブウィンドウを三枚作成しています。
+
+.. image:: objectslib1.png
+       :alt: オブジェクトライブラリの用例 - スクリーンショット 1
+
+このスクリーンショットはサブウィンドウごとにボタンをクリックしています。
+
+.. image:: objectslib2.png
+       :alt: オブジェクトライブラリの用例 - スクリーンショット 2
+
+.. index:: 
+       pair: RingQt アプリケーション用のオブジェクトライブラリ; Open_WindowAndLink() 関数
+
+Open_WindowAndLink() 関数
+=========================
+
+Open_WindowAndLink() 関数はアプリケーションウィンドウとの間を接続することにより、オブジェクトとの間でメッセージ (メッセージの呼び出し) を渡せます。
+
+この関数は、ほかのウィンドウの作成で動的オブジェクトを使うために、メタプログラミングによる呼び出し元クラスで動的メソッドの定義で使用します。
+
+用例 : (フォームデザイナーを使用しています)
+
+最初のウィンドウ
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/firstwindowView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/firstwindowController.ring
+
+次のウィンドウ
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/secondwindowView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/twowindowspart5/secondwindowController.ring
+
+このコードの用例では (FirstWindowController.ring より引用)
+
+Open_WindowAndLink() は SecondWindowController クラスからオブジェクトを作成します。
+
+そしてメソッドを追加します : FirstWindowController クラスへ
+SecondWindow(), IsSecondWindow() メソッドを追加
+
+さらにメソッドを追加します : SecondWindowController クラスへ
+FirstWindow(), IsFirstWindow() メソッドを追加
+
+よって FirstWindowController クラスにある SendMessage() メソッドは
+SecondWindow() メソッドでオブジェクトにアクセスするために使えます。
+
+これは Last_Window(), Parent() および
+SetParentObject() メソッドを使用するより、もっと簡単です。
+
+.. code-block:: ring
+
+       class firstwindowController from windowsControllerParent
+
+           oView = new firstwindowView
+
+           func OpenSecondWindow
+               Open_WindowAndLink(:SecondWindowController,self)
+
+           func SendMessage
+               if IsSecondWindow() 
+                   SecondWindow().setMessage("Message from the first window")
+               ok
+
+           func setMessage cMessage
+               oView.Label1.setText(cMessage)
+
+.. index:: 
+       pair: RingQt アプリケーション用のオブジェクトライブラリ; Open_WindowInPackages() 関数
+
+Open_WindowInPackages() 関数
+============================
+
+Open_WindowInPackages() 関数は Open_Window() と同じですが、
+ウィンドウを開く前にインポートを行うパッケージの追加リストを決定します。
+
+文法:
+
+.. code-block:: ring
+
+       Open_WindowInPackages(cClassName,aPackagesList)
+
+用例:
+
+この用例はフォームデザイナーのソースコードからの引用です。
+open_windowInPackages() 関数でウィンドウフラグのウィンドウを開きます。
+
+クラス名 “WindowFlagsController” とパッケージの名前を決定します。
+
+ウィンドウフラグのウィンドウでは FormDesigner および System.GUI パッケージを使用しています。
+
+.. code-block:: ring
+
+       open_windowInPackages(:WindowFlagsController,[
+               "formdesigner",
+               "System.GUI"
+       ])
+
+.. index:: 
+       pair: RingQt アプリケーション用のオブジェクトライブラリ; オブジェクトライブラリのソースコード
+
+オブジェクトライブラリのソースコード
+====================================
+
+ライブラリのソースコードは非常に単純です。ソースコードファイルを確認できます。
+
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/objects.ring
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/subwindows.ring
+* https://github.com/ring-lang/ring/blob/master/extensions/ringqt/guilib/objectslib/objectslib.ring
+
diff --git a/docs/ja-jp/source/ringqtpixmap2.png b/docs/ja-jp/source/ringqtpixmap2.png
new file mode 100644 (file)
index 0000000..5537703
Binary files /dev/null and b/docs/ja-jp/source/ringqtpixmap2.png differ
diff --git a/docs/ja-jp/source/ringraylib.txt b/docs/ja-jp/source/ringraylib.txt
new file mode 100644 (file)
index 0000000..327675e
--- /dev/null
@@ -0,0 +1,2361 @@
+.. index:: 
+       Single: RingRayLib の用法;  はじめに
+
+=================
+RingRayLib の用法
+=================
+
+この章では RingRayLib 拡張機能の用法を学びます。
+
+
+.. index:: 
+       pair: RingRayLib の用法; はじめに
+
+はじめに
+========
+
+RingRayLib は RayLib ゲームプログラミングライブラリ用の拡張機能です。
+
+RayGUI 関数にも対応しています。
+
+
+.. index:: 
+       pair: RingRayLib の用法; 基本ウィンドウ
+
+基本ウィンドウ
+==============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth     = 800
+       screenHeight    = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+               ClearBackground(RED)
+               DrawText("Congrats! You created your first window!", 190, 200, 20, WHITE)
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_basicwindow.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; キー入力
+
+キー入力
+========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - keyboard input")
+       ballPosition = Vector2(screenWidth/2, screenHeight/2)
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+                       if IsKeyDown(KEY_RIGHT) ballPosition.x += 2 ok
+                       if IsKeyDown(KEY_LEFT)  ballPosition.x -= 2 ok
+                       if IsKeyDown(KEY_UP)    ballPosition.y -= 2 ok
+                       if IsKeyDown(KEY_DOWN)  ballPosition.y += 2 ok
+                       BeginDrawing()
+                       ClearBackground(RAYWHITE)
+                       DrawText("move the ball with arrow keys", 10, 10, 20, DARKGRAY)
+                       DrawCircleV(ballPosition, 50, MAROON)
+                       EndDrawing()
+       end    
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_inputkeys.png
+       :alt: RayLib の用例
+
+
+.. index:: 
+       pair: RingRayLib の用法; マウス入力
+
+マウス入力
+==========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - mouse input")
+
+       ballPosition    = Vector2(100, 100)
+       ballColor       = DARKBLUE
+
+       SetTargetFPS(60)
+
+       while ! WindowShouldClose()
+
+                       ballPosition = GetMousePosition()
+
+                       if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                               ballColor = MAROON
+                       but IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)   
+                               ballColor = LIME
+                       but IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)    
+                               ballColor = DARKBLUE
+                       ok
+
+                       BeginDrawing()
+                       ClearBackground(BLACK)
+                       DrawCircleV(ballPosition, 40, ballColor)
+                       DrawText("move ball with mouse and click mouse button to change color",
+                                10, 10, 20, YELLOW)
+                       EndDrawing()
+
+       end
+        
+       CloseWindow()  
+
+スクリーンショット:
+
+.. image:: raylib_inputmouse.png
+       :alt: RayLib の用例
+       
+.. index:: 
+       pair: RingRayLib の用法; 3Dカメラ
+
+3Dカメラ
+========
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera mode")
+
+       camera = Camera3D(
+               0, 10, 10,              // カメラの位置
+               0, 0, 0 ,               // カメラの視点位置
+               0, 1, 0,                // カメラの上方向 (対象に向かい合って回転)
+               45,                     // カメラの Y 視野
+               CAMERA_PERSPECTIVE)     // カメラモードの型
+
+       cubePosition = Vector3(0, 0, 0)
+
+       SetTargetFPS(60)           
+               
+       while !WindowShouldClose()
+
+                       BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       BeginMode3D(camera)
+
+                       DrawCube(cubePosition, 2, 2, 2, RED)
+                       DrawCubeWires(cubePosition, 2, 2, 2, MAROON)
+
+                       DrawGrid(10, 1)
+
+                       EndMode3D()
+
+                       DrawText("Welcome to the third dimension!", 10, 40, 20, DARKGRAY)
+
+                       DrawFPS(10, 10)
+
+                       EndDrawing()
+
+       end 
+
+       CloseWindow()
+
+
+スクリーンショット:
+
+.. image:: raylib_3dcamera.png
+       :alt: RayLib の用例
+       
+.. index:: 
+       pair: RingRayLib の用法; 3D自由視点カメラ
+
+3D自由視点カメラ
+================
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free")
+
+       camera = Camera3D(
+               10, 10, 10,             // カメラの位置
+               0, 0, 0 ,               // カメラの視点位置
+               0, 1, 0,                // カメラの上方向 (対象に向かい合って回転)
+               45,                     // カメラの Y 視野
+               CAMERA_PERSPECTIVE)     // カメラモードの型
+
+       cubePosition = Vector3(0, 0, 0)
+
+       SetCameraMode(camera, CAMERA_FREE)              // カメラモードを自由視点へ設定
+
+       SetTargetFPS(60)                   
+
+       while !WindowShouldClose()
+
+                       UpdateCamera(camera)
+
+                       if IsKeyDown("Z") camera.target = Vector3( 0, 0, 0) ok
+
+                       BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       BeginMode3D(camera)
+
+                       DrawCube(cubePosition, 2, 2, 2, RED)
+                       DrawCubeWires(cubePosition, 2, 2, 2, MAROON)
+
+                       DrawGrid(10, 1)
+
+                       EndMode3D()
+
+                       DrawRectangle( 10, 10, 320, 133, Fade(SKYBLUE, 0.5))
+                       DrawRectangleLines( 10, 10, 320, 133, BLUE)
+
+                       DrawText("Free camera default controls:", 20, 20, 10, BLACK)
+                       DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY)
+                       DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY)
+                       DrawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, DARKGRAY)
+                       DrawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom",
+                                40, 100, 10, DARKGRAY)
+                       DrawText("- Z to zoom to (0, 0, 0)", 40, 120, 10, DARKGRAY)
+
+                       EndDrawing()
+       end 
+
+       CloseWindow() 
+
+
+スクリーンショット:
+
+.. image:: raylib_3dcamerafree.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; マウスホイール
+
+マウスホイール
+==============
+
+.. code-block:: ring           
+               
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - input mouse wheel")
+
+       boxPositionY = screenHeight/2 - 40
+       scrollSpeed = 4            
+
+       SetTargetFPS(60)  
+
+       while !WindowShouldClose()
+               boxPositionY -= (GetMouseWheelMove()*scrollSpeed)
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawRectangle(screenWidth/2 - 40, boxPositionY, 80, 80, MAROON)
+
+               DrawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, GRAY)
+               DrawText("Box position Y: "+boxPositionY, 10, 40, 20, LIGHTGRAY)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+
+スクリーンショット:
+
+.. image:: raylib_mousewheel.png
+       :alt: RayLib の用例
+       
+.. index:: 
+       pair: RingRayLib の用法; マルチタッチ入力
+
+マルチタッチ入力
+================
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - input multitouch")
+
+       ballPosition = Vector2(-100, -100)
+       ballColor = BEIGE
+
+       touchCounter = 0
+       touchPosition = vector2(0,0)
+
+       MAX_TOUCH_POINTS = 5
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               ballPosition = GetMousePosition()
+
+               ballColor = BEIGE
+
+               if IsMouseButtonDown(MOUSE_LEFT_BUTTON) ballColor = MAROON ok
+               if IsMouseButtonDown(MOUSE_MIDDLE_BUTTON) ballColor = LIME ok
+               if IsMouseButtonDown(MOUSE_RIGHT_BUTTON) ballColor = DARKBLUE ok
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON) touchCounter = 10 ok
+               if IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON) touchCounter = 10 ok
+               if IsMouseButtonPressed(MOUSE_RIGHT_BUTTON) touchCounter = 10 ok
+
+               if touchCounter > 0 touchCounter-- ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               for i = 0 to MAX_TOUCH_POINTS-1
+                       touchPosition = GetTouchPosition(i)  
+
+                       if touchPosition.x >= 0 && touchPosition.y >= 0
+                               DrawCircleV(touchPosition, 34, ORANGE)
+                               DrawText(""+ i, touchPosition.x - 10, 
+                                       touchPosition.y - 70, 40, BLACK)
+                       ok
+               next
+
+               DrawCircleV(ballPosition, 30 + (touchCounter*3), ballColor)
+
+               DrawText("move ball with mouse and click mouse button to change color",
+                                10, 10, 20, DARKGRAY)
+               DrawText("touch the screen at multiple locations to get multiple balls",
+                                10, 30, 20, DARKGRAY)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()     
+
+スクリーンショット:
+
+.. image:: raylib_inputmt.png
+       :alt: RayLib の用例
+       
+.. index:: 
+       pair: RingRayLib の用法; ファーストパーソンカメラ
+
+ファーストパーソンカメラ
+========================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       MAX_COLUMNS = 20
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera first person")
+
+       camera = Camera3d(
+               4, 2, 4,
+               0, 1, 0,
+               0, 1, 0,
+               60,
+               CAMERA_PERSPECTIVE
+       )
+
+       heights = list(MAX_COLUMNS)
+       positions = list(MAX_COLUMNS)
+       for item in positions item = vector3(0,0,0) next 
+       colors = list(MAX_COLUMNS)
+       for item in colors item = BLACK next
+
+       for i = 1 to  MAX_COLUMNS 
+               heights[i] = GetRandomValue(1, 12)
+               positions[i] = Vector3(GetRandomValue(-15, 15),
+                                heights[i]/2, GetRandomValue(-15, 15) )
+               colors[i] = RAYLibColor(GetRandomValue(20, 255),
+                                GetRandomValue(10, 55), 30, 255 )
+       next
+
+       SetCameraMode(camera, CAMERA_FIRST_PERSON)
+
+       SetTargetFPS(60)                     
+
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               DrawPlane(Vector3( 0, 0, 0 ), Vector2(32, 32 ), LIGHTGRAY) // 地面の描画
+               DrawCube(Vector3( -16, 2.5, 0 ), 1, 5, 32, BLUE)     // 青壁の描画
+               DrawCube(Vector3( 16, 2.5, 0 ), 1, 5, 32, LIME)      // 緑壁の描画
+               DrawCube(Vector3( 0, 2.5, 16 ), 32, 5, 1, GOLD)      // 黄壁の描画
+
+               for i = 1 to  MAX_COLUMNS 
+                       DrawCube(positions[i], 2, heights[i], 2, colors[i])
+                       DrawCubeWires(positions[i], 2, heights[i], 2, MAROON)
+               next
+
+               EndMode3D()
+
+               DrawRectangle( 10, 10, 220, 70, Fade(SKYBLUE, 0.5f))
+               DrawRectangleLines( 10, 10, 220, 70, BLUE)
+
+               DrawText("First person camera default controls:", 20, 20, 10, BLACK)
+               DrawText("- Move with keys: W, A, S, D", 40, 40, 10, DARKGRAY)
+               DrawText("- Mouse move to look around", 40, 60, 10, DARKGRAY)
+
+               EndDrawing()
+       end 
+               
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_camerafirstperson.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 3Dピッキング
+
+3Dピッキング
+============
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d picking")
+
+       camera = Camera3D(
+               10, 10, 10,
+               0, 0, 0 ,
+               0, 1, 0 ,
+               45,
+               CAMERA_PERSPECTIVE
+       )
+
+       cubePosition = Vector3( 0, 1, 0 )
+       cubeSize = Vector3( 2, 2, 2 )
+
+       ray = Ray(0,0,0,0,0,0)
+
+       collision = false
+
+       SetCameraMode(camera, CAMERA_FREE) 
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                       if !collision
+                               ray = GetMouseRay(GetMousePosition(), camera)
+                               collision = CheckCollisionRayBox(ray,
+                               BoundingBox( cubePosition.x - cubeSize.x/2, 
+                               cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2,
+                               cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2,
+                               cubePosition.z + cubeSize.z/2 ) )
+                       else collision = false
+                       ok
+               ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               if collision
+                       DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED)
+                       DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON)
+
+                       DrawCubeWires(cubePosition, cubeSize.x + 0.2f,
+                                       cubeSize.y + 0.2f, cubeSize.z + 0.2f, GREEN)
+               else
+                       DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY)
+                       DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY)
+               ok
+
+               DrawRay(ray, MAROON)
+               DrawGrid(10, 1)
+
+               EndMode3D()
+
+               DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY)
+
+               if collision  DrawText("BOX SELECTED", 
+                       (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, 
+                       screenHeight * 0.1f, 30, GREEN) ok
+
+               DrawFPS(10, 10)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_3dpicking.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 全画面表示
+
+全画面表示
+==========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       screenWidth     = 1024
+       screenHeight    = 768
+
+       InitWindow(screenWidth, screenHeight, "Full Screen")
+       ToggleFullScreen()
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+                       ClearBackground(DARKBLUE)
+                       DrawText("Count from 1 to 10", 190, 200, 20, Yellow)
+                       for t = 1 to 10
+                               DrawText("Number: " + t, 190, 200+(30*t), 20, WHITE)
+                       next 
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_fullscreen.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 二個の立方体
+
+二個の立方体
+============
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - Two Cubes")
+
+       camera = Camera3D(
+               10, 10, 10,
+               0, 0, 0 ,
+               0, 1, 0 ,
+               45,
+               CAMERA_PERSPECTIVE
+       )
+
+       cubePosition1 = Vector3( 0, 1, 4 )
+       cubePosition2 = Vector3( 0, 1, -4 )
+       cubeSize = Vector3( 2, 2, 2 )
+
+       ray = Ray(0,0,0,0,0,0)
+
+       collision1 = false
+       collision2 = false
+
+       SetCameraMode(camera, CAMERA_FREE) 
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+                       UpdateCamera(camera)
+
+                       if IsMouseButtonPressed(MOUSE_LEFT_BUTTON)
+                               if !collision1
+                                       ray = GetMouseRay(GetMousePosition(), camera)
+
+                                       collision1 = CheckCollisionRayBox(ray,
+                                       BoundingBox( cubePosition1.x - 
+                                       cubeSize.x/2, cubePosition1.y - cubeSize.y/2,
+                                       cubePosition1.z - cubeSize.z/2,
+                                       cubePosition1.x + cubeSize.x/2,
+                                       cubePosition1.y + cubeSize.y/2,
+                                       cubePosition1.z + cubeSize.z/2 ) )
+                               else 
+                                       collision1 = false
+                               ok
+                               if  !collision2
+                                       ray = GetMouseRay(GetMousePosition(), camera)
+
+                                       collision2 = CheckCollisionRayBox(ray,
+                                       BoundingBox( cubePosition2.x -
+                                       cubeSize.x/2, cubePosition2.y - cubeSize.y/2,
+                                       cubePosition2.z - cubeSize.z/2,
+                                       cubePosition2.x + cubeSize.x/2,
+                                       cubePosition2.y + cubeSize.y/2,
+                                       cubePosition2.z + cubeSize.z/2 ) )
+                               else 
+                                       collision2 = false
+                       ok
+               ok
+
+                       BeginDrawing()
+
+                               ClearBackground(RAYWHITE)
+
+                               BeginMode3D(camera)
+
+                                        if collision1
+                                               DrawCube(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, RED)
+                                               DrawCubeWires(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, MAROON)
+
+                                               DrawCubeWires(cubePosition1, cubeSize.x +
+                                               0.2f, cubeSize.y + 0.2f,
+                                               cubeSize.z + 0.2f, GREEN)
+                                               collision1 = true
+                                        else
+                                               DrawCube(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, GRAY)
+                                               DrawCubeWires(cubePosition1, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, DARKGRAY)
+                                               collision1 = false
+                                        ok
+
+                                        if collision2
+                                               DrawCube(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, RED)
+                                               DrawCubeWires(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, MAROON)
+
+                                               DrawCubeWires(cubePosition2, cubeSize.x +
+                                               0.2f, cubeSize.y + 0.2f,
+                                               cubeSize.z + 0.2f, GREEN)
+                                               collision2 = true
+                                        else
+                                               DrawCube(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, GRAY)
+                                               DrawCubeWires(cubePosition2, cubeSize.x,
+                                               cubeSize.y, cubeSize.z, DARKGRAY)
+                                               collision2 = false
+                                        ok
+
+
+                                       DrawRay(ray, MAROON)
+                                       DrawGrid(10, 1)
+
+                               EndMode3D()
+
+                               DrawText("Try selecting the box with mouse!", 240, 10,
+                                               20, DARKGRAY)
+
+                               if collision1 or collision2  
+                                       DrawText("BOX SELECTED", 
+                                       (screenWidth - MeasureText("BOX SELECTED", 30)) / 2,
+                                       screenHeight * 0.1f, 30, GREEN) 
+                               ok
+
+                               DrawFPS(10, 10)
+
+                       EndDrawing()
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_twocubes.png
+       :alt: RayLib の用例
+       
+.. index:: 
+       pair: RingRayLib の用法; 基本図形
+
+基本図形
+========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY)
+
+               DrawCircle(screenWidth/4, 120, 35, DARKBLUE)
+
+               DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED)
+               DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE)  
+               DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD)
+
+               DrawTriangle(Vector2(screenWidth/4*3, 80),
+                                        Vector2(screenWidth/4*3 - 60, 150),
+                                        Vector2(screenWidth/4*3 + 60, 150), VIOLET)
+
+               DrawPoly(Vector2(screenWidth/4*3, 320), 6, 80, 0, BROWN)
+
+               DrawCircleGradient(screenWidth/4, 220, 60, GREEN, SKYBLUE)
+
+               DrawLine(18, 42, screenWidth - 18, 42, BLACK)
+               DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE)
+               DrawTriangleLines(Vector2(screenWidth/4*3, 160),
+                               Vector2(screenWidth/4*3 - 20, 230),
+                               Vector2(screenWidth/4*3 + 20, 230), DARKBLUE)
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_basicshapes.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; Ring の描画
+
+Ring の描画
+===========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - draw ring")
+
+       center = Vector2((GetScreenWidth() - 300)/2, GetScreenHeight()/2 )
+
+       innerRadius = 80        outerRadius = 190
+       startAngle = 0          endAngle = 360          segments = 0
+       drawRing = true         drawRingLines = false   drawCircleLines = false
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawLine(500, 0, 500, GetScreenHeight(), Fade(LIGHTGRAY, 0.6))
+               DrawRectangle(500, 0, GetScreenWidth() - 500,
+                                GetScreenHeight(), Fade(LIGHTGRAY, 0.3))
+
+               if drawRing DrawRing(center, innerRadius, outerRadius, 
+                       startAngle, endAngle, segments, Fade(MAROON, 0.3)) ok
+               if drawRingLines DrawRingLines(center, innerRadius, 
+                       outerRadius, startAngle, endAngle,
+                        segments, Fade(BLACK, 0.4)) ok
+               if drawCircleLines DrawCircleSectorLines(center, outerRadius,
+                       startAngle, endAngle, segments, Fade(BLACK, 0.4)) ok
+
+               startAngle = GuiSliderBar(Rectangle( 600, 40, 120, 20 ), 
+                               "StartAngle", startAngle, -450, 450, true)
+               endAngle = GuiSliderBar(Rectangle( 600, 70, 120, 20 ), 
+                               "EndAngle", endAngle, -450, 450, true)
+
+               innerRadius = GuiSliderBar(Rectangle( 600, 140, 120, 20 ), 
+                               "InnerRadius", innerRadius, 0, 100, true)
+               outerRadius = GuiSliderBar(Rectangle( 600, 170, 120, 20 ), 
+                               "OuterRadius", outerRadius, 0, 200, true)
+
+               segments = GuiSliderBar(Rectangle( 600, 240, 120, 20 ), 
+                               "Segments", segments, 0, 100, true)
+
+               drawRing = GuiCheckBox(Rectangle( 600, 320, 20, 20 ), 
+                               "Draw Ring", drawRing)
+               drawRingLines = GuiCheckBox(Rectangle( 600, 350, 20, 20 ), 
+                               "Draw RingLines", drawRingLines)
+               drawCircleLines = GuiCheckBox(Rectangle( 600, 380, 20, 20 ), 
+                               "Draw CircleLines", drawCircleLines)
+
+               if segments >= 4        
+                       DrawText("MODE: MANUAL", 600, 270, 10, MAROON)
+               else            
+                       DrawText("MODE: AUTO", 600, 270, 10, DARKGRAY)  
+               ok
+               
+               DrawFPS(10, 10)
+
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_drawring.png
+       :alt: RayLib の用例
+
+スクリーンショット (2):
+
+.. image:: raylib_drawring2.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; ベジェ曲線
+
+ベジェ曲線
+==========
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       SetConfigFlags(FLAG_MSAA_4X_HINT)
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - cubic-bezier lines")
+
+       start = Vector2(0,0)
+       endvec = Vector2(screenWidth,screenHeight)
+
+       SetTargetFPS(60)  
+
+       while (!WindowShouldClose())  
+
+               if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
+                       start = GetMousePosition() 
+               else (IsMouseButtonDown(MOUSE_RIGHT_BUTTON))
+                         endvec = GetMousePosition()
+               ok
+               
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+               DrawText("USE MOUSE LEFT-RIGHT CLICK to DEFINE LINE START and END POINTS",
+                                15, 20, 20, GRAY)
+               DrawLineBezier(start, endvec, 2.0, RED)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_bezierlines.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 当たり判定の領域
+
+当たり判定の領域
+================
+
+.. code-block:: ring 
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - collision area")
+
+       // ボックス A: ボックスの移動
+       boxA = Rectangle( 10, GetScreenHeight()/2 - 50, 200, 100 )
+       boxASpeedX = 4
+
+       // ボックス B: マウスで移動したボックス
+       boxB = Rectangle( GetScreenWidth()/2 - 30, GetScreenHeight()/2 - 30, 60, 60 )
+
+       boxCollision = GetCollisionRec(boxA, boxB)
+
+       boxCollision = Rectangle( 0,0,0,0 ) // 長方形の当たり判定
+
+       screenUpperLimit = 40      // トップメニューの制限
+
+       pause = false             // 移動の一時停止
+       collision = false         // 当たり判定の検出
+
+       SetTargetFPS(60)               
+
+       while !WindowShouldClose()  
+
+               // 一時停止中でなければボックスを移動します
+               if (not pause) boxA.x += boxASpeedX ok
+
+               // 画面制限における X 方向のバウンスボックス
+               if (((boxA.x + boxA.width) >= GetScreenWidth()) or (boxA.x <= 0)) 
+                       boxASpeedX = boxASpeedX*(-1) ok
+
+               // プレイヤー操作のボックスを更新 (box02)
+               boxB.x = GetMouseX() - boxB.width/2
+               boxB.y = GetMouseY() - boxB.height/2
+
+               // ボックス B が制限領域内から出られないようにします
+               if ((boxB.x + boxB.width) >= GetScreenWidth()) 
+                       boxB.x = GetScreenWidth() - boxB.width 
+               else (boxB.x <= 0) boxB.x = 0 ok
+
+               if ((boxB.y + boxB.height) >= GetScreenHeight()) 
+                       boxB.y = GetScreenHeight() - boxB.height
+               else (boxB.y <= screenUpperLimit) boxB.y = screenUpperLimit ok
+
+               // ボックスの当たり判定を確認
+               collision = CheckCollisionRecs(boxA, boxB)
+
+               // 長方形の当たり判定を取得 (当たり判定のみ)
+               if (collision) boxCollision = GetCollisionRec(boxA, boxB) ok
+
+               // ボックス A の移動を一時停止
+               if (IsKeyPressed(KEY_SPACE)) pause = not pause ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       if collision = true
+                          color = RED
+                       else
+                          color = BLACK
+                       ok
+                       DrawRectangle(0, 0, screenWidth, screenUpperLimit, color)
+                       DrawRectangleRec(boxA, GOLD)
+
+                       boxB.x = GetMouseX() - boxB.width/2
+                       boxB.y = GetMouseY() - boxB.height/2
+                       collision = CheckCollisionRecs(boxA, boxB)
+                       DrawRectangleRec(boxB, BLUE)
+                       boxCollision = GetCollisionRec(boxA, boxB)
+
+                       if (collision) = true
+
+                               // 当たり判定の領域を描画
+                               DrawRectangleRec(boxCollision, LIME)
+
+                               // 当たり判定のメッセージを描画
+                               DrawText("COLLISION!", GetScreenWidth()/2 -
+                                                MeasureText("COLLISION!", 20)/2,
+                                               screenUpperLimit/2 - 10, 20, BLACK)
+
+                               // 当たり判定の領域を描画
+                               DrawText("Collision Area: " + 
+                                       string(boxCollision.width*boxCollision.height),
+                                       GetScreenWidth()/2 - 100, 
+                                       screenUpperLimit + 10, 20, BLACK)
+
+                       ok
+
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_collisionarea.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 視線追従
+
+視線追従
+========
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - following eyes")
+
+       scleraLeftPosition = Vector2( GetScreenWidth()/2 - 100, GetScreenHeight()/2 )
+       scleraRightPosition = Vector2( GetScreenWidth()/2 + 100, GetScreenHeight()/2 )
+       scleraRadius = 80
+
+       irisLeftPosition = Vector2( GetScreenWidth()/2 - 100, GetScreenHeight()/2 )
+       irisRightPosition = Vector2( GetScreenWidth()/2 + 100, GetScreenHeight()/2 )
+       irisRadius = 24
+
+       angle = 0.0
+       dx = 0.0 dy = 0.0 dxx = 0.0 dyy = 0.0
+
+       SetTargetFPS(60) 
+
+       while !WindowShouldClose()
+
+               irisLeftPosition = GetMousePosition()
+               irisRightPosition = GetMousePosition()
+
+               // 左目にある強膜は確認しません
+               if !CheckCollisionPointCircle(irisLeftPosition,
+                       scleraLeftPosition, scleraRadius - 20)
+                       dx = irisLeftPosition.x - scleraLeftPosition.x
+                       dy = irisLeftPosition.y - scleraLeftPosition.y
+
+                       angle = atan2(dy, dx)
+
+                       dxx = (scleraRadius - irisRadius)*cos(angle)
+                       dyy = (scleraRadius - irisRadius)*sin(angle)
+
+                       irisLeftPosition.x = scleraLeftPosition.x + dxx
+                       irisLeftPosition.y = scleraLeftPosition.y + dyy
+               ok
+
+               // 右目にある強膜は確認しません。
+               if !CheckCollisionPointCircle(irisRightPosition,
+                        scleraRightPosition, scleraRadius - 20)
+                       dx = irisRightPosition.x - scleraRightPosition.x
+                       dy = irisRightPosition.y - scleraRightPosition.y
+
+                       angle = atan2(dy, dx)
+
+                       dxx = (scleraRadius - irisRadius)*cos(angle)
+                       dyy = (scleraRadius - irisRadius)*sin(angle)
+
+                       irisRightPosition.x = scleraRightPosition.x + dxx
+                       irisRightPosition.y = scleraRightPosition.y + dyy
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawCircleV(scleraLeftPosition, scleraRadius, LIGHTGRAY)
+                       DrawCircleV(irisLeftPosition, irisRadius, BROWN)
+                       DrawCircleV(irisLeftPosition, 10, BLACK)
+
+                       DrawCircleV(scleraRightPosition, scleraRadius, LIGHTGRAY)
+                       DrawCircleV(irisRightPosition, irisRadius, DARKGREEN)
+                       DrawCircleV(irisRightPosition, 10, BLACK)
+
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+
+.. image:: raylib_followingeyes.png
+       :alt: RayLib の用例
+       
+.. index:: 
+       pair: RingRayLib の用法; カラーパレット
+
+カラーパレット
+==============
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       MAX_COLORS_COUNT = 21          // 利用できる色値数
+
+       screenWidth = 800
+       screenHeight = 450
+       colors = list(MAX_COLORS_COUNT)
+       colorNames = list(MAX_COLORS_COUNT)
+       colorsRecs = list(MAX_COLORS_COUNT)
+       colorState = list(MAX_COLORS_COUNT)
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - colors palette")
+
+       colors = [
+               DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN,
+               GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW,
+               GREEN, SKYBLUE, PURPLE, BEIGE ]
+
+       colorNames = [
+               "DARKGRAY", "MAROON", "ORANGE", "DARKGREEN", "DARKBLUE", "DARKPURPLE",
+               "DARKBROWN", "GRAY", "RED", "GOLD", "LIME", "BLUE", "VIOLET", "BROWN",
+               "LIGHTGRAY", "PINK", "YELLOW", "GREEN", "SKYBLUE", "PURPLE", "BEIGE" ]
+
+       for i = 1 to MAX_COLORS_COUNT
+               colorsRecs[i] = new Rectangle(0,0,0,0) 
+       next
+
+       for i = 1 to MAX_COLORS_COUNT
+               colorState[i] = 0
+       next
+
+
+       // colorsRecs データで塗りつぶします (長方形ごとに)
+       for i = 1 to MAX_COLORS_COUNT
+               colorsRecs[i].x = 20 + 100*((i-1)%7) + 10*((i-1)%7)
+               colorsRecs[i].y = 80 + 100*floor((i-1)/7) + 10*floor((i-1)/7)
+               colorsRecs[i].width = 100
+               colorsRecs[i].height = 100
+       next
+
+       mousePoint = Vector2( 0.0, 0.0 )
+
+       SetTargetFPS(60)
+
+       // ゲームのメインループ
+       while !WindowShouldClose()
+
+               mousePoint = GetMousePosition()
+
+               for i = 1 to MAX_COLORS_COUNT 
+                       if (CheckCollisionPointRec(mousePoint,
+                                colorsRecs[i])) colorState[i] = 1
+                       else colorState[i] = 0 ok
+               next
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("raylib colors palette", 28, 42, 20, BLACK)
+                       DrawText("press SPACE to see all colors",
+                                        GetScreenWidth() - 180,
+                                        GetScreenHeight() - 40, 10, GRAY)
+
+                       for i = 1 to MAX_COLORS_COUNT    // 長方形の描画
+                               if colorState[i]
+                                  cstate = 0.6
+                               else
+                                  cstate = 1.0
+                               ok
+
+                               DrawRectangleRec(colorsRecs[i], Fade(colors[i], cstate))
+
+                               if (IsKeyDown(KEY_SPACE) || colorState[i])
+                                       DrawRectangle(colorsRecs[i].x,
+                                       colorsRecs[i].y + colorsRecs[i].height - 26,
+                                       colorsRecs[i].width, 20, BLACK)
+                                       DrawRectangleLinesEx(colorsRecs[i], 6,
+                                       Fade(BLACK, 0.3f))
+                                       DrawText(colorNames[i], colorsRecs[i].x + 
+                                       colorsRecs[i].width - MeasureText(colorNames[i],
+                                       10) - 12, colorsRecs[i].y +
+                                       colorsRecs[i].height - 20, 10, colors[i])
+                               ok
+                       next
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+
+スクリーンショット:
+
+.. image:: raylib_colorspalette.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 長方形の拡縮
+
+長方形の拡縮
+============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       MOUSE_SCALE_MARK_SIZE = 12
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                        "raylib [shapes] example - rectangle scaling mouse")
+
+       rec = Rectangle( 100, 100, 200, 80 )
+
+       mousePosition = Vector2( 0,0 )
+
+       mouseScaleReady = false
+       mouseScaleMode = false
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               mousePosition = GetMousePosition()
+
+               if (CheckCollisionPointRec(mousePosition, rec) and
+                       CheckCollisionPointRec(mousePosition,
+                        Rectangle(rec.x + rec.width - MOUSE_SCALE_MARK_SIZE,
+                               rec.y + rec.height - MOUSE_SCALE_MARK_SIZE,
+                                MOUSE_SCALE_MARK_SIZE, MOUSE_SCALE_MARK_SIZE )))
+                       mouseScaleReady = true
+                       if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) 
+                               mouseScaleMode = true ok
+               else mouseScaleReady = false ok
+
+               if (mouseScaleMode)
+               
+                       mouseScaleReady = true
+
+                       rec.width = (mousePosition.x - rec.x)
+                       rec.height = (mousePosition.y - rec.y)
+
+                       if (rec.width < MOUSE_SCALE_MARK_SIZE) 
+                               rec.width = MOUSE_SCALE_MARK_SIZE ok
+                       if (rec.height < MOUSE_SCALE_MARK_SIZE) 
+                               rec.height = MOUSE_SCALE_MARK_SIZE ok
+
+                       if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) 
+                               mouseScaleMode = false ok
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("Scale rectangle dragging from bottom-right corner!",
+                                        10, 10, 20, GRAY)
+
+                       DrawRectangleRec(rec, Fade(GREEN, 0.5f))
+
+                       if (mouseScaleReady)
+                  
+                               DrawRectangleLinesEx(rec, 1, RED)
+                               DrawTriangle(Vector2( rec.x + rec.width -
+                               MOUSE_SCALE_MARK_SIZE, rec.y + rec.height ),
+                               Vector2( rec.x + rec.width, rec.y + rec.height ),
+                               Vector2( rec.x + rec.width, rec.y + rec.height -
+                                        MOUSE_SCALE_MARK_SIZE ), RED)
+                       ok
+
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+
+スクリーンショット:
+
+.. image:: raylib_rectanglescaling.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 音楽のストリーミング再生
+
+音楽のストリーミング再生
+========================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [audio] example - music playing (streaming)")
+
+       InitAudioDevice()               
+
+       music = LoadMusicStream("guitar_noodling.ogg")
+
+       PlayMusicStream(music)
+
+       timePlayed = 0.0
+       pause = false
+
+       SetTargetFPS(60)
+
+
+       while !WindowShouldClose()
+
+               UpdateMusicStream(music)  
+
+               if IsKeyPressed(KEY_SPACE)   
+                       StopMusicStream(music)
+                       PlayMusicStream(music)
+               ok
+
+               if IsKeyPressed(KEY_P)
+                       pause = !pause
+
+                       if pause 
+                               PauseMusicStream(music)
+                       else 
+                               ResumeMusicStream(music)
+                       ok
+               ok
+
+               timePlayed = GetMusicTimePlayed(music) / GetMusicTimeLength(music) *400
+
+               if timePlayed > 400 
+                       StopMusicStream(music)
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY)
+
+                                DrawRectangle(200, 200, 400, 12, LIGHTGRAY)
+                                DrawRectangle(200, 200, timePlayed, 12, MAROON)
+                       DrawRectangleLines(200, 200, 400, 12, GRAY)
+
+                       DrawText("PRESS SPACE  TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY)
+                       DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY)
+
+               EndDrawing()
+
+       end 
+
+       UnloadMusicStream(music)
+
+       CloseAudioDevice()
+
+       CloseWindow()
+
+スクリーンショット:
+       
+.. image:: raylib_musicplaying.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: RingRayLib の用法; 音声の読み込みと再生
+
+音声の読み込みと再生
+====================
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                       "raylib [audio] example - sound loading and playing")
+
+       InitAudioDevice()       
+
+       fxWav = LoadSound("sound.wav")         
+       fxOgg = LoadSound("tanatana.ogg")  
+
+
+       SetTargetFPS(60) 
+
+       while !WindowShouldClose()
+
+               if IsKeyPressed(KEY_SPACE) PlaySound(fxWav)  ok  
+               if IsKeyPressed(KEY_ENTER) PlaySound(fxOgg)  ok  
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawText("Press SPACE to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY)
+                       DrawText("Press ENTER to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY)
+
+               EndDrawing()
+               
+       end
+
+       UnloadSound(fxWav)
+       UnloadSound(fxOgg)
+
+       CloseAudioDevice() 
+
+       CloseWindow()
+
+スクリーンショット:
+       
+.. image:: raylib_soundloading.png
+       :alt: RayLib の用例
+
+       
+.. index:: 
+       pair: RingRayLib の用法; 画像の描画
+
+画像の描画
+==========
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                        "raylib [textures] example - image drawing")
+
+       cat = LoadImage("cat.png")                              
+
+       ImageCrop( cat,  Rectangle( 100, 10, 280, 380 ))        
+       ImageFlipHorizontal( cat)                               
+       ImageResize( cat, 150, 200)                             
+
+       parrots = LoadImage("parrots.png")                      
+
+       ImageDraw( parrots, cat, Rectangle( 0, 0, cat.width, cat.height ), 
+                               Rectangle( 30, 40, cat.width*1.5, cat.height*1.5 ))
+       ImageCrop( parrots, Rectangle( 0, 50, parrots.width, parrots.height - 100 )) 
+
+       UnloadImage(cat)       
+
+       font = LoadFont("custom_jupiter_crash.png")
+
+       ImageDrawTextEx(parrots, Vector2( 300, 230 ), font,
+                        "PARROTS & CAT", font.baseSize, -2, WHITE)
+       UnloadFont(font);                              
+
+       texture = LoadTextureFromImage(parrots)        
+
+       UnloadImage(parrots)                           
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawTexture(texture, screenWidth/2 - texture.width/2,
+                       screenHeight/2 - texture.height/2 - 40, WHITE)
+               DrawRectangleLines(screenWidth/2 - texture.width/2,
+                       screenHeight/2 - texture.height/2 - 40,
+                        texture.width, texture.height, DARKGRAY)
+
+               DrawText("We are drawing only one texture from various images composed!",
+                                       240, 350, 10, DARKGRAY)
+               DrawText("Source images have been cropped, scaled,"+
+                               " flipped and copied one over the other.",
+                                       190, 370, 10, DARKGRAY)
+
+               EndDrawing()
+       end
+
+       UnloadTexture(texture)       
+
+       CloseWindow()                
+
+スクリーンショット:
+       
+.. image:: raylib_imagedrawing.png
+       :alt: RayLib の用例
+
+       
+.. index:: 
+       pair: RingRayLib の用法; 画像生成
+
+画像生成
+========
+
+.. code-block:: ring           
+
+       load "raylib.ring"
+
+       NUM_TEXTURES = 7
+       textures     = list(7)
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [textures] example - procedural images generation")
+
+       verticalGradient   = GenImageGradientV(screenWidth, screenHeight, RED, BLUE)
+       horizontalGradient = GenImageGradientH(screenWidth, screenHeight, RED, BLUE)
+       radialGradient     = GenImageGradientRadial(screenWidth,
+                                screenHeight, 0.0, WHITE, BLACK)
+       checked            = GenImageChecked(screenWidth, screenHeight,
+                                32, 32, RED, BLUE)
+       whiteNoise         = GenImageWhiteNoise(screenWidth, screenHeight, 0.5)
+       perlinNoise        = GenImagePerlinNoise(screenWidth, screenHeight, 50, 50, 4.0)
+       cellular           = GenImageCellular(screenWidth, screenHeight, 32)
+        
+       textures[NUM_TEXTURES] =  0 
+                          
+       textures[1] = LoadTextureFromImage(verticalGradient)
+       textures[2] = LoadTextureFromImage(horizontalGradient)
+       textures[3] = LoadTextureFromImage(radialGradient)
+       textures[4] = LoadTextureFromImage(checked)
+       textures[5] = LoadTextureFromImage(whiteNoise)
+       textures[6] = LoadTextureFromImage(perlinNoise)
+       textures[7] = LoadTextureFromImage(cellular)
+
+       UnloadImage(verticalGradient)
+       UnloadImage(horizontalGradient)
+       UnloadImage(radialGradient)
+       UnloadImage(checked)
+       UnloadImage(whiteNoise)
+       UnloadImage(perlinNoise)
+       UnloadImage(cellular)
+
+       currentTexture = 1  
+
+       SetTargetFPS(10)
+        
+       while !WindowShouldClose()
+
+               if IsMouseButtonPressed(MOUSE_LEFT_BUTTON) || IsKeyPressed(KEY_RIGHT)
+                       currentTexture++
+                       if currentTexture > NUM_TEXTURES  currentTexture = 1 ok
+               ok
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawTexture(textures[currentTexture], 0, 0, WHITE)
+
+                       DrawRectangle(30, 400, 325, 30, Fade(SKYBLUE, 0.5))
+                       DrawRectangleLines(30, 400, 325, 30, Fade(WHITE, 0.5))
+                       DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL TEXTURES",
+                                40, 410, 10, WHITE)
+
+                       switch(currentTexture)
+                               on 1  DrawText("VERTICAL GRADIENT", 560, 10, 20, RAYWHITE)  
+                               on 2  DrawText("HORIZONTAL GRADIENT", 540, 10, 20, RAYWHITE)
+                               on 3  DrawText("RADIAL GRADIENT", 580, 10, 20, LIGHTGRAY)   
+                               on 4  DrawText("CHECKED", 680, 10, 20, RAYWHITE)            
+                               on 5  DrawText("WHITE NOISE", 640, 10, 20, RED)             
+                               on 6  DrawText("PERLIN NOISE", 630, 10, 20, RAYWHITE)       
+                               on 7  DrawText("CELLULAR", 670, 10, 20, RAYWHITE)           
+                       off 
+
+               EndDrawing()
+
+       end
+
+       for i = 1 to  NUM_TEXTURES
+               UnloadTexture( textures[i] )
+       next 
+
+       CloseWindow()
+
+
+スクリーンショット:
+       
+.. image:: raylib_imagegeneration.png
+       :alt: RayLib の用例
+
+       
+.. index:: 
+       pair: RingRayLib の用法; テクスチャの入力
+
+テクスチャの入力
+================
+
+.. code-block:: ring   
+       
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 800
+
+       InitWindow(screenWidth, screenHeight,
+               "raylib [textures] examples - texture source and destination rectangles")
+
+       // 注意: テクスチャの読み込みは必ずウィンドウの初期化後に行ってください
+       // (OpenGL コンテキストが必要です)
+
+       scarfy = LoadTexture("RingLogo.png")        // テクスチャの読み込み
+
+       frameWidth = scarfy.width
+       frameHeight = scarfy.height
+
+       // 入力元となる長方形 (描画で使うテクスチャ部品です)
+       sourceRec = Rectangle( 0.0, 0.0, frameWidth, frameHeight )
+
+       // 出力先の長方形 (テクスチャ部品は画面へ長方形として描画されます)
+       destRec = Rectangle( screenWidth/2, screenHeight/2, frameWidth*2, frameHeight*2 )
+
+       // オリジナルのテクスチャ (回転/点の拡縮)
+       // つまり、出力先の長方形の相対的寸法です
+       origin = Vector2( frameWidth, frameHeight )
+
+       rotation = 0
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               rotation = rotation+1
+
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+
+                       DrawTexturePro(scarfy, sourceRec, destRec,
+                                        origin, rotation, WHITE)
+
+                       DrawLine(destRec.x, 0, destRec.x, screenHeight, GRAY)
+                       DrawLine(0, destRec.y, screenWidth, destRec.y, GRAY)
+
+                       DrawText("(c) Scarfy sprite by Eiden Marsal",
+                                screenWidth - 200, screenHeight - 20, 10, GRAY)
+
+               EndDrawing()
+
+       end
+
+       UnloadTexture(scarfy)        // テクスチャの解放
+
+       CloseWindow()
+               
+
+スクリーンショット:
+       
+.. image:: raylib_texturesource.png
+       :alt: RayLib の用例  
+
+
+.. index:: 
+       pair: RingRayLib の用法; 幾何学的図形
+
+幾何学的図形
+============
+
+.. code-block:: ring   
+
+       load "raylib.ring"
+
+       FOVY_PERSPECTIVE   =  45.0
+       WIDTH_ORTHOGRAPHIC =  10.0
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [models] example - geometric shapes")
+
+       camera = Camera3D(  0.0, 10.0, 10.0,
+                                       0.0, 0.0, 0.0,
+                                       0.0, 1.0, 0.0, 
+                                       FOVY_PERSPECTIVE, CAMERA_PERSPECTIVE 
+                               )
+
+       SetTargetFPS(60)       
+
+       while !WindowShouldClose()  
+
+               if IsKeyPressed(KEY_SPACE)
+               
+                       if camera.type = CAMERA_PERSPECTIVE
+                       
+                               camera.fovy = WIDTH_ORTHOGRAPHIC
+                               camera.type = CAMERA_ORTHOGRAPHIC
+                       
+                       else
+                       
+                               camera.fovy = FOVY_PERSPECTIVE
+                               camera.type = CAMERA_PERSPECTIVE
+                       ok
+               ok
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               BeginMode3D(camera)
+
+               DrawCube(Vector3(-4.0, 0.0,  2.0), 2.0, 5.0, 2.0, RED)
+               DrawCubeWires(Vector3(-4.0, 0.0,  2.0), 2.0, 5.0, 2.0, GOLD)
+               DrawCubeWires(Vector3(-4.0, 0.0, -2.0), 3.0, 6.0, 2.0, MAROON)
+
+               DrawSphere(Vector3(-1.0, 0.0, -2.0), 1.0, GREEN)
+               DrawSphereWires(Vector3( 1.0, 0.0,  2.0), 2.0, 16, 16, LIME)
+
+               DrawCylinder(Vector3(4.0, 0.0, -2.0), 1.0, 2.0, 3.0, 4, SKYBLUE)
+               DrawCylinderWires(Vector3(4.0, 0.0, -2.0), 1.0, 2.0, 3.0, 4, DARKBLUE)
+               DrawCylinderWires(Vector3(4.5, -1.0, 2.0), 1.0, 1.0, 2.0, 6, BROWN)
+
+               DrawCylinder(Vector3(1.0, 0.0, -4.0), 0.0, 1.5, 3.0, 8, GOLD)
+               DrawCylinderWires(Vector3(1.0, 0.0, -4.0), 0.0, 1.5, 3.0, 8, PINK)
+
+               DrawGrid(10, 1.0)
+
+               EndMode3D()
+
+               DrawText("Press Spacebar to switch camera type", 10,
+                                GetScreenHeight() - 30, 20, DARKGRAY)
+
+               if camera.type = CAMERA_ORTHOGRAPHIC
+                       DrawText("ORTHOGRAPHIC", 10, 40, 20, BLACK)
+               else 
+                       if camera.type = CAMERA_PERSPECTIVE 
+                               DrawText("PERSPECTIVE", 10, 40, 20, BLACK)
+                       ok
+               ok
+
+               DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       CloseWindow()
+
+スクリーンショット:
+       
+.. image:: raylib_geometricshapes.png
+       :alt: RayLib の用例  
+
+
+.. index:: 
+       pair: RingRayLib の用法; キュービックマップ
+
+キュービックマップ
+==================
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth  = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight,
+                "raylib [models] example - cubesmap loading and drawing")
+
+       camera = Camera3D( 16.0, 14.0, 16.0,
+                                        0.0, 0.0, 0.0,
+                                        0.0, 1.0, 0.0, 
+                                        45.0, 0 )
+
+       image    = LoadImage("cubicmap.png")        
+       cubicmap = LoadTextureFromImage(image)      
+
+       mesh     = GenMeshCubicmap(image, Vector3( 1.0, 1.0, 1.0 ))
+       model    = LoadModelFromMesh(mesh)
+
+       texture  = LoadTexture("cubicmap_atlas.png") 
+
+       setmodelmaterialtexture(model,0,MAP_DIFFUSE,texture)
+
+       mapPosition = Vector3( -16.0, 0.0, -8.0 )   
+
+       UnloadImage(image)                     
+       SetCameraMode(camera, CAMERA_ORBITAL)  
+       SetTargetFPS(60)                       
+       
+       while !WindowShouldClose()
+
+               UpdateCamera(camera)
+               
+               BeginDrawing()
+
+                       ClearBackground(RAYWHITE)
+                       BeginMode3D(camera)
+                               DrawModel(model, mapPosition, 1.0, WHITE)
+                       EndMode3D()
+
+                       DrawTextureEx(cubicmap, Vector2( screenWidth -
+                                        cubicmap.width*4 - 20, 20 ),
+                                                       0.0, 4.0, WHITE)
+                       DrawRectangleLines(screenWidth - cubicmap.width*4 -
+                                        20, 20, cubicmap.width*4,
+                                       cubicmap.height*4, GREEN)
+
+                       DrawText("cubicmap image used to", 658,  90, 10, GRAY)
+                       DrawText("generate map 3d model",  658, 104, 10, GRAY)
+                       DrawFPS(10, 10)
+
+               EndDrawing()
+               
+       end
+
+       UnloadTexture(cubicmap) 
+       UnloadTexture(texture)  
+       UnloadModel(model)      
+
+       CloseWindow()
+       
+スクリーンショット:
+       
+.. image:: raylib_cubicmap.png
+       :alt: RayLib の用例
+
+
+.. index:: 
+       pair: RingRayLib の用法; 関数
+
+関数
+====
+
+.. code-block:: none
+
+       void InitWindow(int width, int height, const char *title)
+       bool WindowShouldClose(void)
+       void CloseWindow(void)
+       bool IsWindowReady(void)
+       bool IsWindowMinimized(void)
+       bool IsWindowResized(void)
+       bool IsWindowHidden(void)
+       void ToggleFullscreen(void)
+       void UnhideWindow(void)
+       void HideWindow(void)
+       void SetWindowIcon(Image image)
+       void SetWindowTitle(const char *title)
+       void SetWindowPosition(int x, int y)
+       void SetWindowMonitor(int monitor)
+       void SetWindowMinSize(int width, int height)
+       void SetWindowSize(int width, int height)
+       void *GetWindowHandle(void)
+       int GetScreenWidth(void)
+       int GetScreenHeight(void)
+       int GetMonitorCount(void)
+       int GetMonitorWidth(int monitor)
+       int GetMonitorHeight(int monitor)
+       int GetMonitorPhysicalWidth(int monitor)
+       int GetMonitorPhysicalHeight(int monitor)
+       const char *GetMonitorName(int monitor)
+       const char *GetClipboardText(void)
+       void SetClipboardText(const char *text)
+       void ShowCursor(void)
+       void HideCursor(void)
+       bool IsCursorHidden(void)
+       void EnableCursor(void)
+       void DisableCursor(void)
+       void ClearBackground(Color color)
+       void BeginDrawing(void)
+       void EndDrawing(void)
+       void BeginMode2D(Camera2D camera)
+       void EndMode2D(void)
+       void BeginMode3D(Camera3D camera)
+       void EndMode3D(void)
+       void BeginTextureMode(RenderTexture2D target)
+       void EndTextureMode(void)
+       Ray GetMouseRay(Vector2 mousePosition, Camera3D camera)
+       Vector2 GetWorldToScreen(Vector3 position, Camera3D camera)
+       Matrix GetCameraMatrix(Camera3D camera)
+       void SetTargetFPS(int fps)
+       int GetFPS(void)
+       float GetFrameTime(void)
+       double GetTime(void)
+       int ColorToInt(Color color)
+       Vector4 ColorNormalize(Color color)
+       Vector3 ColorToHSV(Color color)
+       Color ColorFromHSV(Vector3 hsv)
+       Color GetColor(int hexValue)
+       Color Fade(Color color, float alpha)
+       void SetConfigFlags(unsigned char flags)
+       void SetTraceLogLevel(int logType)
+       void SetTraceLogExit(int logType)
+       void SetTraceLogCallback(TraceLogCallback callback)
+       void TraceLog(int logType, const char *text)
+       void TakeScreenshot(const char *fileName)
+       int GetRandomValue(int min, int max)
+       bool FileExists(const char *fileName)
+       bool IsFileExtension(const char *fileName, const char *ext)
+       const char *GetExtension(const char *fileName)
+       const char *GetFileName(const char *filePath)
+       const char *GetFileNameWithoutExt(const char *filePath)
+       const char *GetDirectoryPath(const char *fileName)
+       const char *GetWorkingDirectory(void)
+       char **GetDirectoryFiles(const char *dirPath, int *count)
+       void ClearDirectoryFiles(void)
+       bool ChangeDirectory(const char *dir)
+       bool IsFileDropped(void)
+       char **GetDroppedFiles(int *count)
+       void ClearDroppedFiles(void)
+       long GetFileModTime(const char *fileName)
+       void StorageSaveValue(int position, int value)
+       int StorageLoadValue(int position)
+       void OpenURL(const char *url)
+       bool IsKeyPressed(int key)
+       bool IsKeyDown(int key)
+       bool IsKeyReleased(int key)
+       bool IsKeyUp(int key)
+       int GetKeyPressed(void)
+       void SetExitKey(int key)
+       bool IsGamepadAvailable(int gamepad)
+       bool IsGamepadName(int gamepad, const char *name)
+       const char *GetGamepadName(int gamepad)
+       bool IsGamepadButtonPressed(int gamepad, int button)
+       bool IsGamepadButtonDown(int gamepad, int button)
+       bool IsGamepadButtonReleased(int gamepad, int button)
+       bool IsGamepadButtonUp(int gamepad, int button)
+       int GetGamepadButtonPressed(void)
+       int GetGamepadAxisCount(int gamepad)
+       float GetGamepadAxisMovement(int gamepad, int axis)
+       bool IsMouseButtonPressed(int button)
+       bool IsMouseButtonDown(int button)
+       bool IsMouseButtonReleased(int button)
+       bool IsMouseButtonUp(int button)
+       int GetMouseX(void)
+       int GetMouseY(void)
+       Vector2 GetMousePosition(void)
+       void SetMousePosition(int x, int y)
+       void SetMouseOffset(int offsetX, int offsetY)
+       void SetMouseScale(float scaleX, float scaleY)
+       int GetMouseWheelMove(void)
+       int GetTouchX(void)
+       int GetTouchY(void)
+       Vector2 GetTouchPosition(int index)
+       void SetGesturesEnabled(unsigned int gestureFlags)
+       bool IsGestureDetected(int gesture)
+       int GetGestureDetected(void)
+       int GetTouchPointsCount(void)
+       float GetGestureHoldDuration(void)
+       Vector2 GetGestureDragVector(void)
+       float GetGestureDragAngle(void)
+       Vector2 GetGesturePinchVector(void)
+       float GetGesturePinchAngle(void)
+       void SetCameraMode(Camera3D camera, int mode)
+       void UpdateCamera(Camera3D *camera)
+       void SetCameraPanControl(int panKey)
+       void SetCameraAltControl(int altKey)
+       void SetCameraSmoothZoomControl(int szKey)
+       void SetCameraMoveControls(int frontKey, int backKey, int rightKey, int leftKey,
+                int upKey, int downKey)
+       void DrawPixel(int posX, int posY, Color color)
+       void DrawPixelV(Vector2 position, Color color)
+       void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color)
+       void DrawLineV(Vector2 startPos, Vector2 endPos, Color color)
+       void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color)
+       void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color)
+       void DrawLineStrip(Vector2 *points, int numPoints, Color color)
+       void DrawCircle(int centerX, int centerY, float radius, Color color)
+       void DrawCircleSector(Vector2 center, float radius, int startAngle, int endAngle,
+                int segments, Color color)
+       void DrawCircleSectorLines(Vector2 center, float radius, int startAngle, 
+               int endAngle, int segments, Color color)
+       void DrawCircleGradient(int centerX, int centerY, float radius, 
+               Color color1, Color color2)
+       void DrawCircleV(Vector2 center, float radius, Color color)
+       void DrawCircleLines(int centerX, int centerY, float radius, Color color)
+       void DrawRing(Vector2 center, float innerRadius, float outerRadius,
+                int startAngle, int endAngle, int segments, Color color)
+       void DrawRingLines(Vector2 center, float innerRadius, float outerRadius,
+                int startAngle, int endAngle, int segments, Color color)
+       void DrawRectangle(int posX, int posY, int width, int height, Color color)
+       void DrawRectangleV(Vector2 position, Vector2 size, Color color)
+       void DrawRectangleRec(Rectangle rec, Color color)
+       void DrawRectanglePro(Rectangle rec, Vector2 origin, 
+               float rotation, Color color)
+       void DrawRectangleGradientV(int posX, int posY, int width, 
+               int height, Color color1, Color color2)
+       void DrawRectangleGradientH(int posX, int posY, int width, 
+               int height, Color color1, Color color2)
+       void DrawRectangleGradientEx(Rectangle rec, Color col1, 
+               Color col2, Color col3, Color col4)
+       void DrawRectangleLines(int posX, int posY, int width, 
+               int height, Color color)
+       void DrawRectangleLinesEx(Rectangle rec, int lineThick, Color color)
+       void DrawRectangleRounded(Rectangle rec, float roundness, 
+               int segments, Color color)
+       void DrawRectangleRoundedLines(Rectangle rec, float roundness, 
+               int segments, int lineThick, Color color)
+       void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
+       void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color)
+       void DrawTriangleFan(Vector2 *points, int numPoints, Color color)
+       void DrawPoly(Vector2 center, int sides, float radius, 
+               float rotation, Color color)
+       void SetShapesTexture(Texture2D texture, Rectangle source)
+       bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2)
+       bool CheckCollisionCircles(Vector2 center1, float radius1, 
+               Vector2 center2, float radius2)
+       bool CheckCollisionCircleRec(Vector2 center, float radius, 
+               Rectangle rec)
+       Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2)
+       bool CheckCollisionPointRec(Vector2 point, Rectangle rec)
+       bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius)
+       bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, 
+               Vector2 p2, Vector2 p3)
+       Image LoadImage(const char *fileName)
+       Image LoadImageEx(Color *pixels, int width, int height)
+       Image LoadImagePro(void *data, int width, int height, int format)
+       Image LoadImageRaw(const char *fileName, int width, int height, 
+               int format, int headerSize)
+       void ExportImage(Image image, const char *fileName)
+       void ExportImageAsCode(Image image, const char *fileName)
+       Texture2D LoadTexture(const char *fileName)
+       Texture2D LoadTextureFromImage(Image image)
+       TextureCubemap LoadTextureCubemap(Image image, int layoutType)
+       RenderTexture2D LoadRenderTexture(int width, int height)
+       void UnloadImage(Image image)
+       void UnloadTexture(Texture2D texture)
+       void UnloadRenderTexture(RenderTexture2D target)
+       Color *GetImageData(Image image)
+       Vector4 *GetImageDataNormalized(Image image)
+       int GetPixelDataSize(int width, int height, int format)
+       Image GetTextureData(Texture2D texture)
+       Image GetScreenData(void)
+       void UpdateTexture(Texture2D texture, const void *pixels)
+       Image ImageCopy(Image image)
+       void ImageToPOT(Image *image, Color fillColor)
+       void ImageFormat(Image *image, int newFormat)
+       void ImageAlphaMask(Image *image, Image alphaMask)
+       void ImageAlphaClear(Image *image, Color color, float threshold)
+       void ImageAlphaCrop(Image *image, float threshold)
+       void ImageAlphaPremultiply(Image *image)
+       void ImageCrop(Image *image, Rectangle crop)
+       void ImageResize(Image *image, int newWidth, int newHeight)
+       void ImageResizeNN(Image *image, int newWidth,int newHeight)
+       void ImageResizeCanvas(Image *image, int newWidth, int newHeight, 
+               int offsetX, int offsetY, Color color)
+       void ImageMipmaps(Image *image)
+       void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp)
+       Color *ImageExtractPalette(Image image, int maxPaletteSize, int *extractCount)
+       Image ImageText(const char *text, int fontSize, Color color)
+       Image ImageTextEx(Font font, const char *text, float fontSize, 
+               float spacing, Color tint)
+       void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec)
+       void ImageDrawRectangle(Image *dst, Rectangle rec, Color color)
+       void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color)
+       void ImageDrawText(Image *dst, Vector2 position, const char *text, 
+               int fontSize, Color color)
+       void ImageDrawTextEx(Image *dst, Vector2 position, Font font, 
+               const char *text, float fontSize, float spacing, Color color)
+       void ImageFlipVertical(Image *image)
+       void ImageFlipHorizontal(Image *image)
+       void ImageRotateCW(Image *image)
+       void ImageRotateCCW(Image *image)
+       void ImageColorTint(Image *image, Color color)
+       void ImageColorInvert(Image *image)
+       void ImageColorGrayscale(Image *image)
+       void ImageColorContrast(Image *image, float contrast)
+       void ImageColorBrightness(Image *image, int brightness)
+       void ImageColorReplace(Image *image, Color color, Color replace)
+       Image GenImageColor(int width, int height, Color color)
+       Image GenImageGradientV(int width, int height, Color top, Color bottom)
+       Image GenImageGradientH(int width, int height, Color left, Color right)
+       Image GenImageGradientRadial(int width, int height, float density, 
+               Color inner, Color outer)
+       Image GenImageChecked(int width, int height, int checksX, int checksY, 
+               Color col1, Color col2)
+       Image GenImageWhiteNoise(int width, int height, float factor)
+       Image GenImagePerlinNoise(int width, int height, int offsetX, 
+               int offsetY, float scale)
+       Image GenImageCellular(int width, int height, int tileSize)
+       void GenTextureMipmaps(Texture2D *texture)
+       void SetTextureFilter(Texture2D texture, int filterMode)
+       void SetTextureWrap(Texture2D texture, int wrapMode)
+       void DrawTexture(Texture2D texture, int posX, int posY, Color tint)
+       void DrawTextureV(Texture2D texture, Vector2 position, Color tint)
+       void DrawTextureEx(Texture2D texture, Vector2 position, 
+               float rotation, float scale, Color tint)
+       void DrawTextureRec(Texture2D texture, Rectangle sourceRec, 
+               Vector2 position, Color tint)
+       void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, 
+               Rectangle quad, Color tint)
+       void DrawTexturePro(Texture2D texture, Rectangle sourceRec, 
+               Rectangle destRec, Vector2 origin, float rotation, Color tint)
+       void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, 
+               Rectangle destRec, Vector2 origin, float rotation, Color tint)
+       Font GetFontDefault(void)
+       Font LoadFont(const char *fileName)
+       Font LoadFontEx(const char *fileName, int fontSize, 
+               int *fontChars, int charsCount)
+       Font LoadFontFromImage(Image image, Color key, int firstChar)
+       CharInfo *LoadFontData(const char *fileName, int fontSize, 
+               int *fontChars, int charsCount, int type)
+       Image GenImageFontAtlas(CharInfo *chars, int charsCount, 
+               int fontSize, int padding, int packMethod)
+       void UnloadFont(Font font)
+       void DrawFPS(int posX, int posY)
+       void DrawText(const char *text, int posX, int posY, int fontSize, Color color)
+       void DrawTextEx(Font font, const char *text, Vector2 position, 
+               float fontSize, float spacing, Color tint)
+       void DrawTextRec(Font font, const char *text, Rectangle rec, 
+               float fontSize, float spacing, bool wordWrap, Color tint)
+       void DrawTextRecEx(Font font, const char *text, Rectangle rec, 
+               float fontSize, float spacing, bool wordWrap, Color tint,
+               int selectStart, int selectLength, Color selectText, Color selectBack)
+       int MeasureText(const char *text, int fontSize)
+       Vector2 MeasureTextEx(Font font, const char *text, 
+               float fontSize, float spacing)
+       int GetGlyphIndex(Font font, int character)
+       int GetNextCodepoint(const char *text, int *count)
+       bool TextIsEqual(const char *text1, const char *text2)
+       unsigned int TextLength(const char *text)
+       unsigned int TextCountCodepoints(const char *text)
+       const char *TextFormat(const char *text)
+       const char *TextSubtext(const char *text, int position, int length)
+       const char *TextReplace(char *text, const char *replace, const char *by)
+       const char *TextInsert(const char *text, const char *insert, int position)
+       const char *TextJoin(const char **textList, int count, const char *delimiter)
+       const char **TextSplit(const char *text, char delimiter, int *count)
+       void TextAppend(char *text, const char *append, int *position)
+       int TextFindIndex(const char *text, const char *find)
+       const char *TextToUpper(const char *text)
+       const char *TextToLower(const char *text)
+       const char *TextToPascal(const char *text)
+       int TextToInteger(const char *text)
+       void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color)
+       void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, 
+       float rotationAngle, Color color)
+       void DrawCube(Vector3 position, float width, float height, float length, Color color)
+       void DrawCubeV(Vector3 position, Vector3 size, Color color)
+       void DrawCubeWires(Vector3 position, float width, float height, 
+               float length, Color color)
+       void DrawCubeWiresV(Vector3 position, Vector3 size, Color color)
+       void DrawCubeTexture(Texture2D texture, Vector3 position, 
+               float width, float height, float length, Color color)
+       void DrawSphere(Vector3 centerPos, float radius, Color color)
+       void DrawSphereEx(Vector3 centerPos, float radius, int rings, 
+               int slices, Color color)
+       void DrawSphereWires(Vector3 centerPos, float radius, int rings, 
+               int slices, Color color)
+       void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, 
+               float height, int slices, Color color)
+       void DrawCylinderWires(Vector3 position, float radiusTop, 
+               float radiusBottom, float height, int slices, Color color)
+       void DrawPlane(Vector3 centerPos, Vector2 size, Color color)
+       void DrawRay(Ray ray, Color color)
+       void DrawGrid(int slices, float spacing)
+       void DrawGizmo(Vector3 position)
+       Model LoadModel(const char *fileName)
+       Model LoadModelFromMesh(Mesh mesh)
+       void UnloadModel(Model model)
+       Mesh *LoadMeshes(const char *fileName, int *meshCount)
+       void ExportMesh(Mesh mesh, const char *fileName)
+       void UnloadMesh(Mesh *mesh)
+       Material *LoadMaterials(const char *fileName, int *materialCount)
+       Material LoadMaterialDefault(void)
+       void UnloadMaterial(Material material)
+       void SetMaterialTexture(Material *material, int mapType, Texture2D texture)
+       void SetModelMeshMaterial(Model *model, int meshId, int materialId)
+       ModelAnimation *LoadModelAnimations(const char *fileName, int *animsCount)
+       void UpdateModelAnimation(Model model, ModelAnimation anim, int frame)
+       void UnloadModelAnimation(ModelAnimation anim)
+       bool IsModelAnimationValid(Model model, ModelAnimation anim)
+       Mesh GenMeshPoly(int sides, float radius)
+       Mesh GenMeshPlane(float width, float length, int resX, int resZ)
+       Mesh GenMeshCube(float width, float height, float length)
+       Mesh GenMeshSphere(float radius, int rings, int slices)
+       Mesh GenMeshHemiSphere(float radius, int rings, int slices)
+       Mesh GenMeshCylinder(float radius, float height, int slices)
+       Mesh GenMeshTorus(float radius, float size, int radSeg, int sides)
+       Mesh GenMeshKnot(float radius, float size, int radSeg, int sides)
+       Mesh GenMeshHeightmap(Image heightmap, Vector3 size)
+       Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize)
+       BoundingBox MeshBoundingBox(Mesh mesh)
+       void MeshTangents(Mesh *mesh)
+       void MeshBinormals(Mesh *mesh)
+       void DrawModel(Model model, Vector3 position, float scale, Color tint)
+       void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, 
+               float rotationAngle, Vector3 scale, Color tint)
+       void DrawModelWires(Model model, Vector3 position, float scale, Color tint)
+       void DrawModelWiresEx(Model model, Vector3 position, 
+               Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint)
+       void DrawBoundingBox(BoundingBox box, Color color)
+       void DrawBillboard(Camera3D camera, Texture2D texture, 
+               Vector3 center, float size, Color tint)
+       void DrawBillboardRec(Camera3D camera, Texture2D texture, 
+               Rectangle sourceRec, Vector3 center, float size, Color tint)
+       bool CheckCollisionSpheres(Vector3 centerA, float radiusA, 
+               Vector3 centerB, float radiusB)
+       bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2)
+       bool CheckCollisionBoxSphere(BoundingBox box, Vector3 centerSphere, float radiusSphere)
+       bool CheckCollisionRaySphere(Ray ray, Vector3 spherePosition, float sphereRadius)
+       bool CheckCollisionRaySphereEx(Ray ray, Vector3 spherePosition, 
+               float sphereRadius, Vector3 *collisionPoint)
+       bool CheckCollisionRayBox(Ray ray, BoundingBox box)
+       RayHitInfo GetCollisionRayModel(Ray ray, Model *model)
+       RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3)
+       RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight)
+       char *LoadText(const char *fileName)
+       Shader LoadShader(const char *vsFileName, const char *fsFileName)
+       Shader LoadShaderCode(char *vsCode, char *fsCode)
+       void UnloadShader(Shader shader)
+       Shader GetShaderDefault(void)
+       Texture2D GetTextureDefault(void)
+       int GetShaderLocation(Shader shader, const char *uniformName)
+       void SetShaderValue(Shader shader, int uniformLoc, 
+               const void *value, int uniformType)
+       void SetShaderValueV(Shader shader, int uniformLoc, 
+               const void *value, int uniformType, int count)
+       void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
+       void SetShaderValueTexture(Shader shader, int uniformLoc, Texture2D texture)
+       void SetMatrixProjection(Matrix proj)
+       void SetMatrixModelview(Matrix view)
+       Matrix GetMatrixModelview(void)
+       Texture2D GenTextureCubemap(Shader shader, Texture2D skyHDR, int size)
+       Texture2D GenTextureIrradiance(Shader shader, Texture2D cubemap, int size)
+       Texture2D GenTexturePrefilter(Shader shader, Texture2D cubemap, int size)
+       Texture2D GenTextureBRDF(Shader shader, int size)
+       void BeginShaderMode(Shader shader)
+       void EndShaderMode(void)
+       void BeginBlendMode(int mode)
+       void EndBlendMode(void)
+       void BeginScissorMode(int x, int y, int width, int height)
+       void EndScissorMode(void)
+       void InitVrSimulator(void)
+       void CloseVrSimulator(void)
+       void UpdateVrTracking(Camera3D *camera)
+       void SetVrConfiguration(VrDeviceInfo info, Shader distortion)
+       bool IsVrSimulatorReady(void)
+       void ToggleVrMode(void)
+       void BeginVrDrawing(void)
+       void EndVrDrawing(void)
+       void InitAudioDevice(void)
+       void CloseAudioDevice(void)
+       bool IsAudioDeviceReady(void)
+       void SetMasterVolume(float volume)
+       Wave LoadWave(const char *fileName)
+       Wave LoadWaveEx(void *data, int sampleCount, int sampleRate, 
+               int sampleSize, int channels)
+       Sound LoadSound(const char *fileName)
+       Sound LoadSoundFromWave(Wave wave)
+       void UpdateSound(Sound sound, const void *data, int samplesCount)
+       void UnloadWave(Wave wave)
+       void UnloadSound(Sound sound)
+       void ExportWave(Wave wave, const char *fileName)
+       void ExportWaveAsCode(Wave wave, const char *fileName)
+       void PlaySound(Sound sound)
+       void PauseSound(Sound sound)
+       void ResumeSound(Sound sound)
+       void StopSound(Sound sound)
+       bool IsSoundPlaying(Sound sound)
+       void SetSoundVolume(Sound sound, float volume)
+       void SetSoundPitch(Sound sound, float pitch)
+       void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels)
+       Wave WaveCopy(Wave wave)
+       void WaveCrop(Wave *wave, int initSample, int finalSample)
+       float *GetWaveData(Wave wave)
+       Music LoadMusicStream(const char *fileName)
+       void UnloadMusicStream(Music music)
+       void PlayMusicStream(Music music)
+       void UpdateMusicStream(Music music)
+       void StopMusicStream(Music music)
+       void PauseMusicStream(Music music)
+       void ResumeMusicStream(Music music)
+       bool IsMusicPlaying(Music music)
+       void SetMusicVolume(Music music, float volume)
+       void SetMusicPitch(Music music, float pitch)
+       void SetMusicLoopCount(Music music, int count)
+       float GetMusicTimeLength(Music music)
+       float GetMusicTimePlayed(Music music)
+       AudioStream InitAudioStream(unsigned int sampleRate, 
+               unsigned int sampleSize, unsigned int channels)
+       void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount)
+       void CloseAudioStream(AudioStream stream)
+       bool IsAudioBufferProcessed(AudioStream stream)
+       void PlayAudioStream(AudioStream stream)
+       void PauseAudioStream(AudioStream stream)
+       void ResumeAudioStream(AudioStream stream)
+       bool IsAudioStreamPlaying(AudioStream stream)
+       void StopAudioStream(AudioStream stream)
+       void SetAudioStreamVolume(AudioStream stream, float volume)
+       void SetAudioStreamPitch(AudioStream stream, float pitch)
+       void GuiEnable(void)
+       void GuiDisable(void)
+       void GuiLock(void)
+       void GuiUnlock(void)
+       void GuiState(int state)
+       void GuiFont(Font font)
+       void GuiFade(float alpha)
+       void GuiSetStyle(int control, int property, int value)
+       int GuiGetStyle(int control, int property)
+       bool GuiWindowBox(Rectangle bounds, const char *text)
+       void GuiGroupBox(Rectangle bounds, const char *text)
+       void GuiLine(Rectangle bounds, const char *text)
+       void GuiPanel(Rectangle bounds)
+       Rectangle GuiScrollPanel(Rectangle bounds, Rectangle content, Vector2 *scroll)
+       void GuiLabel(Rectangle bounds, const char *text)
+       bool GuiButton(Rectangle bounds, const char *text)
+       bool GuiLabelButton(Rectangle bounds, const char *text)
+       bool GuiImageButton(Rectangle bounds, Texture2D texture)
+       bool GuiImageButtonEx(Rectangle bounds, Texture2D texture, 
+               Rectangle texSource, const char *text)
+       bool GuiToggle(Rectangle bounds, const char *text, bool active)
+       int GuiToggleGroup(Rectangle bounds, const char *text, int active)
+       bool GuiCheckBox(Rectangle bounds, const char *text, bool checked)
+       int GuiComboBox(Rectangle bounds, const char *text, int active)=
+       bool GuiDropdownBox(Rectangle bounds, const char *text, 
+               int *active, bool editMode)
+       bool GuiSpinner(Rectangle bounds, int *value, int minValue, 
+               int maxValue, bool editMode)
+       bool GuiValueBox(Rectangle bounds, int *value, int minValue, 
+               int maxValue, bool editMode)
+       bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode)
+       bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode)
+       float GuiSlider(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       float GuiSliderBar(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       float GuiProgressBar(Rectangle bounds, const char *text, float value, 
+               float minValue, float maxValue, bool showValue)
+       void GuiStatusBar(Rectangle bounds, const char *text)
+       void GuiDummyRec(Rectangle bounds, const char *text)
+       int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue)
+       Vector2 GuiGrid(Rectangle bounds, float spacing, int subdivs)
+       bool GuiListView(Rectangle bounds, const char *text, int *active, 
+               int *scrollIndex, bool editMode)
+       bool GuiListViewEx(Rectangle bounds, const char **text, int count, 
+               int *enabled, int *active, int *focus, int *scrollIndex, bool editMode)
+       int GuiMessageBox(Rectangle bounds, const char *windowTitle, 
+               const char *message, const char *buttons)
+       int GuiTextInputBox(Rectangle bounds, const char *windowTitle, 
+               const char *message, char *text, const char *buttons)
+       Color GuiColorPicker(Rectangle bounds, Color color)
+       void GuiLoadStyle(const char *fileName)
+       void GuiLoadStyleProps(const int *props, int count)
+       void GuiLoadStyleDefault(void)
+       void GuiUpdateStyleComplete(void)
+       const char *GuiIconText(int iconId, const char *text)
diff --git a/docs/ja-jp/source/ringrepl.png b/docs/ja-jp/source/ringrepl.png
new file mode 100644 (file)
index 0000000..162c174
Binary files /dev/null and b/docs/ja-jp/source/ringrepl.png differ
diff --git a/docs/ja-jp/source/ringzip.txt b/docs/ja-jp/source/ringzip.txt
new file mode 100644 (file)
index 0000000..c661d4d
--- /dev/null
@@ -0,0 +1,181 @@
+.. index:: 
+       single: RingZip; はじめに
+
+==============
+RingZip の用法
+==============
+
+RingZip の用法を学びます。
+
+.. index:: 
+       pair: RingZip; Zip ファイルの作成
+
+Zip ファイルの作成
+==================
+
+用例 : 四本のファイルがある myfile.zip を作成します。
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'w')
+       zip_addfile(oZip,"test.c")
+       zip_addfile(oZip,"zip.c")
+       zip_addfile(oZip,"zip.h")
+       zip_addfile(oZip,"miniz.h")
+       zip_close(oZip)
+
+.. index:: 
+       pair: RingZip; Zip ファイルの展開
+
+Zip ファイルの展開
+==================
+
+用例 : myfile.zip を myfolder フォルダへ展開します。
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       zip_extract_allfiles("myfile.zip","myfolder")
+
+.. index:: 
+       pair: RingZip; Zip ファイルにあるファイルのリスト表示
+
+Zip ファイルにあるファイルのリスト表示
+======================================
+
+用例 : myfile.zip にあるファイル名のリストを表示します。
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'r')
+       for x=1 to zip_filescount(oZip)
+              see zip_getfilenamebyindex(oZip,x) + nl
+       next
+       zip_close(oZip)
+
+.. index:: 
+       pair: RingZip; RingZip クラスの用法
+
+RingZip クラスの用法
+====================
+
+RingZip ライブラリには二種類のクラスがあります。すなわち、 Zip クラスと ZipEntry クラスです。
+
+用例①:
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               setFileName("myfile.zip")
+               open("w")
+               newEntry() {
+                       open("test.c")
+                       writefile("test.c")
+                       close()
+               }
+               close()
+       }
+
+用例②:
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("w")
+               AddFile("test.c")
+               AddFile("zip.c")
+               AddFile("zip.h")
+               AddFile("miniz.h")
+               Close()
+       }
+
+
+用例③:
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new zip {
+               SetFileName("myfile.zip")
+               ExtractAllFiles("myfolder")
+       }
+
+
+用例④:
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("r")
+               see FilesCount()
+               Close()
+       }
+
+
+用例⑤:
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("r")
+               for x = 1 to filescount() 
+                       See GetFileNameByIndex(x) + nl
+               next
+               Close()
+       }
+
+.. index:: 
+       pair: RingZip; Zip クラスリファレンス
+
+Zip クラスリファレンス
+======================
+
+メソッド:
+
+=========================== ======================================================================
+メソッド                    説明・実行結果
+=========================== ======================================================================
+SetFileName(cName)          Zip ファイル名を指定します。
+GetFileName()               Zip ファイル名を返します。
+Open(cMode)                 ファイルを開きます。 cMode = “a”, “w” または “r”
+Close()                     Zip ファイルを閉じます。
+AddFile(cFileName)          Zip ファイルへ新しいファイルを追加します。
+ExtractAllFiles(cFolder)    Zip ファイルにあるファイルを全て展開します。
+FilesCount()                Zip ファイルにあるファイルの本数を返します。
+GetFileNameByIndex(nIndex)  ファイルインデックスから Zip ファイルのファイル名を返します。
+NewEntry()                  新しい ZipEntry オブジェクトを作成します。
+=========================== ======================================================================
+
+
+.. index:: 
+       pair: RingZip; ZipEntry クラスリファレンス
+
+ZipEntry クラスリファレンス
+===========================
+
+メソッド:
+
+=========================== ======================================================================
+メソッド                    説明・実行結果
+=========================== ======================================================================
+Open(cFileName)             新しいエントリーを開きます。
+WriteFile(cFileName)        エントリーからファイルへ書き込みます。
+WriteString(cString)        エントリーから文字列へ書き込みます。
+Close()                     エントリーを閉じます。
+=========================== ======================================================================
+
+
diff --git a/docs/ja-jp/source/rnote15events.png b/docs/ja-jp/source/rnote15events.png
new file mode 100644 (file)
index 0000000..a14997a
Binary files /dev/null and b/docs/ja-jp/source/rnote15events.png differ
diff --git a/docs/ja-jp/source/rnote15output.png b/docs/ja-jp/source/rnote15output.png
new file mode 100644 (file)
index 0000000..6cf97e7
Binary files /dev/null and b/docs/ja-jp/source/rnote15output.png differ
diff --git a/docs/ja-jp/source/rnote15shot1.png b/docs/ja-jp/source/rnote15shot1.png
new file mode 100644 (file)
index 0000000..f8f03f1
Binary files /dev/null and b/docs/ja-jp/source/rnote15shot1.png differ
diff --git a/docs/ja-jp/source/rnote15shot2.png b/docs/ja-jp/source/rnote15shot2.png
new file mode 100644 (file)
index 0000000..e00e642
Binary files /dev/null and b/docs/ja-jp/source/rnote15shot2.png differ
diff --git a/docs/ja-jp/source/rnote15shot3.png b/docs/ja-jp/source/rnote15shot3.png
new file mode 100644 (file)
index 0000000..b3a96ca
Binary files /dev/null and b/docs/ja-jp/source/rnote15shot3.png differ
diff --git a/docs/ja-jp/source/rnote19.jpg b/docs/ja-jp/source/rnote19.jpg
new file mode 100644 (file)
index 0000000..d61b78c
Binary files /dev/null and b/docs/ja-jp/source/rnote19.jpg differ
diff --git a/docs/ja-jp/source/rnotedistribute.png b/docs/ja-jp/source/rnotedistribute.png
new file mode 100644 (file)
index 0000000..d58bae5
Binary files /dev/null and b/docs/ja-jp/source/rnotedistribute.png differ
diff --git a/docs/ja-jp/source/rnotedistributemenu.png b/docs/ja-jp/source/rnotedistributemenu.png
new file mode 100644 (file)
index 0000000..5ed2e10
Binary files /dev/null and b/docs/ja-jp/source/rnotedistributemenu.png differ
diff --git a/docs/ja-jp/source/rnotefd.png b/docs/ja-jp/source/rnotefd.png
new file mode 100644 (file)
index 0000000..a4c229a
Binary files /dev/null and b/docs/ja-jp/source/rnotefd.png differ
diff --git a/docs/ja-jp/source/rnotelinenumber.png b/docs/ja-jp/source/rnotelinenumber.png
new file mode 100644 (file)
index 0000000..2fc38df
Binary files /dev/null and b/docs/ja-jp/source/rnotelinenumber.png differ
diff --git a/docs/ja-jp/source/rnotemenu_browser.png b/docs/ja-jp/source/rnotemenu_browser.png
new file mode 100644 (file)
index 0000000..de23aed
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_browser.png differ
diff --git a/docs/ja-jp/source/rnotemenu_edit.png b/docs/ja-jp/source/rnotemenu_edit.png
new file mode 100644 (file)
index 0000000..25d6d08
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_edit.png differ
diff --git a/docs/ja-jp/source/rnotemenu_file.png b/docs/ja-jp/source/rnotemenu_file.png
new file mode 100644 (file)
index 0000000..cbfb86c
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_file.png differ
diff --git a/docs/ja-jp/source/rnotemenu_help.png b/docs/ja-jp/source/rnotemenu_help.png
new file mode 100644 (file)
index 0000000..522f987
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_help.png differ
diff --git a/docs/ja-jp/source/rnotemenu_mode.png b/docs/ja-jp/source/rnotemenu_mode.png
new file mode 100644 (file)
index 0000000..525815a
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_mode.png differ
diff --git a/docs/ja-jp/source/rnotemenu_program.png b/docs/ja-jp/source/rnotemenu_program.png
new file mode 100644 (file)
index 0000000..55d2b56
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_program.png differ
diff --git a/docs/ja-jp/source/rnotemenu_tools.png b/docs/ja-jp/source/rnotemenu_tools.png
new file mode 100644 (file)
index 0000000..f06d303
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_tools.png differ
diff --git a/docs/ja-jp/source/rnotemenu_view.png b/docs/ja-jp/source/rnotemenu_view.png
new file mode 100644 (file)
index 0000000..d60f854
Binary files /dev/null and b/docs/ja-jp/source/rnotemenu_view.png differ
diff --git a/docs/ja-jp/source/rnotemodernstyle.png b/docs/ja-jp/source/rnotemodernstyle.png
new file mode 100644 (file)
index 0000000..356b31a
Binary files /dev/null and b/docs/ja-jp/source/rnotemodernstyle.png differ
diff --git a/docs/ja-jp/source/rnotemodernstyle2.png b/docs/ja-jp/source/rnotemodernstyle2.png
new file mode 100644 (file)
index 0000000..aa90019
Binary files /dev/null and b/docs/ja-jp/source/rnotemodernstyle2.png differ
diff --git a/docs/ja-jp/source/rnotestylemenu.png b/docs/ja-jp/source/rnotestylemenu.png
new file mode 100644 (file)
index 0000000..e8b78f7
Binary files /dev/null and b/docs/ja-jp/source/rnotestylemenu.png differ
diff --git a/docs/ja-jp/source/rnotetoolsterminal.png b/docs/ja-jp/source/rnotetoolsterminal.png
new file mode 100644 (file)
index 0000000..46a6c9a
Binary files /dev/null and b/docs/ja-jp/source/rnotetoolsterminal.png differ
diff --git a/docs/ja-jp/source/rnotetoolsterminal2.png b/docs/ja-jp/source/rnotetoolsterminal2.png
new file mode 100644 (file)
index 0000000..19a01c0
Binary files /dev/null and b/docs/ja-jp/source/rnotetoolsterminal2.png differ
diff --git a/docs/ja-jp/source/runwebapp1.png b/docs/ja-jp/source/runwebapp1.png
new file mode 100644 (file)
index 0000000..3d708ed
Binary files /dev/null and b/docs/ja-jp/source/runwebapp1.png differ
diff --git a/docs/ja-jp/source/runwebapp2.png b/docs/ja-jp/source/runwebapp2.png
new file mode 100644 (file)
index 0000000..d55801d
Binary files /dev/null and b/docs/ja-jp/source/runwebapp2.png differ
diff --git a/docs/ja-jp/source/scope.txt b/docs/ja-jp/source/scope.txt
new file mode 100644 (file)
index 0000000..b5d6da7
--- /dev/null
@@ -0,0 +1,1009 @@
+.. index:: 
+       single: スコープ規則; はじめに
+
+========================
+変数と属性のスコープ規則
+========================
+
+Ring のスコープ規則と変数の検出方法、および名前衝突の解説、さらに解決方法と回避方法を学びます。
+
+この情報は Ring で大規模アプリケーションの開発をはじめるときに重要です。
+
+アプリケーションには下記が使用されています。
+
+* グローバル変数 (使用を避けることに努めてください)
+
+* クラス (オブジェクト指向)
+
+* 括弧 { } によるオブジェクトのアクセス
+
+* 宣言型プログラミング
+
+* 自然言語プログラミング
+
+.. index:: 
+       pair: スコープ規則; 三種類のスコープ
+
+三種類のスコープ
+================
+
+Ring には三種類のスコープがあります。
+
+(1) パブリックスコープとグローバルスコープ - 各変数はステートメント部で定義されます (関数とクラスの前)
+
+(2) オブジェクトスコープ - オブジェクトの内側にあるとき (クラスのメソッドの内側または { } の使用によるオブジェクトへのアクセス)
+
+(3) ローカルスコープ - 関数とメソッドに関連付けられています
+
+.. index:: 
+       pair: スコープ規則; 変数の定義と変数へのアクセス
+
+変数の定義と変数へのアクセス
+============================
+
+(1) Ring はレキシカルスコープを使用しています。つまり、変数のスコープは変数を定義した場所により決定します。
+
+(2) { } 括弧内でのオブジェクトのアクセス時、現在有効なオブジェクトのスコープを対象となるオブジェクトのスコープへ変更します。今まで通り、グローバルスコープとローカルスコープへアクセスできます。
+
+(3) 'Class' キーワードとクラス名末尾に、変数名の定義を記述したとしても、今まで通りグローバルスコープへアクセスできます。
+
+この範囲 (クラスの範囲 - クラス名の後、およびメソッドの前) にあるものは、
+
+       * グローバルスコープ ----> グローバルスコープ
+       * オブジェクトスコープ ----> オブジェクトスコープ
+       * ローカルスコープ  ----> オブジェクトスコープ
+
+.. note:: クラスの範囲にあるローカルスコープからでも、この範囲のオブジェクトスコープを指すため、入れ子の括弧は使用可能でありローカルスコープからクラスのオブジェクトスコープへのアクセスができます。
+
+.. tip :: この範囲での定義によりウィンドウとコントロールの属性を作成できます。
+       
+.. tip :: クラスの範囲にてオブジェクトの作成、および括弧 { } でオブジェクトへアクセスした後に、括弧の内側で Self.属性 を使うとクラスを使えます (アクセスしようとしているオブジェクトではありません)。この理由はローカルスコープからクラスを呼び出すことができるからです。
+
+(4) 関数の仮引数は、自動的にローカルスコープへ定義されます。
+
+.. index:: 
+       pair: スコープ規則; Ring による変数の検出方法
+
+Ring による変数の検出方法
+=========================
+
+1 - 最初にローカルスコープを検索
+
+* 見つからない!
+
+2 - オブジェクトスコープの検索
+
+* 見つからない!
+
+3 - パブリックスコープの検索
+
+* 見つからない ----> ランタイムエラー
+
+* 見つかった ----> 次回の検索を回避するために、最適化できるかどうか確認します (性能改善のためのポインタとキャッシュ)。
+
+.. index:: 
+       pair: スコープ規則; オブジェクト.属性の用法
+
+オブジェクト.属性の用法
+===========================
+
+オブジェクト.属性 を使うときはオブジェクト属性に限り検索を行います。
+
+つまり、ローカルスコープまたはグローバルスコープのオブジェクト属性では検索は行いません。
+
+.. note:: Self.属性を使うときは属性を検索する前に Self の検索を最初に行います。
+
+
+.. index:: 
+       pair: スコープ規則; Self オブジェクト
+
+Self オブジェクト
+=================
+
+Selft オブジェクトは現在のオブジェクトを参照するためにクラスのメソッドから使えます!
+
+クラスのメソッドの内側であり Self を使うときは、このクラスから作成されるオブジェクトを意味します。
+
+クラスのメソッドの内側で括弧 { } を使うと、現在のオブジェクトのスコープを変更します。
+また、 Self でオブジェクトへアクセスするときに、括弧の内側にある参照を変更します。
+
+クラスの範囲 (クラス名の後、およびメソッドの前) の内側はオブジェクトスコープ、
+およびローカルスコープからオブジェクトへのアクセスすることもできます。
+この範囲で Self を使うと、常にクラスのオブジェクトへ参照されます。
+オブジェクトのスコープの変更で括弧を使用後に、括弧の内側で Self を使用した場合でも、
+クラスの範囲内にあるため、 Self はクラスオブジェクトへの参照になります (既に括弧でアクセスしているオブジェクトではありません)。
+
+* グローバルスコープ   ---> グローバルスコープ
+* オブジェクトスコープ ---> オブジェクトスコープ
+* ローカルスコープ     ---> オブジェクトスコープ
+
+括弧を使うとオブジェクトのスコープのみ変更されます。
+Ring は変数を検索するときに、ローカルスコープを最初に検索するためクラスの内側にある Self を検出します。
+
+.. index:: 
+       pair: スコープ規則; Ring における変数と属性の定義方法
+
+
+Ring における変数と属性の定義方法
+=================================
+
+Ring は代入操作で変数名を使用します。
+
+1 - 変数名で検索
+
+2 - 見つからない ---> ランタイムエラーの回避と現在のスコープへ変数を定義します。
+
+3 - 見つかった ---> 変数を使用しますが現在のスコープへ変数を一切定義しません。
+
+* グローバルの範囲 (関数またはクラスの前) において現在のスコープはグローバルスコープになります。
+
+* クラスの範囲 (クラス名の後、およびメソッドの前) において現在のスコープはオブジェクトの属性になります。
+
+* 関数とメソッドにおける現在のスコープはローカルスコープになります。
+
+.. index:: 
+       pair: スコープ規則; クラス属性とグローバル変数の間での名前衝突
+
+
+クラス属性とグローバル変数の間での名前衝突
+==========================================
+
+この用例を参照してください:
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               name
+               address 
+               phone
+
+前述の用例ではグローバル変数 ‘name’ が
+person クラスの内側にあります。
+
+Ring は‘name’ 変数を使用するにとき検索処理の開始、
+および検出します。
+
+見つかった   --->  見つかったものを使用
+
+見つからない --->  新しい属性の定義
+
+しかし、変数名はグローバル変数であるため、検出後に使用されます!
+
+属性名が存在しない! オブジェクトへ追加します。
+
+解決方法① - Main 関数の使用
+
+.. code-block:: ring
+
+       func main
+               name = "test"
+               o1 = new person
+               see o1
+
+       class person
+               name
+               address 
+               phone
+
+解決方法② - $ などのグローバル変数名に特殊記号を使用
+
+.. code-block:: ring
+
+       $name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               name
+               address 
+               phone
+
+解決方法③ - AddAttribute() メソッドの使用
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               AddAttribute(self,"name")
+               address 
+               phone
+
+解決方法④ - 属性名の先頭に Self を使用
+
+.. code-block:: ring
+
+       name = "test"
+       o1 = new person
+       see o1
+
+       class person
+               self.name
+               address 
+               phone
+
+
+この名前衝突に関する最善の解決方法は?
+
+1 - グローバル変数で $ 記号を使用
+
+2 - オプション扱い : グローバル変数の回避する、または Main 関数の使用
+
+実際は両方とも実施します。
+
+そのほかの解決方法
+
+* 属性名の先頭に Self を使います。または AddAttribute() を使用します。
+
+.. index:: 
+       pair: スコープ規則; クラス属性とローカル変数の間での名前衝突
+
+クラス属性とローカル変数の間での名前衝突
+========================================
+
+この名前衝突は、括弧でオブジェクトにアクセスするときに発生します。
+
+用例:
+
+.. code-block:: ring
+       func main
+               name = "nice"
+               o1 = new person {name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+前述の用例にはローカル変数名があります。
+
+この変数の値は、オブジェクトの属性ではなく“mahmoud”が設定されます。
+
+解決方法① : Self の使用
+
+.. code-block:: ring
+
+       func main
+               name = "nice"
+               o1 = new person {self.name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+解決方法② : ローカル変数名の変更
+
+.. code-block:: ring
+
+       func main
+               cName = "nice"
+               o1 = new person {name="mahmoud" address="Egypt"  phone = 000 }
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+解決方法③ : 括弧の変更およびドット演算子を使用
+
+.. code-block:: ring
+
+       func main
+               name = "nice"
+               o1 = new person 
+               o1.name ="mahmoud" 
+               o1.address ="Egypt"  
+               o1.phone = 000 
+               see o1
+
+       class person 
+               name
+               address
+               phone
+
+
+.. index:: 
+       pair: スコープ規則; 括弧を使用したクラスのメソッドの内側にあるオブジェクトへのアクセス方法
+
+括弧を使用したクラスのメソッドの内側にあるオブジェクトへのアクセス方法
+======================================================================
+
+クラスのメソッドの内側では三種類のスコープ (ローカルスコープ、オブジェクトスコープとグローバルスコープ) があることを思い出してください。
+これはオブジェクト属性とメソッドへアクセス可能であると期待しており、
+括弧でオブジェクトの属性とメソッドへアクセスするまでは本当です。
+この場合は、オブジェクトのスコープが別のオブジェクトへ切り替えられるためです。
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl # 正常に動作します。
+                       myobj = new otherclass {
+                               see name + nl
+                               see x + nl + y + nl # エラー!
+                       }
+
+       class otherclass
+               name = "test"
+
+実行結果:
+
+.. code-block:: none
+
+       10
+       20
+       test
+
+       Line 8 Error (R24) : Using uninitialized variable : x
+       In method test() in file methodbraceerror.ring
+       called from line 5  in file methodbraceerror.ring
+
+さて、前述の問題の解決方法は?
+
+解決方法 (1) : 括弧の外側にあるクラスの属性へアクセスするためのコードを記述する。
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl # 正常に動作します。
+                       myobj = new otherclass {
+                               see name + nl
+                       }
+                       see x + nl + y + nl # 括弧の外側 - 正常に動作します。
+
+
+       class otherclass
+               name = "test"
+
+
+実行結果:
+
+.. code-block:: none
+
+       10
+       20
+       test
+       10
+       20
+
+
+解決方法② : 括弧を使用しない
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       see x + nl + y + nl  
+                       myobj = new otherclass 
+                       see myobj.name
+                       see x + nl + y + nl                     
+
+       class otherclass
+               name = "test"
+
+
+解決方法③ : Self オブジェクトのコピー
+
+この解決方法は、括弧でクラス属性へアクセスしたいときに使用します (読み取り)。
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       oSelf = self
+                       see x + nl + y + nl  
+                       myobj = new otherclass {
+                               see name + nl
+                               see oself.x + nl + oself.y + nl  
+                       }
+
+       class otherclass
+               name = "test"
+
+実行結果:
+
+.. code-block:: none
+
+       10
+       20
+       test
+       10
+       20
+
+この行を参照してください
+
+.. code-block:: ring
+
+       oself = self
+
+前行の問題はオブジェクトの新しいコピーあることです。
+この理由は Ring の代入演算子はリストと値によるオブジェクト (参照ではない) はコピーしないからです。
+
+新しいオブジェクトへアクセスする場合は問題はありません (読み取り)。
+
+オブジェクトの属性を変更した場合は問題があります (そのためコピーを変更します!)
+
+.. note:: 括弧はコピーを行うときに再度使えます。
+
+.. code-block:: ring
+
+       new point { test() }
+
+       class point
+               x=10 y=20
+               func test
+                       oSelf = self
+                       see x + nl + y + nl  
+                       myobj = new otherclass {
+                               see name + nl
+                               oSelf {
+                                       see x + nl + y + nl
+                               }
+                       }
+
+       class otherclass
+               name = "test"
+
+GUI アプリケーションでは、様々なメソッドからコントロールへアクセス可能な属性として、
+Window オブジェクトがあるクラスを作成します。
+括弧でメソッドの内側にあるオブジェクトへアクセスするときは、前述の情報を思い出してください。
+この場合は、オブジェクトとの属性へアクセスできないため Self オブジェクトをコピーした場合は、コピー先での作業となります。
+新しいコントロールの作成は、コピーと関連付けられていますがアクセスはできません。
+
+
+.. index:: 
+       pair: スコープ規則; クラスのメソッド内にある括弧からクラスの属性にアクセスするには
+
+
+クラスのメソッド内にある括弧からクラスの属性にアクセスするには
+==============================================================
+
+クラスのメソッドからクラスの属性へ直接アクセスするために、属性やメソッド名の先頭に Self による参照を選択する方法があります。
+クラスのメソッド内で括弧 { } を使うと、有効なオブジェクトのスコープを変更することになり、
+クラスの属性へ直接アクセスするのを防ぎます。また Self の使用は、括弧でアクセスするオブジェクトを変更できるため Self による参照は効果がありません。
+
+この場合、属性を読み取りたい場合は、括弧の使用前に
+Self オブジェクトを必ずコピーしてください。
+また、括弧を使用した後に、オブジェクトの属性からローカル変数へコピーしたい場合は、必ず属性を修正してください。
+
+この場合は、括弧の内側にある属性の読み取り、または変更をしたいときに発生します。
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # 属性
+
+               # こちらへコードを記述してください。
+
+               Func OpenDatabase
+                       # こちらへコードを記述してください。
+                       new QSqlDatabase() {
+                               oCon = addDatabase("QSQLITE") {
+                                       setDatabaseName("weighthistory.db")
+                                       open()
+                               }
+                       }       
+                       self.oCon = oCon 
+                       # こちらへコードを記述してください。
+
+前述の用例で connection オブジェクトを作成して oCon 属性の内側で保存したいとします。
+
+このオブジェクトは QSQLDatabase() オブジェクトのアクセス後に使用する addDatabase() メソッドからの出力です。
+
+括弧の内側では MyApp クラスから作成したオブジェクトによる Self 参照の使用はできません。
+ここで Self 参照を使用することは、括弧でオブジェクトをアクセスすることになるからです。
+
+ローカル変数 oCon を作成してから、括弧の後に oCon 属性を変数へコピーすることにより、
+前述の問題を解決しました。
+
+このコードは別の解決方法です。
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # 属性
+
+               # こちらへコードを記述してください。
+
+               Func OpenDatabase
+                       # こちらへコードを記述してください。
+                       oCon = new QSqlDatabase()
+                       oCon = oCon.addDatabase("QSQLITE") {
+                               setDatabaseName("weighthistory.db")
+                               Open()  
+                       }
+               # こちらへコードを記述してください。
+
+
+このコードは優れた解決方法です。
+
+.. code-block:: ring
+
+       Class MyApp
+
+               oCon   # 属性
+
+               # こちらへコードを記述してください。
+
+               Func OpenDatabase
+                       # こちらへコードを記述してください。
+                       new QSqlDatabase() {
+                               this.oCon = addDatabase("QSQLITE") {
+                                       setDatabaseName("weighthistory.db")
+                                       Open()  
+                               }
+                       }
+                       # こちらへコードを記述してください。   
+
+.. note:: 括弧の内側でクラスの属性 (oCon) へアクセスするために This.属性 を使用しています。
+
+
+.. index:: 
+       pair: スコープ規則; GUI アプリケーションのウィンドウごとにクラスを作成するには
+
+GUI アプリケーションのウィンドウごとにクラスを作成するには
+==========================================================
+
+ウィンドウ用のクラスを作成するための優れた方法は、クラス名の直後にウィンドウを定義することです。
+
+ウィンドウをコントロールの定義に関する問題は発生せずに、入れ子の括弧を使えます。
+そして、属性はメソッドからアクセスできます。
+
+用例:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       new qApp 
+       {
+               $ObjectName = "oFirstWindow"
+               oFirstWindow = new FirstWindow
+
+               $ObjectName = "oSecondWindow"
+               oSecondWindow = new SecondWindow
+
+               exec()
+       }
+
+       Class FirstWindow
+
+               win = new qWidget() {
+                       setgeometry(0,50,300,200)
+                       setWindowTitle("First Window")
+                       label1 = new qLabel(win)
+                       {
+                               setgeometry(10,10,300,30)
+                               setText("0")
+                       }
+                       btn1 = new qPushButton(win)
+                       {
+                               move(100,100)
+                               setText("Increment")
+                               setClickEvent($ObjectName+".increment()")
+                       }
+                       show()
+               }       
+
+               Func Increment
+                       label1 {
+                               setText( "" + ( 0 + text() + 1 ) )
+                       }
+
+
+       Class SecondWindow
+
+               win = new qWidget() {
+                       setgeometry(400,50,300,200)
+                       setWindowTitle("Second Window")
+                       label1 = new qLabel(win)
+                       {
+                               setgeometry(10,10,300,30)
+                               setText("0")
+                       }
+                       btn1 = new qPushButton(win)
+                       {
+                               move(100,100)
+                               setText("Decrement")
+                               setClickEvent($ObjectName+".decrement()")
+                       }
+                       show()
+               }       
+
+               Func Decrement
+                       label1 {
+                               setText( "" + ( 0 + text() - 1 ) )
+                       }
+
+.. index:: 
+       pair: スコープ規則; クラス範囲にある括弧内の Self と Self 間との名前衝突
+
+クラス範囲にある括弧内の Self と Self 間との名前衝突
+====================================================
+
+クラスの領域 (クラス名の後、そしてメソッドの前) で属性を定義します。
+
+この領域では、グローバルスコープへアクセスできます。そして、ローカルスコープはオブジェクトスコープを指します。
+
+三種類のスコープ
+
+* グローバルスコープ   ---> グローバルスコープ
+* オブジェクトスコープ ---> オブジェクトスコープ
+* ローカルスコープ     ---> オブジェクトスコープ
+
+三種類のスコープ
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       name = "Gal" 
+               }
+               aFriends + new Friend { 
+                       name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+実行結果:
+
+.. code-block:: none
+
+       name: NULL
+       name: NULL
+
+前述の用例における問題は account クラスには “name” 属性があり、 
+Friend クラスにも同名属性 “name” があります。
+
+括弧内で self.name を使うと前述の用例と同じ結果になります!
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       self.name = "Gal" 
+               }
+               aFriends + new Friend { 
+                       self.name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+この名前衝突に関して、括弧の内側で self.name でも解決しない理由は?
+
+このようなクラスの範囲になるからです。
+
+* グローバルスコープ   ---> グローバルスコープ
+* オブジェクトスコープ ---> オブジェクトスコープ (Account クラス)
+* ローカルスコープ     ---> ローカルスコープ (Account クラス)
+
+括弧を使うとき、オブジェクトのスコープは変更されるため、このようになります。
+
+* グローバルスコープ   ---> グローバルスコープ
+* オブジェクトスコープ ---> オブジェクトスコープ (Friend クラス)
+* ローカルスコープ     ---> ローカルスコープ (Account クラス)
+
+Ring では、ローカルスコープを最初に検索するため、 self.name を使うときは Account クラスを使用します。
+
+様々な解決方法があります。
+
+解決方法① : リストによるオブジェクトへのアクセス
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend
+               aFriends[len(aFriends)] { 
+                       aFriends[len(aFriends)].name = "Gal" 
+               }
+               aFriends + new Friend 
+               aFriends[len(aFriends)] { 
+                       aFriends[len(aFriends)].name = "Bert" 
+               }
+       
+       Class Friend
+               name
+
+解決方法② : name 属性を設定するために friend クラスでメソッドを作成
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               aFriends + new Friend { 
+                       setname("Gal")
+               }
+               aFriends + new Friend { 
+                       setname("Bert")
+               }
+       
+       Class Friend
+               name
+               func setname cName
+                       name = cName
+
+解決方法③ : 属性を設定するために account クラスでメソッドを作成
+
+.. code-block:: ring
+
+       New Account {
+               see aFriends
+       }
+
+       Class Account
+               name = "Mahmoud"
+               aFriends = []
+               friend("Gal")
+               friend("Bert")
+
+               func friend cName
+                       aFriends + new Friend { 
+                               name = cName
+                       }
+       
+       Class Friend
+               name
+
+解決方法④ : 宣言型プログラミング
+
+.. code-block:: ring
+
+       New Account {
+               name = "mahmoud"
+               friend {
+                       name = "Gal"
+               }
+               friend {
+                       name = "Bert"
+               }
+               see aFriends
+       }
+
+       Class Account
+               name 
+               aFriends = []
+               friend
+               func getfriend
+                       aFriends + new Friend
+                       return aFriends[len(aFriends)]
+       
+       Class Friend
+               name
+
+実行結果:
+
+.. code-block:: none
+
+       name: Gal
+       name: Bert
+
+.. index:: 
+       pair: スコープ規則; 括弧を使用した現在のオブジェクトスコープの除外方法
+
+
+括弧を使用した現在のオブジェクトスコープの除外方法
+==================================================
+
+括弧から現在のオブジェクトスコープを別のオブジェクトスコープへ変更します。
+クラス属性の変更、および同名変数の使わずに処理できます。
+
+.. code-block:: ring
+
+       new point {x=10 y=20 z=30 start() }
+       class point x y z
+               func start
+                       see self # x y z の値を表示 (10,20,30)
+                       new Local {
+                               x = 100
+                               y = 200
+                               z = 300
+                       }
+                       see self # x y z の値を表示 (10,20,30)
+                       see x + nl # 100 の表示
+                       see y + nl # 200 の表示
+                       see z + nl # 300 の表示
+                       Self {  # 利点なし - ローカルスコープの最初の検索で完了します。
+                               see x + nl # 100 の表示
+                               see y + nl # 200 の表示
+                               see z + nl # 300 の表示
+                       }
+                       see self.x + nl # 10 の表示
+                       see self.y + nl # 20 の表示
+                       see self.z + nl # 30 の表示
+
+       class Local
+       
+実行結果:
+
+.. code-block:: none
+
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       x: 10.000000
+       y: 20.000000
+       z: 30.000000
+       100
+       200
+       300
+       100
+       200
+       300
+       10
+       20
+       30
+       
+
+
+.. index:: 
+       pair: スコープ規則; For ループでローカルスコープを使用
+
+For ループでローカルスコープを使用
+==================================
+
+Ring 1.8 より、 For ループでの新規識別子 (変数) を定義するときは、ローカルスコープで定義します。
+
+用例:
+
+.. code-block:: ring
+
+       x = 10
+       ? x             # 10 の表示
+       test1()
+       ? x             # 10 の表示
+       test2()
+       ? x             # 10 の表示
+
+       func test1
+               for x = 1 to 5
+               next
+               ? x     # 6 の表示
+
+       func test2
+               list = 1:5
+               for x in list
+               next
+               ? x     # NULL の表示 ("For In" ループでは、ループ完了後に参照を破棄します)
+
+実行結果:
+
+.. code-block:: ring
+
+       10
+       6
+       10
+       NULL
+       10      
+       
+
+
+.. index:: 
+       pair: スコープ規則; スコープ規則のまとめ
+
+
+スコープ規則のまとめ
+======================
+
+最初に次のことを覚えておいてください。
+
+1 - 各種プログラミング言語には言語の目的に基づいたスコープ規則があります。
+
+2 - 小規模プログラミングと大規模プログラミングは異なります。
+
+3 - あるプログラミング言語は小規模プログラミング用に設計されていますが、それ以外は大規模プログラミング用に設計されています。
+
+4 - プログラミングで、スコープへのアクセスが複数ある場合があります。 - 正確に管理されていない場合は問題になります。
+
+5 - 可視スコープの個数を削減することで、さらなる安全性を保ち続けることができます。
+
+6 - あるプログラミング言語では、ある方法でスコープの管理を強制しており、それ以外の方法は提供していません!
+
+Ring では
+
+1 - まず柔軟性、そして次に安全性を求めて設計された特別かつ「非常に単純明快」なスコープ規則があります
+
+2 - Ring は小規模プログラミングと大規模プログラミングに対応するように設計されています。
+
+3 - Ring はプロジェクトの規模に基づいて選択する様々なプログラミングパラダイムを提供しています。ターゲットとなるプロジェクトで悪いパラダイムを選択した、または間違っているか一般的ではない方法によりパラダイムを使用した場合に限りエラーが発生します。
+
+4 - Ring では選択肢を提供しています。グローバル変数の使用、または使用を避けることができます。特殊記号 $ の指定、または除去できます。オブジェクト指向を使用する、または手続き型の使用を継続できます。クラス範囲 (クラスの範囲 - クラス名の後、およびメソッドの前) で属性の使用、またはコードで属性を使えます。
+
+5 - このスコープ規則をご確認になり、記載されていることについて考えた後に好きな方法を使用してください。
+
+スコープ規則:
+
+1 - プログラムのコードのすべての場所において最大三種類のスコープだけあります (ローカルスコープ、オブジェクトのスコープとグローバルスコープ)。
+
+2 - Ring が変数を検索するとき、最初にローカルスコープを、次にオブジェクトのスコープを、そしてグローバルスコープを検索します。
+
+3 - 手続き、またはメソッドは、括弧 { } でオブジェクトへのアクセス、および現在のオブジェクトのスコープをいつでも変更できます。
+
+4 - クラスの範囲 (クラス名の後、およびメソッドの前) において、これはオブジェクトスコープでオブジェクトのスコープとローカルスコープの両方を指す特別な範囲です。すなわち、この範囲で定義する各変数は属性になるため、ローカル変数ではありません。
+
+5 - 変数 (スコープとクラスの範囲)  の定義前に検索処理で変数が検出された場合は検出された変数を使用します。
+
+6 - 関数とメソッドの仮引数は関数、またはメソッドへのローカル変数として自動的に定義されます。
+
+7 - オブジェクト.属性 を使うとオブジェクト属性のみ検索します。
+
+8 - Self.属性 を使うと先頭にある Self を最初に検索してから Self の属性を検索します。
+
+9 - クラスの範囲 (クラス名の後、そしてメソッドの前) の内側にある Self 参照はクラスから作成されたオブジェクトのスコープを指します。
+
+10 -メソッドの内側にある Self 参照は括弧による参照でオブジェクトへアクセスするときに変更されます。
+
+11 - クラスの範囲 (クラス名の後、そしてメソッドの前) に変数名を直接記述すると、それらの使用または定義の意味となります。
+
+12 - クラスの範囲で Self.属性 を使うと検索対象となるオブジェクトのスコープの個数を削減します (グローバルスコープとの名前衝突を回避します)。
+
+これらの規則から名前衝突が何故発生するのか、そして回避するにはどうしたら良いかを理解できます。
+
+名前衝突を避けるための簡単な助言として、スコープ規則を使用することが最良の方法です。
+
+1 - グローバル変数の回避をしてください。
+
+2 - Main 関数の使用 - これはグローバル変数の回避に有効です。
+
+3 - グローバル変数を多用する場合は変数名の先頭に $ を使用してください。
+
+4 - クラスの範囲で三番目 ($ の使用) の助言を考慮しない場合は、属性を定義するときに self.属性 を使用します。
+
+5 - オブジェクトのスコープを変更したくない場合は、オブジェクト { 属性 } と オブジェクト { メソッド() } の代わりに オブジェクト.属性 と オブジェクト.メソッド() を使用します。
+
+6 - 入れ子の括弧をクラスで使用する場合 - この範囲で { } +  によりクラス属性へアクセスするために、オブジェクトのアクセス権がある場合はクラス範囲の使用に関して可能ならば考慮してください。
+
+7 - クラスのメソッドの内側、および入れ子の括弧が使用されている場合は、括弧ごとにオブジェクトのスコープは変更されるため、直ちにクラスの属性へのアクセス権を失いますが、括弧 { } でローカルスコープの前後へアクセスできます。括弧からクラスの属性を読み取り、 または修正する場合は This.属性 を使用してください。この理由として ‘This’ を使用することは「このクラスからオブジェクトが作成される」ことを意味するのとは違い ‘Self’ (現在のスコープにあるオブジェクト) を意味します。
+
+前述の要点を全て理解したならば、本章を会得したことになります。
+
diff --git a/docs/ja-jp/source/scope2.txt b/docs/ja-jp/source/scope2.txt
new file mode 100644 (file)
index 0000000..cceb8dc
--- /dev/null
@@ -0,0 +1,203 @@
+.. index::
+       single: 関数とメソッドのスコープ規則; はじめに
+
+============================
+関数とメソッドのスコープ規則
+============================
+
+関数とメソッドのスコープ規則を学びます。
+
+この情報は Ring で大規模アプリケーションの開発をはじめるときに重要です。
+
+下記はアプリケーションに存在・使用されています。
+
+* Ring で記述された数多のパッケージとクラス
+* Ring で記述された数多の関数
+* Ring 標準関数 (C 言語で記述)
+* C/C++ で記述された関数とクラス
+
+.. index::
+       pair: 関数とメソッドのスコープ規則; Ring が関数とメソッドを見つける方法は?
+
+Ring が関数とメソッドを見つける方法は?
+=======================================
+
+メソッドまたは関数を呼び出し時に関数の検索処理を開始します。
+
+見つかった   --> 関数の呼び出しを行い、別の検索で再利用できるようにするために
+Ring は関数ポインタをキャッシュへ格納します。
+
+見つからない --> ランタイムエラーメッセージ (Try/Catch で回避できます)
+
+検索の処理内容と方法は?
+
+この順に従って関数やメソッドの検索が行われます。
+
+1 - メソッドの検索 (クラスの内側にあるメソッドまたは括弧 { } を使用したオブジェクトの場合)
+
+2 - プログラマが Ring コードで記述した関数の検索
+
+3 - Ring 標準関数など C/C++ で記述された関数の検索
+
+これでクラスメソッドのコードが綺麗になり、関数の名前衝突を全て回避できるようになります。
+
+クラスにあるメソッドと同じ名前の関数を呼び出したい場合はラッパー関数が必要になるか、
+または { } を使用した一時作業用のオブジェクトへのアクセス後に関数を呼び出します。
+
+C/C++ の関数を Ring の関数へ置き換えることができます。
+
+Ring の関数を Ring のメソッドへ置き換えることができます。
+
+
+.. note:: いかなる場合であろうも self.メソッド() の使用は必要ありません。
+
+.. tip:: this.メソッド() は、括弧 { } でアクセスすると現在の有効なスコープから除外できます。さらにクラス内メソッドの呼び出しにも使えます。
+
+.. index::
+       pair: 関数とメソッドのスコープ規則; 関数とメソッドの間で名前を共有する方法の用例
+
+関数とメソッドの間で名前を共有する方法の用例
+============================================
+
+この用例を参照してください。
+
+.. code-block:: ring
+
+       func main
+               o1 = new myclass { test() test2() }
+               test2()
+
+       func f1
+               see "f1 function" + nl
+
+       func f2 
+               see "f2 function" + nl
+
+       func f3 
+               see "f3 function" + nl
+
+       func test2
+               myline()
+               see "test2 function" + nl
+               new myclass {
+                       f1()
+                       f2()
+                       f3()
+                       self.f3()
+               }       
+               myobj = new myclass
+               myobj.f3()
+               myline()
+
+       func myline
+               see copy("=",40) + nl
+
+       Class myclass
+
+               func test
+                       myline()
+                       see "test method" + nl
+                       f1()
+                       f2()
+                       f3()
+                       myline()
+
+               func f3
+                       see "f3 method" + nl
+
+               func test2
+                       myline()
+                       see "test2 method" + nl
+                       self {
+                               f1()
+                               f2()
+                               f3()
+                       }
+                       myline()
+
+
+
+実行結果:
+
+.. code-block:: none
+
+       ========================================
+       test method
+       f1 function
+       f2 function
+       f3 method
+       ========================================
+       ========================================
+       test2 method
+       f1 function
+       f2 function
+       f3 method
+       ========================================
+       ========================================
+       test2 function
+       f1 function
+       f2 function
+       f3 method
+       f3 method
+       f3 method
+       ========================================
+
+.. index::
+       pair: 関数とメソッドのスコープ規則; 現在のクラスで名前を共有する関数とメソッドを呼び出すには
+
+現在のクラスで名前を共有する関数とメソッドを呼び出すには
+========================================================
+
+前述の用例では f3() 関数と f3() メソッドがあります。
+
+どうすれば test() メソッドから f3() 関数を呼び出せますか?
+
+解決方法 (1) : 現在のオブジェクトのスコープを別のオブジェクトのスコープへ変更します。
+
+この解決方法では、現在のオブジェクトのスコープの変更で使用するために、ローカルで呼び出される空のクラスがあります。
+
+.. code-block:: ring
+
+       func main
+               o1 = new myclass { test()}
+
+       func f1
+               see "f1 function" + nl
+
+       func f2 
+               see "f2 function" + nl
+
+       func f3 
+               see "f3 function" + nl
+
+       func myline
+               see copy("=",40) + nl
+
+       Class myclass
+
+               func test
+                       myline()
+                       see "test method" + nl
+                       f1()
+                       f2()
+                       f3()               # f3() メソッドの呼び出し
+                       new local { f3() } # f3() 関数の呼び出し
+                       myline()
+
+               func f3
+                       see "f3 method" + nl
+
+       class local
+
+実行結果:
+
+.. code-block:: none
+
+       ========================================
+       test method
+       f1 function
+       f2 function
+       f3 method
+       f3 function
+       ========================================
+
diff --git a/docs/ja-jp/source/secfunc.txt b/docs/ja-jp/source/secfunc.txt
new file mode 100644 (file)
index 0000000..16745c6
--- /dev/null
@@ -0,0 +1,412 @@
+.. index:: 
+       single: セキュリティとインターネット関数; はじめに
+
+================================
+セキュリティとインターネット関数
+================================
+
+ハッシュ、暗号化、および復号化に関するセキュリティとインターネット関数について説明します。
+
+この関数の使用前に openssllib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "openssllib.ring"
+       # OpenSSL 関数の使用
+
+* MD5()
+* SHA1()
+* SHA256()
+* SHA512()
+* SHA384()
+* SHA224()
+* Encrypt()
+* Decrypt()
+* Randbytes()
+
+この関数の使用前に internetlib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "internetlib.ring"
+       # インターネット関数の使用
+
+* Download()
+* SendEmail()
+
+.. index:: 
+       pair: セキュリティとインターネット関数; MD5()
+
+MD5() 関数
+==========
+
+MD5() 関数は MD5 ハッシュ値を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       MD5(cString) ---> 文字列 cString の MD5 ハッシュ値を有する文字列です。
+
+用例:
+
+.. code-block:: ring
+
+       see "md5('happy') = " + md5("happy") + nl +
+           "md5('Hello') = " + md5("Hello") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       md5('happy') = 56ab24c15b72a457069c5ea42fcfc640
+       md5('Hello') = 8b1a9953c4611296a827abf8c47804d7
+
+.. index:: 
+       pair: セキュリティとインターネット関数; SHA1()
+
+SHA1() 関数
+===========
+
+SHA1() 関数は SHA1 ハッシュ値を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       SHA1(cString) ---> 文字列 cString の SHA1 ハッシュ値を有する文字列です。
+
+用例:
+
+.. code-block:: ring
+
+       see "sha1('hello') : " + sha1("hello") + nl +
+           "sha1('apple') : " + sha1("apple") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       sha1('hello') : aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
+       sha1('apple') : d0be2dc421be4fcd0172e5afceea3970e2f3d940
+
+.. index:: 
+       pair: セキュリティとインターネット関数; SHA256()
+
+SHA256() 関数
+=============
+
+SHA256() 関数は SHA256 ハッシュ値を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       SHA256(cString) ---> 文字列 cString の SHA256 ハッシュ値を有する文字列です。
+
+
+用例:
+
+.. code-block:: ring
+
+       see "sha256('hello') : " + sha256("hello") + nl +
+           "sha256('apple') : " + sha256("apple") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       sha256('hello') : 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
+       sha256('apple') : 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
+
+.. index:: 
+       pair: セキュリティとインターネット関数; SHA512()
+
+SHA512() 関数
+=============
+
+SHA512() 関数は SHA512 ハッシュ値を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       SHA512(cString) ---> 文字列 cString の SHA512 ハッシュ値を有する文字列です。
+
+用例:
+
+.. code-block:: ring
+
+       see "sha512('hello') : " + sha512("hello") + nl +
+           "sha512('apple') : " + sha512("apple") + nl +
+           "sha512('hello world') : " + sha512("hello world") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       sha512('hello') : 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673c
+       a72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
+       sha512('apple') : 844d8779103b94c18f4aa4cc0c3b4474058580a991fba85d3ca698a0bc9e52
+       c5940feb7a65a3a290e17e6b23ee943ecc4f73e7490327245b4fe5d5efb590feb2
+       sha512('hello world') : 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca8
+       6d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f
+
+.. index:: 
+       pair: セキュリティとインターネット関数; SHA384()
+
+SHA384() 関数
+=============
+
+
+SHA384() 関数は SHA384 ハッシュ値を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       SHA384(cString) ---> 文字列 cString の SHA384 ハッシュ値を有する文字列です。
+
+用例:
+
+.. code-block:: ring
+
+       see "sha384('hello') : " + sha384("hello") + nl +
+           "sha384('apple') : " + sha384("apple") + nl +
+           "sha384('hello world') : " + sha384("hello world") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       sha384('hello') : 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa
+       90125a3c79f90397bdf5f6a13de828684f
+       sha384('apple') : 3d8786fcb588c93348756c6429717dc6c374a14f7029362281a3b21dc10250
+       ddf0d0578052749822eb08bc0dc1e68b0f
+       sha384('hello world') : fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcb
+       b83578b3e417cb71ce646efd0819dd8c088de1bd
+
+.. index:: 
+       pair: セキュリティとインターネット関数; SHA224()
+
+SHA224() 関数
+=============
+
+SHA224() 関数は SHA224 ハッシュ値を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       SHA224(cString) ---> 文字列 cString の SHA224 ハッシュ値を有する文字列です。
+
+用例:
+
+.. code-block:: ring
+
+       see "sha224('hello') : " + sha224("hello") + nl + 
+           "sha224('apple') : " + sha224("apple") + nl +
+           "sha224('hello world') : " + sha224("hello world") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       sha224('hello') : ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193
+       sha224('apple') : b7bbfdf1a1012999b3c466fdeb906a629caa5e3e022428d1eb702281
+       sha224('hello world') : 2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b
+
+.. index:: 
+       pair: セキュリティとインターネット関数; Encrypt()
+
+Encrypt() 関数
+==============
+
+Encrypt() 関数は Blowfish アルゴリズム法でデータを暗号化します。
+
+文法:
+
+.. code-block:: ring
+
+       Encrypt(cString, cKey, cIV) ---> 暗号化された文字列
+
+.. index:: 
+       pair: セキュリティとインターネット関数; Decrypt()
+
+Decrypt() 関数
+==============
+
+Decrypt() 関数は Encrypt() 関数で暗号化されたデータを復号化します。
+
+文法:
+
+.. code-block:: ring
+
+       Decrypt(cCipher, cKey, cIV) ---> 復号化された文字列
+
+.. index:: 
+       pair: セキュリティとインターネット関数; 用例
+
+暗号化と復号化の用例
+====================
+
+この用例は Encrypt() および Decrypt() 関数の用法です。
+
+いずれの関数も Blowfish アルゴリズム法を使用しています。
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+       list = 0:15  cKey=""    for x in list cKey += char(x) next
+       list = 1:8   cIV = ""   for x in list cIV += char(x) next
+       cStr = Encrypt(cStr,cKey,cIV) 
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+通常の for ループで同じ用例を記述できます。
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+
+       cKey=""                         # 16 バイト
+       for x = 0 to 15
+               cKey += char(x) 
+       next
+
+       cIV = ""   
+       for x = 1 to 8
+               cIV += char(x) 
+       next
+
+
+       cStr = Encrypt(cStr,cKey,cIV)
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+また、文字列でパスワードと IV を直接記述することもできます。
+
+.. code-block:: ring
+
+       See "Enter a string : " give cStr
+
+       # 注意: 推測されやすく暗号強度の低い単純なパスワードを使用しないでください!
+       cKey = "1234567890@#$%^&"               
+       cIV  = "87654321"                       
+
+       cStr = Encrypt(cStr,cKey,cIV)
+       See "Cipher Text    : " + cStr + nl +
+           "Plain Text     : " + Decrypt(cStr,cKey,cIV) + nl
+
+
+.. index:: 
+       pair: セキュリティとインターネット関数; ファイルのハッシュ
+
+ファイルのハッシュ
+==================
+
+この用例はハッシュ関数でファイルのハッシュ値を計算する方法です。
+
+.. code-block:: ring
+
+       cStr = read("myapp.exe")
+       see "Size : " + len(cStr) + nl +
+           "md5 : " + md5(cStr) + nl +
+           "sha1 : " + sha1(cStr) + nl +
+           "sha256 : " + sha256(cStr) + nl +
+           "sha224 : " + sha224(cStr) + nl +
+           "sha384 : " + sha384(cStr) + nl +
+           "sha512 : " + sha512(cStr) + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       Size : 58079876
+       md5 : 762eee15d8d2fd73b71ea52538b28667
+       sha1 : 9212c0c7258bad89a62bd239e1358a9276a9d070
+       sha256 : 7d6724e69b6c553da749ba31b6185dddc965129b64d9e9bf3de88f67df3b1cdc
+       sha224 : 5a9c8a7d662bce4f880ba94f90a79362b672528b9efd5abc718c7a3d
+       sha384 : 18e23f973abedbeb3981c423f12aeadecf96f9c6fb28aeabe3be4c484f8540afcc3861b
+       b370ce2b59cf3c99c130b856b
+       sha512 : da3d5e997d06f8b2a7a9964b77f7d82eedb76b245c611082c1639f83f51d83880bcd08f
+       cd53dcab1167bdca0b82fec5071971ac17c76479d76985ced4ab0d18e
+
+.. index:: 
+       pair: セキュリティとインターネット関数; RandBytes()
+
+Randbytes() 関数
+================
+
+Randbytes() 関数は擬似乱数バイト列を生成します。
+
+文法:
+
+.. code-block:: ring
+
+       Randbytes(nSize) ---> 文字列は乱数のバイト列を有しています (バイト列数 = nSize)。
+
+用例:
+
+.. code-block:: ring
+
+       salt =  randbytes(32) 
+       password = "SecretPassWord@$%123"
+       see salt + nl
+       see sha256("test" + salt) + nl
+
+.. index:: 
+       pair: セキュリティとインターネット関数; Download()
+
+Download() 関数
+===============
+
+指定された URL からファイルをダウンロードします。
+
+文法:
+
+.. code-block:: ring
+
+       Download(cURL) ---> 文字列はサーバーの応答を有しています。
+
+用例:
+
+.. code-block:: ring
+
+       cStr= download("http://doublesvsoop.sourceforge.net/")
+       see cStr
+       write("download.txt",cStr)
+
+.. index:: 
+       pair: セキュリティとインターネット関数; SendEmail()
+
+SendEmail() 関数
+================
+
+電子メール送信します。
+
+文法:
+
+.. code-block:: ring
+
+       SendEmail(cSMTPServer,cEmail,cPassword,cSender,cReceiver,cCC,cTitle,cContent)
+
+用例:
+
+.. code-block:: ring
+
+       See "Send email..." + nl
+       sendemail("smtp://smtp.gmail.com:587",
+               "email@gmail.com",
+               "password",
+               "email@gmail.com",
+               "somebody@yahoo.com",
+               "somebodyelse@yahoo.com",
+               "Sending email from Ring",
+               "Hello
+                How are you?
+                Are you fine?
+                Thank you!
+                Greetings,
+                Mahmoud")
+       see "Done.." + nl
\ No newline at end of file
diff --git a/docs/ja-jp/source/shotringnotepad.png b/docs/ja-jp/source/shotringnotepad.png
new file mode 100644 (file)
index 0000000..2850426
Binary files /dev/null and b/docs/ja-jp/source/shotringnotepad.png differ
diff --git a/docs/ja-jp/source/shotrotatetext.png b/docs/ja-jp/source/shotrotatetext.png
new file mode 100644 (file)
index 0000000..f0227a4
Binary files /dev/null and b/docs/ja-jp/source/shotrotatetext.png differ
diff --git a/docs/ja-jp/source/sixteenpuzzle.jpg b/docs/ja-jp/source/sixteenpuzzle.jpg
new file mode 100644 (file)
index 0000000..a8b6671
Binary files /dev/null and b/docs/ja-jp/source/sixteenpuzzle.jpg differ
diff --git a/docs/ja-jp/source/snake.png b/docs/ja-jp/source/snake.png
new file mode 100644 (file)
index 0000000..49fa863
Binary files /dev/null and b/docs/ja-jp/source/snake.png differ
diff --git a/docs/ja-jp/source/snakesgame.png b/docs/ja-jp/source/snakesgame.png
new file mode 100644 (file)
index 0000000..2819f37
Binary files /dev/null and b/docs/ja-jp/source/snakesgame.png differ
diff --git a/docs/ja-jp/source/sokoban.jpg b/docs/ja-jp/source/sokoban.jpg
new file mode 100644 (file)
index 0000000..78df9c9
Binary files /dev/null and b/docs/ja-jp/source/sokoban.jpg differ
diff --git a/docs/ja-jp/source/sourcecode.txt b/docs/ja-jp/source/sourcecode.txt
new file mode 100644 (file)
index 0000000..e1ec5da
--- /dev/null
@@ -0,0 +1,792 @@
+.. index:: 
+       single: ソースコードからのビルド方法; はじめに
+
+============================
+ソースコードからのビルド方法
+============================
+
+Ring は自由なオープンソース製品 (MIT ライセンス) です。
+
+Ring は CMake あるいは、スクリプト (バッチファイル、またはシェルスクリプト) でビルドします。
+
+この手順はスクリプトによるビルド方法の解説です。
+
+* Microsoft Windows でのビルド方法
+* Ubuntu Linux でのビルド方法
+* Fedora Linux でのビルド方法
+* macOS でのビルド方法
+* CMake でのビルド方法
+
+.. index:: 
+       pair: ソースコードからのビルド方法; Microsoft Windows でのビルド方法
+
+Microsoft Windows でのビルド方法
+================================
+
+ソースコードの取得
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+Ring (コンパイラ、仮想計算機) のビルド
+
+.. code-block:: ring
+
+       cd ring/src
+       buildvc.bat
+       buildvcw.bat
+
+Ring2EXE のビルド
+
+.. code-block:: none
+
+       cd ../ring2exe
+       buildring2exe.bat
+
+RingConsoleColors ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       gencode.bat
+       buildvc.bat
+
+RingInternet のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       buildvc.bat
+
+RingLibCurl ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       gencode.bat
+       buildvc.bat
+
+RingZip ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       gencode.bat
+       buildvc.bat
+
+
+RingPM のビルド
+
+.. code-block:: none
+
+       cd ../ringpm
+       buildringpm.bat
+
+.. warning:: 特に指定がない限り /ring2exe/libs フォルダは削除しないでください。 RingPM のビルドが正常にできなくなります。
+
+.. note:: Light Release 版では「どのフォルダからでも Ring を呼び出せるようにします」まで読みとばしてください。
+
+RingODBC のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       buildvc.bat
+
+RingMySQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       buildvc.bat
+
+RingSQLite のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       buildvc.bat
+
+RingPostgreSQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.bat
+       buildvc.bat
+
+RingOpenSSL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       buildvc.bat
+
+RingMurmurHash のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       buildvc.bat
+
+RingAllegro ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       gencode.bat
+       buildvc.bat
+
+RingLibuv ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv
+       gencode.bat
+       buildvc.bat
+
+RingFreeGLUT ソースコードの生成とビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       gencode.bat
+       buildvc.bat
+
+RingOpenGL ソースコードの生成とビルド
+
+ringopengl フォルダ配下のサブフォルダには OpenGL 1.1 ~ 4.6 が収録されています。
+
+
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.bat
+       buildvc.bat
+
+RingPostgreSQL ソースコードの生成とビルド 
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.bat
+       buildvc.bat
+
+Qt 5.12 のインストール : https://download.qt.io/archive/qt/5.12/5.12.6/
+
+RingQt ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       gencodeqt512.bat
+       buildqt512.bat
+
+どのフォルダからでも Ring を呼び出せるようにします。
+
+.. code-block:: ring
+
+       cd ../../bin
+       install.bat
+
+システムパスへ Ring/bin を追加
+
+.. code-block:: ring
+
+       "Windows キー" の打鍵。
+       "システム環境変数の編集" の入力
+       "詳細" タブ を選択。
+       "環境変数..." をクリック
+       "パス" のダブル・クリック
+       パスの末尾へセミコロンで区切った新しいパスを追加します。
+           ;C:\Ring\Bin
+
+Ring ノートパッドの実行
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+.. index:: 
+       pair: ソースコードからのビルド方法; Ubuntu Linux でのビルド方法
+
+Ubuntu Linux でのビルド方法
+===========================
+
+ソースコードの取得
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+ライブラリのインストール
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdep.sh 
+
+Ring (コンパイラ、仮想計算機) のビルド
+
+.. code-block:: ring
+
+       sudo ./buildgcc.sh
+
+Ring2EXE のビルド
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+RingConsoleColors ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingInternet のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildgcc.sh
+
+RingLibCurl ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingZip ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingPM のビルド
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+RingODBC のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildgcc.sh
+
+RingMySQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildgcc.sh
+
+RingSQLite のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildgcc.sh
+
+RingPostgreSQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildgcc.sh
+
+RingOpenSSL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildgcc.sh
+
+RingMurmurHash のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildgcc.sh
+
+RingAllegro ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingLibuv ソースコードの生成とビルド
+
+最初に Libuv をビルドします
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv/libuv
+       sudo apt-get install libtool m4 automake
+       sh autogen.sh
+       ./configure
+       make
+       make check
+       sudo make install
+
+次に RingLibuv をビルドします
+
+.. code-block:: ring
+       
+       cd ..
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingFreeGLUT ソースコードの生成とビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingOpenGL ソースコードの生成とビルド
+
+ringopengl フォルダ配下のサブフォルダには OpenGL 1.1 ~ 4.6 が収録されています。
+
+
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.sh
+       buildgcc.sh
+
+RingPostgreSQL ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingQt ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencode.sh
+       ./buildgcc.sh
+
+どのフォルダからでも Ring を呼び出せるようにします。
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Ring ノートパッドの実行
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+.. index:: 
+       pair: ソースコードからのビルド方法; Fedora Linux でのビルド方法
+
+Fedora Linux でのビルド方法
+===========================
+
+ソースコードの取得
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+ライブラリのインストール
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdepfedora.sh 
+
+Ring (コンパイラ、仮想計算機) のビルド
+
+.. code-block:: ring
+
+       sudo ./buildgcc.sh
+
+Ring2EXE のビルド
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+RingConsoleColors ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingInternet のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildgcc.sh
+
+RingLibCurl ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingZip ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingPM のビルド
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+RingODBC のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildgcc.sh
+
+RingMySQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildgccfedora.sh
+
+RingSQLite のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildgcc.sh
+
+RingPostgreSQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildgcc.sh
+
+RingOpenSSL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildgcc.sh
+
+RingMurmurHash のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildgcc.sh
+
+RingAllegro ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingLibuv ソースコードの生成とビルド
+
+最初に Libuv をビルドします
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv/libuv
+       sudo dnf install libtool m4 autoconf automake
+       sh autogen.sh
+       ./configure
+       make
+       make check
+       sudo make install
+
+次に RingLibuv をビルドします
+
+.. code-block:: ring
+       
+       cd ..
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingFreeGLUT ソースコードの生成とビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingOpenGL ソースコードの生成とビルド
+
+ringopengl フォルダ配下のサブフォルダには OpenGL 1.1 ~ 4.6 が収録されています。
+
+
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       gencode.sh
+       buildgcc.sh
+
+RingPostgreSQL ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildgcc.sh
+
+RingQt ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencode.sh
+       ./buildgccfedora.sh
+
+どのフォルダからでも Ring を呼び出せるようにします。
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Ring ノートパッドの実行
+
+.. code-block:: ring
+
+       cd applications/rnote
+       ring rnote.ring
+
+
+
+.. index:: 
+       pair: ソースコードからのビルド方法; macOS でのビルド方法
+
+macOS でのビルド方法
+====================
+
+ソースコードの取得
+
+.. code-block:: ring
+
+       git clone http://github.com/ring-lang/ring.git
+
+homebrew のインストール (homebrew のホームページに記載されている説明に従ってください)。
+
+ライブラリのインストール
+
+.. code-block:: ring
+
+       cd ring/src
+       ./installdepmac.sh 
+
+Ring (コンパイラ、仮想計算機) のビルド
+
+.. code-block:: ring
+
+       ./buildclang.sh
+
+Ring2EXE のビルド
+
+.. code-block:: none
+
+       cd ../ring2exe
+       sudo ./buildring2exe.sh
+
+RingConsoleColors ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringconsolecolors
+       ./gencode.sh
+       ./buildclang.sh
+
+RingInternet のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringinternet
+       ./buildclang.sh
+
+RingLibCurl ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringcurl
+       ./gencode.sh
+       ./buildclang.sh
+
+RingZip ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringzip
+       ./gencode.sh
+       ./buildclang.sh
+
+RingPM のビルド
+
+.. code-block:: none
+
+       cd ../ringpm
+       sudo ./buildringpm.sh
+
+RingODBC のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringodbc
+       ./buildclang.sh
+
+RingMySQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmysql
+       ./buildclang.sh
+
+RingSQLite のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringsqlite
+       ./buildclang.sh
+
+RingPostgreSQL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringpostgresql
+       gencode.sh
+       buildclang.sh
+
+RingOpenSSL のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopenssl
+       ./buildclang.sh
+
+RingMurmurHash のビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringmurmurhash
+       ./buildclang.sh
+
+RingAllegro ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringallegro
+       ./gencode.sh
+       ./buildclang.sh
+
+RingLibuv ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringlibuv
+       ./gencode.sh
+       ./buildclang.sh
+
+RingFreeGLUT ソースコードの生成とビルド
+
+.. code-block:: ring
+       
+       cd ../extensions/ringfreeglut
+       ./gencode.sh
+       ./buildclang.sh
+
+RingOpenGL ソースコードの生成とビルド
+
+ringopengl フォルダ配下のサブフォルダには OpenGL 1.1 ~ 4.6 が収録されています。
+
+
+.. code-block:: ring
+       
+       cd ../extensions/ringopengl/opengl21
+       ./gencode.sh
+       ./buildclang.sh
+
+RingPostgreSQL ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringpostgresql
+       ./gencode.sh
+       ./buildclang.sh
+
+RingQt ソースコードの生成とビルド
+
+.. code-block:: ring
+
+       cd ../extensions/ringqt
+       ./gencodemac.sh
+       ./buildclang.sh
+
+どのフォルダからでも Ring を呼び出せるようにします。
+
+.. code-block:: ring
+
+       cd ../../bin
+       sudo ./install.sh
+
+Ring ノートパッドの実行
+
+.. code-block:: ring
+
+       cd applications/rnote
+       sudo ring rnote.ring
+
+.. index:: 
+       pair: ソースコードからのビルド方法; CMake によるビルド方法
+
+CMake によるビルド方法
+======================
+
+ライブラリのインストール (MySQL クライアント, OpenSSL, LibCurl, Allegro 5 および Qt 5.12)
+
+.. code-block:: ring
+
+       cmake .
+       make
diff --git a/docs/ja-jp/source/sqlite.txt b/docs/ja-jp/source/sqlite.txt
new file mode 100644 (file)
index 0000000..f64274a
--- /dev/null
@@ -0,0 +1,139 @@
+.. index:: 
+       single: SQLite; はじめに
+
+===========
+SQLite 関数
+===========
+
+SQL データベースの用法を学びます。
+
+この関数の使用前に sqlitelib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "sqlitelib.ring"
+       # SQLite 関数の使用
+
+.. index:: 
+       pair: SQLite; sqlite_init()
+
+sqlite_init() 関数
+==================
+
+文法:
+
+.. code-block:: ring
+
+       sqlite_init() ---> SQLite オブジェクト
+
+.. index:: 
+       pair: SQLite; sqlite_open()
+
+sqlite_open() 関数
+==================
+
+文法:
+
+.. code-block:: ring
+
+       sqlite_open(SQLite オブジェクト,cFileName)
+
+.. index:: 
+       pair: SQLite; sqlite_execute()
+
+sqlite_execute() 関数
+=====================
+
+文法:
+
+.. code-block:: ring
+
+       sqlite_execute(SQLite オブジェクト,cSQLStatement)
+
+.. index:: 
+       pair: SQLite; sqlite_close()
+
+sqlite_close() 関数
+===================
+
+文法:
+
+.. code-block:: ring
+
+       sqlite_close(SQLite オブジェクト)
+
+用例
+====
+
+このコードは SQL データベースの作成を行い、新しいデータを追加した後にデータを表示します。
+
+.. code-block:: ring
+
+       load "sqlitelib.ring"
+
+       oSQLite = sqlite_init()
+
+       sqlite_open(oSQLite,"mytest.db") 
+
+       sql = "
+                CREATE TABLE COMPANY (
+                ID INT PRIMARY KEY     NOT NULL,
+                NAME           TEXT    NOT NULL,
+                AGE            INT     NOT NULL,
+                ADDRESS        CHAR(50),
+                SALARY         REAL );
+       "
+       sqlite_execute(oSQLite,sql) 
+
+       sql = "
+               INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) 
+               VALUES  (1, 'Mahmoud' , 29, 'Jeddah', 20000.00 ),
+                       (2, 'Ahmed'   , 27, 'Jeddah', 15000.00 ),
+                       (3, 'Mohammed', 31, 'Egypt' , 20000.00 ),
+                       (4, 'Ibrahim' , 24, 'Egypt ', 65000.00 );
+       "
+
+       sqlite_execute(oSQLite,sql)
+
+       aResult =  sqlite_execute(oSQLite,"select * from COMPANY") 
+       for x in aResult
+               for t in x
+                       ? t[2] + nl
+               next
+       next
+       ? copy("*",50) 
+       for x in aResult
+               ? x[:name] 
+       next
+       sqlite_close(oSQLite) 
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000.0
+       2
+       Ahmed
+       27
+       Jeddah
+       15000.0
+       3
+       Mohammed
+       31
+       Egypt
+       20000.0
+       4
+       Ibrahim
+       24
+       Egypt
+       65000.0
+       **************************************************      
+       Mahmoud
+       Ahmed
+       Mohammed
+       Ibrahim
+
diff --git a/docs/ja-jp/source/starsfighter.png b/docs/ja-jp/source/starsfighter.png
new file mode 100644 (file)
index 0000000..90812e9
Binary files /dev/null and b/docs/ja-jp/source/starsfighter.png differ
diff --git a/docs/ja-jp/source/stdlib.txt b/docs/ja-jp/source/stdlib.txt
new file mode 100644 (file)
index 0000000..e23345b
--- /dev/null
@@ -0,0 +1,1576 @@
+.. index:: 
+       single: Stdlib 関数; はじめに
+
+===========
+Stdlib 関数
+===========
+
+stdlib.ring 関数の用法を学びます。
+
+この関数の使用前に stdlib.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+stdlibcore.ring (StdLib 関数) を使用することもできます (クラスはありません)。
+
+これはスタンドアローン型のコンソールアプリケーションを作成する場合に便利です。
+
+理由としては stdlib.ring (関数とクラス) では RingLibCurl, RingOpenSSL などのライブラリが読み込まれるからです。
+
+.. index:: 
+       pair: Stdlib 関数; puts()
+
+Puts() 関数
+===========
+
+値を表示後に改行 (nl) を表示します。
+
+文法:
+
+.. code-block:: ring
+
+       puts(式)
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Hello, World!")
+
+.. index:: 
+       pair: Stdlib 関数; print()
+
+Print() 関数
+============
+
+文字列の表示 - \\n, \\t および \\r に対応しています。
+
+#{変数名} で変数の値を挿入します。
+
+文法:
+
+.. code-block:: ring
+
+       print(文字列) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       print("\nHello, World\n\nHow are you? \t\t I'm fine!\n")
+       x=10 y=20
+       print("\nx value = #{x} , y value = #{y} \n")
+
+
+.. index:: 
+       pair: Stdlib 関数; Print2Str() 関数
+
+Print2Str() 関数
+================
+
+文法:
+
+.. code-block:: ring
+
+       print2Str(文字列) ---> 文字列
+
+
+用例:
+
+.. code-block:: ring
+
+       world = "World!"
+       mystring = print2str("Hello, #{world} \nIn Year \n#{2000+17} \n")
+
+       see mystring + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       Hello, World!
+       In Year
+       2017
+
+
+.. index:: 
+       pair: Stdlib 関数; getstring()
+
+GetString() 関数
+================
+
+キーボードからの標準入力を取得します。 - 返値は文字列です。
+
+.. code-block:: ring
+
+       getstring() ---> 文字列
+
+
+.. index:: 
+       pair: Stdlib 関数; getnumber()
+
+GetNumber() 関数
+================
+
+キーボードからの標準入力を取得します。 - 返値は数値です。
+
+.. code-block:: ring
+
+       getnumber() ---> 数値
+
+.. index:: 
+       pair: Stdlib 関数; apppath()
+
+AppPath() 関数
+==============
+
+アプリケーションフォルダのパスを取得します。
+
+文法:
+
+.. code-block:: ring
+
+       AppPath() ---> パスの文字列
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # アプリケーションのパス
+       Puts("Test AppPath()")
+       See AppPath() + nl
+
+.. index:: 
+       pair: Stdlib 関数; JustFilePath()
+
+JustFilePath() 関数
+===================
+
+ファイル名を除去したファイルパスを返します。
+
+文法:
+
+.. code-block:: ring
+
+       JustFilePath(cFile) ---> 文字列はパスです。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see  justfilePath("b:\ring\applications\rnote\rnote.ring")
+
+実行結果:
+
+.. code-block:: ring
+
+       b:\ring\applications\rnote\
+
+
+.. index:: 
+       pair: Stdlib 関数; JustFileName()
+
+JustFileName() 関数
+===================
+
+ファイルパスを除去したファイル名を返します。 
+
+文法:
+
+.. code-block:: ring
+
+       JustFileName(cFile) ---> 文字列はファイル名です。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       see justfileName("b:\ring\applications\rnote\rnote.ring") 
+
+実行結果:
+
+.. code-block:: ring
+
+       rnote.ring
+
+
+.. index:: 
+       pair: Stdlib 関数; value()
+
+Value() 関数
+============
+
+リストまたはオブジェクトからコピーを作成します。
+
+文法:
+
+.. code-block:: ring
+
+       value(リスト) ---> 新しいリスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       aList = 1:10
+       del(value(aList), 1) # 最初のリストを削除
+       see aList            # 1 ~ 10 までの数値を表示します。
+
+.. index:: 
+       pair: Stdlib 関数; times()
+
+Times() 関数
+============
+
+関数を nCount 回実行します。
+
+文法:
+
+.. code-block:: ring
+
+       Times(nCount, 関数)
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Times()")
+       Times ( 3 , func { see "Hello, World!" + nl } )
+
+.. index:: 
+       pair: Stdlib 関数; map()
+
+Map() 関数
+==========
+
+リストの項目ごとに関数を実行します。
+
+文法:
+
+.. code-block:: ring
+
+        Map(alist,function) ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Map()")
+       See Map( 1:10, func x { return x*x } )
+
+.. index:: 
+       pair: Stdlib 関数; filter()
+
+Filter() 関数
+=============
+
+項目を篩い分けるために各リストの項目へ関数を実行します。
+
+文法:
+
+.. code-block:: ring
+
+       Filter(alist,function) ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Filter()")
+       See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
+
+.. index:: 
+       pair: Stdlib 関数; split()
+
+Split() 関数
+============
+
+文字列の語からリスト項目へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       Split(cstring, 区切り文字) ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Split()")
+       See Split("one two three four five"," ")
+
+
+.. index:: 
+       pair: Stdlib 関数; splitmany()
+
+SplitMany() 関数
+================
+
+文字列の語からリスト項目へ変換します。いろいろな区切り文字を使うことができます。
+
+文法:
+
+.. code-block:: ring
+
+       SplitMany(cstring, 文字列またはリスト形式による区切り文字) --> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test SplitMany()")
+       See SplitMany("one,two,three,four and five"," ,")
+
+
+.. index:: 
+       pair: Stdlib 関数; newlist()
+
+NewList() 関数
+==============
+
+二次元リストの作成
+
+
+文法:
+
+.. code-block:: ring
+
+       NewList(nRows, nColumns) ---> 新しいリスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Newlist()")
+       a1 = 3
+       a2 = 5
+       chrArray = newlist(a1,a2)
+       numArray = newlist(a1,a2)
+       chrArray[1][1] = "Hello"
+       numArray[1][1]  = 987.2
+       See chrArray[1][1] + nl
+       See numArray[1][1] + nl
+
+.. index:: 
+       pair: Stdlib 関数; capitalized()
+
+Capitalized() 関数
+==================
+
+一文字目を大文字へ変換した文字列のコピーを返します。
+
+文法:
+
+.. code-block:: ring
+
+       Capitalized(文字列) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Capitalized()")
+       See capitalized("welcome to the Ring Programming Language")
+
+.. index:: 
+       pair: Stdlib 関数; isspecial()
+
+IsSpecial() 関数
+================
+
+文字が特殊文字であるかどうかを確認します。
+
+
+文法:
+
+.. code-block:: ring
+
+       IsSpecial(char) ---> True/False
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isspecial()")
+       See "Isspecial  = " + isSpecial("%") + nl
+
+.. index:: 
+       pair: Stdlib 関数; isvowel()
+
+IsVowel() 関数
+==============
+
+文字が母音であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsVowel(char) ---> True/False
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isvowel()")
+       See "Isvowel = " + isVowel("c") + nl
+
+
+.. index:: 
+       pair: Stdlib 関数; linecount()
+
+LineCount() 関数
+================
+
+テキストファイルの行数を返します。
+
+文法:
+
+.. code-block:: ring
+
+       LineCount(cFileName) ---> 行数
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Linecount()")
+       See "the number of lines = " + lineCount("test.ring")
+
+.. index:: 
+       pair: Stdlib 関数; factorial()
+
+Factorial() 関数
+================
+
+累乗数を返します。
+
+文法:
+
+.. code-block:: ring
+
+       Factorial(number) ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Factorial()")
+       see "6 factorial is : " + Factorial(6)
+
+.. index:: 
+       pair: Stdlib 関数; fibonacci()
+
+Fibonacci() 関数
+================
+
+フィボナッチ数を返します。
+
+文法:
+
+.. code-block:: ring
+
+       Fibonacci(number) ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Fibonacci()")
+       see "6 Fibonacci is : " + Fibonacci(6)
+
+.. index:: 
+       pair: Stdlib 関数; isprime()
+
+IsPrime() 関数
+==============
+
+数値が素数であるかどうかを返します。
+
+文法:
+
+.. code-block:: ring
+
+       isprime(number) ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isprime()")
+       if isPrime(16) see "16 is a prime number"
+       else see "16 is not a prime number" ok
+
+.. index:: 
+       pair: Stdlib 関数; sign()
+
+Sign() 関数
+===========
+
+数値の符号を示した整数の値を返します。
+
+文法:
+
+.. code-block:: ring
+
+       Sign(number) ---> 数値 ( -1 = 負数 , 0 , 1 (整数) )
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sign()")
+       see "sign of 12 is = " + sign(12) + nl
+
+.. index:: 
+       pair: Stdlib 関数; list2file()
+
+List2File() 関数
+================
+
+リスト項目をテキストファイルへ書き出します (項目ごとに改行されます)。
+
+文法:
+
+.. code-block:: ring
+
+       List2File(aList, cFileName)
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # List2File のテスト
+       Puts("Test List2File()")
+       list2file(1:100,"myfile.txt")
+
+
+.. index:: 
+       pair: Stdlib 関数; file2list()
+
+File2List() 関数
+================
+
+テキストファイルを読み取って行をリスト項目へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       File2List(cFileName) ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # File2List のテスト
+       Puts("Test File2List()")
+       see len(file2list("myfile.txt"))
+
+.. index:: 
+       pair: Stdlib 関数; startswith()
+
+StartsWith() 関数
+=================
+
+指定された文字列が指定された部分文字列で始まるならば true を返します。
+
+先頭の空白文字は無視されます。
+
+文法:
+
+.. code-block:: ring
+
+       StartsWith(string, substring) ---> True/False
+
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Startswith()")
+       see Startswith("CalmoSoft", "Calmo") + nl
+
+.. index:: 
+       pair: Stdlib 関数; endswith()
+
+EndsWith() 関数
+===============
+
+指定された文字列が指定された部分文字列で終わるならば true を返します。
+
+末尾の空白文字は無視されます。
+
+文法:
+
+.. code-block:: ring
+
+       Endswith(string, substring) ---> True/False
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Endswith()")
+       see endsWith("CalmoSoft", "Soft") + nl
+
+.. index:: 
+       pair: Stdlib 関数; gcd()
+
+GCD() 関数
+==========
+
+二つの整数における最大公約数 (Greatest Common Divisor) を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       Gcd(number,number) ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Gcd()")
+       see gcd (24, 32) + nl
+
+
+.. index:: 
+       pair: Stdlib 関数; lcm()
+
+LCM() 関数
+==========
+
+二つの整数における最小公約数 (Least Common Multiple) を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       lcm(number,number) ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Lcm()")
+       see Lcm(24,36) + nl
+
+.. index:: 
+       pair: Stdlib 関数; sumlist()
+
+SumList() 関数
+==============
+
+整数のリストにおける総和を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       sumlist(リスト) ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sumlist()")
+       aList = [1,2,3,4,5]
+       see Sumlist(aList) + nl
+
+.. index:: 
+       pair: Stdlib 関数; prodlist()
+
+ProdList() 関数
+===============
+
+整数リストの積を計算します。
+
+文法:
+
+.. code-block:: ring
+
+       prodlist(リスト) ---> 数値
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Prodlist()")
+       aList = [1,2,3,4,5]
+       see Prodlist(aList) + nl
+
+.. index:: 
+       pair: Stdlib 関数; evenorodd()
+
+EvenOrOdd() 関数
+================
+
+整数が奇数か偶数かどうかテストします。
+
+テストの結果は (1 = 奇数、2 = 偶数) です。
+
+文法:
+
+.. code-block:: ring
+
+       evenorodd(number) ---> 1 (奇数) または 2 (偶数)
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Evenorodd()")
+       nr = 17
+       see Evenorodd(nr) + nl
+
+.. index:: 
+       pair: Stdlib 関数; factors()
+
+Factors() 関数
+==============
+
+整数の素因数分解を計算をします。
+
+文法:
+
+.. code-block:: ring
+
+       factors(number) ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Factors()")
+       n = 45
+       aList = factors(n)
+       see "Factors of " + n + " = "
+       for i = 1 to len(aList)
+           see "" + aList[i] + " "
+       next
+
+
+.. index:: 
+       pair: Stdlib 関数; ispalindrome()
+
+IsPalindrome() 関数
+===================
+
+文字列が回文であるかどうか確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsPalindrome(String) ---> True/False
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test IsPalindrome()")
+       cString = "radar"
+       see IsPalindrome(cString)
+
+
+.. note:: Ring 1.9 以前は Palindrome() 関数として使用可能でした。
+
+.. index:: 
+       pair: Stdlib 関数; isleapyear()
+
+IsLeapYear() 関数
+=================
+
+指定された年がグレコリオ暦における閏年であるかどうか確認します。
+
+文法:
+
+.. code-block:: ring
+
+       Isleapyear(number) ---> True/False
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Isleapyear()")
+       year = 2016
+       if Isleapyear(year) see "" + year + " is a leap year."
+       else see "" + year + " is not a leap year." ok
+
+
+.. index:: 
+       pair: Stdlib 関数; binarydigits()
+
+BinaryDigits() 関数
+=======================
+
+非負整数値を指定することで二進数配列の計算をします。
+
+文法:
+
+.. code-block:: ring
+
+       binarydigits(number) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Binarydigits()")
+       b = 35
+       see "Binary digits of " + b + " = " + Binarydigits(b)
+
+.. index:: 
+       pair: Stdlib 関数; matrixmulti()
+
+MatrixMulti() 関数
+======================
+
+二つの行列を掛け合わせます。
+
+文法:
+
+.. code-block:: ring
+
+       Matrixmulti(List,List) ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # 二つの行列を掛け合わせます。
+       Puts("Test Matrixmulti()")
+       A = [[1,2,3], [4,5,6], [7,8,9]]
+       B = [[1,0,0], [0,1,0], [0,0,1]]
+       see Matrixmulti(A, B)
+
+
+.. index:: 
+       pair: Stdlib 関数; matrixtrans()
+
+MatrixTrans() 関数
+======================
+
+サイズ指定による矩形行列の変換を行います。
+
+文法:
+
+.. code-block:: ring
+
+       Matrixtrans(リスト) ---> リスト
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # サイズ指定による矩形行列の変換を行います。
+       Puts("Test Matrixtrans()")
+       matrix = [[78,19,30,12,36], [49,10,65,42,50], [30,93,24,78,10], [39,68,27,64,29]]
+       see Matrixtrans(matrix)
+
+.. index:: 
+       pair: Stdlib 関数; dayofweek()
+
+DayOfWeek() 関数
+====================
+
+指定された日付 (西暦四桁-月-日) における曜日を返します。
+
+文法:
+
+.. code-block:: ring
+
+       dayofweek(文字列) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # 指定された日付における曜日を返します。
+       Puts("Test Dayofweek()")
+       date = "2016-04-24"
+       see "Data : " + date + " - Day : " + Dayofweek(date) + nl
+
+.. index:: 
+       pair: Stdlib 関数; permutation()
+
+Permutation() 関数
+==================
+
+n 個の異なる数値における配列を全て生成します。
+
+文法:
+
+.. code-block:: ring
+
+       permutation(リスト)
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # n 個の異なる数値における配列を全て生成します。
+       Puts("Test Permutation()")
+       list = [1, 2, 3, 4]
+       for perm = 1 to 24
+               for i = 1 to len(list)
+                       see list[i] + " "
+               next
+               see nl
+               Permutation(list)
+       next
+
+.. index:: 
+       pair: Stdlib 関数; readline()
+
+ReadLine() 関数
+===============
+
+ファイルから一行読み取ります。
+
+文法:
+
+.. code-block:: ring
+
+       readline(fp) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # ファイルから一行ずつ読み取ります。
+       Puts("Test Readline()")
+       fp = fopen("test.ring","r")
+       while not feof(fp)
+       See Readline(fp) end
+       fclose(fp)
+
+.. index:: 
+       pair: Stdlib 関数; substring()
+
+SubString() 関数
+================
+
+文字列の指定位置を始点とした部分文字の位置を返します。
+
+文法:
+
+.. code-block:: ring
+
+       Substring(str,substr,npos) ---> 文字列
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # 文字列の指定位置を始点とした部分文字の位置を返します。
+       Puts("Test Substring()")
+       a = "abcxyzqweabc"
+       b = "abc"
+       i = 4
+       see substring(a,b,i)
+
+.. index:: 
+       pair: Stdlib 関数; changestring()
+
+ChangeString() 関数
+===================
+
+部分文字列を指定位置から別の部分文字の指定位置へ変更します。
+
+文法:
+
+.. code-block:: ring
+
+       Changestring(cString, nPos1, nPos2, cSubstr) ---> cString
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # 部分文字列を指定位置から別の部分文字の指定位置へ変更します。
+       Puts("Test Changestring()")
+       see Changestring("Rmasdg",2,5,"in")     # Ring
+
+.. index:: 
+       pair: Stdlib 関数; sleep()
+
+Sleep() 関数
+============
+
+指定された秒数まで休止します。
+
+文法:
+
+.. code-block:: ring
+
+       sleep(nSeconds) 
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Sleep()")
+       see "Wait 3 Seconds!"
+       Sleep(3)
+       see nl
+
+.. index:: 
+       pair: Stdlib 関数; ismainsourcefile()
+
+IsMainSourceFile() 関数
+=======================
+
+現在のファイルがメインソースファイルであるかどうか確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsMainSourceFile() ---> True/False
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       if ismainsourcefile()
+               # コード
+       ok
+
+.. index:: 
+       pair: Stdlib 関数; direxists()
+
+DirExists() 関数
+================
+
+ディレクトリが存在するかどうか確認します。
+
+文法:
+
+.. code-block:: ring
+
+       DirExists(文字列) ---> True/False
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       see "Check dir : b:\ring " 
+       puts( DirExists("b:\ring") )
+       see "Check dir : C:\ring " 
+       Puts( DirExists("C:\ring") )
+
+.. index:: 
+       pair: Stdlib 関数; makedir()
+
+MakeDir() 関数
+==============
+
+ディレクトリを作成します。
+
+文法:
+
+.. code-block:: ring
+
+       MakeDir(文字列)
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       # ディレクトリの作成
+       puts("create Directory : myfolder")
+       makedir("myfolder")
+
+
+.. index:: 
+       pair: Stdlib 関数; FSize()
+
+Fsize() 関数
+============
+
+ファイルサイズをバイト単位で返します。
+
+文法:
+
+.. code-block:: ring
+
+       FSize(ファイルのハンドル) ---> 数値  (バイト単位によるファイルサイズ)
+
+.. index:: 
+       pair: Stdlib 関数; TrimAll()
+
+TrimAll() 関数
+==============
+
+文字列から空白とタブ文字を全て除去します。
+
+文法:
+
+.. code-block:: ring
+
+       TrimAll(cString) ---> cString # 空白とタブを除去します。
+
+.. index:: 
+       pair: Stdlib 関数; TrimLeft()
+
+TrimLeft() 関数
+===============
+
+文字列の左側にある空白とタブ文字を全て除去します。 
+
+文法:
+
+.. code-block:: ring
+
+       TrimLeft(cString) ---> cString # 左側から空白とタブを除去します。
+
+.. index:: 
+       pair: Stdlib 関数; TrimRight()
+
+TrimRight() 関数
+================
+
+文字列の右側にある空白とタブ文字を全て除去します。
+
+文法:
+
+.. code-block:: ring
+
+       TrimRight(cString) ---> cString # 右側から空白とタブを除去します。
+
+.. index:: 
+       pair: Stdlib 関数; EpochTime()
+
+EpochTime() 関数
+================
+
+エポック時間を返します。
+
+文法:
+
+.. code-block:: ring
+
+       EpochTime(cDate,cTime) ---> エポック時間
+
+用例:
+
+.. code-block:: ring
+
+       see EpochTime( Date(), Time() )
+
+.. index:: 
+       pair: Stdlib 関数; SystemCmd() 関数
+
+SystemCmd() 関数
+================
+
+SystemCmd() 関数は変数を出力してシステムコマンドを実行します。
+
+文法:
+
+.. code-block:: ring
+
+       SystemCmd(cCommand)
+
+用例:
+
+.. code-block:: ring
+
+       cYou  = SystemCmd("whoami")        # 記録されたユーザ名は変数へ出力されます。
+       cThem = SystemCmd("dir c:\Users")  # ディレクトリのリストは変数へ出力されます。
+
+
+.. index:: 
+       pair: Stdlib 関数; ListAllFiles() 関数
+
+ListAllFiles() 関数
+===================
+
+ListAllFiles() 関数でフォルダにあるファイルのグループ、およびそのサブフォルダを手軽に処理できます。
+
+文法:
+
+.. code-block:: ring
+
+       ListAllFiles(cFolder,cExtension) ---> ファイルのリスト
+
+用例:
+
+.. code-block:: ring
+
+       aList = ListAllFiles("c:/ring/ringlibs","ring") # *.ring のみ
+       aList = sort(aList)
+       see aList
+
+用例:
+
+.. code-block:: ring
+
+       see listallfiles("b:/ring/ringlibs/weblib","") # 全てのファイル
+
+.. index:: 
+       pair: Stdlib 関数; SystemSilent() 関数
+
+SystemSilent() 関数
+===================
+
+SystemSilent() 関数は実行結果を表示せずにシステムコマンドを実行します。
+
+文法:
+
+.. code-block:: ring
+
+       SystemSilent(cCommand)
+
+.. index:: 
+       pair: Stdlib 関数; OSCreateOpenFolder() 関数
+
+OSCreateOpenFolder() 関数
+=========================
+
+フォルダの作成後に、現在のフォルダを作成したフォルダへ変更します。
+
+文法:
+
+.. code-block:: ring
+
+       OSCreateOpenFolder(cCommand)
+
+
+.. index:: 
+       pair: Stdlib 関数; OSCopyFolder() 関数
+
+OSCopyFolder() 関数
+===================
+
+現在のフォルダへフォルダをコピーします。
+
+引数 : 親フォルダ (cParentFolder) のパス、およびコピー先のフォルダ名 (cFolderName)
+
+文法:
+
+.. code-block:: ring
+
+       OSCopyFolder(cParentFolder,cFolderName)
+
+用例:
+
+現在のフォルダへ b:\\ring\\ringlibs\\stdlib フォルダをコピーするには
+
+.. code-block:: ring
+
+       OSCopyFolder("b:\ring\ringlibs\","stdlib")
+
+
+.. index:: 
+       pair: Stdlib 関数; OSDeleteFolder() 関数
+
+OSDeleteFolder() 関数
+=====================
+
+現在のディレクトリにあるフォルダを削除します。
+
+文法:
+
+.. code-block:: ring
+
+       OSDeleteFolder(cFolderName)
+
+.. index:: 
+       pair: Stdlib 関数; OSCopyFile() 関数
+
+OSCopyFile() 関数
+=================
+
+現在のディレクトリへファイルをコピーします。
+
+文法:
+
+.. code-block:: ring
+
+       OSCopyFile(cFileName)
+
+.. index:: 
+       pair: Stdlib 関数; OSDeleteFile() 関数
+
+OSDeleteFile() 関数
+===================
+
+ファイルを削除します。
+
+文法:
+
+.. code-block:: ring
+
+       OSDeleteFile(cFileName)
+
+.. index:: 
+       pair: Stdlib 関数; OSRenameFile() 関数
+
+OSRenameFile() 関数
+===================
+
+ファイル名を変更します。
+
+文法:
+
+.. code-block:: ring
+
+       OSRenameFile(cOldFileName,cNewFileName)
+
+
+.. index:: 
+       pair: Stdlib 関数; List2Code() 関数
+
+List2Code() 関数
+================
+
+この関数は Ring リストを実行中に Ring ソースコードへ変換することでソースファイルを保存できるようにします。
+
+リストは文字列、数値または部分リストを有しています。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList = 1:10
+       ? list2Code(aList)
+
+実行結果:
+
+.. code-block:: ring
+
+       [
+               1,2,3,4,5,6,7,8,9,10
+       ]
+
+
+.. index:: 
+       pair: Stdlib 関数; Str2ASCIIList() 関数
+
+Str2ASCIIList() 関数
+====================
+
+各項目が1バイト ASCII コードとなる文字列表現のバイト文字列を数値リストへ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       Str2ASCIIList(文字列) ---> 数値リスト
+
+.. index:: 
+       pair: Stdlib 関数; ASCIIList2Str() 関数
+
+ASCIIList2Str() 関数
+====================
+
+各項目が1バイト ASCII コード表現となる数値リストをバイト文字列へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       ASCIIList2Str(数値リスト) ---> 文字列
+
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       cStr = "MmMm"
+
+       aList = Str2ASCIILIST(cStr)
+       ? aList 
+
+       cStr2 = ASCIIList2Str(aList)
+       ? cStr2
+       ? len(cStr2)
+
+実行結果:
+
+.. code-block:: none
+
+       77
+       109
+       77
+       109
+
+       MmMm
+       4
+
+
+.. index:: 
+       pair: Stdlib 関数; IsListContainsItems() 関数
+
+IsListContainsItems() 関数
+==========================
+
+文法:
+
+.. code-block:: ring
+
+       IsListContainsItems(aParent,aChild) ----> True/False
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList1 = "a":"z"
+       aList2 = [:h,:l,:p,:u]
+       ? IsListContainsItems(aList1,aList2)
+
+.. index:: 
+       pair: Stdlib 関数; IsBetween() 関数
+
+IsBetween() 関数
+================
+
+文法:
+
+.. code-block:: ring
+
+       IsBetween(nNumber,nMin,nMax) ----> True/False
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? isBetween(1,3,4)
+       ? isBetween(1,-3,4)
+       ? isBetween(4,1,6)
+       ? isBetween(4,3,4)
+
+.. index:: 
+       pair: Stdlib 関数; TimeInfo() 関数
+
+TimeInfo() 関数
+===============
+
+文法:
+
+.. code-block:: ring
+
+       TimeInfo(cInformation) ----> 文字列
+
+cInformation の値はこのようになります。
+
+.. code-block:: ring
+
+       :time 
+       :hour_24
+       :hour_12
+       :minutes
+       :seconds
+       :date 
+       :day_long
+       :day_short
+       :month
+       :year
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? timeInfo(:date)
+       ? timeInfo(:time)
+       ? timeInfo(:hour_12)
diff --git a/docs/ja-jp/source/stdlibclasses.txt b/docs/ja-jp/source/stdlibclasses.txt
new file mode 100644 (file)
index 0000000..af6ab80
--- /dev/null
@@ -0,0 +1,1498 @@
+.. index:: 
+       single: Stdlib クラス; はじめに
+
+=============
+Stdlib クラス
+=============
+
+stdlib.ring のクラスを学びます。
+
+* StdBase クラス
+* String クラス
+* List クラス
+* Stack クラス
+* Queue クラス
+* HashTable クラス
+* Tree クラス
+* Math クラス
+* DateTime クラス
+* File クラス
+* System クラス
+* Debug クラス
+* DataType クラス
+* Conversion クラス
+* ODBC クラス
+* MySQL クラス
+* SQLite クラス
+* PostgreSQL クラス
+* Security クラス
+* Internet クラス
+
+.. index:: 
+       pair: Stdlib クラス; StdBase クラス
+
+StdBase クラス
+==============
+
+属性:
+
+* vValue : オブジェクトの値
+
+メソッド:
+
+=========      ========================================
+メソッド           説明・実行結果
+=========      ========================================
+Init(x)        vValue 属性へ x の値を設定します。
+Print()        PvValue を表示します。
+PrintLn()      vValue を表示後に改行します。
+Size()                 vValue のサイズを数値表現で返します。
+Value()        vValue を返します。
+Set(x)                 Init(x) を呼び出します。
+=========      ========================================
+
+
+.. index:: 
+       pair: Stdlib クラス; String クラス
+
+String クラス
+=============
+
+親クラス : StdBase クラス
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+Init(文字列|数値|リスト)        
+Lower()                                        新しい文字列 - 小文字へ変換
+Upper()                                        新しい文字列 - 大文字へ変換
+Left(x)                                        新しい文字列 - 左側から x 文字を取得
+Right(x)                                       新しい文字列 - 右側から x 文字を取得
+Lines()                                        数値 - 行数
+Trim()                                                 新しい文字列 - 空白文字の除去
+Copy(x)                                        新しい文字列 - 文字列を x 回反復コピー
+strcmp(cString)                        文字列を cString と比較
+tolist()                                       リスト - 文字列の行から文字列の項目へ変換します。
+tofile(cFileName)                      文字列をファイルへ書き込む
+mid(nPos1,nPos2)                       新しい文字列 - nPos1 から nPos2 までを切り出し
+getfrom(nPos1)                                 新しい文字列 - nPos1 から文字列の末尾まで切り出し
+replace(cStr1,cStr2,lCase)     新しい文字列 - cStr1 を cStr2 へ置換。 lCase (True = 英数大小文字)
+split()                                        リスト - 各語からリスト項目へ変換します。
+startswith(substring)          開始位置が部分文字列で始まるならば true を返します。
+endswith(substring)            開始位置が部分文字列で終わるならば true を返します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       See "Testing the String Class" + nl
+       oString = new string("Hello, World!")
+       oString.println()
+       oString.upper().println()
+       oString.lower().println()
+       oString.left(5).println()
+       oString.right(6).println()
+       oString = new string("Hi" + nl + "Hello" )
+       See oString.lines() + nl
+       oString = new string("    Welcome    ")
+       oString.println()
+       oString.trim().println()
+       oString = new string("Hello! ")
+       oString.copy(3).println()
+       see oString.strcmp("Hello! ") + nl
+       see oString.strcmp("Hello ") + nl
+       see oString.strcmp("Hello!! ") + nl
+       oString = new string(["one","two","three"])
+       oString.print()
+       see oString.lines() + nl
+       oString = new String(1234)
+       oString.println()
+       oString = new String("one"+nl+"two"+nl+"three")
+       aList = oString.tolist()
+       see "List Items" + nl See aList
+       oString = new String( "Welcome to the Ring programming language")
+       See "the - position : " + oString.pos("the") + nl
+       oString = oString.getfrom(oString.pos("Ring"))
+       oString.println()
+       oString.mid(1,4).println()
+       oString = oString.replace("Ring","***Ring***",true)
+       oString.println()
+       oString = oString.replace("ring","***Ring***",false)
+       oString.println()
+       oString1 = new string("First")
+       oString2 = new string("Second")
+       oString = oString1 + oString2
+       oString.println()
+       oString = oString1 * 3
+       oString.println()
+       for t in ostring see t next
+       oString.tofile("test.txt")
+       oString = new string("one two three")
+       see nl
+       see ostring.split()
+       oString {
+               set("Hello") println()
+               set("How are you?") println()
+       }
+
+実行結果:
+
+.. code-block:: ring
+
+       Testing the String Class
+       Hello, World!
+       HELLO, WORLD!
+       hello, world!
+       Hello
+       World!
+       2
+               Welcome
+       Welcome
+       Hello! Hello! Hello!
+       0
+       1
+       -1
+       one
+       two
+       three
+       4
+       1234
+       List Items
+       one
+       two
+       three
+       the - position : 12
+       Ring programming language
+       Ring
+       ***Ring*** programming language
+       ******Ring****** programming language
+       FirstSecond
+       FirstFirstFirst
+       FirstFirstFirst
+       one
+       two
+       three
+       Hello
+       How are you?
+
+.. index:: 
+       pair: Stdlib クラス; List クラス
+       
+List クラス
+===========
+
+親クラス : StdBase クラス
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+Init(文字列|リスト)       
+Add(値)                                       リストへ項目を追加
+Delete(nIndex)                                 リストから項目を削除
+Item(nIndex)                           リストから項目を取得
+First()                                        リストから最初の項目を取得
+Last()                                                 リストから最後の項目を取得
+Set(nIndex,値)                                項目の値を設定
+FindInColumn(nCol,値)         列にある項目を検索
+Sort()                                                 項目の整列 - 新しいリストを返す
+Reverse()                                      項目の反転 - 新しいリストを返す
+Insert(nIndex,値)                     nIndex の後に項目を挿入
+===========================    ======================================================================
+
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oList = new list ( [1,2,3] )
+       oList.Add(4)
+       oList.print()
+       see oList.item(1) + nl
+       oList.delete(4)
+       oList.print()
+       see oList.first() + nl
+       see oList.last() + nl
+       oList { set(1,"one") set(2,"two") set(3,"three") print() }
+       see oList.find("two") + nl
+       oList.sort().print()
+       oList.reverse().print()
+       oList.insert(2,"nice")
+       oList.print()
+       oList = new list ( [ [1,"one"],[2,"two"],[3,"three"] ] )
+       see copy("*",10) + nl
+       oList.print()
+       see "Search two : " + oList.findincolumn(2,"two") + nl
+       see "Search 1 : " + oList.findincolumn(1,1) + nl
+       oList = new list ( [ "Egypt" , "USA" , "KSA" ] )
+       for x in oList
+               see x + nl
+       next
+       oList =  new list ( [1,2,3,4] )
+       oList + [5,6,7] 
+       oList.print()
+       oList = new list ( ["one","two"] )
+       oList2 = new list ( ["three","four"] )
+       oList + oList2
+       oList.print()
+
+       
+実行結果:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       1
+       1
+       2
+       3
+       1
+       3
+       one
+       two
+       three
+       2
+       one
+       three
+       two
+       three
+       two
+       one
+       one
+       two
+       nice
+       three
+       **********
+       1
+       one
+       2
+       two
+       3
+       three
+       Search two : 2
+       Search 1 : 1
+       Egypt
+       USA
+       KSA
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       one
+       two
+       three
+       four
+
+.. index:: 
+       pair: Stdlib クラス; Stack クラス
+       
+Stack クラス
+============
+
+親クラス : List クラス
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+Init(文字列|数値|リスト)        
+Push(値)                                      項目をスタックへ退避します。
+Pop()                                          項目をスタックへ復帰します。
+Print()                                        スタックの項目を表示します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oStack = new Stack
+       oStack.push(1)
+       oStack.push(2)
+       oStack.push(3)
+       see oStack.pop() + nl
+       see oStack.pop() + nl
+       see oStack.pop() + nl   
+       oStack.push(4)
+       see oStack.pop() + nl
+       oStack { push("one") push("two") push("three") }
+       oStack.print()  
+       
+実行結果:
+
+.. code-block:: ring
+
+       3
+       2
+       1
+       4
+       three
+       two
+       one
+       
+.. index:: 
+       pair: Stdlib クラス; Queue クラス
+       
+Queue クラス
+============
+
+親クラス : List クラス
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+Init(文字列|数値|リスト)        
+Remove()                                       キューから項目を削除します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oQueue = new Queue
+       oQueue.add(1)
+       oQueue.add(2)
+       oQueue.add(3)
+       see oQueue.remove() + nl
+       see oQueue.remove() + nl
+       see oQueue.remove() + nl
+       oQueue.add(4)
+       see oQueue.remove() + nl
+       oQueue { add("one") add("two") add("three") }
+       oQueue.print()
+       
+実行結果:
+
+.. code-block:: ring
+
+       1
+       2
+       3
+       4
+       one
+       two
+       three
+
+.. index:: 
+       pair: Stdlib クラス; HashTable クラス
+
+HashTable クラス
+================
+
+親クラス : List クラス
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                           説明・実行結果
+===========================    ======================================================================
+Init(リスト)         
+Add(cKey,値)                          ハッシュテーブルへ項目を追加。
+Set(cKey,値)                          キーで項目の値を設定します。
+GetValue(cKey)                                 キーで項目の値を取得します。
+Contains(cKey)                                 キーでハッシュテーブルに項目があるかどうか確認します。
+Index(cKey)                            キーでインデックスの項目を取得します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ohashtable = new hashtable
+       See "Test the hashtable Class Methods" + nl
+       ohashtable { 
+               Add("Egypt","Cairo")
+               Add("KSA","Riyadh")
+               see self["Egypt"] + nl
+               see self["KSA"] + nl
+               see contains("Egypt") + nl
+               see contains("USA") + nl
+               see index("KSA")  + NL
+               print()
+               delete(index("KSA"))
+               see copy("*",60) + nl
+               print()
+       }
+       
+実行結果:
+
+.. code-block:: ring
+
+       Test the hashtable Class Methods
+       Cairo
+       Riyadh
+       1
+       0
+       2
+       Egypt
+       Cairo
+       KSA
+       Riyadh
+       ************************************************************
+       Egypt
+       Cairo
+
+
+.. index:: 
+       pair: Stdlib クラス; Tree クラス
+
+Tree クラス
+===========
+
+データ:
+
+===========================    ======================================================================
+属性                                         説明
+===========================    ======================================================================
+Data                                           ノード値
+Children                                       子のリスト
+===========================    ======================================================================
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+set(値)                                       ノード値を設定します。
+value()                                        ノード値を取得します。
+Add(値)                                       新しい子を追加します。
+parent()                                       親ノードを取得します。
+print()                                                ノードツリーを表示します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       otree = new tree
+       See "Test the tree Class Methods" + nl
+       otree {
+               set("The first step")   # ルートのノード値を設定します。
+               see value() + nl
+               Add("one")
+               Add("two")
+               Add("three") {
+                       Add("3.1")
+                       Add("3.2")
+                       Add("3.3")
+                       see children
+               }
+               see children
+               oTree.children[2] {
+                       Add("2.1") Add("2.2") Add("2.3") {
+                               Add("2.3.1") Add("2.3.2") Add("test")
+                       }
+               }
+               oTree.children[2].children[3].children[3].set("2.3.3")
+       }
+       see copy("*",60) + nl
+       oTree.print()
+       
+実行結果:
+
+.. code-block:: ring
+
+       Test the tree Class Methods
+       The first step
+       data: 3.1
+       parent: List...
+       children: List...
+       data: 3.2
+       parent: List...
+       children: List...
+       data: 3.3
+       parent: List...
+       children: List...
+       data: one
+       parent: List...
+       children: List...
+       data: two
+       parent: List...
+       children: List...
+       data: three
+       parent: List...
+       children: List...
+       ************************************************************
+       one
+       two
+       2.1
+       2.2
+       2.3
+       2.3.1
+       2.3.2
+       2.3.3
+       three
+       3.1
+       3.2
+       3.3
+
+.. index:: 
+       pair: Stdlib クラス; Math クラス
+
+Math クラス
+===========
+
+メソッド:
+
+===============                ============================================================================================
+メソッド                   説明・実行結果
+===============                ============================================================================================
+sin(x)                                 ラジアン x のサイン角度を返します。
+cos(x)                                 ラジアン x のコサイン角度を返します。
+tan(x)                                 ラジアン x のタンジェント角度を返します。
+asin(x)                        ラジアン表記によるアークサインの x の主値を返します。
+acos(x)                        ラジアン表記によるアークコサインの x の主値を返します。
+atan(x)                        ラジアン表記によるアークタンジェントの x の主値を返します。
+atan2(y,x)                     ラジアン [-pi,+pi] の区間にある、ラジアン表記によるアークタンジェントの x の主値を返します。
+sinh(x)                        ラジアン x の双曲線サインを返します。
+cosh(x)                        ラジアン x の双曲線コサインを返します。
+tanh(x)                        ラジアン x の双曲線タンジェントを返します。
+exp(x)                                 e の x 乗値を返します。
+log(x)                                 x の常用対数を返します。
+log10(x)                       x の常用対数を返します (基数 10 の対数)。
+ceil(x)                        x 以上の最短整数値を返します。
+floor(x)                       x 以下の最大整数値を返します。
+fabs(x)                        x の絶対値を返します。
+pow(x,y)                       x に対する y の累乗を返します。
+sqrt(x)                        x の平方根を返します。
+random(x)                      [0,x] の範囲による乱数を返します。
+unsigned(n,n,c)        符号なし数値で演算を実行します。
+decimals(n)            浮動小数点数、倍精度数の小数点の後にある小数点以下の数値を決定します。
+===============        ============================================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oMath = new Math
+
+       See "Test the Math Class Methods" + nl
+       See "Sin(0) = " + oMath.sin(0) + nl
+       See "Sin(90) radians = " + oMath.sin(90) + nl
+       See "Sin(90) degree = " + oMath.sin(90*3.14/180) + nl
+
+       See "Cos(0) = " + oMath.cos(0) + nl
+       See "Cos(90) radians = " + oMath.cos(90) + nl
+       See "Cos(90) degree = " +oMath. cos(90*3.14/180) + nl
+
+       See "Tan(0) = " + oMath.tan(0) + nl
+       See "Tan(90) radians = " + oMath.tan(90) + nl
+       See "Tan(90) degree = " + oMath.tan(90*3.14/180) + nl
+
+       See "asin(0) = " + oMath.asin(0) + nl
+       See "acos(0) = " + oMath.acos(0) + nl
+       See "atan(0) = " + oMath.atan(0) + nl
+       See "atan2(1,1) = " +oMath. atan2(1,1) + nl
+
+       See "sinh(0) = " + oMath.sinh(0) + nl
+       See "sinh(1) = " + oMath.sinh(1) + nl
+       See "cosh(0) = " + oMath.cosh(0) + nl
+       See "cosh(1) = " + oMath.cosh(1) + nl
+       See "tanh(0) = " + oMath.tanh(0) + nl
+       See "tanh(1) = " + oMath.tanh(1) + nl
+
+       See "exp(0) = " + oMath.exp(0) + nl
+       See "exp(1) = " + oMath.exp(1) + nl
+       See "log(1) = " + oMath.log(1) + nl
+       See "log(2) = " + oMath.log(2) + nl
+       See "log10(1) = " + oMath.log10(1) + nl
+       See "log10(2) = " + oMath.log10(2) + nl
+       See "log10(10) = " + oMath.log10(10) + nl
+
+       See "Ceil(1.12) = " + oMath.Ceil(1.12) + nl
+       See "Ceil(1.72) = " + oMath.Ceil(1.72) + nl
+
+       See "Floor(1.12) = " + oMath.floor(1.12) + nl
+       See "Floor(1.72) = " + oMath.floor(1.72) + nl
+
+       See "fabs(1.12) = " + oMath.fabs(1.12) + nl
+       See "fabs(1.72) = " + oMath.fabs(1.72) + nl
+
+       See "pow(2,3) = " + oMath.pow(2,3) + nl
+
+       see "sqrt(16) = " + oMath.sqrt(16) + nl
+
+       for x = 1 to 20
+                       see "Random number Max (100) : " + oMath.random(100) + nl
+       next
+
+       x = 1.1234567890123
+       for d = 0 to 14
+               oMath.decimals(d)
+               see x + nl
+       next
+
+       cKey = "hello"
+
+       h = 0
+       for x in cKey
+               h = oMath.unsigned(h,ascii(x),"+")
+               h = oMath.unsigned(h,oMath.unsigned(h,10,"<<"),"+")
+               r = oMath.unsigned(h,6,">>")
+               h = oMath.unsigned(h, r,"^")
+       next
+       h = oMath.unsigned(h,oMath.unsigned(h,3,"<<"),"+")
+       h = oMath.unsigned(h,oMath.unsigned(h,11,">>"),"^")
+       h = oMath.unsigned(h,oMath.unsigned(h,15,"<<"),"+")
+
+       see "Hash : " + h
+
+       
+       
+実行結果:
+
+.. code-block:: ring
+
+       Test the Math Class Methods
+       Sin(0) = 0
+       Sin(90) radians = 0.89
+       Sin(90) degree = 1.00
+       Cos(0) = 1
+       Cos(90) radians = -0.45
+       Cos(90) degree = 0.00
+       Tan(0) = 0
+       Tan(90) radians = -2.00
+       Tan(90) degree = 1255.77
+       asin(0) = 0
+       acos(0) = 1.57
+       atan(0) = 0
+       atan2(1,1) = 0.79
+       sinh(0) = 0
+       sinh(1) = 1.18
+       cosh(0) = 1
+       cosh(1) = 1.54
+       tanh(0) = 0
+       tanh(1) = 0.76
+       exp(0) = 1
+       exp(1) = 2.72
+       log(1) = 0
+       log(2) = 0.69
+       log10(1) = 0
+       log10(2) = 0.30
+       log10(10) = 1
+       Ceil(1.12) = 2
+       Ceil(1.72) = 2
+       Floor(1.12) = 1
+       Floor(1.72) = 1
+       fabs(1.12) = 1.12
+       fabs(1.72) = 1.72
+       pow(2,3) = 8
+       sqrt(16) = 4
+       Random number Max (100) : 87
+       Random number Max (100) : 49
+       Random number Max (100) : 99
+       Random number Max (100) : 58
+       Random number Max (100) : 15
+       Random number Max (100) : 46
+       Random number Max (100) : 37
+       Random number Max (100) : 64
+       Random number Max (100) : 73
+       Random number Max (100) : 35
+       Random number Max (100) : 89
+       Random number Max (100) : 80
+       Random number Max (100) : 20
+       Random number Max (100) : 33
+       Random number Max (100) : 44
+       Random number Max (100) : 89
+       Random number Max (100) : 82
+       Random number Max (100) : 94
+       Random number Max (100) : 83
+       Random number Max (100) : 68
+       1
+       1.1
+       1.12
+       1.123
+       1.1235
+       1.12346
+       1.123457
+       1.1234568
+       1.12345679
+       1.123456789
+       1.1234567890
+       1.12345678901
+       1.123456789012
+       1.1234567890123
+       1.12345678901230
+       Hash : 3372029979.00000000000000
+
+.. index:: 
+       pair: Stdlib クラス; DateTime クラス
+
+DateTime クラス
+===============
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                           説明・実行結果
+===========================    ======================================================================
+clock()                                        プログラム開始時からのクロック・ティック数
+time()                                                 システム時刻を取得。
+date()                                                 日付を取得します。
+timelist()                                     日付と時刻の情報を有するリスト。
+adddays(cDate,nDays)           cDate から nDays 後の日付を返します。
+diffdays(cDate1,cDate2)        日数 (Date1 - Date2) を返します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDateTime = new datetime
+
+       See "Test the datetime Class Methods" + nl
+
+       See "Calculate performance" + nl
+       t1 = oDateTime.clock()
+       for x = 1 to 1000000 next
+       see oDateTime.clock() - t1 + nl
+
+       See "Time : " + oDateTime.time() + nl
+
+       See "Date : " + oDateTime.date() + nl 
+
+       See oDateTime.TimeList()
+
+       See "Month Name : " + oDateTime.TimeList()[4]      
+
+       cDate = oDateTime.date()
+       see cDate + nl                  
+       cDate = oDateTime.adddays(cDate,10)
+       see cDate + nl 
+
+       cDate1 = oDateTime.date()
+       see cDate1 + nl                                          
+       cDate2 = oDateTime.adddays(cDate1,10)
+       see cDate2 + nl                                          
+       see "DiffDays = " + oDateTime.diffdays(cDate1,cDate2) + nl         
+       see "DiffDays = " + oDateTime.diffdays(cDate2,cDate1) + nl       
+
+
+実行結果:
+
+.. code-block:: ring
+
+       Test the datetime Class Methods
+       Calculate performance
+       85
+       Time : 02:53:35
+       Date : 31/08/2016
+       Wed
+       Wednesday
+       Aug
+       August
+       08/31/16 02:53:35
+       31
+       02
+       02
+       244
+       08
+       53
+       AM
+       35
+       35
+       3
+       08/31/16
+       02:53:35
+       16
+       2016
+       Arab Standard Time
+       %
+       Month Name : August31/08/2016
+       10/09/2016
+       31/08/2016
+       10/09/2016
+       DiffDays = -10
+       DiffDays = 10
+
+       
+.. index:: 
+       pair: Stdlib クラス; File クラス
+
+File クラス
+===========
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+read(cFileName)                        ファイルの内容を読み取ります。
+write(cFileName,cStr)          文字列をファイルへ書き込みます。
+dir(cFolderPath)                       フォルダの内容 (ファイルとサブフォルダ) を取得します。
+rename(cOld,cNew)                      Rename() 関数はファイルの名称変更をします。
+remove(cFileName)                      Remove() 関数はファイルの削除をします。
+open(cFileName,cMode)          Fopen() 関数はファイルを開きます。
+close()                                        ファイルを閉じます。
+flush()                                        ストリームの出力バッファを追い出します。
+reopen(cFileName,cMode)        同じファイルハンドルで別のファイルを開きます。
+tempfile()                                     一時作業用ファイルを作成します (バイナリ形式)。
+seek(noffset,nwhence)          ストリームにおけるファイル位置を設定します。
+tell()                                                 ストリームにおける現在のファイル位置を検出します
+rewind()                                       ファイルの位置をファイルの先頭へ設定します。
+getpos()                                       ハンドルにおける現在のファイル位置を取得します。
+setpos(poshandle)                      現在のファイルの位置を設定します。
+clearerr()                                     EOF エラーとエラーインジケーターをストリームから消去します。
+eof()                                          EOF (ファイル終端) インジケーターのテストがします。
+error()                                        エラーインジケーターをテストします。
+perror(cErrorMessage)          標準出力エラーへエラーメッセージを表示します。
+getc()                                                 ストリームから次の文字を取得します。
+gets(nsize)                            ストリームから新しい行を読み取ります。
+putc(cchar)                            文字をストリームへ書き込みます。
+puts(cStr)                                     文字列をストリームへ書き込みます。
+ungetc(cchar)                          文字をストリームへプッシュします。
+fread(nsize)                           データをストリームへ読み込みます。
+fwrite(cString)                        データをストリームへ書き込みます。
+exists(cFileName)                      ファイルの存在を確認します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ofile = new file
+
+       See "Test the file Class Methods" + nl
+       see ofile.read(filename())
+
+       see nl
+       ofile.open(filename(),"r")
+       see ofile.gets(100) + nl
+       ofile.close()
+
+.. index:: 
+       pair: Stdlib クラス; System クラス
+
+System クラス
+=============
+
+メソッド:
+
+=============  ========================================================================================
+メソッド           説明・実行結果
+=============  ========================================================================================
+system()               システムコマンドを実行します。
+sysget()               環境変数を取得します。
+ismsdos()              オペレーティングシステムが MS-DOS であるか、またはそうでないかを確認します。
+iswindows()    オペレーティングシステムが Windows であるか、またはそうでないかを確認します。
+iswindows64()  オペレーティングシステムが 64bit 版の Windows であるか、またはそうでないかを確認します。
+isunix()               オペレーティングシステムが UNIX であるか、またはそうでないかを確認します。
+ismacosx()             オペレーティングシステムが macOS であるか、またはそうでないかを確認します。
+islinux()              オペレーティングシステムが Linux であるか、またはそうでないかを確認します。
+isfreebsd()    オペレーティングシステムが FreeBSD であるか、またはそうでないかを確認します。
+isandroid()    オペレーティングシステムが Android であるか、またはそうでないかを確認します。
+windowsnl()    Windows の改行文字を取得します。
+sysargv()              コマンドライン引数を Ring スクリプトへ渡します。
+filename()             現在使用中のソースファイル名を取得します。
+=============  ========================================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oSystem = new System
+
+       See "Test the System Class Methods" + nl
+       
+       oSystem.system("dir")
+       see oSystem.sysget("path") + nl
+       see oSystem.ismsdos() + nl
+       see oSystem.iswindows() + nl
+       see oSystem.iswindows64() + nl
+       see oSystem.isunix() + nl
+       see oSystem.ismacosx() + nl
+       see oSystem.islinux() + nl
+       see oSystem.isfreebsd() + nl
+       see oSystem.isandroid() + nl
+       see oSystem.windowsnl() + nl
+       see oSystem.sysargv() + nl
+       see oSystem.filename() + nl
+
+.. index:: 
+       pair: Stdlib クラス; Debug クラス
+
+Debug クラス
+============
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+eval(cCode)                                    実行時に文字列からコードを実行します。
+raise(cError)                          例外を発生させます。
+assert(cCondition)                     コードの実行前に条件をテストします。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDebug = new Debug
+       See "Test the Debug Class Methods" + nl
+       oDebug.eval("see 'Hello'+nl")
+       try
+               x = 10
+               oDebug.assert(x=11)
+       catch see "assert" + nl done
+       raise("Error!")
+       
+
+.. index:: 
+       pair: Stdlib クラス; DataType クラス
+
+DataType クラス
+===============
+
+メソッド:
+
+===========================    ==========================================================================
+メソッド                                   説明・実行結果
+===========================    ==========================================================================
+isstring(vValue)                       値が文字列であるかどうか検査します。
+isnumber(vValue)                       値が数値であるかどうか検査します。
+islist(vValue)                                 値がリストであるかどうか検査します。
+type(vValue)                           値の型を検査します。
+isnull(vValue)                                 値が null であるかどうか検査します。
+isalnum(vValue)                        値が数字または文字ならば 1 を、そうでなければ 0 です。
+isalpha(vValue)                        値が文字ならば 1 を、そうでなければ 0 です。
+iscntrl(vValue)                        値が制御文字 (表示不能) ならば 1 を、そうでなければ 0 です。
+isdigit(vValue)                        値が数字ならば 1 を、そうでなければ 0 です。
+isgraph(vValue)                        値が表示可能 (空白文字を除く) であれば 1 を、そうでなければ 0 を返します。
+islower(vValue)                        値が英数小文字ならば 1 を、そうでなければ 0 です。
+isprint(vValue)                        値が表示可能であれば 1 を、そうでなければ 0 です。
+ispunct(vValue)                        値が句読記号文字ならば 1 を、そうでなければ 0 です。
+isspace(vValue)                        値が空白文字ならば 1 を、そうでなければ 0 です。
+isupper(vValue)                        値が英数大文字ならば 1 を、そうでなければ 0 です。
+isxdigit(vValue)                       値が十六進数文字ならば 1 をそうでなければ 0 です。
+===========================    ==========================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oDataType = new DataType
+       See "Test the DataType Class Methods" + nl
+       see oDataType.isstring("test") + nl
+       see oDataType.isnumber(1) + nl
+       see oDataType.islist(1:3) + nl
+       see oDataType.type("test") + nl
+       see oDataType.isnull(null) + nl
+       see oDataType.isalnum("Hello") + nl +              # 1 を表示
+       oDataType.isalnum("123456") + nl +                 # 1 を表示
+       oDataType.isalnum("ABCabc123") + nl +              # 1 を表示
+       oDataType.isalnum("How are you")  + nl             # 空なので 0 を表示
+       see oDataType.isalpha("Hello") + nl +              # 1 を表示
+               oDataType.isalpha("123456") + nl +             # 0 を表示
+       oDataType.isalpha("ABCabc123") + nl +              # 0 を表示
+       oDataType.isalpha("How are you")  + nl             # 0 を表示
+       See oDataType.iscntrl("hello") + nl +              # 0 を表示
+       oDataType.iscntrl(nl)                              # 1 を表示
+       see oDataType.isdigit("0123456789") + nl +         # 1 を表示
+       oDataType.isdigit("0123a") + nl
+       see oDataType.isgraph("abcdef") + nl +             # 1 を表示
+       oDataType.isgraph("abc def")   + nl                # 0 を表示
+       see oDataType.islower("abcDEF") + nl +             # 0 を表示
+       oDataType.islower("ghi") + nl                      # 1 を表示
+       see oDataType.isprint("Hello") + nl +              # 1 を表示
+       oDataType.isprint("Nice to see you") + nl +        # 1 を表示
+       oDataType.isprint(nl)    + nl                      # 0 を表示
+       see oDataType.isprint("Hello") + nl                # 1 を表示
+       see oDataType.isupper("welcome") + nl +            # 0 を表示
+       oDataType.isupper("WELCOME")  + nl                 # 1 を表示
+       see oDataType.isxdigit("0123456789abcdef") + nl +  # 1 を表示
+       oDataType.isxdigit("123z")                         # 0 を表示
+
+
+実行結果:
+
+.. code-block:: ring
+
+       Test the DataType Class Methods
+       1
+       1
+       1
+       STRING
+       1
+       1
+       1
+       1
+       0
+       1
+       0
+       0
+       0
+       0
+       11
+       0
+       1
+       0
+       0
+       1
+       1
+       1
+       0
+       1
+       0
+       1
+       1
+       0       
+
+.. index:: 
+       pair: Stdlib クラス; Conversion クラス
+
+Conversion クラス
+=================
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+number(vValue)                         文字列を数値へ変換します。
+string(vValue)                         数値を文字列へ変換します。
+ascii(vValue)                          文字から ASCII コードを取得します。
+char(vValue)                           ASCII コードを文字へ変換します。
+hex(vValue)                                    十進数から十六進数へ変換します。
+dec(vValue)                                    十六進数から十進数へ変換します。
+str2hex(vValue)                                文字列の文字を十六進数文字へ変換します。
+hex2str(vValue)                                十六進数文字を文字列へ変換します。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oConversion = new conversion
+       See "Test the conversion Class Methods" + nl
+       See oConversion.number("3") + 5  + nl
+       See oConversion.string(3) + "5" + nl
+       See oConversion.Ascii("m") + nl 
+       See oConversion.char(77) + nl   
+       see oConversion.hex(162) + nl
+       see oConversion.dec("a2") + nl
+       cHex = oConversion.str2hex("Hello")
+       see cHex + nl
+       see oConversion.hex2str(cHex) + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       Test the conversion Class Methods
+       8
+       35
+       109
+       M
+       a2
+       162
+       48656c6c6f
+       Hello
+
+.. index:: 
+       pair: Stdlib クラス; ODBC クラス
+
+ODBC クラス
+===========
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                   説明・実行結果
+===========================    ======================================================================
+drivers()                                      ODBC ドライバのリストを取得します。
+datasources()                          ODBC データソースのリストを取得します。
+close()                                                リソースを解放します。
+connect(cConString)                    データベースへ接続します。
+disconnect()                           データベースへの接続を閉じます。
+execute(cSQL)                          SQL ステートメントを実行します。
+colcount()                                     クエリの結果にあるカラム数を取得します。
+fetch()                                                クエリ結果から列をフェッチします。
+getdata(nCol)                          フェッチ済みの列からカラム値を取得します。
+tables()                                       テーブル内にあるテーブルのリストを取得します。
+columns(cTableName)                    テーブル内にあるカラムのリストを取得します。
+autocommit(lStatus)                    自動コミット機能の有効または無効化します。
+commit()                                       データベースのコミット更新をします。
+rollback()                                     データベースのロールバック更新をします。
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oodbc = new odbc
+       See "Test the odbc Class Methods" + nl
+       oODBC { 
+               see drivers()
+               see datasources()
+               See "Connect to database" + nl
+               see connect("DBQ=test.mdb;Driver={Microsoft Access Driver (*.mdb)}") + nl
+               See "Select data" + nl
+               see execute("select * from person") + nl
+               nMax = colcount()
+               See "Columns Count : " + nMax + nl
+               while fetch()
+                       See "Row data:" + nl
+                       for x = 1 to nMax
+                               see getdata(x) + " - "
+                       next
+               end
+               See "Close database..." + nl
+               disconnect()
+               close()
+       }
+       
+.. index:: 
+       pair: Stdlib クラス; MySQL クラス
+
+MySQL クラス
+============
+
+メソッド:
+
+====================================== ======================================================================
+メソッド                                                           説明・実行結果
+====================================== ======================================================================
+info()                                                                 MySQL クライアントのバージョンを有する文字列を返します。
+error()                                                                        MySQL クライアントからエラーメッセージを取得します。
+connect(cServer,cUser,cPass,cDatabase)         MySQL データベースサーバーへ接続します。
+close()                                                                        MySQL データベースへの接続を閉じます。
+query(cQuery)                                                  SQL クエリーの実行。
+insert_id()                                                            挿入された列の ID を取得します。
+result()                                                               クエリの結果 (カラム名を除くデータ) を取得します。
+next_result()                                                  次のクエリの結果を移動します。
+columns()                                                              カラム名のリストを取得します。
+result2()                                                              カラム名を全て取得した後にクエリの結果を一つのリストにします。
+escape_string(cStr)                                            バイナリデータと特殊文字をデータベースへ格納する前に処理を行います。
+autocommit(lStatus)                                            自動コミット機能の有効または禁止。
+commit()                                                               データベースのコミット更新。
+rollback()                                                             データベースのロールバック更新。
+====================================== ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+       
+       omysql = new mysql
+       See "Test the MySQL Class Methods" + nl
+       omysql { 
+               see info() + nl
+               connect("localhost", "root", "root","mahdb")
+               see "Execute Query" + nl
+               query("SELECT * FROM Employee")
+               see "Print Result" + nl
+               see result2()
+               see "Close database" + nl
+               close()
+       }
+       
+実行結果:
+
+.. code-block:: ring
+       
+       Test the MySQL Class Methods
+       5.5.30
+       Execute Query
+       Print Result
+       Id
+       Name
+       Salary
+       1
+       Mahmoud
+       15000
+       2
+       Samir
+       16000
+       3
+       Fayed
+       17000
+       Close database
+
+.. index:: 
+       pair: Stdlib クラス; SQLite クラス
+
+SQLite クラス
+=============
+
+メソッド:
+
+====================================== ======================================================================
+メソッド                                                           説明・実行結果
+====================================== ======================================================================
+open(cDatabase)                                                データベースを開きます。
+close()                                                                データベースを閉じます。
+errormessage()                                                 エラーメッセージを取得します。
+execute(cSQL)                                                  クエリーを実行します。
+====================================== ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       osqlite = new sqlite
+       See "Test the sqlite Class Methods" + nl
+       osqlite {
+               open("test.db")
+               sql = "CREATE TABLE COMPANY("  +
+                               "ID INT PRIMARY KEY     NOT NULL," +
+                        "NAME           TEXT    NOT NULL," +
+                        "AGE            INT     NOT NULL," +
+                        "ADDRESS        CHAR(50)," +
+                        "SALARY         REAL );"
+
+               execute(sql)
+
+               sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                        "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+               execute(sql)
+
+               aResult =  execute("select * from COMPANY")
+               for x in aResult
+                       for t in x
+                               see t[2] + nl
+                       next
+               next
+               see copy("*",50)  + nl
+               for x in aResult
+                       see x["name"] + nl
+               next
+               close()
+       }
+
+実行結果:
+
+.. code-block:: ring
+
+       Test the sqlite Class Methods
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000.0
+       2
+       Ahmed
+       27
+       Jeddah
+       15000.0
+       3
+       Mohammed
+       31
+       Egypt
+       20000.0
+       4
+       Ibrahim
+       24
+       Egypt
+       65000.0
+       **************************************************
+       Mahmoud
+       Ahmed
+       Mohammed
+       Ibrahim
+
+
+.. index:: 
+       pair: Stdlib クラス; PostgreSQL クラス
+
+PostgreSQL クラス
+=================
+
+メソッド:
+
+====================================== ======================================================================
+メソッド                                                                   説明・実行結果
+====================================== ======================================================================
+init(cConString)                                               データベースを開きます。
+close()                                                                        データベースを閉じます。
+execute(cSQL)                                                  クエリーを実行します。
+====================================== ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       oPostgreSQL = new PostgreSQL("user=postgres password=sa dbname = mahdb")
+
+       See "Test the PostgreSQL Class Methods" + nl
+
+       oPostgreSQL {
+
+               sql = "CREATE TABLE COMPANY_TEST("  +
+                               "ID INT PRIMARY KEY     NOT NULL," +
+                        "NAME           TEXT    NOT NULL," +
+                        "AGE            INT     NOT NULL," +
+                        "ADDRESS        CHAR(50)," +
+                        "SALARY         REAL );"
+
+               execute(sql)
+
+               sql = "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                        "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                        "INSERT INTO COMPANY_TEST (ID,NAME,AGE,ADDRESS,SALARY)" +
+                        "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+               execute(sql)
+
+               ?  execute("select * from COMPANY_TEST")
+
+               ? copy("*",50)  
+
+               close()
+       }
+
+実行結果:
+
+.. code-block:: none
+
+       Test the PostgreSQL Class Methods
+       id
+       name
+       age
+       address
+       salary
+       1
+       Mahmoud
+       29
+       Jeddah
+       20000
+       2
+       Ahmed
+       27
+       Jeddah
+       15000
+       3
+       Mohammed
+       31
+       Egypt
+       20000
+       4
+       Ibrahim
+       24
+       Egypt
+       65000
+
+       **************************************************
+
+
+.. index:: 
+       pair: Stdlib クラス; Security クラス
+
+Security クラス
+===============
+
+
+メソッド:
+
+====================================== ======================================================================
+メソッド                                                           説明・実行結果
+====================================== ======================================================================
+md5(cString)                                                   MD5 ハッシュを計算します。
+sha1(cString)                                                  SHA1 ハッシュを計算します。
+sha256(cString)                                                SHA256 ハッシュを計算します。
+sha512(cString)                                                SHA512 ハッシュを計算します。
+sha384(cString)                                                SHA384 ハッシュを計算します。
+sha224(cString)                                                SHA224 ハッシュを計算します。
+encrypt(cString,cKey,cIV)                              Blowfish アルゴリズムでデータを暗号化します。
+decrypt(cString,cKey,cIV)                              Encrypt() メソッドで暗号化されたデータを復号化します。
+randbytes(nSize)                                               擬似乱数バイトの文字列を生成します。
+====================================== ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oSecurity = new security
+       See "Test the security Class Methods" + nl
+       oSecurity { 
+               see md5("hello") + nl + 
+               sha1("hello") + nl + sha256("hello") + nl +
+               sha512("hello") + nl + sha384("hello") + nl + 
+               sha256("hello") + nl 
+               list = 0:15  cKey=""   for x in list cKey += char(x) next
+               list = 1:8   cIV = ""   for x in list cIV += char(x) next
+               cCipher = encrypt("hello",cKey,cIV)
+               see cCipher + nl + decrypt(cCipher,cKey,cIV) + nl
+       }
+
+       
+.. index:: 
+       pair: Stdlib クラス; Internet クラス
+
+Internet クラス
+===============
+
+メソッド:
+
+* download(cURL)
+* sendemail(cSMTPServer,cEmail,cPassword,cSender,cReceiver,cCC,cTitle,cContent)
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ointernet = new internet
+       See "Test the internet Class Methods" + nl
+       ointernet { 
+               see download("www.ring-lang.sf.net")
+       }
diff --git a/docs/ja-jp/source/stopwatch.png b/docs/ja-jp/source/stopwatch.png
new file mode 100644 (file)
index 0000000..bb98d69
Binary files /dev/null and b/docs/ja-jp/source/stopwatch.png differ
diff --git a/docs/ja-jp/source/string2constant.png b/docs/ja-jp/source/string2constant.png
new file mode 100644 (file)
index 0000000..3d3c56f
Binary files /dev/null and b/docs/ja-jp/source/string2constant.png differ
diff --git a/docs/ja-jp/source/strings.txt b/docs/ja-jp/source/strings.txt
new file mode 100644 (file)
index 0000000..b549a15
--- /dev/null
@@ -0,0 +1,492 @@
+.. index:: 
+       single: 文字列; はじめに
+
+======
+文字列
+======
+
+文字列の作成と操作を学びます。
+
+.. index:: 
+       pair: 文字列; 文字列リテラル
+
+文字列リテラル
+==============
+
+文法:
+
+.. code-block:: ring
+
+       cStr = "This is a string"
+       cStr2 = 'Another string'
+       cStr3 = :JustAnotherString
+       cStr4 = `Yet "another" 'string' ! `
+
+.. index:: 
+       pair: 文字列; 文字列の長さを取得するには
+
+文字列の長さを取得するには
+==========================
+
+len() 関数は文字列の長さ (文字列内の文字数) を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       len(string) ---> 文字列の長さ
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "How are you?"
+       see cStr + nl
+       see "String size : " + len(cStr) + nl
+
+.. index:: 
+       pair: 文字列; 文字のつづりを変換するには
+
+文字のつづりを変換するには
+==========================
+
+文法:
+
+.. code-block:: ring
+
+       lower(string) ---> 文字列を小文字へ変換します。
+       upper(string) ---> 文字列を大文字へ変換します。
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Welcome To The Ring Programming Language"
+       see cStr + nl + upper(cStr) + nl + lower(cStr)          
+
+.. index:: 
+       pair: 文字列; 文字列にある文字へのアクセス
+
+文字列にある文字へのアクセス
+============================
+
+文字インデックスで文字列内にある文字へアクセスします。
+
+文法:        
+
+.. code-block:: ring
+
+       string[index] ---> 文字列にある文字を取得します。
+       string[index] = letter  # 文字列にある文字へ別の文字列を配置します。
+
+用例:
+
+.. code-block:: ring
+
+       # ユーザ名を一文字ずつ表示します (一文字ごとに改行されます)。
+
+       See "Hello, Enter your name : " give cName
+       for x = 1 to len(cName)
+               see nl + cName[x]
+       next
+
+for in で文字列の文字を取得します。
+
+
+用例:
+
+.. code-block:: ring
+
+       # ユーザ名を一文字ずつ表示します (一文字ごとに改行されます)。
+
+       See "Hello, Enter your name : " give cName
+       for x in cName
+               see nl + x
+       next
+
+文字列にある文字を変更します。
+
+用例:
+
+.. code-block:: ring
+
+       # 最初の一文字目を大文字へ変換します。
+
+       See "Enter your name : " give cName
+       cName[1] = upper(cName[1])
+       see "Hello " + cName
+
+.. index:: 
+       pair: 文字列; Left()
+
+Left() 関数
+===========
+
+Left() 関数は文字列から指定文字数の文字を取得します。
+
+開始位置は 1 です。
+
+文法:
+
+.. code-block:: ring
+
+       Left(string, count)
+
+用例:
+
+.. code-block:: ring
+
+       see left("Hello World!",5) # Hello の表示
+
+.. index:: 
+       pair: 文字列; Right()
+
+Right() 関数
+============
+
+Right() 関数は文字列から指定文字数の文字を取得します。
+
+始点は最後の文字の右側からです。
+
+文法:
+
+.. code-block:: ring
+
+       Right(string, count)
+
+用例:
+
+.. code-block:: ring
+
+       see Right("Hello World!",6) # World! を表示
+
+.. index:: 
+       pair: 文字列; Trim()
+
+Trim() 関数
+===========
+
+Trim() 関数は文字列の先頭と最後から半角空白文字 (0x20H) をすべて削除します。
+
+文法:
+
+.. code-block:: ring
+
+       trim(string)
+
+用例:
+
+.. code-block:: ring
+
+       cMsg = "     Welcome      "
+       see trim(cMsg)                  # Welcome を表示
+
+タブ文字 (0x1BH) を削除したい場合は SubStr() 関数を併用します:
+
+.. code-block:: ring
+
+       cMsg = "     Welcome      "
+       see trim(substr(cMsg, tab, ' '))        # Welcome を表示
+
+.. index:: 
+       pair: 文字列; Copy()
+
+
+Copy() 関数
+===========
+
+copy() 関数は文字列を一回以上繰り返してコピーします。
+
+文法:
+
+.. code-block:: ring
+
+       copy(string, nCount)
+               ---> 文字列を nCount 回繰り返します。
+
+用例:
+
+.. code-block:: ring
+
+       see copy("***hello***",3) # ***hello******hello******hello*** を表示
+
+.. index:: 
+       pair: 文字列; Lines()
+
+Lines() 関数
+============
+
+Lines() は文字列にある行数を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       lines(string) ---> 文字列内の行数
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Hello
+       How are you?
+       are you fine?"
+       see lines(cStr)         # 3 の表示
+
+.. index:: 
+       pair: 文字列; Substr()
+
+Substr() 関数
+=============
+
+Substr() 関数は文字列内にある部分文字列の処理します。
+また、このようなことができます。 
+
+* 部分文字列の検索
+
+* 指定位置から末尾までの部分文字列の取得
+
+* 指定位置から文字の字数を取得
+
+* 部分文字列を別の部分文字列へ変換
+
+.. index:: 
+       pair: 文字列; 部分文字列の検索
+
+部分文字列の検索
+================
+
+文法:
+
+.. code-block:: ring
+
+       substr(string, substring)
+               ---> 文字列内の部分文字列における始点位置
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       see substr(cStr,"Ring")         # 16 の表示
+
+.. index:: 
+       pair: 文字列; 指定位置から末尾までの部分文字列を取得するには
+
+指定位置から末尾までの部分文字列を取得するには
+==============================================
+
+文法:
+
+.. code-block:: ring
+
+       substr(string, position)
+               ---> 指定位置から末尾までの部分文字列を取得します。
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       nPos = substr(cStr,"Ring")      # nPos = 16
+       see substr(cStr,nPos)           # Ring programming language を表示
+
+.. index:: 
+       pair: 文字列; 文字の位置を数値で取得するには
+
+文字の位置を数値で取得するには
+==============================
+
+文法:
+
+.. code-block:: ring
+
+       substr(string, position, count)
+               ---> 文字の位置を取得します。
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the Ring programming language"
+       nPos = substr(cStr,"Ring")      # nPos = 16
+       see substr(cStr,nPos,4)         # Ring を表示
+
+.. index:: 
+       pair: 文字列; 部分文字列を別の部分文字列へ変換するには
+
+部分文字列を別の部分文字列へ変換するには
+========================================
+
+文法:
+
+.. code-block:: ring
+
+       substr(string, substring, newsubstring)
+               ---> 変換された文字列 (英数大小文字を区別する)
+
+       substr(string, substring, newsubstring, 1)
+               ---> 変換された文字列 (英数大小文字を区別しない)
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Welcome to the New programming language"
+       see substr(cStr,"New","Ring")   + nl # Welcome to the Ring programming language の表示
+       see substr(cStr,"new","Ring",1) + nl # Welcome to the Ring programming language の表示
+
+.. index:: 
+       pair: 文字列; strcmp()
+
+strcmp() 関数
+=============
+
+strcmp() 関数は二つの文字列の間で比較します。
+
+文法:
+
+.. code-block:: ring
+
+       strcmp(cString1,cString2) ---> 値 = 0 if cString1 = cString2
+                                      値 < 0 if cString1 < cString2
+                                      値 > 0 if cString1 > cString2
+
+用例:
+
+.. code-block:: ring
+
+       see strcmp("hello","hello") + nl +
+           strcmp("abc","bcd") + nl + 
+           strcmp("bcd","abc") + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       0
+       -1
+       1
+
+.. index:: 
+       pair: 文字列; str2list() と list2str()
+
+str2list() と list2str() 関数
+=============================
+
+str2list() 関数は文字列にある行をリストへ変換します。
+また list2str() 関数はリストを文字列へ変換します。
+
+文法:
+
+.. code-block:: ring
+
+       str2list(string) ---> リストは文字列の行があります。
+       list2str(list)   ---> 文字列はりストの項目があります。
+
+用例:
+
+.. code-block:: ring
+
+       /* 実行結果:
+       ** Items : 4
+       ** Item : Hello
+       ** Item : How are you ?
+       ** Item : are you fine ?
+       ** Item : ok
+       ** list2Str result = Hello
+       ** How are you ?
+       ** are you fine ?
+       ** ok
+       ** Done
+       */
+
+       mystr = "Hello
+       How are you ?
+       are you fine ?
+       ok"
+
+       mylist = str2list(mystr)
+       see "Items : " + len(mylist) + nl
+
+       for x in mylist
+               see "Item : " + x + nl
+       next
+
+       newstr = list2str(mylist)
+       see "list2Str result = " + newstr
+
+       if mystr = newstr
+               see nl + "Done"
+       else
+               see nl + "Error!"
+       ok
+               
+
+
+.. index:: 
+       pair: 文字列; バイナリ文字の統合
+
+バイナリ文字の統合
+==================
+
+Ring 1.0 からバイナリ文字列の作成と操作を行えます。
+
+Ring 1.8 より文字列から個別に文字を取得したり、
+'+' 演算子でまとめて統合できます。
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Welcome"
+       ? cstr[1] + cstr[2] + cStr[5]
+       v = cstr[1] + cstr[2] + cStr[5]
+       ? v
+       ? len(v)
+       c1 = cStr[1]
+       ? c1
+       aList = [1,2,3]
+       cStr = ""
+       for item in aList 
+               cStr += int2bytes(item)
+       next 
+       ? "All String"
+       ? len(cStr)
+       ? "First Part"
+       n1 = cStr[1] + cStr[2] + cStr[3] + cStr[4]
+       ? len(n1)
+       ? "Second Part"
+       n2 = cStr[5] + cStr[6] + cStr[7] + cStr[8]
+       ? len(n2)
+       ? "Third Part"
+       n3 = cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(n3)
+       ? "All String"
+       cString = cStr[1] + cStr[2] + cStr[3] + cStr[4] + 
+                 cStr[5] + cStr[6] + cStr[7] + cStr[8] + 
+                 cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(cString)
+       ? ascii(cStr[1])
+       ? len(cStr[2])
+
+実行結果:
+
+.. code-block:: ring
+
+       Weo
+       Weo
+       3
+       W
+       All String
+       12
+       First Part
+       4
+       Second Part
+       4
+       Third Part
+       4
+       All String
+       12
+       1
+       1
diff --git a/docs/ja-jp/source/sudoku.jpg b/docs/ja-jp/source/sudoku.jpg
new file mode 100644 (file)
index 0000000..7cc8bd6
Binary files /dev/null and b/docs/ja-jp/source/sudoku.jpg differ
diff --git a/docs/ja-jp/source/sumpuzzle.png b/docs/ja-jp/source/sumpuzzle.png
new file mode 100644 (file)
index 0000000..4aed63c
Binary files /dev/null and b/docs/ja-jp/source/sumpuzzle.png differ
diff --git a/docs/ja-jp/source/superman.png b/docs/ja-jp/source/superman.png
new file mode 100644 (file)
index 0000000..bb3b513
Binary files /dev/null and b/docs/ja-jp/source/superman.png differ
diff --git a/docs/ja-jp/source/syntaxflexibility.txt b/docs/ja-jp/source/syntaxflexibility.txt
new file mode 100644 (file)
index 0000000..cf63e6e
--- /dev/null
@@ -0,0 +1,675 @@
+.. index:: 
+       single: シンタックスの柔軟性; はじめに
+
+====================
+シンタックスの柔軟性
+====================
+
+Ring コンパイラで自動的に提供されるシンタックスの柔軟性に関する選択肢を学びます。
+
+.. index:: 
+       pair: シンタックスの柔軟性; キーワード変更
+
+キーワードの変更
+================
+
+ChangeRingKeyword 命令はキーワードを変更します。
+
+.. note:: 共同プロジェクトのチーム間で記法の混用があるときは、キーワードの復元を心がけてください。
+
+
+.. tip:: ChangeRingKeyword 命令は字句解析の段階でコンパイラにより実行されます (構文解析の前に)。
+
+
+文法:
+
+.. code-block:: ring
+       
+       ChangeRingKeyword  <旧キーワード>  <新キーワード>
+
+用例:
+
+.. code-block:: ring
+
+       ChangeRingKeyword see print
+       
+       print "welcome" + nl
+
+       ChangeRingKeyword print see
+
+       see "Welcome" + nl
+
+用例:
+
+.. code-block:: ring
+
+       ChangeRingKeyword  func function
+       ChangeRingKeyword  see  print
+       ChangeRingKeyword  ok   endif
+       ChangeRingKeyword  next endfor
+       ChangeRingKeyword  end  endwhile
+
+       x = 10
+       while x > 0
+               print "x = " + x + nl
+               for t = 1 to 10
+                       if t = 3
+                               print "number three" + nl
+                       endif
+               endfor  
+
+       x--
+       endwhile
+
+       test() 
+
+       function test
+               print "message from test" + nl
+
+       ChangeRingKeyword  function func
+       ChangeRingKeyword  print see
+       ChangeRingKeyword  endif ok
+       ChangeRingKeyword  endfor next
+       ChangeRingKeyword  endwhile end
+
+
+.. index:: 
+       pair: シンタックスの柔軟性; 演算子の変更
+
+演算子の変更
+============
+
+ChangeRingOperator 命令は演算子を変更します。
+
+.. note:: 共同プロジェクトのチーム間で記法の混用があるときは、演算子の復元を心がけてください。
+
+.. tip:: ChangeRingOperartor 命令は字句解析の段階でコンパイラにより実行されます (構文解析の前に)。
+
+
+文法:
+
+.. code-block:: ring
+       
+       ChangeRingOperator  <旧キーワード>  <新キーワード>
+
+用例:
+
+このプログラムは、 + 演算子を _+ へ変更することで隠します。
+
+.. code-block:: ring
+
+       changeringoperator + _+
+       changeringkeyword SEE PRINT
+
+       try
+               print 5 + 10
+       catch
+               print nl print "error" print nl
+       done
+
+       changeringoperator _+ +
+
+このプログラムは、 + 演算子を “plus” へ変更します。
+
+.. code-block:: ring
+
+       changeringoperator + plus 
+       changeringkeyword SEE PRINT
+
+       Print 5 plus 5  
+
+       changeringoperator plus +
+       changeringkeyword PRINT SEE 
+
+.. index:: 
+       pair: シンタックスの柔軟性; シンタックスファイルの読み込み
+
+
+シンタックスファイルの読み込み
+==============================
+
+複数のソースファイルから後で使用するために、ファイルへ ChangeRingKeyword と ChangeRingOperator 命令のグループを格納です。
+これらのファイルを呼び出すため、 Load 命令は使用できません。理由として、
+
+* ChangeRingKeyword および ChangeRingOperator 命令は字句解析の段階で、コンパイラにより実行されます (構文解析の前に)。
+* Load 命令は構文解析の段階で実行されます (字句解析後の段階で)。
+
+解決方法: LoadSyntax 命令を字句解析の段階で実行します。
+
+文法:
+
+.. code-block:: ring
+
+       LoadSyntax      "syntaxfile.ring"
+
+用例:
+
+ファイル : StyleBasicOn.ring
+
+.. code-block:: ring
+
+       ChangeRingKeyword       see     print
+       ChangeRingKeyword       ok      endif
+       ChangeRingKeyword       next    endfor
+       ChangeRingKeyword       end     endwhile
+
+ファイル : StyleBasicOff.ring
+
+.. code-block:: ring
+
+       ChangeRingKeyword  print        see
+       ChangeRingKeyword  endif        ok
+       ChangeRingKeyword  endfor       next
+       ChangeRingKeyword  endwhile     end
+
+ファイル : UseStyleBasic.ring
+
+.. code-block:: ring
+
+       LoadSyntax "stylebasicon.ring"
+
+       x = 10
+       while x > 0
+               print "x = " + x + nl
+               for t = 1 to 10
+                       if t = 3
+                               print "number three" + nl
+                       endif
+               endfor  
+               x--
+       endwhile
+
+       LoadSyntax "stylebasicoff.ring"
+
+       see "done" + nl
+
+.. note:: LoadSyntax 命令により呼び出されるファイルの内容は ChangeRingKeyword と ChangeRingOperator 命令のみ記述してください。
+
+.. tip:: LoadSyntax により呼び出されたファイルは関数、パッケージおよびクラスには対応していません。命令型の命令のみ対応しています。
+
+.. note:: この機能により、同じプロジェクトで使用できる多種多様な記法を作成できます。また、 Ring の訳文では日本語、アラビア語、フランス語などの自然言語に対応できます。
+
+.. tip:: LoadSyntax 命令の効果は、現在のソースコードに関連するものだけに限られます (ファイルスコープ)。
+       
+
+.. index:: 
+       pair: シンタックスの柔軟性; 関数の引数を“()” で囲うには
+
+関数の引数を“()” で囲うには
+=============================
+
+関数の引数は“()”で囲います (オプション扱い)。
+
+用例:
+
+.. code-block:: ring
+
+       hello()
+       sum(3,4)
+
+       func hello()
+               see "Hello" + nl
+
+       func sum(x,y)
+               see x+y+nl
+       
+実行結果:
+
+.. code-block:: ring
+
+       Hello
+       7
+
+用例:
+
+.. code-block:: ring
+
+       myfunc = func x,y { see x + y + nl }
+
+       call myfunc (3,4)
+
+       myfunc2 = func (x,y) { see x+y+nl }
+
+       call myfunc(3,4)
+
+実行結果:
+
+.. code-block:: ring
+
+       7
+       7
+
+.. index:: 
+       pair: シンタックスの柔軟性; ステートメントの末尾および間でセミコロンを使うには
+
+ステートメントの末尾および間でセミコロンを使うには
+==================================================
+
+Ring ではステートメントの末尾、および間でセミコロンを使えます (オプション扱い)。
+
+用例:
+
+.. code-block:: ring
+
+       # セミコロンの使用はオプション扱いです。
+
+       see "Hello" + nl ; see "How are you?" + nl  ; see "Welcome to Ring" + nl ;
+       one() ; two() ; three() ;
+       func one ; see "one" + nl ;
+       func two ; see "two" + nl ;
+       func three ; see "three" + nl ;
+
+
+実行結果:
+
+.. code-block:: ring
+
+
+       Hello
+       How are you?
+       Welcome to Ring
+       one
+       two
+       three
+
+.. index:: 
+       pair: シンタックスの柔軟性; 変数名に $ と @ を使うには
+
+変数名に $ と @ を使うには
+==========================
+
+変数名には Unicode 文字に加えて $ と @ を使用することもできます。
+
+この機能は便利です。例えば、グローバル変数は $ で、そしてオブジェクトの属性は @ で書き始められます。
+
+これは Ruby などでは規則ですが、 Ring ではコンパイラへ影響を及ぼさないオプション扱いのものです。
+
+用例:
+
+.. code-block:: ring
+
+       $global_variable = 5
+
+       new test { hello() }    
+
+       class test
+
+               @instance_variable = 10
+
+               func hello
+
+                       local_variable = 15
+
+                       see "Global   : " + $global_variable + nl + 
+                           "Instance : " + @instance_variable + nl +
+                           "Local    : " + local_variable + nl
+
+実行結果:
+
+
+.. code-block:: ring
+
+       Global   : 5
+       Instance : 10
+       Local    : 15
+
+.. index:: 
+       pair: シンタックスの柔軟性; If ステートメントで‘but’の代わりに‘elseif’キーワードを使うには
+
+If ステートメントで‘but’の代わりに‘elseif’キーワードを使うには
+==================================================================
+
+If ステートメントで‘but’を使いたくないときは、
+‘elseif’キーワードへ変更できます。
+
+用例:
+
+.. code-block:: ring
+
+       give x
+       if x = 1 see "one"
+       elseif x=2 see "two"
+       elseif x=3 see "three"
+       elseif x=4 see "four"
+       else see "other"
+       ok
+       see nl
+
+.. index:: 
+       pair: シンタックスの柔軟性; Switch ステートメントで‘other’の代わりに‘else’キーワードを使うには
+
+Switch ステートメントで‘other’の代わりに‘else’キーワードを使うには
+======================================================================
+
+Switch ステートメントで‘other’を使いたくないときは、
+‘else’キーワードへ変更できます。
+
+また If ステートメントで‘else’を‘other’キーワードへ置き換えることもできます。
+
+つまり‘other’キーワードは‘else’キーワードと同じ扱いです。
+
+用例:
+
+.. code-block:: ring
+
+       x = 1
+       switch x
+               on 10 
+                       see "10" + nl
+               else 
+                       see "not 10" + nl
+       end
+
+実行結果:
+
+.. code-block:: ring
+
+       not 10
+
+.. index:: 
+       pair: シンタックスの柔軟性; 制御構造で‘end’キーワードを使うには
+
+制御構造で‘end’キーワードを使うには
+=====================================
+
+‘end’ キーワードは制御構造を閉じます。
+
+* If ステートメント
+* For ループ
+* Switch
+* While
+* Try ~ Catch
+
+用例:
+
+.. code-block:: ring
+
+       see "if statement.." + nl
+       x = 1
+       if x = 1 
+               see "one" + nl
+       elseif x=2 
+               see "two" + nl
+       elseif x=3 
+               see "three" + nl
+       end
+       see "for loop.." + nl
+       for t = 1 to 10
+               see t 
+       end
+       see nl
+       see "switch..." + nl
+       x = 1
+
+       switch x
+               on 1 see "one" + nl
+               on 2 see "two" + nl
+       end
+
+       see "try catch..." + nl
+       try
+               x = 1 / 0
+       catch
+               see "catching error" + nl
+       end
+
+実行結果:
+
+.. code-block:: ring
+
+       if statement..
+       one
+       for loop..
+       12345678910
+       switch...
+       one
+       try catch...
+       catching error
+
+.. index:: 
+       pair: シンタックスの柔軟性; 制御構造の開始と終了で括弧 { } を使うには
+
+制御構造の開始と終了で括弧 { } を使うには
+=========================================
+
+制御構造の開始と終了で括弧 { } を使えます。
+
+* If ステートメント
+* For ループ
+* Switch
+* While
+* Try ~ Catch
+
+用例:
+
+.. code-block:: ring
+
+       see "if statement.." + nl
+       x = 1
+       if x = 1 {
+               see "one" + nl
+       elseif x=2 
+               see "two" + nl
+       elseif x=3 
+               see "three" + nl
+       }
+       see "for loop.." + nl
+       for t = 1 to 10 {
+               see t 
+       }
+       see nl
+       see "switch..." + nl
+       x = 1
+
+       switch x {
+               on 1 see "one" + nl
+               on 2 see "two" + nl
+       }
+
+       see "try catch..." + nl
+       try {
+               x = 1 / 0
+       catch
+               see "catching error" + nl
+       }
+
+実行結果:
+
+.. code-block:: ring
+
+       if statement..
+       one
+       for loop..
+       12345678910
+       switch...
+       one
+       try catch...
+       catching error
+
+
+.. index:: 
+       pair: シンタックスの柔軟性; ‘see’と‘give’ の代わりに‘put’と‘get’を使うには
+
+‘see’と‘give’ の代わりに‘put’と‘get’を使うには
+======================================================
+
+‘see’キーワードを‘put’キーワードへ置き換えられます。
+
+また‘give’キーワードを‘get’キーワードへ置き換えることもできます。
+
+用例:
+
+.. code-block:: ring
+
+       put "Hello World" + nl
+       put "Enter Your Name ? " Get Name
+       Put "Hello " + Name
+
+.. index:: 
+       pair: シンタックスの柔軟性; Switch ステートメントで‘on’の代わりに‘case’を使うには
+
+Switch ステートメントで‘on’の代わりに‘case’を使うには
+=========================================================
+
+Switch ステートメントで‘on’キーワードを‘case’キーワードへ置き換えられます。
+
+用例① :
+
+.. code-block:: ring
+
+       for x=1 to 10 
+               switch x 
+               case 1 put "one" + nl
+               case 2 put "two" + nl
+               case 3 put "thre" + nl
+               else put "else" + nl
+               end
+       end
+
+用例② :
+
+.. code-block:: ring
+
+       for x=1 to 10 {
+               switch x {
+               case 1 put "one" + nl
+               case 2 put "two" + nl
+               case 3 put "thre" + nl
+               else put "else" + nl
+               }
+       }
+
+
+.. index:: 
+       pair: シンタックスの柔軟性; 関数とメソッドの定義で‘func’の代わりに‘def’を使うには
+
+関数とメソッドの定義で‘func’の代わりに‘def’を使うには
+=========================================================
+
+関数、およびメソッドの定義で ‘func’ の代わりに ‘def’ キーワードを使えます。
+
+用例:
+
+.. code-block:: ring
+
+       one() two()
+
+       def one put "one" + nl
+       def two put "two" + nl
+
+.. index:: 
+       pair: シンタックスの柔軟性; Package/Class/Function で括弧 { } を使うには
+
+Package/Class/Function で括弧 { } を使うには
+============================================
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+       {
+               class myclass 
+               {
+                       func myfunc 
+                       {
+                               print("Hello, World!\n")
+                       }
+               }
+       }
+
+.. index:: 
+       pair: シンタックスの柔軟性; Package/Class/Function キーワードの後で‘end’を使うには
+
+Package/Class/Function キーワードの後で‘end’を使うには
+========================================================
+
+用例:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+               class myclass 
+                       def myfunc 
+                               put "Hello, World!"
+                       end
+               end
+       end
+
+.. index:: 
+       pair: シンタックスの柔軟性; Package/Class/Function キーワードの後で‘endpackage’/’endclass’/’endfunc’を使うには
+
+Package/Class/Function キーワードの後で‘endpackage’/’endclass’/’endfunc’を使うには
+========================================================================================
+
+用例:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass { myfunc() }
+
+       package mypackage
+               class myclass
+                       func myfunc                     
+                               see "welcome"  + nl
+                       endfunc
+               endclass
+       endpackage
+
+
+.. index:: 
+       pair: シンタックスの柔軟性; キーワードの後にくる行を無視
+
+キーワードの後にくる行を無視
+============================
+
+Ring 1.8 からコンパイラは、キーワードの後に続く行をトークンとみなして無視するようになりました。
+
+用例:
+
+.. code-block:: ring
+
+       see 
+       "
+               Hello, World!
+       "
+       test()
+
+       func 
+       #======================#
+               Test
+       #======================#
+
+               ?
+               "
+       
+               Hello from the Test function
+
+               "
+
+実行結果:
+
+.. code-block:: none
+
+
+               Hello, World!
+
+
+               Hello from the Test function
+
diff --git a/docs/ja-jp/source/systemfunc.txt b/docs/ja-jp/source/systemfunc.txt
new file mode 100644 (file)
index 0000000..89d78b0
--- /dev/null
@@ -0,0 +1,487 @@
+.. index:: 
+       single: システム関数; はじめに
+
+============
+システム関数
+============
+
+システム関数の用法を学びます。
+
+* System()
+
+* SysGet()
+
+* IsMSDOS()
+
+* IsWindows()
+
+* IsWindows64()
+
+* IsUnix()
+
+* IsMacOSX()
+
+* IsLinux()
+
+* IsFreeBSD()
+
+* IsAndroid()
+
+* Windowsnl()
+
+* コマンドライン引数の取得
+
+* 使用中のソースファイル名を取得
+
+* CurrentDir()
+
+* ExeFileName()
+
+* ChDir()
+
+* ExeFolder()
+
+* Version()
+
+* Shutdown()
+
+.. index:: 
+       pair: システム関数; System() 関数
+
+System() 関数
+=============
+
+System() 関数はシステムコマンドを実行します。
+
+文法:
+
+.. code-block:: ring
+
+       System(cCommand)
+
+用例:
+
+.. code-block:: ring
+
+       System("myapp.exe")     # myapp.exe の実行
+       System("ls")            # ファイルのリストを表示
+
+.. index:: 
+       pair: システム関数; SysGet() 関数
+
+SysGet() 関数
+=============
+
+SysGet() 関数は環境変数を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       SysGet(cVariable)
+
+用例:
+
+.. code-block:: ring
+
+       see sysget("path")              # システムパスの情報を表示
+
+
+.. index:: 
+       pair: システム関数; IsMSDOS() 関数
+
+IsMSDOS() 関数
+==============
+
+IsMSDOS() 関数はオペレーティングシステムが MS-DOS であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsMSDOS()
+               → オペレーティングシステムが MS-DOS ならば 1 を、そうでなければ 0 を返します。
+
+
+.. index:: 
+       pair: システム関数; IsWindows() 関数
+
+IsWindows() 関数
+====================
+
+IsWindows() 関数はオペレーティングシステムが Windows であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsWindows()
+               → オペレーティングシステムが Windows ならば 1 を、そうでなければ 0 を返します。
+
+
+.. index:: 
+       pair: システム関数; IsWindows64() 関数
+
+IsWindows64() 関数
+======================
+
+IsWindows64() 関数はオペレーティングシステムが 64bit 版の Windows であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsWindows64() 
+               → オペレーティングシステムが Windows64 ならば 1 を、そうでなければ 0 を返します。
+
+
+.. index:: 
+       pair: システム関数; IsUnix() 関数
+
+IsUnix() 関数
+=================
+
+IsUnix() 関数はオペレーティングシステムが UNIX であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsUnix() 
+               → オペレーティングシステムが UNIX ならば 1 を、そうでなければ 0 を返します。
+
+
+.. index:: 
+       pair: システム関数; IsMacOSX() 関数
+
+IsMacOSX() 関数
+===============
+
+IsMacOSX() 関数はオペレーティングシステムが macOS であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsMacOSX() 
+               → オペレーティングシステムが macOS ならば 1 を、そうでなければ 0 を返します。
+
+
+.. index:: 
+       pair: システム関数; IsLinux() 関数
+
+IsLinux() 関数
+==============
+
+IsLinux() 関数はオペレーティングシステムが Linux であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsLinux()
+               → オペレーティングシステムが Linux ならば 1 を、そうでなければ 0 を返します。
+
+
+.. index:: 
+       pair: システム関数; IsFreeBSD() 関数
+
+IsFreeBSD() 関数
+================
+
+IsFreeBSD() 関数はオペレーティングシステムが FreeBSD であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsFreeBSD() 
+               → オペレーティングシステムが FreeBSD ならば 1 を、そうでなければ 0 を返します。
+
+
+.. index:: 
+       pair: システム関数; IsAndroid() 関数
+
+IsAndroid() 関数
+================
+
+IsAndroid() 関数はオペレーティングシステムが Android であるかどうかを確認します。
+
+文法:
+
+.. code-block:: ring
+
+       IsAndroid() 
+               → オペレーティングシステムが Android ならば 1 を、そうでなければ 0 を返します。
+
+.. index:: 
+       pair: システム関数; 用例
+
+用例
+====
+
+.. code-block:: ring
+
+       see "IsMSDOS()     --> " + ismsdos()     + nl
+       see "IsWindows()   --> " + iswindows()   + nl
+       see "IsWindows64() --> " + iswindows64() + nl
+       see "IsUnix()      --> " + isunix()      + nl
+       see "IsMacOSX()    --> " + ismacosx()    + nl
+       see "IsLinux()     --> " + islinux()     + nl
+       see "IsFreeBSD()   --> " + isfreebsd()   + nl
+       see "IsAndroid()   --> " + isandroid()   + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       IsMSDOS()     --> 0
+       IsWindows()   --> 1
+       IsWindows64() --> 0
+       IsUnix()      --> 0
+       IsMacOSX()    --> 0
+       IsLinux()     --> 0
+       IsFreeBSD()   --> 0
+       IsAndroid()   --> 0
+
+.. index:: 
+       pair: システム関数; Windowsnl() 関数
+
+Windowsnl() 関数
+================
+
+Windowsnl() 関数は Windows の改行文字を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       WindowsNL() → CR+LF = CHAR(13) + CHAR(10) から構成される文字列
+
+用例:
+
+.. code-block:: ring
+
+       cStr = read("input.txt")
+
+       if iswindows()
+               cStr = substr(cStr,windowsnl(),nl)
+       ok
+
+       aList = str2list(cStr)
+       # 課題 - リストの項目処理で "for in" を使用する
+       cStr = list2str(aList)
+
+       if iswindows()
+               cStr = substr(cStr,nl,windowsnl())
+       ok
+
+       write("ouput.txt",cStr)
+
+.. index:: 
+       pair: システム関数; コマンドライン引数の取得
+
+コマンドライン引数の取得
+========================
+
+Ring スクリプトへ渡されたコマンドライン引数を得るには、リスト形式の変数 sysargv を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       see copy("=",30) + nl
+       see "Command Line Parameters" + nl
+       see "Size : " + len(sysargv) + nl
+       see sysargv
+       see copy("=",30) + nl
+       if len(sysargv) < 4 return ok
+       nStart = sysargv[3]
+       nEnd = sysargv[4]
+       for x = nStart to nEnd
+               see x + nl
+       next
+
+実行結果:
+
+.. code-block:: ring
+
+       b:\mahmoud\apps\ring>ring tests\syspara.ring 1 10
+       ==============================
+       Command Line Parameters
+       Size : 4
+       ring
+       tests\syspara.ring
+       1
+       10
+       ==============================
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
+
+.. index:: 
+       pair: システム関数; 使用中のソースファイル名を取得
+
+使用中のソースファイル名を取得
+==============================
+
+filename() 関数は現在使用中のソースファイル名 (\*.ring) を取得します。
+
+文法:
+
+.. code-block:: ring
+
+       filename() → この文字列は現在使用中のソースファイル名です。
+
+用例:
+
+.. code-block:: ring
+
+       see "Active Source File Name : " + filename() + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       Active Source File Name : tests\filename.ring
+
+
+用例:
+
+.. code-block:: ring
+
+       if sysargv[2] = filename()
+               see "I'm the main program file!" + nl
+               # ここでテスト実行ができます!
+       else
+               see "I'm a sub file in a program" + nl
+       ok
+
+
+.. index:: 
+       pair: システム関数; PrevFileName() 関数
+
+PrevFileName() 関数
+=======================
+
+PrevFileName() 関数は以前使用中であったソースファイル名を取得します。
+
+以前のファイルは呼び出し元の関数を有するファイル、または PrevFileName() を呼び出す前に呼び出された関数を有するファイルです。
+
+文法:
+
+.. code-block:: ring
+
+       prevfilename() → この文字列は以前使用中であったソースファイル名です。
+
+用例:
+
+この関数では「呼び出し元にある関数を有するファイル」は「プログラムのメインソース」であるかどうかの判定に
+stdlib.ring の PrevFileName() を使用しています。
+
+.. code-block:: ring
+
+       Func IsMainSourceFile
+               if PrevFileName() = sysargv[2]
+                       return true
+               ok
+               return false
+
+.. index:: 
+       pair: システム関数; CurrentDir() 関数
+
+CurrentDir() 関数
+=====================
+
+現在のディレクトリをパスを返します。
+
+文法:
+
+.. code-block:: ring
+
+       CurrenDir() → この文字列は現在のディレクトリのパスです。
+
+.. index:: 
+       pair: システム関数; ExeFileName() 関数
+
+ExeFileName() 関数
+======================
+
+Ring の実行可能ファイル名を返します。
+
+文法:
+
+.. code-block:: ring
+
+       exefilename() → この文字列は Ring の実行可能ファイル名です。
+
+.. index:: 
+       pair: システム関数; ChDir() 関数
+
+ChDir() 関数
+================
+
+現在のディレクトリを変更します。
+
+文法:
+
+.. code-block:: ring
+
+       ChDir(cNewPath)
+
+.. index:: 
+       pair: システム関数; ExeFolder() 関数
+
+ExeFolder() 関数
+====================
+
+Ring の実行可能ファイルがあるパスを返します。
+
+文法:
+
+.. code-block:: ring
+
+       exefolder() → この文字列は Ring の実行可能ファイルがあるパスです。
+
+.. index:: 
+       pair: システム関数; Version() 関数
+
+Version() 関数
+==============
+
+Ring のバージョン情報を返します。
+
+文法:
+
+.. code-block:: ring
+
+       version() → この文字列は Ring のバージョンです。
+
+実行結果:
+
+.. code-block:: ring
+
+       1.12
+
+
+.. index:: 
+       pair: システム関数; Shutdown() 関数
+
+Shutdown() 関数
+===============
+
+アプリケーションを閉じます。
+
+文法:
+
+.. code-block:: ring
+
+       shutdown(nStatus) → アプリケーションを閉じます。
+
diff --git a/docs/ja-jp/source/tesseragame.png b/docs/ja-jp/source/tesseragame.png
new file mode 100644 (file)
index 0000000..e8b26ba
Binary files /dev/null and b/docs/ja-jp/source/tesseragame.png differ
diff --git a/docs/ja-jp/source/tests_shot.png b/docs/ja-jp/source/tests_shot.png
new file mode 100644 (file)
index 0000000..b92822a
Binary files /dev/null and b/docs/ja-jp/source/tests_shot.png differ
diff --git a/docs/ja-jp/source/thering.jpg b/docs/ja-jp/source/thering.jpg
new file mode 100644 (file)
index 0000000..416d572
Binary files /dev/null and b/docs/ja-jp/source/thering.jpg differ
diff --git a/docs/ja-jp/source/tictactoe.jpg b/docs/ja-jp/source/tictactoe.jpg
new file mode 100644 (file)
index 0000000..8904478
Binary files /dev/null and b/docs/ja-jp/source/tictactoe.jpg differ
diff --git a/docs/ja-jp/source/tictactoe3d.png b/docs/ja-jp/source/tictactoe3d.png
new file mode 100644 (file)
index 0000000..bb53799
Binary files /dev/null and b/docs/ja-jp/source/tictactoe3d.png differ
diff --git a/docs/ja-jp/source/ttsapp.png b/docs/ja-jp/source/ttsapp.png
new file mode 100644 (file)
index 0000000..d2b639f
Binary files /dev/null and b/docs/ja-jp/source/ttsapp.png differ
diff --git a/docs/ja-jp/source/typehints.txt b/docs/ja-jp/source/typehints.txt
new file mode 100644 (file)
index 0000000..0cd6197
--- /dev/null
@@ -0,0 +1,145 @@
+.. index:: 
+       single: 型ヒントライブラリ; 型ヒントライブラリについて
+
+==========================
+型ヒントライブラリについて
+==========================
+
+型ヒントライブラリの用法を学びます。
+
+
+.. index:: 
+       pair: 型ヒントライブラリ; 型ヒントを使う理由
+
+型ヒントを使う理由
+==================
+
+このライブラリはソースコードへ型情報を追加します。
+このようなツールで非常に便利です。
+
+* コードエディタ
+* 静的解析
+
+.. note:: Ring は動的言語であり、コンパイラによる型検査は行われません。
+
+.. index:: 
+       pair: 型ヒントライブラリ; 用例
+
+用例
+====
+
+この用例は型ヒントライブラリの用法です。
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       see sum(3,4) + nl ;
+       see sayHello("Mahmoud");
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+.. index:: 
+       pair: 型ヒントライブラリ; ユーザ型
+
+ユーザ型
+========
+
+型ヒントライブラリは非常に強力であり、自動的にユーザ型 (クラス) へ対応します。
+
+用例:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       import mypackage 
+
+       test()  { main([:one,:two,:three]) }
+
+       myclass func test() {
+               see "Testing User Types!" + nl
+               return new myclass
+       }
+
+       package mypackage {
+               public class myclass {
+                       public static void func main(list args) {
+                               see "welcome" + nl
+                               see args
+                       }
+               }
+       }
+
+.. index:: 
+       pair: 型ヒントライブラリ; コードの内側で型を使うには
+
+コードの内側で型を使うには
+==========================
+
+また、コードの内側で型を使えます (関数プロトタイプだけに限定されません)。
+
+用例:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       int     sum = sum(3,4)
+       string  msg = sayHello("Mahmoud")
+
+       see "Sum = " + sum + nl + msg + nl
+
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+.. index:: 
+       pair: 型ヒントライブラリ; 規則
+
+規則
+====
+
+* 関数プロトタイプ : 型を使うには、引数の前後を ‘(‘ と ‘)’ で必ず囲んでください。
+* 関数のコード : 型を使うには、必ず変数の値を設定してください (代入)。
+
+この型はライブラリで定義してあります。
+
+.. code-block:: ring
+
+       # 低水準型
+       char             
+       unsigned         
+       signed           
+       int              
+       short            
+       long             
+       float            
+       double           
+       void             
+
+       # 高水準型
+       string           
+       list             
+       number           
+       object           
+
+       # その他
+       public           
+       static           
+       abstract         
+       protected        
+       override         
+
+
diff --git a/docs/ja-jp/source/urlappmacshot3.png b/docs/ja-jp/source/urlappmacshot3.png
new file mode 100644 (file)
index 0000000..bdb5fb6
Binary files /dev/null and b/docs/ja-jp/source/urlappmacshot3.png differ
diff --git a/docs/ja-jp/source/urlappmacshot4.png b/docs/ja-jp/source/urlappmacshot4.png
new file mode 100644 (file)
index 0000000..fee1e5d
Binary files /dev/null and b/docs/ja-jp/source/urlappmacshot4.png differ
diff --git a/docs/ja-jp/source/urlappmainshot.png b/docs/ja-jp/source/urlappmainshot.png
new file mode 100644 (file)
index 0000000..e825220
Binary files /dev/null and b/docs/ja-jp/source/urlappmainshot.png differ
diff --git a/docs/ja-jp/source/urlappshot1.png b/docs/ja-jp/source/urlappshot1.png
new file mode 100644 (file)
index 0000000..b8b92e7
Binary files /dev/null and b/docs/ja-jp/source/urlappshot1.png differ
diff --git a/docs/ja-jp/source/urlappshot2.png b/docs/ja-jp/source/urlappshot2.png
new file mode 100644 (file)
index 0000000..587fdcd
Binary files /dev/null and b/docs/ja-jp/source/urlappshot2.png differ
diff --git a/docs/ja-jp/source/urn_shot1.png b/docs/ja-jp/source/urn_shot1.png
new file mode 100644 (file)
index 0000000..31bb9d3
Binary files /dev/null and b/docs/ja-jp/source/urn_shot1.png differ
diff --git a/docs/ja-jp/source/urn_shot10.png b/docs/ja-jp/source/urn_shot10.png
new file mode 100644 (file)
index 0000000..ecf8757
Binary files /dev/null and b/docs/ja-jp/source/urn_shot10.png differ
diff --git a/docs/ja-jp/source/urn_shot11.png b/docs/ja-jp/source/urn_shot11.png
new file mode 100644 (file)
index 0000000..f0e5f2f
Binary files /dev/null and b/docs/ja-jp/source/urn_shot11.png differ
diff --git a/docs/ja-jp/source/urn_shot12.png b/docs/ja-jp/source/urn_shot12.png
new file mode 100644 (file)
index 0000000..67c0a7c
Binary files /dev/null and b/docs/ja-jp/source/urn_shot12.png differ
diff --git a/docs/ja-jp/source/urn_shot2.png b/docs/ja-jp/source/urn_shot2.png
new file mode 100644 (file)
index 0000000..b57da48
Binary files /dev/null and b/docs/ja-jp/source/urn_shot2.png differ
diff --git a/docs/ja-jp/source/urn_shot3.png b/docs/ja-jp/source/urn_shot3.png
new file mode 100644 (file)
index 0000000..252a2e1
Binary files /dev/null and b/docs/ja-jp/source/urn_shot3.png differ
diff --git a/docs/ja-jp/source/urn_shot4.png b/docs/ja-jp/source/urn_shot4.png
new file mode 100644 (file)
index 0000000..5b23411
Binary files /dev/null and b/docs/ja-jp/source/urn_shot4.png differ
diff --git a/docs/ja-jp/source/urn_shot5.png b/docs/ja-jp/source/urn_shot5.png
new file mode 100644 (file)
index 0000000..c52ca61
Binary files /dev/null and b/docs/ja-jp/source/urn_shot5.png differ
diff --git a/docs/ja-jp/source/urn_shot6.png b/docs/ja-jp/source/urn_shot6.png
new file mode 100644 (file)
index 0000000..9b7a147
Binary files /dev/null and b/docs/ja-jp/source/urn_shot6.png differ
diff --git a/docs/ja-jp/source/urn_shot7.png b/docs/ja-jp/source/urn_shot7.png
new file mode 100644 (file)
index 0000000..f945e3f
Binary files /dev/null and b/docs/ja-jp/source/urn_shot7.png differ
diff --git a/docs/ja-jp/source/urn_shot8.png b/docs/ja-jp/source/urn_shot8.png
new file mode 100644 (file)
index 0000000..3a24887
Binary files /dev/null and b/docs/ja-jp/source/urn_shot8.png differ
diff --git a/docs/ja-jp/source/urn_shot9.png b/docs/ja-jp/source/urn_shot9.png
new file mode 100644 (file)
index 0000000..9de14da
Binary files /dev/null and b/docs/ja-jp/source/urn_shot9.png differ
diff --git a/docs/ja-jp/source/usingopengl.txt b/docs/ja-jp/source/usingopengl.txt
new file mode 100644 (file)
index 0000000..a3a55ae
--- /dev/null
@@ -0,0 +1,2550 @@
+.. index:: 
+       single: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); はじめに
+
+===========================================================
+RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)
+===========================================================
+
+
+RingOpenGL と RingFreeGLUT の用法を学びます。
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); サンプルソース (作者)
+
+サンプルソース (作者)
+=====================
+
+この C チュートリアルを参考に本章のサンプルを記述しました。
+
+出典元:
+
+(1) http://www.lighthouse3d.com/tutorials/glut-tutorial/
+
+(2) http://www.wikihow.com/Make-a-Cube-in-OpenGL
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); RingOpenGL とは?
+
+RingOpenGL とは?
+=================
+
+RingOpenGL は Ring 付属の OpenGL ライブラリのバインディングです。
+
+こちらから OpenGL について学べます : https://www.opengl.org/
+
+RingOpenGL は下記のバージョンに対応しています。
+
+* OpenGL 1.1
+* OpenGL 1.2
+* OpenGL 1.3
+* OpenGL 1.4
+* OpenGL 1.5
+* OpenGL 2.0
+* OpenGL 2.1
+* OpenGL 3.0
+* OpenGL 3.2
+* OpenGL 3.3
+* OpenGL 4.0
+* OpenGL 4.1
+* OpenGL 4.2
+* OpenGL 4.3
+* OpenGL 4.4
+* OpenGL 4.5
+* OpenGL 4.6
+
+OpenGL 2.1 の場合は RingOpenGL 2.1 ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "opengl21lib.ring"
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); RingFreeGLUT とは?
+
+RingFreeGLUT とは?
+===================
+
+RingFreeGLUT は Ring 付属の FreeGLUT ライブラリのバインディングです。
+
+このサイトで FreeGLUT について学べます : http://freeglut.sourceforge.net/
+
+RingFreeGLUT の使用前に freeglut.ring ライブラリを読み込みます。
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); RingFreeGLUT によるはじめてのウィンドウ
+
+RingFreeGLUT によるはじめてのウィンドウ
+=======================================
+
+用例:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_SINGLE)
+               glutInitWindowSize(800, 600)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 1")
+               glutDisplayFunc(:displayCode)
+               glutMainLoop()
+
+       func displaycode
+
+スクリーンショット:
+
+.. image:: freeglutshot1.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); RingOpenGL での描画
+
+
+RingOpenGL での描画
+===================
+
+用例:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_SINGLE)
+               glutInitWindowSize(800, 600)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 2")
+               glutDisplayFunc(:displayCode)
+               glutMainLoop()
+
+       func displaycode
+               glClear(GL_COLOR_BUFFER_BIT)
+               glColor3f(0,255,0)
+               glBegin(GL_POLYGON)
+                       glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(0.5, 0.0, 0.0)
+                       glVertex3f(0.5, 0.5, 0.0)
+                       glVertex3f(0.0, 0.5, 0.0)
+               glEnd()
+               glColor3f(255,0,0)
+               glBegin(GL_POLYGON)
+                       glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(0.5, 0.0, 0.0)
+                       glVertex3f(-0.5,- 1, 0.0)
+                       glVertex3f(0.0, -1, 0.0)
+               glEnd()
+               glColor3f(0,0,255)
+               glBegin(GL_POLYGON)
+                      glVertex3f(0.0, 0.0, 0.0)
+                       glVertex3f(-0.5, 0.0, 0.0)
+                       glVertex3f(-0.5,- 0.5, 0.0)
+                       glVertex3f(0.0, -0.5, 0.0)
+               glEnd()
+
+               glFlush()
+
+スクリーンショット:
+
+.. image:: freeglutshot2.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); はじめての三角形
+
+
+はじめての三角形
+================
+
+用例:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       func main
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowSize(320,320)
+               glutInitWindowPosition(100, 10)
+               glutCreateWindow("RingFreeGLUT - Test 3")
+               glutDisplayFunc(:renderScene)
+               glutMainLoop()
+
+       func renderScene
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+       
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-0.5,-0.5,0.0)
+                       glVertex3f(0.5,0.0,0.0)
+                       glVertex3f(0.0,0.5,0.0)
+               glEnd()
+       
+               glutSwapBuffers()
+
+
+スクリーンショット:
+
+.. image:: freeglutshot3.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); ウィンドウの大きさ変更イベント
+
+ウィンドウの大きさ変更イベント
+==============================
+
+用例:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 4")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+
+               glutMainLoop()
+
+       func renderScene
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2,-2,-5.0)
+                       glVertex3f(2,0.0,-5.0)
+                       glVertex3f(0.0,2,-5.0)
+               glEnd()
+
+               glutSwapBuffers()
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45,ratio,1,100)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); 三角形の回転
+
+三角形の回転
+============
+
+用例:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       angle = 0
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 5")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutMainLoop()
+
+       func renderScene
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+               // カメラの設定
+               gluLookAt(      0.0, 0.0, 10.0,
+                                       0.0, 0.0,  0.0,
+                                       0.0, 1.0,  0.0)
+
+               glRotatef(angle, 0.0, 1.0, 0.0)
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2.0,-2.0, 0.0)
+                       glVertex3f( 2.0, 0.0, 0.0)
+                       glVertex3f( 0.0, 2.0, 0.0)
+               glEnd()
+
+               angle+=0.1
+
+               glutSwapBuffers();
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45,ratio,1,100)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+
+スクリーンショット:
+
+.. image:: freeglutshot4.png
+       :alt: RingFreeGLUT
+               
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); キーボードイベントと配色
+
+キーボードイベントと配色
+========================
+
+用例:
+
+.. code-block:: ring
+               
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       angle = 0
+
+       red=1.0  
+       blue=1.0 
+       green=1.0
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 6")
+
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               // これは新しいエントリーです。
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:processSpecialKeys)
+
+               glutMainLoop()
+
+       func renderScene
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+               // カメラの設定
+               gluLookAt(      0.0, 0.0, 10.0,
+                                       0.0, 0.0,  0.0,
+                                       0.0, 1.0,  0.0)
+
+               glRotatef(angle, 0.0, 1.0, 0.0)
+
+
+               glColor3f(red,green,blue);
+
+               glBegin(GL_TRIANGLES)
+                       glVertex3f(-2.0,-2.0, 0.0)
+                       glVertex3f( 2.0, 0.0, 0.0)
+                       glVertex3f( 0.0, 2.0, 0.0)
+               glEnd()
+
+               angle+=0.1
+
+               glutSwapBuffers();
+
+       func changesize
+
+               h = glutEventHeight()
+               w = glutEventWidth()
+
+                       // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if (h = 0)
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45,ratio,1,100)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+       func processNormalKeys
+               key = GLUTEventKey()
+               if key = 27
+                       shutdown()
+               ok
+
+       func processSpecialKeys
+
+               key = GLUTEventKey()
+
+               switch key  
+                       on GLUT_KEY_F1
+                                       red = 1.0
+                                       green = 0.0
+                                       blue = 0.0
+                       on GLUT_KEY_F2 
+                                       red = 0.0
+                                       green = 1.0
+                                       blue = 0.0
+                       on GLUT_KEY_F3
+                                       red = 0.0
+                                       green = 0.0
+                                       blue = 1.0
+               off
+
+スクリーンショット:
+
+.. image:: freeglutshot5.png
+       :alt: RingFreeGLUT
+               
+
+               
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); カメラ
+
+カメラ
+======
+
+用例:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // カメラ方向の回転角度
+       angle=0.0
+       // 実際のベクトルはカメラ方向を表しています。
+       lx=0.0
+       lz=-1.0
+       // カメラの XZ 位置
+       x=0.0
+       z=5.0
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       // 体の描画
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // 頭の描画
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // 目の描画
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+
+               glPopMatrix()
+
+       // 鼻の描画
+               glColor3f(1.0, 0.5 , 0.5)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0  / h 
+
+                       // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+                       // 行列のリセット
+               glLoadIdentity()
+
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45.0, ratio, 0.1, 100.0);
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func processNormalKeys
+               key = glutEventKey()
+
+               if key = 27
+                       shutdown()
+               ok
+
+
+
+       func renderScene
+
+               // 配色と深度バッファの消去
+
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+               // カメラの設定
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+                       // 地面の描画
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+                       // 36 体の雪だるまを描画
+               for i = -3 to 2
+                       for  j=-3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0,0,j * 10.0)                 
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+
+
+       func processSpecialKeys 
+
+               key = glutEventKey()
+
+               fraction = 0.1
+
+               switch key 
+                       on GLUT_KEY_LEFT 
+                               angle -= 0.01
+                               lx = sin(angle)
+                               lz = -cos(angle)
+                       on GLUT_KEY_RIGHT 
+                               angle += 0.01
+                               lx = sin(angle)
+                               lz = -cos(angle)
+                       on GLUT_KEY_UP 
+                               x += lx * fraction
+                               z += lz * fraction
+                       on GLUT_KEY_DOWN 
+                               x -= lx * fraction
+                               z -= lz * fraction
+               off
+
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 7")
+
+               // コールバックの登録
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:processSpecialKeys)
+
+               // OpenGL の初期化
+               glEnable(GL_DEPTH_TEST)
+
+               // GLUT のイベント処理サイクルへ入ります。
+               glutMainLoop()
+
+スクリーンショット:
+
+.. image:: freeglutshot6.png
+       :alt: RingFreeGLUT
+
+その他の用例:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // カメラ方向の回転角度
+       angle = 0.0
+
+       // 実際のベクトルはカメラ方向を表しています。
+       lx=0.0 lz=-1.0
+
+       // カメラの XZ 位置
+       x=0.0 z=5.0
+       // キーの状態
+       // キーを押していない時は変数は 0 です。
+       deltaAngle = 0.0
+       deltaMove = 0
+
+       func changeSize 
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       // 体の描画
+
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // 頭の描画
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // 目の描画
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // 鼻の描画
+               glColor3f(1.0, 0.5 , 0.5)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func computeDir deltaAngle
+
+               angle += deltaAngle
+               lx = sin(angle)
+               lz = -cos(angle)
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               if deltaAngle
+                       computeDir(deltaAngle)
+               ok
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+               // カメラの設定
+               gluLookAt(      x, 1.0, z,
+                                       x+lx, 1.0,  z+lz,
+                                       0.0, 1.0,  0.0)
+
+       // 地面の描画
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // 36 体の雪だるまを描画
+
+               for i = -3 to 2
+                       for j=-3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0,0,j * 10.0)
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+       func pressKey 
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_LEFT 
+                                deltaAngle = -0.01 
+                       on GLUT_KEY_RIGHT 
+                                deltaAngle = 0.01 
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5 
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5  
+               off
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_LEFT  
+                               deltaAngle = 0.0
+                       on GLUT_KEY_RIGHT  
+                               deltaAngle = 0.0
+                       on GLUT_KEY_UP  
+                               deltaMove = 0
+                       on GLUT_KEY_DOWN  
+                               deltaMove = 0
+               off
+
+       func main 
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 8")
+
+               // コールバックの登録
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutSpecialFunc(:pressKey)
+
+               // これは新しいエントリーです。
+               glutIgnoreKeyRepeat(1)
+               glutSpecialUpFunc(:releaseKey)
+
+               // OpenGL の初期化
+               glEnable(GL_DEPTH_TEST)
+
+               // GLUT のイベント処理サイクルへ入ります。
+               glutMainLoop()
+        
+        
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); マウスイベント
+
+マウスイベント
+==============
+
+用例:
+
+.. code-block:: ring 
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // カメラ方向の回転角度
+       angle = 0.0
+
+       // 実際のベクトルはカメラ方向を表しています。
+       lx=0.0 lz=-1.0
+
+       // カメラの XZ 位置
+       x=0.0  z=5.0
+
+       // キーの状態
+       // キーを押していない時は変数は 0 です。
+       deltaAngle = 0.0
+       deltaMove = 0.0
+       xOrigin = -1
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func drawSnowMan
+
+               glColor3f(1.0, 1.0, 1.0)
+
+               // 体の描画
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+               // 頭の描画
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+               // 目の描画
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+               // 鼻の描画
+               glColor3f(1.0, 0.5 , 0.5)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+               // カメラの設定
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // 地面の描画
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+               // 36 体の雪だるまを描画
+
+               for i = -3 to 2
+                       for  j=-3 to 2
+                                                glPushMatrix()
+                                                glTranslatef(i*10.0,0,j * 10.0)
+                                                drawSnowMan()
+                                                glPopMatrix()
+                        next
+               next
+               glutSwapBuffers()
+
+       func processNormalKeys
+
+               key  = glutEventKey()
+
+                       if key = 27
+                                shutdown()
+                       ok
+
+
+       func pressKey
+               key  = glutEventKey()
+
+                  switch key
+                                on GLUT_KEY_UP
+                                       deltaMove = 0.5 
+                                on GLUT_KEY_DOWN
+                                        deltaMove = -0.5 
+                  off
+
+
+       func releaseKey 
+               key  = glutEventKey()
+                       switch key
+                                on GLUT_KEY_UP 
+                                       deltaMove = 0
+                                on GLUT_KEY_DOWN 
+                                       deltaMove = 0
+                       off
+
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+                       // これは左ボタンを押したときのみ true になります。
+                       if xOrigin >= 0
+
+                       // deltaAngle の更新
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // カメラ方向の更新
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+               
+               
+
+       func mouseButton
+
+               button  = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ動作開始になります。
+               if button = GLUT_LEFT_BUTTON
+                       // ボタンを離したとき
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1            
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+                       fflush(stdout)
+               ok
+
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 9")
+
+               // コールバックの登録
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+                // ここには二つの新しい関数があります。
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL の初期化
+               glEnable(GL_DEPTH_TEST)
+
+               // GLUT のイベント処理サイクルへ入ります。
+               glutMainLoop()
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); メニューイベント
+
+メニューイベント
+================
+
+用例:
+
+.. code-block:: ring 
+               
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // カメラ方向の回転角度
+       angle = 0.0
+
+       // 実際のベクトルはカメラ方向を表しています。
+       lx=0.0 lz=-1.0
+
+       // カメラの XZ 位置
+       x=0.0  z=5.0
+
+       // キーの状態
+       // キーを押していない時は変数は 0 です。
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // メニューを定義するための定数
+
+
+       // RingFreeGLUT では - メニューの項目ごとに異なる ID を指定してください。
+       C_RED = 1
+       C_GREEN = 2
+       C_BLUE  = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       C_SHRINK = 7
+       C_NORMAL = 8
+
+       // ポップアップメニューの定義
+       fillMenu= 0  
+       shrinkMenu= 0
+       mainMenu=0 
+       colorMenu=0
+
+       // 鼻の配色
+       red = 1.0  blue=0.5  green=0.5
+
+       // 雪だるまの大きさ
+       scale = 1.0
+
+       // メニューの状態
+       menuFlag = 0
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // 体の描画
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // 頭の描画
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // 目の描画
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // 鼻の描画
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+               // カメラの設定
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+       // 地面の描画
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // 36 体の雪だるまを描画
+
+               for  i = -3 to 2
+                       for  j = -3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               glPopMatrix()
+                       next
+               next
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             キーボード
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               glutSetMenu(mainMenu)
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(shrinkMenu)
+                               shutdown()
+
+                       on 's'
+                               if not menuFlag
+                                 glutChangeToSubMenu(2,"Shrink",shrinkMenu)
+                               ok
+                       on 'c'
+                               if not menuFlag
+                                       glutChangeToSubMenu(2,"Color",colorMenu)
+                               ok
+               off
+               if key = 27
+                       shutdown()
+               ok
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             マウス
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ true になります。
+               if xOrigin >= 0
+
+                       // deltaAngle の更新
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // カメラ方向の更新
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ動作開始になります。
+               if button = GLUT_LEFT_BUTTON
+                       // ボタンを離したとき
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             メニュー
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               if  status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu
+
+               // ここにはなにもありません。
+               // 動作は全てサブメニューから行います。
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                                glPolygonMode(GL_FRONT, GL_FILL) 
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE) 
+               off
+
+
+       func processShrinkMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_SHRINK
+                               scale = 0.5
+                       on C_NORMAL
+                                scale = 1.0
+               off
+
+
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               shrinkMenu = glutCreateMenu(:processShrinkMenu)
+
+               glutAddMenuEntry("Shrink",C_SHRINK)
+               glutAddMenuEntry("NORMAL",C_NORMAL)
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED)
+               glutAddMenuEntry("Blue",C_BLUE)
+               glutAddMenuEntry("Green",C_GREEN)
+               glutAddMenuEntry("Orange",C_ORANGE)
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+                // 右ボタンでメニューへ接続
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // これでアクティブなメニューであるかどうか検知できるようにします。
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             メイン
+       // -----------------------------------
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 10")
+
+               // コールバックの登録
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+                // ここには二つの新しい関数があります。
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL の初期化
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // メニューの初期化
+               createPopupMenus()
+
+               // GLUT のイベント処理サイクルへ入ります。
+               glutMainLoop()
+
+スクリーンショット:
+
+.. image:: freeglutshot7.png
+       :alt: RingFreeGLUT
+
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); フォントの用法
+
+フォントの用法
+==============
+
+用例:
+
+.. code-block:: ring 
+               
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       // カメラ方向の回転角度
+       angle = 0.0
+
+       // 実際のベクトルはカメラ方向を表しています。
+       lx=0.0 lz=-1.0
+
+       // カメラの XZ 位置
+       x=0.0  z=5.0
+
+       // キーの状態
+       // キーを押していない時は変数は 0 です。
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // メニューを定義するための定数
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // ポップアップメニューの定義
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // 鼻の配色
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // 雪だるまの大きさ
+       scale = 1.0
+
+       // メニューの状態
+       menuFlag = 0
+
+       // デフォルトのフォント
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // 体の描画
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // 頭の描画
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // 目の描画
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // 鼻の描画
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+
+               // カメラの設定
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // 地面の描画
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // 36 体の雪だるまを描画
+               for i = -3 to 2
+                       for j = -3 to 2
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*6+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             キーボード
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             マウス
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ true になります。
+               if xOrigin >= 0
+
+                       // deltaAngle の更新
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // カメラ方向の更新
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ動作開始になります。
+               if button = GLUT_LEFT_BUTTON
+                       // ボタンを離したとき
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             メニュー
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // ここにはなにもありません。
+               // 動作は全てサブメニューから行います。
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+                // 右ボタンでメニューへ接続
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // これでアクティブなメニューであるかどうか検知できるようにします。
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             メイン
+       // -----------------------------------
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test 11")
+
+               // コールバックの登録
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+                // ここには二つの新しい関数があります。
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL の初期化
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // メニューの初期化
+               createPopupMenus()
+
+               // GLUT のイベント処理サイクルへ入ります。
+               glutMainLoop()
+
+スクリーンショット:
+
+.. image:: freeglutshot8.png
+       :alt: RingFreeGLUT
+
+       
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); 一秒あたりのフレーム数
+
+一秒あたりのフレーム数
+======================
+
+用例:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // カメラ方向の回転角度
+       angle = 0.0
+
+       // 実際のベクトルはカメラ方向を表しています。
+       lx=0.0 lz=-1.0
+
+       // カメラの XZ 位置
+       x=0.0  z=5.0
+
+       // キーの状態
+       // キーを押していない時は変数は 0 です。
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // メニューを定義するための定数
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // ポップアップメニューの定義
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // 鼻の配色
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // 雪だるまの大きさ
+       scale = 1.0
+
+       // メニューの状態
+       menuFlag = 0
+
+       // デフォルトのフォント
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       // ウィンドウの幅と高さ
+       h = 0
+       w = 0
+
+       // 一秒あたりのフレーム数を計算するための変数
+       frame=0
+       time=0
+       timebase=0
+       s = ""
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+                // 正しい遠近法の設定
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // 体の描画
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // 頭の描画
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // 目の描画
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // 鼻の描画
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+       func renderStrokeFontString x,y,z,font,string
+               glPushMatrix()
+               glTranslatef(x, y,z)
+               glScalef(0.002, 0.002, 0.002)
+               for c in string
+                       glutStrokeCharacter(font, Ascii(c));
+               next
+               glPopMatrix()
+
+
+       func restorePerspectiveProjection
+
+               glMatrixMode(GL_PROJECTION)
+               // 以前の投射行列へ復帰
+               glPopMatrix()
+
+               // Modelview モードの復帰
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func setOrthographicProjection
+
+               // 投射モードの切り替え
+               glMatrixMode(GL_PROJECTION)
+
+               // 透視図の設定を有する
+               // 以前の行列を保存します。
+               glPushMatrix()
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // 2D 正投射の設定
+               gluOrtho2D(0, w, h, 0)
+
+               // modelview モードへ復帰切り替え
+               glMatrixMode(GL_MODELVIEW)
+
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+
+               // カメラの設定
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // 地面の描画
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // 9 体の雪だるまを描画
+               for i = -3 to -1
+                       for j = -3 to -1
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*3+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               // 一秒あたりのフレーム数を計算するためのコード
+               frame++
+
+               time=glutGet(GLUT_ELAPSED_TIME)
+               if time - timebase > 1000 
+                       s = "RingFreeGLUT - FPS: " + (frame*1000.0/(time-timebase))
+                       timebase = time
+                       frame = 0
+               ok
+
+               // ビットマップフォントで文字列 (fps) を表示するためのコード
+               setOrthographicProjection()
+
+               glPushMatrix()
+               glLoadIdentity()
+               renderBitmapString(5,30,0,GLUT_BITMAP_HELVETICA_18,s)
+               glPopMatrix()
+
+               restorePerspectiveProjection()
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             キーボード
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             マウス
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ true になります。
+               if xOrigin >= 0
+
+                       // deltaAngle の更新
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // カメラ方向の更新
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ動作開始になります。
+               if button = GLUT_LEFT_BUTTON
+                       // ボタンを離したとき
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             メニュー
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // ここにはなにもありません。
+               // 動作は全てサブメニューから行います。
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+                // 右ボタンでメニューへ接続
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // これでアクティブなメニューであるかどうか検知できるようにします。
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             メイン
+       // -----------------------------------
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test - 9 SnowMan")
+
+               // コールバックの登録
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+                // ここには二つの新しい関数があります。
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL の初期化
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // メニューの初期化
+               createPopupMenus()
+
+               // GLUT のイベント処理サイクルへ入ります。
+               glutMainLoop()
+
+
+スクリーンショット:
+
+一枚目のスクリーンショット:
+
+.. image:: ring15freeglut.png
+       :alt: RingFreeGLUT
+
+
+二枚目のスクリーンショット:
+
+.. image:: ring15freeglut2.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス); RingOpenGL と RingFreeGLUT を使用した立方体を作成するには
+
+RingOpenGL と RingFreeGLUT を使用した立方体を作成するには
+=========================================================
+
+用例:
+
+.. code-block:: ring
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // ----------------------------------------------------------
+       // グローバル変数
+       // ----------------------------------------------------------
+       rotate_y=0 
+       rotate_x=0
+        
+       // ----------------------------------------------------------
+       // display() コールバック関数
+       // ----------------------------------------------------------
+       func display
+        
+         // 画面と Z バッファの消去
+         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
+        
+         // 変換のリセット
+         glLoadIdentity()
+        
+         // rotate_x および rotate_y のユーザによる変更をリセットします。
+         glRotatef( rotate_x, 1.0, 0.0, 0.0 )
+         glRotatef( rotate_y, 0.0, 1.0, 0.0 )
+        
+         // 多色面 - 前
+         glBegin(GL_POLYGON)
+        
+         glColor3f( 1.0, 0.0, 0.0 )     glVertex3f(  0.5, -0.5, -0.5 )      # P1 is red
+         glColor3f( 0.0, 1.0, 0.0 )     glVertex3f(  0.5,  0.5, -0.5 )      # P2 is green
+         glColor3f( 0.0, 0.0, 1.0 )     glVertex3f( -0.5,  0.5, -0.5 )      # P3 is blue
+         glColor3f( 1.0, 0.0, 1.0 )     glVertex3f( -0.5, -0.5, -0.5 )      # P4 is purple
+        
+         glEnd()
+        
+         // 白面 - 後
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  1.0, 1.0 )
+         glVertex3f(  0.5, -0.5, 0.5 )
+         glVertex3f(  0.5,  0.5, 0.5 )
+         glVertex3f( -0.5,  0.5, 0.5 )
+         glVertex3f( -0.5, -0.5, 0.5 )
+         glEnd()
+        
+         // 紫面 - 右
+         glBegin(GL_POLYGON)
+         glColor3f(  1.0,  0.0,  1.0 )
+         glVertex3f( 0.5, -0.5, -0.5 )
+         glVertex3f( 0.5,  0.5, -0.5 )
+         glVertex3f( 0.5,  0.5,  0.5 )
+         glVertex3f( 0.5, -0.5,  0.5 )
+         glEnd()
+        
+         // 緑面 - 左
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  1.0,  0.0 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         // 青面 - 上
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  0.0,  1.0 )
+         glVertex3f(  0.5,  0.5,  0.5 )
+         glVertex3f(  0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glEnd()
+        
+         // 赤面 - 下
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  0.0,  0.0 )
+         glVertex3f(  0.5, -0.5, -0.5 )
+         glVertex3f(  0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         glFlush()
+         glutSwapBuffers()
+        
+        
+       // ----------------------------------------------------------
+       // specialKeys() コールバック関数
+       // ----------------------------------------------------------
+       func specialKeys
+
+               key = glutEventKey()
+        
+         // 右矢印 - 回転を五度増分します。
+               switch Key
+
+               on GLUT_KEY_RIGHT
+                       rotate_y += 5
+        
+               // 左矢印 - 回転を五度減分します。
+               on GLUT_KEY_LEFT
+                       rotate_y -= 5
+        
+               on GLUT_KEY_UP
+                       rotate_x += 5
+        
+               on GLUT_KEY_DOWN
+                       rotate_x -= 5
+        
+               off
+
+         //  更新の要求
+         glutPostRedisplay()
+        
+
+        
+       // ----------------------------------------------------------
+       // main() 関数
+       // ----------------------------------------------------------
+       func main
+        
+         // GLUT の初期化とユーザ仮引数の処理
+         glutInit()
+        
+         // トゥルーカラーのウィンドウのために Z-バッファによるダブルバッファを要求します。
+         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
+        
+         // ウィンドウの作成
+         glutCreateWindow("Awesome Cube")
+        
+         // Z バッファの深度テストを有効にします。
+         glEnable(GL_DEPTH_TEST)
+        
+         // コールバック関数
+         glutDisplayFunc(:display)
+         glutSpecialFunc(:specialKeys)
+        
+         // イベントに関する GLUT への制御を渡します。
+         glutMainLoop()
+        
+         // OS へ戻ります。
+
+
+スクリーンショット:
+
+.. image:: ring15opengl.png
+       :alt: RingOpenGL
+
diff --git a/docs/ja-jp/source/usingopengl2.txt b/docs/ja-jp/source/usingopengl2.txt
new file mode 100644 (file)
index 0000000..3c18164
--- /dev/null
@@ -0,0 +1,1114 @@
+.. index:: 
+       single: RingOpenGL と RingAllegro の用法 (3D グラフィックス); はじめに
+
+====================================================
+RingOpenGL と RingAllegro の用法 (3D グラフィックス)
+====================================================
+
+
+RingOpenGL と RingAllegro の用法を学びます。
+
+
+.. index:: 
+       pair: RingOpenGL と RingAllegro の用法 (3D グラフィックス); 3D 立方体とテクスチャ
+
+3D 立方体とテクスチャ
+=====================
+
+ソースコード:
+
+.. code-block:: ring
+
+       # ライブラリの読み込み
+               load "gamelib.ring"             # RingAllegro ライブラリ
+               load "opengl21lib.ring"         # RingOpenGL  ライブラリ
+
+       #==============================================================
+       # macOS への対応
+               al_run_main()   
+               func al_game_start      # al_run_main() から呼び出されます。
+                       main()          # main 関数本体を呼び出します。
+       #==============================================================
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Ring Cube"
+
+               bitmap texture
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("ring.bmp")
+                       texture = al_get_opengl_texture(bitmap)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+
+               func drawScene
+
+                       w = 800 h = 600
+                       ratio =  w / h
+
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+
+                       gluPerspective(45,ratio,1,100)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)                                                 
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(0.0,0.0,-5.0)
+
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+
+                       glBindTexture(GL_TEXTURE_2D, texture)
+
+                       glBegin(GL_QUADS)
+                               // 前面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // 背面
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // 上面
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // 底面
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               // 右面
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               // 左面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+                       xrot += 0.3
+                       yrot += 0.2
+                       zrot += 0.4
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+スクリーンショット:
+
+.. image:: ringcube3d.png
+       :alt: Ring Cube
+
+.. index:: 
+       pair: RingOpenGL と RingAllegro の用法 (3D グラフィックス); 複数の立方体
+
+複数の立方体
+============
+
+スクリーンショット:
+
+.. code-block:: ring
+
+       # ライブラリの読み込み
+               load "gamelib.ring"             # RingAllegro ライブラリ
+               load "opengl21lib.ring"         # RingOpenGL ライブラリ
+
+       #==============================================================
+       # macOS への対応
+               al_run_main()   
+               func al_game_start      # al_run_main() により呼び出されます。
+                       main()          # main 関数本体を呼び出します。
+       #==============================================================
+
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Many Cubes"
+
+               bitmap bitmap2 bitmap3
+               texture texture2 texture3
+
+               fps = 120
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               nPerspective = 100
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("sky1.jpg")
+                       texture = al_get_opengl_texture(bitmap)
+
+                       bitmap2 = al_load_bitmap("sky2.jpg")
+                       texture2 = al_get_opengl_texture(bitmap2)
+
+                       bitmap3 = al_load_bitmap("sky3.jpg")
+                       texture3 = al_get_opengl_texture(bitmap3)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_bitmap(bitmap2)
+                       al_destroy_bitmap(bitmap3)
+
+               func drawScene
+
+                       prepare()
+                       cubes()
+                       rotate()
+
+               func Prepare
+                       w = 800 h = 600
+                       ratio =  w / h
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+                       gluPerspective(-nPerspective,ratio,1,nPerspective)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)         
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               func Cubes
+                       cube(5,-3.4,-5,:sky1)
+                       cube(0,-3,-5,:sky1)
+                       cube(-5,-3,-5,:sky1)
+                       cube(5,0.5,-5,:sky2)
+                       cube(0,0.5,-5,:sky2)
+                       cube(-5,0.5,-5,:sky2)
+                       cube(5,4,-5,:sky3)
+                       cube(0,4,-5,:sky3)
+                       cube(-5,4,-5,:sky3)
+
+               func Rotate 
+                       xrot += 0.3 * 5
+                       yrot += 0.2 * 5
+                       zrot += 0.4 * 5
+                       nPerspective += 0.5
+
+
+               func cube(x,y,z,nTexture)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(x,y,z)
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+                       drawcube(nTexture)
+
+               func drawcube(cTexture) 
+
+                       switch cTexture
+                               on :sky1
+                                       glBindTexture(GL_TEXTURE_2D, texture)
+                               on :sky2
+                                       glBindTexture(GL_TEXTURE_2D, texture2)
+                               on :sky3
+                                       glBindTexture(GL_TEXTURE_2D, texture3)
+                       off
+
+
+                       glBegin(GL_QUADS)
+                               // 前面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // 背面
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // 上面
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // 底面
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                        
+                               // 右面
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                
+                               // 左面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+
+スクリーンショット:
+
+.. image:: manycubes.png
+       :alt: 複数の立方体
+
+.. index:: 
+       pair: RingOpenGL と RingAllegro の用法 (3D グラフィックス); TicTacToe 3D ゲーム
+
+TicTacToe 3D ゲーム
+===================
+
+
+ソースコード:
+
+.. code-block:: ring
+
+
+       # ライブラリの読み込み
+               load "gamelib.ring"             # RingAllegro ライブラリ
+               load "opengl21lib.ring"         # RingOpenGL ライブラリ
+
+       #==============================================================
+       # macOS への対応
+               al_run_main()   
+               func al_game_start      # al_run_main() により呼び出されます。
+                       main()          # main 関数本体を呼び出します。
+       #==============================================================
+
+       func main
+               new TicTacToe3D {
+                       start()
+               }
+
+       class TicTacToe3D from GameLogic
+
+               FPS = 60
+               TITLE = "TicTacToe 3D"
+
+               oBackground = new GameBackground
+               oGameSound = new GameSound
+               oGameCube = new GameCube
+               oGameOver = new GameOver
+               oGameInterface = new GameInterface 
+
+               func loadresources
+                       oGameOver.loadresources()
+                       oGameSound.loadresources()
+                       oBackGround.loadresources()
+                       oGameCube.loadresources()
+
+               func destroyResources
+                       oGameOver.destroyResources()
+                       oGameSound.destroyResources()
+                       oBackGround.destroyResources()
+                       oGameCube.destroyResources()
+
+               func drawScene
+                       oBackground.update()
+                       oGameInterface.update(self)
+
+               func MouseClickEvent
+                       oGameInterface.MouseClickEvent(self)
+
+       class GameInterface 
+
+               func Update oGame
+                       prepare()
+                       cubes(oGame)
+
+               func Prepare 
+                       w = 1024 h = 768
+                       ratio =  w / h
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+                       gluPerspective(-120,ratio,1,120)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)         
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+               func Cubes oGame
+                       oGame.oGameCube {
+                               aGameMap = oGame.aGameMap 
+                               cube( 5  , -3 , -5  , aGameMap[1][1] )
+                               cube( 0  , -3 , -5  , aGameMap[1][2] )
+                               cube( -5 , -3 , -5  , aGameMap[1][3] )
+                               cube( 5  , 1  , -5  , aGameMap[2][1] )
+                               cube( 0  , 1  , -5  , aGameMap[2][2] )
+                               cube( -5 , 1  , -5  , aGameMap[2][3] )
+                               cube( 5  , 5  , -5  , aGameMap[3][1] )
+                               cube( 0  , 5  , -5  , aGameMap[3][2] )
+                               cube( -5 , 5  , -5  , aGameMap[3][3] )
+                               rotate()
+                       }
+
+               func MouseClickEvent oGame
+                       oGame {
+                               aBtn = Point2Button(Mouse_X,Mouse_Y)
+                               nRow = aBtn[1]
+                               nCol = aBtn[2]
+                               if nRow != 0 and nCol != 0      
+                                       if aGameMap[nRow][nCol] = :n
+                                               aGameMap[nRow][nCol] = cActivePlayer
+                                               ChangeActivePlayer()
+                                               CheckGameOver()
+                                       ok                      
+                               ok
+                       }
+
+       Class GameLogic from GraphicsAppBase
+
+               aGameMap = [
+                       [ :n , :n , :n ] ,
+                       [ :n , :n , :n ] ,
+                       [ :n , :n , :n ]
+               ]
+
+               aGameButtons = [                        # x1,y1,x2,y2
+                       [176,88,375,261],               # [1,1]
+                       [423,88,591,261],               # [1,2]
+                       [645,88,876,261],               # [1,3]
+                       [176,282,375,428],              # [2,1]
+                       [423,282,591,428],              # [2,2]
+                       [645,282,876,428],              # [2,3]
+                       [176,454,375,678],              # [3,1]
+                       [423,454,591,678],              # [3,2]
+                       [645,454,876,678]               # [3,3]
+               ]
+
+               cActivePlayer = :x
+
+               func point2button x,y
+                       nRow = 0
+                       nCol = 0
+                       for t = 1 to len(aGameButtons) 
+                               rect = aGameButtons[t]
+                               if x >= rect[1] and x <= rect[3] and
+                                  y >= rect[2] and y <= rect[4] 
+                                               switch t
+                                                       on 1  nRow = 1  nCol = 1
+                                                       on 2  nRow = 1  nCol = 2
+                                                       on 3  nRow = 1  nCol = 3
+                                                       on 4  nRow = 2  nCol = 1
+                                                       on 5  nRow = 2  nCol = 2
+                                                       on 6  nRow = 2  nCol = 3
+                                                       on 7  nRow = 3  nCol = 1
+                                                       on 8  nRow = 3  nCol = 2
+                                                       on 9  nRow = 3  nCol = 3
+                                               off
+                                               exit 
+                               ok
+                       next 
+                       return [nRow,nCol]
+
+               func ChangeActivePlayer()
+                       if cActivePlayer = :x
+                               cActivePlayer = :o
+                       else 
+                               cActivePlayer = :x
+                       ok
+
+               func CheckGameOver
+                       aList = [
+                               aGameMap[1][1],
+                               aGameMap[1][2],
+                               aGameMap[1][3],
+                               aGameMap[2][1],
+                               aGameMap[2][2],
+                               aGameMap[2][3],
+                               aGameMap[3][1],
+                               aGameMap[3][2],
+                               aGameMap[3][3]
+                       ]
+                       for item in aList 
+                               switch item 
+                                       on :x   item = 1
+                                       on :o   item = 2
+                                       on :n   item = 0
+                               off
+                       next
+                       nStatus = CheckWinner(aList)
+                       if nStatus 
+                               oGameOver {
+                                       Switch nStatus
+                                               on 1 Player1Win(this)  
+                                               on 2 Player2Win(this)  
+                                               on 3 NoOneWin(this)   
+                                       off
+                               }
+                               refreshGame()
+                       ok
+
+               func refreshGame
+                       aGameMap = [
+                               [ :n , :n , :n ] ,
+                               [ :n , :n , :n ] ,
+                               [ :n , :n , :n ]
+                       ]
+                       cActivePlayer = :x
+
+               func CheckWinner lst
+                       // 垂直の確認
+                       for v=1 to 9 step 3
+                               if lst[v]!=0 and lst[v+1]!=0 and lst[v+2]!=0
+                                       if lst[v]=lst[v+1] and lst[v+1]=lst[v+2]
+                                               return lst[v]
+                                       ok
+                               ok
+                       next
+                       // 水平
+                       for h=1 to 3
+                               if lst[h]!=0 and lst[h+3]!=0 and lst[h+6]!=0
+                                       if lst[h]=lst[h+3] and lst[h+3]=lst[h+6]
+                                               return lst[h]
+                                       ok
+                               ok
+                       next
+                       // 十字型
+                       if lst[1]!=0 and lst[5]!=0 and lst[9]!=0
+                               if lst[1]=lst[5] and lst[5]=lst[9] return lst[1] ok
+                       ok
+                       if lst[3]!=0 and lst[5]!=0 and lst[7]!=0
+                               if lst[3]=lst[5] and lst[5]=lst[7] return lst[3] ok
+                       ok
+                       // 枕木型
+                       tie=true
+                       for i=1 to 9
+                               if lst[i]=0 tie=false exit ok
+                       next
+                       if tie=true return 3 ok return 0
+
+
+
+       class GameOver
+
+               font bitmap
+
+               func loadresources
+                       font = al_load_ttf_font("font/pirulen.ttf",54,0 )
+                       bitmap = al_load_bitmap("image/ballon.png")
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_font(font)
+
+               func Player1Win oGame
+                       showMsg(oGame,80,430,"Good job X you won!")
+                       
+               func Player2Win oGame
+                       showMsg(oGame,80,430,"Good job O you won!")
+               
+               func NoOneWin oGame
+                       showMsg(oGame,150,430,"Oh no it's a tie!")
+                       
+               func ShowMsg oGame,x,y,cMsg
+                       oGame {
+                               drawScene()
+                               al_flip_display()
+                               al_rest(0.3)
+                               newdisplay = al_create_display(SCREEN_W,SCREEN_H)
+                               al_set_window_title(newdisplay,TITLE)
+                               al_clear_to_color(al_map_rgb(255,255,255))
+                               al_draw_bitmap(this.bitmap,200,50,1)
+                               al_draw_text(this.font,
+                                        al_map_rgb(0,0,255), x,y,
+                                        ALLEGRO_ALIGN_LEFT,cMsg)
+                               al_flip_display()
+                               al_rest(2)
+                               al_destroy_display(newdisplay)
+                               al_set_target_backbuffer(display)
+                       }
+
+       class GameCube
+
+               bitmap bitmap2 bitmap3 
+               textureX textureO textureN
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+                       bitmap = al_load_bitmap("image/o.png")
+                       textureO = al_get_opengl_texture(bitmap)
+                       bitmap2 = al_load_bitmap("image/x.png")
+                       textureX = al_get_opengl_texture(bitmap2)
+                       bitmap3 = al_load_bitmap("image/empty.png")
+                       textureN = al_get_opengl_texture(bitmap3)
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+                       al_destroy_bitmap(bitmap2)
+                       al_destroy_bitmap(bitmap3)
+
+               func cube(x,y,z,nTexture)
+                       glLoadIdentity()                                                                        
+                       glTranslatef(x,y,z)
+                       glRotatef(xrot,1.0,0.0,0.0)
+                       glRotatef(yrot,0.0,1.0,0.0)
+                       glRotatef(zrot,0.0,0.0,1.0)
+                       setCubeTexture(nTexture)
+                       drawCube()
+
+               func setCubeTexture cTexture
+                       switch cTexture
+                               on :x
+                                       glBindTexture(GL_TEXTURE_2D, textureX)
+                               on :o
+                                       glBindTexture(GL_TEXTURE_2D, textureO)
+                               on :n
+                                       glBindTexture(GL_TEXTURE_2D, textureN)
+                       off
+
+               func Rotate 
+                       xrot += 0.3 * 5
+                       yrot += 0.2 * 5
+                       zrot += 0.4 * 5
+
+               func drawcube
+                       glBegin(GL_QUADS)
+                               // 前面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // 背面
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // 上面
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // 底面
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                        
+                               // 右面
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                
+                               // 左面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+
+       class GameBackground 
+
+               nBackX = 0
+               nBackY = 0
+               nBackDiffx = -1
+               nBackDiffy = -1
+               nBackMotion = 1
+               aBackMotionList = [
+                       [ -1, -1 ] ,            # 右下
+                       [ 0 , 1  ] ,            # 上
+                       [ -1, -1 ] ,            # 右下
+                       [ 0 , 1  ] ,            # 上
+                       [ 1 , -1 ] ,            # 左下
+                       [ 0 , 1  ] ,            # 上
+                       [ 1 , -1 ] ,            # 左下
+                       [ 0 , 1  ]                      # 上
+               ]
+
+               bitmap
+
+               func Update 
+                       draw()
+                       motion()
+
+               func draw
+                       al_draw_bitmap(bitmap,nBackX,nBackY,1)
+
+               func motion
+                       nBackX += nBackDiffx
+                       nBackY += nBackDiffy
+                       if (nBackY = -350) or (nBackY = 0)
+                               nBackMotion++
+                               if nBackMotion > len(aBackMotionList)
+                                       nBackMotion = 1
+                               ok
+                               nBackDiffx  = aBackMotionList[nBackMotion][1]
+                               nBackDiffy  = aBackMotionList[nBackMotion][2]
+                       ok
+
+               func loadResources
+                       bitmap = al_load_bitmap("image/back.jpg")
+
+               func destroyResources
+                       al_destroy_bitmap(bitmap)
+
+
+       class GameSound
+
+               sample sampleid
+
+               func loadresources
+                       sample = al_load_sample( "sound/music1.wav" )
+                       sampleid = al_new_allegro_sample_id()
+                       al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_LOOP,sampleid)
+
+               func destroyResources
+                       al_destroy_allegro_sample_id(sampleid)
+                       al_destroy_sample(sample)
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  
+               redraw                  = true
+               FPS                     = 60 
+               SCREEN_W                = 1024
+               SCREEN_H                = 700
+               KEY_UP                  = 1
+               KEY_DOWN                = 2
+               KEY_LEFT                = 3
+               KEY_RIGHT               = 4
+               Key                     = [false,false,false,false]
+               Mouse_X                 = 0
+               Mouse_Y                 = 0
+               TITLE                   = "Graphics Application"
+               PRINT_MOUSE_XY  = False
+
+               func start
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+                       al_init()
+                       al_init_font_addon()
+                       al_init_ttf_addon()
+                       al_init_image_addon()
+                       al_install_audio()
+                       al_init_acodec_addon()
+                       al_reserve_samples(1)
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+                       while true
+                               al_init_timeout(timeout, 0.06)
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       CloseEvent()
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                                       if PRINT_MOUSE_XY
+                                               see "x = " + mouse_x + nl
+                                               see "y = " + mouse_y + nl
+                                       ok
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       MouseClickEvent()
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+                       al_exit()
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+               func MouseClickEvent
+                       exit                    # イベントループから脱出
+
+               func CloseEvent
+                       exit                    # イベントループから脱出
+
+
+スクリーンショット:
+
+.. image:: tictactoe3d.png
+       :width: 450pt
+       :height: 350pt
+       :alt: TicTacToe 3D ゲーム
+
+
+.. index:: 
+       pair: RingOpenGL と RingAllegro の用法 (3D グラフィックス); その他の 3D サンプル
+
+その他の 3D サンプル
+====================
+
+サンプルは ring/samples/3D フォルダにあります。
+
+このスクリーンショットはトップダウン - 多層立方体のサンプルです。
+
+.. image:: more3dsamples.jpg
+       :alt: 3D サンプル
+
+このスクリーンショットはカメラのサンプルです。
+
+.. image:: more3dsamples2.jpg
+       :alt: カメラ
+
+このスクリーンショットはカメラと背景のサンプルです。
+
+開発者 : アズディン・レマル
+
+.. image:: cameraandbackground.png
+       :alt: カメラと背景のサンプル
+
+
diff --git a/docs/ja-jp/source/usingqdial.png b/docs/ja-jp/source/usingqdial.png
new file mode 100644 (file)
index 0000000..e91bca0
Binary files /dev/null and b/docs/ja-jp/source/usingqdial.png differ
diff --git a/docs/ja-jp/source/variables.txt b/docs/ja-jp/source/variables.txt
new file mode 100644 (file)
index 0000000..83f7366
--- /dev/null
@@ -0,0 +1,107 @@
+.. index:: 
+       single: 変数; はじめに
+
+====
+変数
+====
+
+新しい変数を作成するには、変数名と値を定義します。
+変数の型は値により決定します。
+同名変数の値を変更することで型も変更されます。
+
+文法:
+
+.. code-block:: ring
+       
+       <変数名> = <値>
+
+.. tip:: 
+       
+       ここでは、演算子 '=' は代入演算子として扱いますが、
+       この演算子は式の等価性を評価するために条件文でも使用します。
+
+.. note:: 
+       
+       変数は実際の値を有しています (参照ではありません)。
+       すでにリストやオブジェクトが変数にあっても、 
+       変数の値を変更すると、以前の古い値は削除されます。
+
+.. index:: 
+       pair: 変数; 動的型付け
+
+動的型付け
+==========
+
+Ring は `動的型付け <https://ja.wikipedia.org/wiki/動的型付け>`_ を使用する動的プログラミング言語です。
+
+.. code-block:: ring
+
+       x = "Hello"             # x は文字列です。
+       see x + nl
+       x = 5                   # x は数値です (int 型)。
+       see x + nl
+       x = 1.2                 # x は数値です (double 型)。
+       see x + nl
+       x = [1,2,3,4]           # x はリストです。
+       see x                   # リストの項目を表示します。
+       x = date()              # x は日付が入った文字列です。
+       see x + nl
+       x = time()              # x は時刻が入った文字列です。
+       see x + nl
+       x = true                # x は数値です (論理値 = 1)。
+       see x + nl
+       x = false               # x は数値です (論理値 = 0)。
+       see x + nl
+
+.. index:: 
+       pair: 変数; 深いコピー
+
+深いコピー
+==========
+
+代入演算子 '=' は変数を完全にコピーします。
+文字列と数値などの値のコピーに限らず、
+リストとオブジェクトも完全にコピーします。
+この処理は `深いコピー (Deep Copy) <http://en.wikipedia.org/wiki/Object_copy#Deep_copy>`_ です。
+
+
+.. code-block:: ring
+
+       list = [1,2,3,"four","five"]
+       list2 = list
+       list = []
+       See list        # 最初のリストを表示します - 項目を表示しません。
+       See "********" + nl
+       See list2       # 次のリストを表示します - 五項目あります。
+
+.. index:: 
+       pair: 変数; 弱い型付け
+
+弱い型付け
+==========
+
+Ring は `弱い型付け言語 <https://ja.wikipedia.org/wiki/型システム#強い型付けと弱い型付け>`_ であり、変換する手段があるときに、言語がデータ型 (文字列と数値など) の間で自動変換できることを意味します。
+
+変換規則:
+
+.. code-block:: ring
+
+       <数値> + <文字列> --> <数値>
+       <文字列> + <数値> --> <文字列>
+
+.. note:: 
+
+       演算子 '+' は算術演算子、または文字列の連結にも
+       使用します。
+
+用例:
+
+.. code-block:: ring
+
+       x = 10                  # x は数値です。
+       y = "20"                # y は文字列です。
+       sum = x + y             # sum は数値です (y は数値へ変換します)。
+       Msg = "Sum = " + sum    # Msg は文字列 (sum は文字列へ変換します)。
+       see Msg + nl
+
+
diff --git a/docs/ja-jp/source/videomusicplayer.jpg b/docs/ja-jp/source/videomusicplayer.jpg
new file mode 100644 (file)
index 0000000..47cf0aa
Binary files /dev/null and b/docs/ja-jp/source/videomusicplayer.jpg differ
diff --git a/docs/ja-jp/source/visualsrc1.jpg b/docs/ja-jp/source/visualsrc1.jpg
new file mode 100644 (file)
index 0000000..33cad2a
Binary files /dev/null and b/docs/ja-jp/source/visualsrc1.jpg differ
diff --git a/docs/ja-jp/source/visualsrc2.jpg b/docs/ja-jp/source/visualsrc2.jpg
new file mode 100644 (file)
index 0000000..26c4484
Binary files /dev/null and b/docs/ja-jp/source/visualsrc2.jpg differ
diff --git a/docs/ja-jp/source/web.txt b/docs/ja-jp/source/web.txt
new file mode 100644 (file)
index 0000000..12cbc24
--- /dev/null
@@ -0,0 +1,2403 @@
+.. index:: 
+       single: ウェブ開発 (CGI ライブラリ); はじめに
+
+===========================
+ウェブ開発 (CGI ライブラリ)
+===========================
+
+Ring で記述された CGI ライブラリでウェブアプリケーションを開発する方法を学びます。
+
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); Apache ウェブサーバーの設定
+
+Apache ウェブサーバーの設定
+===========================
+
+CGI の実行に対応しているウェブサーバーであれば Ring を使えます。
+
+Apache HTTP サーバーでの Ring の用法を学びます。
+
+こちらから Apache をダウンロードできます。 : http://httpd.apache.org/
+
+または、ほかのプロジェクトに同梱されているものを入手できます。
+
+XAMPP : https://www.apachefriends.org/download.html
+
+インストール後にファイルを開きます:
+
+.. code-block:: none
+
+       xampp\apache\conf\httpd.conf
+
+検索します。
+
+.. code-block:: none
+
+       <Directory />
+
+この行を追加します。
+
+.. code-block:: none
+       
+       Options FollowSymLinks +ExecCGI
+
+つまり、こうなります。
+
+.. code-block:: none
+
+       <Directory />
+       Options FollowSymLinks +ExecCGI
+
+この行を検索してコメントアウトされていないことを確認してください。
+
+.. code-block:: none
+
+       LoadModule cgi_module modules/mod_cgi.so
+
+検索 : AddHandler cgi-script
+
+CGI 拡張機能を拡張子 ”.ring” へ対応させます。
+
+用例:
+
+.. code-block:: none
+
+       AddHandler cgi-script .cgi .ring
+
+用例:
+
+.. code-block:: none
+
+       AddHandler cgi-script .cgi .pl .asp .ring
+
+サーバーの実行と開始をします。
+
+Web サーバーが対応しているディレクトリへウェブアプリケーションを作成します。
+
+用例: 
+
+.. code-block:: none
+
+       Apache2.2\htdocs\mywebapplicationfolder
+
+用例: 
+
+.. code-block:: none
+
+       xampp\htdocs\mywebapplicationfolder
+
+この行をソースコードファイル (\*.ring) の内側に追加します。
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+.. note:: 前述の行はシステムにある ring.exe のパスに基づいて変更してください。
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); Ring CGI - Hello World  プログラム
+
+Ring CGI - Hello World  プログラム
+==================================
+
+このプログラムは、 Hello World プログラムです。
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       See "content-type: text/html" +nl+nl+
+           "Hello World!" + nl
+
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); ウェブライブラリ版 Hello World プログラム
+
+ウェブライブラリ版 Hello World プログラム
+=========================================
+
+ウェブライブラリで手軽に CGI ウェブアプリケーションを記述できます。
+
+用例① :
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       Load "weblib.ring"
+
+       Import System.Web
+
+       New Page 
+       {
+               Text("Hello World!")
+       }
+
+
+用例② :
+
+.. code-block:: ring
+
+       #!ring -cgi
+
+       Load "weblib.ring"
+
+       Import System.Web
+
+       WebPage() 
+       {
+               Text("Hello World!")
+       }
+
+.. tip:: 用例①と用例②の違いは、新しいステートメントでオブジェクトを作成するのではなく、
+       WebPage() 関数でページオブジェクトを返すことです。
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); ウェブライブラリの機能
+
+ウェブライブラリの機能
+======================
+
+この機能は手軽にウェブアプリケーションを作成するために、ウェブライブラリにより提供されています。
+
+* 関数版 HTML ページ
+* オブジェクト版 HTML ページ
+* HTTP Get
+* HTTP Post
+* ファイルのアップロード
+* URL エンコード
+* テンプレート
+* CRUD MVC のサンプル
+* ユーザのロジックと登録のサンプル
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); HTTP Get の用例
+
+HTTP Get の用例
+===============
+
+ページのユーザインタフェース
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page
+       {
+         Title = "Test HTTP Get"
+         divstart([ :style = StyleSizeFull() ] )
+         boxstart()
+               text( "Test HTTP GET" )
+               newline()
+         boxend()  
+         divstart([ :style = Styledivcenter("600px","550px") + 
+                             StyleGradient(21) ])
+         divstart([:style = stylefloatleft() + stylesize("100px","100%") + 
+                            stylecolor("black") + stylegradient(58)])
+         formstart("ex5.ring")
+               tablestart([ :style = stylesize("65%","90%") + 
+                                     stylemarginleft("35%") +
+                                     stylemargintop("30%") ])
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Name : "  )  
+                       cellend() 
+                       cellstart([])
+                         cTextboxStyle = StyleMarginLeft("5%") + 
+                                         StyleWidth("250px") + 
+                                         StyleColor("black") + 
+                                         StyleBackColor("white")
+                         textbox([ :name = "Name", :style = cTextboxStyle ] )   
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Address : " )   
+                       cellend()
+                       cellstart([])
+                         textbox([ :name = "Address", :style = cTextboxStyle] )  
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Phone : " )  
+                       cellend() 
+                       cellstart([])
+                         textbox([ :name = "Phone", :style = cTextboxStyle ]) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Age : "  )    
+                       cellend() 
+                       cellstart([])
+                         textbox([ :name = "Age", :style = cTextboxStyle ]) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "City: " )     
+                       cellend() 
+                       cellstart([])
+                         listbox([ :name = "City", :items = ["Cairo","Riyadh","Jeddah"],
+                                :style = stylemarginleft("5%") + stylewidth("400px") ] )
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Country : " )  
+                       cellend() 
+                       cellstart([])
+                         combobox([ :name = "Country",
+                                :items = ["Egypt","Saudi Arabia","USA"],
+                                :style = stylemarginleft("5%") + 
+                                         stylewidth("400px")+
+                                         stylecolor("black")+
+                                         stylebackcolor("white")+
+                                         stylefontsize("14px") ])
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                         text ( "Note : " )       
+                       cellend() 
+                       cellstart([])
+                         editbox([ :name = "Notes", 
+                               :style = stylemarginleft("5%") + 
+                                        stylesize("400px","100px")+
+                                        stylecolor("black")+
+                                        stylebackcolor("white") , 
+                               :value = "write comments here..." ] ) 
+                       cellend()
+                 rowend()
+                 rowstart([]) 
+                       cellstart([])
+                       cellend()
+                       cellstart([])
+                         submit([ :value = "Send" , :Style = stylemarginleft("5%") ])
+                       cellend()
+                 rowend()      
+               tableend()
+         formend()
+         divend()
+         divend()
+         divend()
+       }
+
+スクリーンショット:
+
+.. image:: ex4.jpg
+       :alt: HTTP Get
+
+応答:
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page
+       {
+        divstart([ :style = styledivcenter("800px","500px") ])
+         boxstart()
+               text ( "HTTP GET Response" )  newline()
+         boxend()
+         divstart([ :style = stylefloatleft()+stylewidth("10%")+
+                             stylecolor("black")+stylegradient(58) ])
+               newline()
+               text ( "Name : "   )
+               newline() newline()
+               text ( "Address : "  )
+               newline() newline()
+               text ( "Phone : "   )
+               newline() newline()
+               text ( "Age : "   )
+               newline() newline()
+               text ( "City : "   )
+               newline() newline()
+               text ( "Country : "   )
+               newline() newline()
+               text ( "Note : "   )
+               newline() newline()
+         divend()
+         divstart([ :style = stylefloatleft()+stylewidth("90%")+
+                             stylecolor("black")+stylegradient(47) ])
+               divstart([ :style = stylefloatleft() + stylewidth("1%") ])
+                 newline()
+               divend()
+               divstart([ :style = stylefloatleft() + stylewidth("95%") ])
+                 newline()
+                 text ( aPageVars["Name"] )
+                 newline() newline()
+                 text ( aPageVars["Address"] )
+                 newline() newline()
+                 text ( aPageVars["Phone"] )
+                 newline() newline()
+                 text (  aPageVars["Age"] )
+                 newline() newline()
+                 text ( aPageVars["City"] )
+                 newline() newline()
+                 text (aPageVars["Country"] )
+                 newline() newline()
+                 text ( aPageVars["Notes"] )
+                 newline() newline()
+               divend()
+         divend()
+        divend()
+       }
+
+スクリーンショット:
+
+.. image:: ex5.jpg
+       :alt: HTTP Get
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); HTTP POST の用例
+
+HTTP POST の用例
+================
+
+ページのユーザインタフェース
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page 
+       {
+               boxstart()
+                       text( "Post Test")
+                       newline()
+               boxend()
+               divstart([ :style=StyleFloatLeft()+StyleWidth("100px") ])
+                       newline()
+                       text( "Number1 : " )    newline() newline()
+                       text( "Number2 : " )    newline() newline()
+               divend()
+               formpost("ex7.ring")
+                       divstart([ :style = styleFloatLeft()+StyleWidth("200px") ])
+                               newline()
+                               textbox([ :name = "Number1" ])  newline() newline()
+                               textbox([ :name = "Number2" ])  newline() newline()
+                               submit([ :value = "Send" ] )
+                       divend()
+               formend()
+       }               
+
+
+スクリーンショット:
+
+.. image:: ex6.jpg
+       :alt: HTTP Post
+
+応答:
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New Page 
+       {
+               boxstart()
+                       text( "Post Result" )
+                       newline()
+               boxend()
+               divstart([ :style = styleFloatLeft()+styleWidth("200px") ])
+                       newline()
+                       text( "Number1 : " + aPageVars["Number1"] )     
+                       newline() newline()
+                       text( "Number2 : " + aPageVars["Number2"] )     
+                       newline() newline()
+                       text( "Sum : " + (0 + aPageVars["Number1"] + aPageVars["Number2"] ) )
+                       newline()
+               divend()                
+       }       
+
+スクリーンショット:
+
+.. image:: ex7.jpg
+       :alt: HTTP Post
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); Upload Files
+
+ファイルのアップロード
+======================
+
+ページのユーザインタフェース
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+       New page 
+       {
+               boxstart()
+                       text( "Upload File" )
+                       newline()
+               boxend()
+               for x = 1 to 3 newline() next
+               formupload("ex9.ring")          
+                       text( "Customer Name : " )
+                       textbox([ :name = "custname" ])         
+                       newline() newline()             
+                       divstart([ :style = styleFloatLeft() + styleWidth("90px") ])
+                               uploadfile("file")  newline() newline()
+                               uploadfile("file2") newline() newline()
+                               submit([ :value = "Send" ])
+                       divend()                
+               formend()
+       }
+
+スクリーンショット:
+
+.. image:: ex8.jpg
+       :alt: ファイルのアップロード
+
+応答:
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       cUploadPath = "C:/Apache2.2/htdocs/ringapp/upload/"
+       cUploadFolder = "/ringapp/upload/"
+
+       New page 
+       {
+               boxstart()
+                       text( "Upload Result" )
+                       newline()
+               boxend()                        
+               newline() 
+               divstart([ :style=  styleFloatLeft() + styleWidth("100px") ])
+                       text( "Name : " + aPageVars["custname"] )
+                       newline()
+               divend()
+               if aPageVars["file"] != char(13)
+                       getuploadedfile(self,"file")
+               ok
+               if aPageVars["file2"] != char(13)
+                       getuploadedfile(self,"file2")
+               ok
+       }       
+
+       Func getuploadedfile oObj,cFile
+               # ここで object.プロパティ を使用
+               # オブジェクトの代わりに { } を使うと braceend メソッドの実行を回避します。
+               cFileName = cUploadPath + oObj.getfilename(aPageVars,cFile)
+               write(cFileName,aPageVars[cFile])
+               system("chmod a+x "+cFileName)
+               oObj.newline() 
+               oObj.text( "File "+cFileName+ " Uploaded ..." ) 
+               oObj.newline()
+               imageURL = cUploadFolder + oObj.getfilename(aPageVars,cFile)
+               oObj.link([ :url = imageURL, :title = "Download" ]) 
+               oObj.newline()
+               oObj.image( [ :url = imageURL , :alt = :image  ] )
+               oObj.newline()
+
+スクリーンショット:
+
+.. image:: ex9.jpg
+       :alt: ファイルのアップロード
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); Cookies (クッキー)
+
+Cookies (クッキー)
+==================
+
+ページのユーザインタフェース
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New page 
+       {
+               boxstart()
+                       text( "Cookie Test" )
+                       newline()
+               boxend()
+               newline()
+               link([ :url = "ex11.ring", :title = "Use Cookies" ])    
+               cookie("custname","Mahmoud Fayed")
+               cookie("custage",28)    
+       }
+
+スクリーンショット:
+
+.. image:: ex10.jpg
+       :alt: Cookies
+
+応答:
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Cookies Values" )
+                       newline()
+               boxend()
+               link([ :url = "ex10.ring", :title = "back" ])                   
+               newline() 
+               divstart([:style="float:left;width:200px"])
+                       text( "Name : " + aPageVars["custname"] )
+                       newline()
+                       text( "Age : " + aPageVars["custage"] )
+                       newline()
+               divend()
+       }       
+
+スクリーンショット:
+
+.. image:: ex11.jpg
+       :alt: Cookies
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); URL エンコード
+
+URL エンコード
+==============
+
+ページのユーザインタフェース
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "URLEncode" )
+                       newline()
+               boxend()
+               link([ :url = "ex5.ring?Name="+URLEncode("-*{Mahmoud}*-")+
+                             "&Address=Egypt&Phone=123456&Age=28&Notes=Programmer", 
+                             :title = "Test URL Encode" ])
+       }
+
+スクリーンショット:
+
+.. image:: ex12.jpg
+       :alt: URL エンコード
+
+スクリーンショット:
+
+.. image:: ex12r.jpg
+       :alt: URL エンコード
+
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); テンプレート
+
+テンプレート
+============
+
+テンプレートで HTML ファイルの内側に Ring コードを記述できます。
+
+文法:
+
+.. code-block:: html
+
+       <%= Ring 式 %>
+       <%  Ring ステートメント %>
+
+HTML コード
+
+.. code-block:: html
+
+       <h1>Listing Numbers</h1> 
+       <table>
+         <tr>
+           <th> <%= myheader.cColumn1 %> </th>
+           <th> <%= myheader.cColumn2 %> </th>
+           <th></th>
+           <th></th>
+           <th></th>
+         </tr>
+       <% for x in aNumbers %> 
+         <tr>
+           <td> <%= x.nValue  %> </td>
+           <td> <%= x.nSquare %> </td>
+         </tr>
+       <% next %>
+       </table>
+
+Ring コード
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New NumbersController { start() }
+
+       Class NumbersController
+
+               MyHeader aNumbers               
+
+               Func Start
+
+                       MyHeader = New Header
+                       {
+                               cColumn1 = "Number" cColumn2 = "Square"
+                       }
+
+                       aNumbers = list(20)
+
+                       for x = 1 to len(aNumbers)
+                               aNumbers[x] = new number
+                               {
+                                       nValue  = x   nSquare = x*x
+                               }
+                       next      
+
+                       cTemp = Template("mynumbers.html",self)
+
+                       New Page 
+                       {                       
+                               boxstart()
+                                       text( "Test Templates" )                        
+                                       newline()
+                               boxend()
+                               html(cTemp)  
+                       } 
+
+       Class Header cColumn1 cColumn2
+       Class Number nValue   nSquare
+
+スクリーンショット:
+
+.. image:: ex13.jpg
+       :alt: テンプレート
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); HTML の特殊文字
+
+HTML の特殊文字
+===============
+
+text() 関数は HTML の特殊文字を表示します。
+
+HTML コードを記述したい場合は html() 関数を使用します。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page
+       {
+               boxstart()
+                       text("HTML Special Characters")
+                       newline()
+               boxend()
+               text('
+                       <html>
+                               <body>
+                                       <p> "hello world" </p>
+                               </body>
+                       </html>
+               ')
+       }
+
+スクリーンショット:
+
+.. image:: ex14.jpg
+       :alt: HTML の特殊文字
+
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); ハッシュ関数
+
+ハッシュ関数
+============
+
+ページのユーザインタフェース
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Hash Test")
+                       newline()
+               boxend()
+               divstart([ :style = StyleFloatLeft() + StyleWidth("100px") ])
+                       newline()
+                       text( "Value : " )      
+                       newline() newline()
+               divend()
+               formpost("ex16.ring")
+                       divstart([ :style = StyleFloatLeft() + StyleWidth("300px") ])
+                               newline()
+                               textbox([ :name = "Value" ])    
+                               newline() newline()
+                               submit([ :value = "Send" ])
+                       divend()
+               formend()
+       }
+
+スクリーンショット:
+
+.. image:: ex15.jpg
+       :alt: ハッシュ関数
+
+応答:
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       New Page 
+       {
+               boxstart()
+                       text( "Hash Result" )
+                       newline()
+               boxend()
+               divstart([ :style = styleFloatLeft() + styleWidth("100%") ])
+                       newline()
+                       text( "Value : "  + aPageVars["Value"] )        
+                       newline()
+                       text( "MD5 : "    + MD5(aPageVars["Value"]) )   
+                       newline()
+                       text( "SHA1 : "   + SHA1(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA256 : " + SHA256(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA224 : " + SHA224(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA384 : " + SHA384(aPageVars["Value"]) )
+                       newline()
+                       text( "SHA512 : " + SHA512(aPageVars["Value"]) )
+                       newline()
+               divend()
+       }       
+
+スクリーンショット:
+
+.. image:: ex16.jpg
+       :alt: ハッシュ関数
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); 画像の無作為表示
+
+画像の無作為表示
+================
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       cUploadPath = "C:/Apache2.2/htdocs/ringapp/upload/"
+
+       New Page 
+       {
+               boxstart()
+                       text( "Random Test")
+                       newline()
+               boxend()        
+               divstart([ :style = styleFloatLeft() + styleWidth("400px") ])
+                       newline()
+                       aList = dir(cUploadPath)
+                       if len(aList) > 0
+                               nIndex = random(len(aList)) 
+                               if nindex = 0 nIndex = 1 ok
+                               cItem = "upload/" + aList[nIndex][1]
+                               newline()
+                               image( [ :url = cItem , :alt = :image  ] )
+                       else
+                               text("No images!") newline()
+                       ok
+               divend()
+       }
+
+スクリーンショット:
+
+.. image:: ex17.jpg
+       :alt: 画像の無作為表示
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); HTML のリスト
+
+HTML のリスト
+=============
+
+この用例では、 1 ~ 10 までの数値があるリストの内容を表示します。
+
+そして Ring のリストからリストを表示します。
+
+最終的にボタンのリストがあり、ボタンが押されたときにクリックされた
+ボタンの番号を有するメッセージを取得します。
+
+リストを開始するには ulstart() 関数を使用します。
+
+リストを終了するには ulend() 関数を使用します。
+
+listart() と liend() 関数でリストの項目を決定します。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page 
+               {        
+                       ulstart([])
+                               for x = 1 to 10
+                                       listart([])
+                                               text(x)
+                                       liend()
+                               next
+                       ulend()  
+                       list2ul(["one","two","three","four","five"])
+                       ulstart([])
+                               for x = 1 to 10
+                                       listart([])
+                                               cFuncName = "btn"+x+"()"
+                                               button([ :onclick = cFuncName , :value = x])
+                                               script(scriptfuncalert(cFuncName,string(x)))
+                                       liend()
+                               next
+                       ulend()
+               }
+
+スクリーンショット:
+
+.. image:: ex18.jpg
+       :alt: のリスト
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); HTML のテーブル
+
+HTML のテーブル
+===============
+
+この用例では tablestart(), tableend(), rowstart(), rowend(),headerstart(),
+headerend(), cellstart() および cellend() 関数版 HTML テーブルの生成方法を学びます。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page
+               {
+                       divstart([ :style = styledivcenter("400px","500px") ] )
+                               style(styletable() + styletablerows("t01"))
+                               tablestart([ :id = :t01 , :style = stylewidth("100%") ])
+                                       rowstart([]) 
+                                               headerstart([]) text("Number") headerend()
+                                               headerstart([]) text("square") headerend()
+                                       rowend() 
+                                       for x = 1 to 10
+                                               rowstart([])
+                                                       cellstart([]) text(x)   cellend()
+                                                       cellstart([]) text(x*x) cellend()
+                                               rowend()
+                                       next
+                               tableend()
+                       divend()
+               }
+
+スクリーンショット:
+
+.. image:: ex19.jpg
+       :alt: HTML のテーブル
+
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); グラデーション
+
+グラデーション
+==============
+
+この用例では StyleGradient() 関数の用法を学びます。
+
+関数の入力としてスタイルを数値で指定します (1 から 60 までの範囲)。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+               New Page
+               {
+                       boxstart()
+                               text("StyleGradient() Function")
+                       boxend()                         
+                       for x = 1 to 60                         
+                               divstart([ :id = x , :align = "center" , 
+                                          :style = stylefloatleft() +
+                                                   stylesize(string(100/60*6)+"%","50px") +
+                                                   stylegradient(x) ])
+                                       h3(x)
+                               divend()                                         
+                       next
+               }
+
+スクリーンショット:
+
+.. image:: ex20.jpg
+       :alt: グラデーション
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); オブジェクト版ページ生成
+
+オブジェクト版ページ生成
+========================
+
+HTML ページを生成するために関数、メソッドではなく
+ページで要素ごとのオブジェクトを使えます。
+
+この選択をするとコードは綺麗になりますが、動作速度は遅くなります。
+
+最も高速な方法は関数の使用、次に早いのはテンプレートの使用、
+そして最後にオブジェクトを使用 (低速) して HTML コードを直接出力することです。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+
+         WebPage() 
+         {
+               Title = "Using objects to create the Web Page content"
+               h1 { text("welcome") }
+               link 
+               { 
+                 Title = "Google" 
+                 Link  = "http://www.google.com"
+               }  
+               div 
+               {
+                 id = "div1"
+                 style = stylegradient(30) + stylesize("50%","50%")
+                 text("Outer Div")
+                 div 
+                 {
+                       id = "div2"
+                       color = "white"
+                       backgroundcolor = "green"
+                       width = "50%"
+                       height = "50%"
+                       marginleft = "5%"
+                       margintop = "5%"
+                       text("Inner Div")
+                 }
+               }
+               div
+               {
+                 id = "div3"
+                 color = "black"
+                 backgroundcolor = "silver"
+                 width = "100%"
+                 height = "100%"
+                 text("Form")
+                 form
+                 {
+                       method = "POST"
+                       Action = "helloworld.ring"
+                       Table
+                       { 
+                         style = stylewidth("100%") + stylegradient(24)      
+                         TR 
+                         { 
+                               TD { WIDTH="10%" text("Name : " )  }
+                               TD { Input { type = "text" } }
+                         }
+                         TR
+                         {
+                               TD { WIDTH="10%" text("Email : " ) }
+                               TD { Input { type = "text" } }
+                         }
+                         TR 
+                         {
+                               TD { WIDTH="10%" text("Password : " ) }
+                               TD { Input { type = "password" } }
+                         }
+                         TR
+                         {
+                         
+                               TD { WIDTH="10%" text("Notes") }
+                               TD { TextArea { width="100%" rows = 10  cols = 10  
+                                               text("type text here...") } }
+                         }
+                         TR
+                         {
+                               TD { WIDTH="10%" text("Gender") }
+                               TD { 
+                                 select
+                                  {
+                                        width = "100%"
+                                        option { text("Male") } 
+                                        option { text("Female") } 
+                                  }
+                               }
+                         }
+                         TR
+                         {
+                               TD {   WIDTH="10%" text("Role") }
+                               TD 
+                               {
+                                 select
+                                 { 
+                                        multiple = "multiple"
+                                        width    = "100%"
+                                        option { text("student") } 
+                                        option { text("admin") } 
+                                  }
+                               }
+                         }
+                       }
+                       Input { type = "submit" value = "send" }
+                       Image { src="upload/profile1.jpg" alt="profile"}
+                       Input { type = "checkbox" value = "Old Member"} text("old member")
+                       Input { type = "range" min=1 max=100}
+                       Input { type = "number" min=1 max=100}
+                       Input { type = "radio" color="black" name="one" 
+                               value = "one"} text("one")
+                 }
+               }
+               div
+               {
+                 color = "white"
+                 backgroundcolor = "blue"
+                 width = "100%"      
+                 UL
+                 {
+                       LI { TEXT("ONE") }
+                       LI { TEXT("TWO") }
+                       LI { TEXT("THREE") }
+                 }
+               }
+               div 
+               {
+                 audio
+                 {
+                       src = "horse.ogg"
+                       type = "audio/ogg"
+                 }
+
+                 video
+                 {
+                        width = 320
+                        height = 240
+                        src = "movie.mp4"
+                        type = "video/mp4" 
+                 }
+
+                 Input
+                 {
+                       type = "color"
+                       value = "#ff0000"
+                       onchange = "clickColor(0, -1, -1, 5)"
+                 }
+               }
+         }
+
+スクリーンショット:
+
+.. image:: ex21.jpg
+       :alt: オブジェクトの使用
+
+.. image:: ex21_2.jpg
+       :alt: オブジェクトの使用 - 第二部
+
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); HtmlPage クラス
+
+HtmlPage クラス
+===============
+
+このクラスは標準出力を経由せずに HTML ドキュメントを作成します。
+
+ウェブアプリケーションだけで WebLib を使うときの代用になります。
+
+また、コンソール、 GUI、モバイル用のアプリケーションでも使えます。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+
+       import System.Web
+
+       func main
+
+               mypage = new HtmlPage {
+                       h1 { text("Customers Report") }
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(4)
+                                 TR
+                                 {
+                                       TD { WIDTH="10%" text("Customers Count : " )  }
+                                       TD { text (100) }
+                                 }
+                       }
+       
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(26)
+                                 TR
+                                 {
+                                       style = stylewidth("100%") + stylegradient(24)
+                                       TD { text("Name " )  }
+                                       TD { text("Age" ) }
+                                       TD { text("Country" ) }
+                                       TD { text("Job" ) }     
+                                       TD { text("Company" ) }
+                                 }
+                                 for x =  1 to 100
+                                       TR
+                                       {
+                                               TD { text("Test" )  }
+                                               TD { text("30" ) }
+                                               TD { text("Egypt" ) }
+                                               TD { text("Sales" ) }   
+                                               TD { text("Future" ) }
+                                       }
+                                 next
+                       }
+
+               }
+
+               write("report.html",mypage.output())
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); 関数版 Bootstrap ライブラリの用法
+
+関数版 Bootstrap ライブラリの用法
+=================================
+
+この用例は HTML ページ生成時に Bootstrap JavaScript ライブラリを使います。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+         new BootstrapPage {
+               divstart([ :class = "container" ])
+                  divstart([ :class = "jumbotron"  ])
+                       h1("Bootstrap Page")
+                 divend() 
+                 divstart([ :class = :row ])  
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "Using a scripting language is very fun!" ])
+                       divend()
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "using a scripting language is very fun!" ])
+                       divend()
+                       divstart([ :class = "col-sm-4" ])
+                         h3("Welcome to the Ring programming language")
+                         p([ :text = "using a scripting language is very fun!" ])
+                       divend()
+                 divend()   
+               divend()
+         }
+
+
+スクリーンショット:
+
+.. image:: ex22.jpg
+       :alt: Bootstrap
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); オブジェクト版 Bootstrap ライブラリの用法
+
+オブジェクト版 Bootstrap ライブラリの用法
+=========================================
+
+この用例では、 HTML ページの生成時に Bootstrap JavaScript ライブラリを使用します。
+
+HTML 要素の生成関数ではなくオブジェクトを使用します。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Import System.Web
+
+       Func Main
+         BootStrapWebPage()
+         {
+               div
+               {
+                 classname = :container
+                 div
+                 {
+                       classname = :jumbotron
+                       H1 {   text("Bootstrap Page")   }
+                 }
+                 div
+                 {
+                       classname = :row
+                       for x = 1 to 3
+                         div
+                         {
+                               classname = "col-sm-4"
+                               H3 { html("Welcome to the Ring programming language") }
+                               P  { html("Using a scripting language is very fun!") }
+                         }
+                       next 
+                 }
+                 div
+                 {
+                       classname = :row
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button
+                         {            
+                               classname = "btn btn-info btn-lg"
+                               datatoggle= "modal"
+                               datatarget = "#myModal"
+                               text("Open Large Modal")
+                         }          
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button {  classname = "btn btn-default btn-lg" text("default") }
+                         Button {  classname = "btn btn-primary btn-md" text("primary") }
+                         Button {  classname = "btn btn-sucess btn-sm"  text("sucess") }
+                         Button {  classname = "btn btn-info btn-xs"    text("info") }
+                         Button {  classname = "btn btn-warning"        text("warning") }
+                         Button {  classname = "btn btn-danger"         text("danger") }
+                         Button {  classname = "btn btn-link"           text("link") }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         Button {  classname = "btn btn-default btn-block" text("default") }
+                         Button {  classname = "btn btn-primary btn-block" text("primary") }
+                         Button {  classname = "btn btn-sucess btn-block"  text("sucess") }
+                         Button {  classname = "btn btn-info btn-block"    text("info") }
+                         Button {  classname = "btn btn-warning btn-block" text("warning") }
+                         Button {  classname = "btn btn-danger btn-block"  text("danger") }
+                         Button {  classname = "btn btn-link btn-block"    text("link") }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { classname = "btn-group" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { classname = "btn-group btn-group-lg" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                       div
+                       {
+                         classname = "col-sm-4"
+                         div { 
+                               classname = "btn-group-vertical btn-group-lg" 
+                               button {  classname="btn btn-primary" text("one") }
+                               button {  classname="btn btn-primary" text("two") }
+                               button {  classname="btn btn-primary" text("three") }
+                         }
+                       }
+                 }  
+                 div { classname="modal fade" id="myModal" role="dialog"      
+                       div { classname = "modal-dialog modal-lg"
+                         div { classname="modal-content" 
+                               div { classname="modal-header"
+                                 button {  classname="close" datadismiss="modal"
+                                       html("&times")
+                                 }
+                                 h4 {  classname="modal-title"
+                                       text("Modal Header")
+                                 }
+                               }
+                               div { classname = "modal-body" 
+                                 p { text("This is a large model.") }
+                               }
+                               div { classname="modal-footer"
+                                 button { classname = "btn btn-default" datadismiss="modal"
+                                       text("close")
+                                 }
+                               }
+                         }
+                       }
+                 }
+               }  
+         }
+
+スクリーンショット:
+
+.. image:: ex23.jpg
+       :alt: オブジェクト版 Bootstrap ページ
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); MVC 版 CRUD の用例
+
+MVC 版 CRUD の用例
+==================
+
+この用例では、 weblib.ring と datalib.ring を使用します。
+
+datalib.ring には MVC パターンでデータベースアプリケーションを作成するためのクラスがあります。
+
+この用例では SalaryController クラスからオブジェクトを作成して Routing メソッドを呼び出します。
+
+ページの基本的な URL を保持するために変数 website を定義します。
+
+ModelBase クラスから SalaryModel クラスを作成する時に、テーブル salary が開かれ model クラスでカラムデータが属性として定義されます。
+
+SalaryView クラスは、変換用の SalaryLanguageEnglish クラスからオブジェクトを作成します。
+
+AddFuncScript メソッドはフォームへレコードデータを追加、または修正するために使用されます。
+
+FormViewContent メソッドはフォームへレコードを追加、または修正するときにコントロールを決定するために使用されます。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Import System.Web
+
+       website = "ex24.ring"
+
+       New SalaryController { Routing() }
+
+       Class SalaryModel from ModelBase
+
+       Class SalaryController From ControllerBase
+
+       Class SalaryView From ViewBase
+
+         oLanguage = new SalaryLanguageEnglish
+
+         Func AddFuncScript oPage,oController
+               return   oPage.scriptfuncajax("myadd",oController.cMainURL+
+                        oController.cOperation+"=add","mysubpage")
+
+         Func FormViewContent oController,oTranslation,oPage
+               return [
+                               [ oTranslation.aColumnsTitles[2], "textbox", "name",
+                                 oController.oModel.Name, oPage.stylewidth("100%")    ],
+                               [ oTranslation.aColumnsTitles[3], "textbox", "salary",
+                                 oController.oModel.Salary, oPage.stylewidth("50%") ]
+                          ]
+
+       Class SalaryLanguageEnglish
+         cTitle = "Salary Table"
+         cBack = "back"
+         aColumnsTitles = ["ID","Name","Salary"]
+         cOptions = "Options"
+         cSearch = "Search"
+         comboitems = ["Select Option...","Edit","Delete"]
+         cAddRecord = "Add Record"
+         cEditRecord = "Edit Record"
+         cRecordDeleted = "Record Deleted!"
+         aMovePages = ["First","Prev","Next","Last"]
+         cPage = "Page"
+         cOf = "of"
+         cRecordsCount = "Records Count"
+         cSave = "Save"
+         temp = new page
+         cTextAlign = temp.StyleTextRight()
+         cNoRecords = "No records!"
+
+スクリーンショット:
+
+.. image:: ex24.jpg
+       :alt: 給与表
+       
+.. image:: ex24_2.jpg
+       :alt: 給与表 - 検索
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); ユーザの登録とログイン
+
+ユーザの登録とログイン
+======================
+
+ユーザ名、および電子メールなど利用者のデータを扱うためにユーザクラス (Model,
+View および Controller) があります。
+
+このコードは ex25_users.ring として収録しています。
+
+.. code-block:: ring
+
+       Class UsersModel from ModelBase
+         cSearchColumn = "username"
+
+       Class UsersController From ControllerBase
+         aColumnsNames = ["id","username","email"]
+
+         Func UpdateRecord
+               oModel.id = aPageVars[cRecID]
+               oModel.updatecolumn("username", aPageVars[:username] )
+               oModel.updatecolumn("email", aPageVars[:email] )
+               oView.UpdateView(self)
+
+       Class UsersView from ViewBase
+
+         oLanguage = new UsersLanguageEnglish
+
+         Func AddFuncScript oPage,oController
+               return   oPage.scriptfunc("myadd",oPage.scriptredirection("ex26.ring"))
+
+         Func FormViewContent oController,oTranslation,oPage
+               return [
+                               [oTranslation.aColumnsTitles[2],"textbox","username",
+                               oController.oModel.UserName,oPage.stylewidth("100%")],
+                               [oTranslation.aColumnsTitles[3],"textbox","email",
+                               oController.oModel.Email,oPage.stylewidth("50%")]
+                          ]
+
+       Class UsersLanguageEnglish
+         cTitle = "Users Table"
+         cBack = "back"
+         aColumnsTitles = ["ID","User Name","Email"]
+         cOptions = "Options"
+         cSearch = "Search"
+         comboitems = ["Select Option...","Edit","Delete"]
+         cAddRecord = "Add Record"
+         cEditRecord = "Edit Record"
+         cRecordDeleted = "Record Deleted!"
+         aMovePages = ["First","Prev","Next","Last"]
+         cPage = "Page"
+         cOf = "of"
+         cRecordsCount = "Records Count"
+         cSave = "Save"
+         temp = new page
+         cTextAlign = temp.StyleTextRight()
+         cNoRecords = "No records!"
+
+ファイル ex25.ring では ex25_users.ring を読み込み後に UsersController クラスからオブジェクトを作成します。
+
+作成されたオブジェクトで routing メソッドを呼び出します。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+       website = "ex25.ring"
+       New UsersController { Routing() }
+
+スクリーンショット:
+
+.. image:: ex25.jpg
+       :alt: 利用者表
+       
+このコードは登録ページを示しています。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Import System.Web
+
+       website = "ex26.ring"
+
+       new page {
+         boxstart()
+               text( "Register")
+               newline()
+         boxend()
+         divstart([:style = stylegradient(6) + stylesize("100%","95%") ])
+         link([ :url = website, :title = "back" , :style = stylecolor("white")])   
+         newline()
+         divstart([ :style= styledivcenter("500","160") + stylegradient(52) ])   
+         formpost("ex27.ring")
+               tablestart([ :Style =    stylemarginleft("2%") + stylemargintop("2%") +
+                                        stylewidth("90%") ])
+                 rowstart([])
+                       cellstart([:style = stylewidth("20%") + styleheight(30)])
+                         text("User Name")
+                       cellend()
+                       cellstart([ :style = stylewidth("80%")  ])
+                         textbox([:name = "username", :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :Style = styleheight(30)])
+                         text("Password")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "password" , :type = "password"])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                         text("Email")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "email" , :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                       cellend()
+                       cellstart([ :style = styleheight(30)])
+                         submit([:value = "Register"  ])
+                       cellend()
+                 rowend()
+               tableend()
+         formend()
+         divend()
+         divend()
+       }
+
+スクリーンショット:
+
+.. image:: ex26.jpg
+       :alt: 登録ページ
+
+
+登録ページの応答
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       if oUser.findwith("username",aPageVars["username"])
+               new page {
+                       text("The user name is already registered")
+               }
+               return
+       ok
+       if oUser.findwith("email",aPageVars["email"])
+               new page {
+                       text("This email is already registered")
+               }
+               return
+       ok
+
+       aPageVars["salt"] = str2hex(RandBytes(32))
+       aPageVars["pwhash"] = sha256(aPagevars["password"]+aPageVars["salt"])
+       aPageVars["sessionid"] = str2hex(randbytes(32))
+       oUser.Insert()
+       new page {
+               cookie("sessionid",aPageVars["sessionid"])
+               text("New User Created!")
+               newline()
+               text("User Name : " + aPageVars["username"])
+               newline()
+       }
+       oUser.Disconnect()
+
+このコードはログインページを示しています。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+
+       Import System.Web
+
+       website = "ex28.ring"
+
+       new page {
+         boxstart()
+               text( "Login")
+               newline()
+         boxend()
+         divstart([:style = stylegradient(6) + stylesize("100%","95%") ])
+         link([ :url = website, :title = "back" , :style = stylecolor("white")])   
+         newline()
+         divstart([ :style= styledivcenter("500","130") + stylegradient(52) ])   
+         formpost("ex29.ring")
+               tablestart([ :Style =   stylemarginleft("2%") + stylemargintop("2%") +
+                                       stylewidth("90%") ])
+                 rowstart([])
+                       cellstart([:style = stylewidth("20%") + styleheight(30)])
+                         text("User Name")
+                       cellend()
+                       cellstart([ :style = stylewidth("80%") ])
+                         textbox([:name = "username", :style = stylewidth("100%")])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30)])
+                         text("Password")
+                       cellend()
+                       cellstart([])
+                         textbox([:name = "password" , :type = "password"])
+                       cellend()
+                 rowend()
+                 rowstart([])
+                       cellstart([ :style = styleheight(30) ])
+                       cellend()
+                       cellstart([])
+                         submit([:value = "Login"  ])
+                       cellend()
+                 rowend()
+               tableend()
+         formend()
+         divend()
+         divend()
+       }
+
+スクリーンショット:
+
+.. image:: ex28.jpg
+       :alt: ログインページ
+
+
+ログインページの応答
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       lResult = oUser.FindWith("username",aPageVars["username"])
+       new page {
+               if lResult
+                       if sha256(aPagevars["password"]+oUser.Salt) = oUser.pwhash
+                               text ("Correct Password!")
+                               aPageVars["sessionid"] = str2hex(randbytes(32))
+                               oUser.UpdateColumn("sessionid",aPageVars["sessionid"])
+                               cookie("sessionid",aPageVars["sessionid"])
+                       else
+                               text ("Bad password!")
+                       ok
+               else
+                       text("Bad User Name!")
+               ok
+       }
+       oUser.Disconnect()
+
+このコードはユーザのログインが必要かどうかを確認するためのものです。
+
+.. code-block:: ring
+
+       #!ring -cgi
+       Load "weblib.ring"
+       Load "datalib.ring"
+       Load "ex25_users.ring"
+
+       Import System.Web
+
+       oUser = new UsersModel
+       oUser.Connect()
+       lResult = oUser.FindWith("sessionid",aPageVars["sessionid"])
+       new page {
+               if lResult
+                       text("User Name : " + oUser.username )
+               else
+                       text("Please Login First!")
+               ok                      
+       }
+       oUser.Disconnect()
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); Database, ModelBase と ControllerBase クラス
+
+Database, ModelBase と ControllerBase クラス
+============================================
+
+datalib.ring からコードの一部を示します。
+
+このコードでは Database, ModelBase と ControllerBase クラスです。
+
+.. code-block:: ring
+
+       Import System.Web
+
+       Class Database
+
+         cServer = "localhost"
+         cUserName = "root"
+         cPassword = "root"
+         cDatabase = "mahdb"
+
+         Func Connect
+
+               con = mysql_init() 
+               mysql_connect(con, cServer, cUserName, cPassWord,cDatabase)
+
+         Func Disconnect
+
+               mysql_close(con)
+
+         Func Query cQuery
+
+               mysql_query(con,cQuery)
+
+         Func QueryResult
+
+               return mysql_result(con)
+
+         Func QueryResultWithColumns
+               # カラム名+クエリの結果を返します。
+               return mysql_result2(con)
+
+         Func QueryValue
+               aResult = mysql_result(con)
+               if islist(aResult) and len(aResult) >= 1
+                 aResult = aResult[1]
+                 if len(aResult) >= 1
+                       return aResult[1]
+                 ok
+               ok
+               return 0
+
+         Func EscapeString x
+               if isstring(x)
+                 return MySQL_Escape_String(con,x)
+               else
+                 return MySQL_Escape_String(con,string(x))
+               ok
+
+         Private
+               con = NULL
+
+       Class ModelBase from Database
+
+         cTableName = ""
+         cSearchColumn = "name"
+         aColumns = []
+         aQueryResult = []
+         ID = 0
+
+         # クラス名からテーブル名を設定します。
+         classname = lower(classname(self))
+         if right(classname,5) = :model
+               cTablename = left(classname,len(classname)-5)
+         ok
+
+         Func Insert 
+
+               cValues = ""
+               for x in aColumns
+                 cValues += "'" + EscapeString(aPageVars[x]) + "',"
+               Next
+               cValues = left(cValues,len(cValues)-1)  # 末尾のカンマを削除
+               cColumns = ""
+               for x in aColumns
+                 cColumns += x + ","
+               next
+               cColumns = left(cColumns,len(cColumns)-1)    
+               query("insert into " + cTableName + "("+cColumns+") values (" + 
+                        cValues + ")" )
+
+         Func Update nID
+
+               cStr = ""
+               for x in aColumns
+                 cStr += x + " = '" + EscapeString(aPageVars[x]) + "' , " 
+               # カンマの後にスペースは必要
+               Next
+               cStr = left(cStr,len(cStr)-2)      
+               query("update " + cTableName + " set " + cStr + " where id = " + nID )
+
+         Func UpdateColumn cColumn,cValue
+               query("update " + cTableName + " set " + cColumn + " = '" + 
+               EscapeString(cValue) + "' where id = " + self.ID )
+
+
+         Func Count cValue
+
+               query("SELECT count(*) FROM " + cTableName +
+                        " where "+cSearchColumn+" like '" + EscapeString(cValue) + "%'")
+               return queryValue()
+
+         Func Read nStart,nRecordsPerPage
+
+               query("SELECT * FROM "+ cTableName+" limit " + EscapeString(nStart) + "," +
+               EscapeString(nRecordsPerPage) )
+               aQueryResult = queryResult()
+
+         Func Search cValue,nStart,nRecordsPerPage
+
+               query("SELECT * FROM "+ cTableName+" where "+cSearchColumn+" like '" +
+               EscapeString(cValue) + "%'" +
+                 " limit " + EscapeString(nStart) + "," + EscapeString(nRecordsPerPage) )
+               aQueryResult = queryResult()
+
+         Func Find nID
+
+               query("select * from " + cTableName + " where id = " + EscapeString(nID) )
+               aResult = queryResult()[1]
+               # オブジェクトの属性から配列へ結果を移動
+               ID = nID
+               cCode = ""
+               for x = 2 to len(aResult)
+                 cCode += aColumns[x-1] + " = hex2str('" + str2hex(aResult[x]) + "')" + nl
+               next
+               eval(cCode)
+
+         Func FindWith cColumn,cValue
+
+               query("select * from " + cTableName + " where "+cColumn+" = '" + 
+               EscapeString(cValue) + "'" )
+               aResult = queryResult()
+               if len(aResult) > 0
+                 aResult = aResult[1]
+               else
+                 return 0
+               ok
+               # オブジェクトの属性から配列へ結果を移動
+               ID = aResult[1]
+               cCode = ""
+               for x = 2 to len(aResult)
+                 cCode += aColumns[x-1] + " = hex2str('" + str2hex(aResult[x]) + "')" + nl
+               next
+               eval(cCode)
+               return 1
+
+         Func Delete ID
+
+               query("delete from " + cTableName + " where id = " + EscapeString(ID) )
+
+         Func Clear
+
+               cCode = ""
+               for x in aColumns
+                 cCode += x + ' = ""' + nl
+               next
+               eval(cCode)
+
+         Func LoadModel
+
+               # カラム配列の作成
+               query("SELECT * FROM "+ cTableName + " limit 0,1")
+               aQueryResult = QueryResultWithColumns()[1]
+               for x = 2 to len(aQueryResult)
+                 aColumns + lower(trim(aQueryResult[x]))
+               next
+
+               # カラムごとの属性を作成
+               for x in aColumns
+                 addattribute(self,x)
+               next
+
+         Func Connect
+
+               Super.Connect()
+               if nLoadModel = 0
+                 nLoadModel = 1
+                 LoadModel()
+               ok
+
+         private
+
+               nLoadModel = 0
+
+
+       Class ControllerBase
+         
+         nRecordsPerPage = 5
+         nRecordsCount = 0
+         nPagesCount = 0
+         nActivePage = 0
+
+         # oView = new tablenameView と oModel = new tablename.Model の動的生成
+         classname = lower(classname(self))
+         if right(classname,10)  = :controller
+               tablename = left(classname,len(classname)-10)
+               cCode = "oView = new " + tablename+"View" + nl
+               cCode += "oModel = new " + tablename+"Model" + nl
+               eval(cCode)
+               oModel.connect()
+         ok
+
+         cSearchName = "searchname"
+         cPart = "part"
+         cPageError = "The page number is not correct"
+         cLast = "last"
+         cOperation = "operation"
+         cRecID = "recid"
+
+         aColumnsNames = ["id"]
+         for t in oModel.aColumns
+               aColumnsNames + t
+         next
+
+         cMainURL = website + "?"
+
+         func Routing
+
+               switch      aPageVars[cOperation]
+               on NULL     showtable()
+               on :add     addrecord()
+               on :save    saverecord()
+               on :delete  deleterecord()
+               on :edit    editrecord()
+               on :update  updaterecord()
+               off
+
+         func ShowTable
+
+               nRecordsCount = oModel.Count( aPageVars[cSearchName] )
+
+               nPagesCount = ceil(nRecordsCount / nRecordsPerPage)
+
+               if aPageVars[cPart] = cLast
+                 aPageVars[cPart] = string(nPagesCount)
+               ok
+
+               nActivePage = number(aPageVars[cPart])
+               if nActivePage = 0 nActivePage = 1 ok    
+
+               if ( nActivePage > nPagesCount ) and nRecordsCount > 0
+                 ErrorMsg(cPageError)
+                 return
+               ok
+
+               nStart = (nActivePage-1)*nRecordsPerPage
+
+               if aPageVars[cSearchName] = NULL
+                 oModel.Read( nStart,nRecordsPerPage )
+               else
+                 oModel.Search( aPageVars[cSearchName],nStart,nRecordsPerPage )
+               ok
+
+               oView.GridView(self)
+
+         func AddRecord
+
+               oModel.clear()
+               oView.FormViewAdd(Self,:save,false) # false ならば レコード ID はない
+
+         func SaveRecord
+
+               oModel.Insert()
+               oView.SaveView(self)
+
+         func EditRecord
+
+               oModel.Find( aPageVars[cRecID] )
+               oView.FormViewEdit(Self,:update,true) # true ならば レコード ID はある
+
+         func UpdateRecord
+
+               oModel.update( aPageVars[cRecID] )
+               oView.UpdateView(self)
+
+         func DeleteRecord
+
+               oModel.Delete( aPageVars[cRecID] )
+               oView.DeleteView()
+
+         func braceend
+
+               oModel.Disconnect()
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); WebLib API
+
+WebLib API
+==========
+
+ウェブライブラリ関数、クラスとメソッドについて示します。
+
+=====================   =============   =================================================================================
+関数                    仮引数          解説
+=====================   =============   =================================================================================
+LoadVars                なし            aPageVars リストにリクエストの仮引数とクッキーを保存します。
+WebPage                 なし            WebPage クラスから新しいオブジェクトを作成します。
+BootStrapWebPage        なし            BootStrapWebPage クラスから新しいオブジェクトを作成します。
+HTMLSpecialChars        cString         HTML と等価な特殊文字をエンコードします。
+Template                cFile,oObject   { } で oObject へアクセス後に cFile にある Ring コードを実行します。
+Alert                   cMessage        cMessage を表示するために JavaScript Alert() で HTML ページを生成します。
+HTML2PDF                cString         HTML 文字列 (cString) から PDF ファイルの生成と表示を行います。
+=====================   =============   =================================================================================
+
+このようなクラスが Package System.Web にあります。
+
+=====================  ================================================================================
+クラス名                           説明
+=====================  ================================================================================
+Application                            エンコーディング、デコーディング、クッキーなど様々なメソッドがあります。
+Page                                   HTML ページを生成するためのメソッドがあります。
+ScriptFunctions                        JavaScript 関数を生成するためのメソッドがあります。
+StyleFunctions                 CSS を生成するためのメソッドがあります。
+PageBuffer                             HTML ページをメモリへ生成します (出力を表示しません)。
+HTML2PDF                               HTML コードから PDF ファイルを生成します。
+BootStrapPage                  BootStrap ライブラリを使用します。
+WebPage                                        各要素のオブジェクトでページを生成しますす。
+HtmlPage                               WebPage と同様、標準出力への出力は行いますが表示はしません。
+BootStrapWebPage               BootStrap ライブラリではオブジェクトによりページを生成します。
+ObjsBase                               page オブジェクトの親クラスです。
+NewObjectsFunctions    ページまたは要素により、新しいオブジェクトを作成するためのメソッドです。
+H1                                             HTML H1 のラップ
+H2                                             HTML H2 のラップ
+H3                                             HTML H3 のラップ
+H4                                             HTML H4 のラップ
+H5                                             HTML H5 のラップ
+H6                                             HTML H6 のラップ
+P                                              HTML P のラップ
+Link                                   HTML link のラップ
+NewLine                                        HTML NewLine のラップ
+Div                                            HTML Div のラップ
+Form                                   HTML Form のラップ
+Input                                  HTML Input のラップ
+TextArea                               HTML TextArea のラップ
+Select                                 HTML Select のラップ
+Option                                 HTML Option のラップ
+Image                                  HTML Image のラップ
+UL                                             HTML UL のラップ
+LI                                             HTML LI のラップ
+Table                                  HTML Table のラップ
+TR                                             HTML TR のラップ
+TD                                             HTML TD のラップ
+TH                                             HTML TH のラップ
+Audio                                  HTML Audio のラップ
+Video                                  HTML Video のラップ
+Nav                                            HTML Nav のラップ
+Span                                   HTML Span のラップ
+Button                                 HTML Button のラップ
+=====================  ================================================================================
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); Application クラス
+
+Application クラス
+==================
+
+============    =====================================   ========================================================
+メソッド        仮引数                                  説明
+============    =====================================   ========================================================
+DecodeString    cString                                 リクエストの仮引数をデコードします。
+Decode          cString                                 マルチパートまたはフォームデータのデコードをします。
+GetFileName     aArray,cVar                             cVarで aArray にあるファイル名を取得します。
+SetCookie       name,value,expires,path,domain,secure   クッキーの設定
+Cookie          name,value                              name および value のみでクッキーを設定します。
+GetCookies      なし                                    クッキーの取得
+URLEncode       cString                                 URL エンコード
+ScriptLibs      なし                                    BootStrap などを JavaScript ライブラリへ追加します。
+Print           なし                                    ページの内容を出力します。
+Style           cStyle                                  ページの CSS の内容を cStyle へ追加します。
+StartHTML       なし                                    ページの内容に HTTP ヘッダを追加します。
+============    =====================================   ========================================================
+
+DecodeString メソッドは HTTP リクエストの仮引数を取得します。
+
+Decode および GetFileName メソッドはファイルのアップロードで使用します。
+
+SetCookie, Cookie および GetCookies メソッドはクッキーの追加と読み取りで使用します。
+
+StartHTML, ScriptsLibs, Style と Print メソッドはページの構造、および JavaScript/CSS の対応で使用します。
+
+URLEncode メソッドは HTML ページで使用される URL をエンコードするために使用します。
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); Page クラス
+
+Page クラス
+===========
+
+=====================  ======================================= ============================================================================================
+メソッド                           仮引数                                                                       説明
+=====================  ======================================= ============================================================================================
+text                                   x                                                                               ページの内容へ HTMLSpecialChars(x) を追加します (文字列と数値を受け入れます)。
+html                                   cString                                                                 ページの内容に HTML コードを追加します。
+h1                                             x                                                                               <h1> ~ </h1> の間にページの内容 x を追加します。
+h2                                             x                                                                               <h2> ~ </h2> の間にページの内容 x を追加します。
+h3                                             x                                                                               <h3> ~ </h3> の間にページの内容 x を追加します。
+h4                                             x                                                                               <h4> ~ </h4> の間にページの内容 x を追加します。
+h5                                             x                                                                               <h5> ~ </h5> の間にページの内容 x を追加します。
+h6                                             x                                                                               <h6> ~ </h6> の間にページの内容 x を追加します。
+p                                              aPara                                                                   HTML <p> </p> の属性を取得するために aPara リストをハッシュとして使用します。
+NewLine                                        なし                                                                  ページの内容に <br /> を追加します。
+AddAttributes                  aPara                                                                   HTML の要素属性を aPara リストのハッシュとして変換します。
+Link                                   aPara                                                                   HTML <a href> および </a> の属性を取得するために aPara リストをハッシュとして使用します。
+Image                                  aPara                                                                   HTML <img> の属性を取得するために aPara リストをハッシュとして使用します。
+Button                                 aPara                                                                   HTML <input type=”button”> の属性を取得するために aPara リストをハッシュとして使用します。
+ButtonLink                             aPara                                                                   HTML <input type=”button”> は、リンク属性によりリンクをナビゲートするために使用します。
+Textbox                                        aPara                                                                   HTML <input type=”text”> の属性を取得するために aPara リストをハッシュとして使用します。
+Editbox                                        aPara                                                                   HTML <textarea> および </textarea> の属性を取得するために aPara を使用します。
+Combobox                               aPara                                                                   HTML <select> は <option> でリスト項目の属性として使用します。
+Listbox                                        aPara                                                                   HTML <select multiple=’multiple’> は <option> で項目の属性として使用します。
+ulstart                                        aPara                                                                   HTML <ul>
+ulend                                  aPara                                                                   HTML </ul>
+listart                                        aPara                                                                   HTML <li>
+liend                                  aPara                                                                   HTML </li>
+List2UL                                        aList                                                                   Ring のリスト項目から項目をインクルードして HTML <ul> を生成します。
+DivStart                               aPara                                                                   HTML <div> の属性を取得するために aPara リストをハッシュとして使用します。
+NavStart                               aPara                                                                   HTML <nav> の属性を取得するために aPara リストをハッシュとして使用します。
+SpanStart                              aPara                                                                   HTML <span> の属性を取得するために aPara リストをハッシュとして使用します。
+BoxStart                               なし                                                                  ページのヘッダとして使用するために黒色の背景の Div を生成します。
+DivEnd                                 なし                                                                  HTML </div>
+NavEnd                                 なし                                                                  HTML </nav>
+SpanEnd                                        なし                                                                  HTML </span>
+BoxEnd                                 なし                                                                  HTML </div> であり divend() と同じです。
+FormStart                              cAction                                                                 HTML <form> は cAction の action 属性または空値です。
+FormPost                               cAction                                                                 HTML <form method=”post”> は cAction の action 属性です。
+FormEnd                                        なし                                                                  HTML </form>
+Submit                                 aPara                                                                   HTML <input type=”submit”>
+Hidden                                 cName,cValue                                                    HTML <input type=”hidden”>
+FormUpload                             x                                                                               HTML のフォームであり、 method=”post” enctype=”multipart/form-data” および x = action
+UploadFile                             x                                                                               HTML <input type=”file”> および name = x
+Video                                  aPara                                                                   HTML <video>
+Audio                                  aPara                                                                   HTML <audio>
+GetColor                               aPara                                                                   配色の選択
+Radio                                  aPara                                                                   HTML <input type=”radio”>
+Checkbox                               aPara                                                                   HTML <input type=”checkbox”>
+Spinner                                        aPara                                                                   HTML <input type=”number”>
+Slider                                 aPara                                                                   HTML <input type=”range”>
+TableStart                             aPara                                                                   HTML <table>
+TableEnd                               なし                                                                  HTML </table>
+RowStart                               aPara                                                                   HTML <tr>
+RowEnd                                 なし                                                                  HTML </tr>
+CellStart                              aPara                                                                   HTML <td>
+CellEnd                                        なし                                                                  HTML </td>
+HeaderStart                            aPara                                                                   HTML <th>
+HeaderEnd                              なし                                                                  HTML </th>
+=====================  ======================================= ============================================================================================
+
+aPara にある page メソッドは属性と値を有するリストです。
+aPara で下記の属性値を設定できます。
+
+.. code-block:: ring 
+
+       classname id name align style dir value onclick oncontextmenu ondblclick
+       onmousedown onmouseenter onmouseleave onmousemove onmouseover onmouseout
+       onmouseup onkeydown onkeypress onkeyup onabort onbeforeunload onerror
+       onhashchange onload onpageshow onpagehide onresize onscroll onunload
+       onblur onchange onfocus onfocusin onfocusout oninput oninvalid onreset
+       onsearch onselect onsubmit ondrag ondragend ondragenter ondragleave
+       ondragover ondragstart ondrop oncopy oncut onpaste onafterprint 
+       onbeforeprint oncanplay oncanplaythrough ondurationchange onemptied
+       onended onloadeddata onloadedmetadata onloadstart onpause onplay
+       onplaying onprogress onratechange onseeked onseeking onstalled onsuspend
+       ontimeupdate onvolumechange onwaiting animationend animationiteration
+       animationstart transitionend onmessage onopen onmousewheel ononline
+       onoffline onpostate onshow onstorage ontoggle onwheel ontouchcancel
+       ontouchend ontouchmove ontouchstart color opacity background backgroundattachment
+       backgroundcolor backgroundimage backgroundposition backgroundrepeat backgroundclip
+       backgroundorigin backgroundsize border borderbottom borderbottomcolor 
+       borderbottomleftradius borderbottomrightradius borderbottomstyle borderbottomwidth 
+       bordercolor borderimage borderimageoutset borderimagerepeat borderimageslice 
+       borderimagesource borderimagewidth borderleft borderleftcolor borderleftstyle
+       borderleftwidth borderradius borderright  borderrightcolor borderrightstyle
+       borderrightwidth borderstyle bordertop bordertopcolor bordertopleftradius
+       bordertoprightradius bordertopstyle bordertopwidth borderwidth boxdecorationbreak
+       boxshadow bottom clear clip display float height left margin marginbottom marginleft
+       marginright margintop maxheight maxwidth minheight minwidth overflow overflowx
+       overflowy padding paddingbottom paddingleft paddingright paddingtop position
+       right top visibility width verticalalign zindex aligncontent alignitems alignself
+       flex flexbasis flexdirection flexflow flexgrow flexshrink flexwrap justifycontent
+       order hangingpunctuation hyphens letterspacing linebreak lineheight overflowwrap
+       tabsize textalign textalignlast textcombineupright textindent textjustify
+       texttransform whitespace wordbreak wordspacing wordwrap textdecoration 
+       textdecorationcolor textdecorationline textdecorationstyle textshadow 
+       textunderlineposition @fontface @fontfeaturevalues font fontfamily fontfeaturesettings
+       fontkerning fontlanguageoverride fontsize fontsizeadjust fontstretch fontstyle
+       fontsynthesis fontvariant fontvariantalternates fontvariantcaps fontvarianteastasian
+       fontvariantligatures fontvariantnumeric fontvariantposition fontweight direction
+       textorientation unicodebidi writingmode bordercollapse borderspacing captionside
+       emptycells tablelayout counterincrement counterreset liststyle liststyleimage
+       liststyleposition liststyletype @keyframes animation animationdelay animationdirection
+       animationduration animationfillmode animationiterationcount animationname
+       animationplaystate animationtimingfunction backfacevisibility perspective
+       perspectiveorigin transform transformorigin transformstyle transition
+       transitionproperty transitionduration transitiontimingfunction transitiondelay
+       boxsizing content cursor imemode navdown navindex navleft navright navup
+       outline outlinecolor outlineoffset outlinestyle outlinewidth resize textoverflow
+       breakafter breakbefore breakinside columncount columnfill columngap columnrule
+       columnrulecolor columnrulestyle columnrulewidth columnspan columnwidth columns
+       widows orphans pagebreakafter pagebreakbefore pagebreakinside marks quotes
+       filter imageorientation imagerendering imageresolution objectfit objectposition
+       mask masktype mark markafter markbefore phonemes rest restafter restbefore
+       voicebalance voiceduration voicepitch voicepitchrange voicerate voicestress
+       voicevolume marqueedirection marqueeplaycount marqueespeed marqueestyle datatoggle
+       dataride datatarget dataslideto dataslide datadismiss dataplacement datacontent
+       datatrigger dataspy dataoffset dataoffsettop
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); ScriptFunctions クラス
+
+ScriptFunctions クラス
+======================
+
+このクラスには生成されたウェブページへ JavaScript コードを追加するためのメソッドがあります。
+
+このクラスは Page クラスへ統合されており、
+このメソッドから page オブジェクトを直接使えます。
+
+==================  ==============================================      ===================================================================
+メソッド            仮引数                                              説明
+==================  ==============================================      ===================================================================
+Script              cCode                                               <script> ~ </script> の間に文字列として cCode を追加します。
+ScriptRedirection   cURL                                                cURL へ window.location を設定します。
+ScriptFunc          cFuncName,cCode                                     cCode を有する cFuncName 関数を定義します。
+ScriptFuncAlert     cFuncName,cMsg                                      alert() 関数で cMsg を出力する cFuncName 関数を定義します。
+ScriptFuncAjax      cFuncName,cLink,cDiv                                cDiv へ cLink を読み込みために cFuncName 関数を定義します。
+ScriptFuncClean     cFuncName,cDiv  cDiv                                を消去するために cFuncName 関数を定義します。
+ScriptFuncSelect    cF,aL,cD,cR,cGR,cFC,nTO,cL1,cL2                     グリッドレコードの編集・削除で使用されます。
+ScriptScrollFixed   cDiv,nSize                                          Size = nSize で Div を固定するために cDiv を設定します。
+==================  ==============================================      ===================================================================
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); StyleFunctions クラス
+
+StyleFunctions クラス
+=====================
+
+このクラスには生成されたウェブページへ CSS を追加するためのメソッドがあります。
+
+ScriptFunctions など StyleFunctions クラスのメソッドは Page クラスへ統合されており、
+このメソッドから page オブジェクトを直接使えます。
+
+=====================  ====================    ==============================================================
+メソッド                仮引数                  説明
+=====================  ====================    ==============================================================
+StyleFloatLeft          なし                    float: left ; を返します。
+StyleFloatRight         なし                    float: right ; を返します。
+StyleSizeFull           なし                    width: 100% ; height: 100% ; を返します。
+Stylecolor              x                       “ color: ” + x + ” ; “ を返します。
+Stylebackcolor          x                       “ background-color: ” + x + ” ;” を返します。
+StyleTextCenter         なし                    “ text-align: center ;” を返します。
+StyleTextRight          なし                    “text-align: right ;” を返します。
+StyleTextLeft           なし                    “text-align: left ;” を返します。
+StyleSize               x,y                     “ width: ” + x + ” ; height: ” + y + ” ;” を返します。
+StyleWidth              x                       “ width: ” + x + ” ;” を返します。
+StyleHeight             x                       “ height: ” + x + ” ;” を返します。
+StyleTop                x                       “ top: ” + x + ” ;” を返します。
+StyleLeft               x                       “ Left: ” + x + ” ;” を返します。
+StylePos                x,y                     “ top: ” + x + ” ;” + ” Left: ” + y + ” ;” を返します。
+StyleHorizontalCenter   なし                    “ margin-right:auto ; margin-left:auto; “ を返します。
+StyleMarginTop          x                       “ margin-top: ” + x + ” ;” を返します。
+StyleMarginRight        x                       “ margin-right: ” + x + ” ;” を返します。
+StyleMarginLeft         x                       “ margin-left: ” + x + ” ;” を返します。
+StyleDivCenter          nWidth,nHeight          ページの中央に Div を作成します。
+StyleAbsolute           なし                    “ position:absolute ;” を返します。
+StyleFixed              なし                    “ position:fixed ;” を返します。
+StyleZIndex             x                       “ z-index: ” + x + ” ;” を返します。
+StyleFontSize           x                       “ font-size: ” + x + ” ;” を返します。
+StyleGradient           x                       グラデーションの生成 (x の値は 1 から 60 まで)
+StyleTable              なし                    テーブルの属性を設定します。
+StyleTableRows          id                      テーブルの偶数、および奇数の横列へ交互に異なる色を設定します。
+StyleTableNoBorder      なし                    “ border-style: none;” を返します。
+=====================  ====================    ==============================================================
+
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); WebPage クラス
+
+WebPage クラス
+==============
+
+有効な WebPage オブジェクトの属性へアクセスするために括弧を使用します。
+
+これらの属性のうち一つを括弧により使用することで再度新しい属性を返します。
+
+=====================   ========================================================    
+属性                    説明
+=====================   ========================================================    
+H1                      HTML H1 のラップ
+H2                      HTML H2 のラップ
+H3                      HTML H3 のラップ
+H4                      HTML H4 のラップ
+H5                      HTML H5 のラップ
+H6                      HTML H6 のラップ
+P                       HTML P のラップ
+Link                    HTML link のラップ
+NewLine                 HTML NewLine のラップ
+Div                     HTML Div のラップ
+Form                    HTML Form のラップ
+Input                   HTML Input のラップ
+TextArea                HTML TextArea のラップ
+Select                  HTML Select のラップ
+Option                  HTML Option のラップ
+Image                   HTML Image のラップ
+UL                      HTML UL のラップ
+LI                      HTML LI のラップ
+Table                   HTML Table のラップ
+TR                      HTML TR のラップ
+TD                      HTML TD のラップ
+TH                      HTML TH のラップ
+Audio                   HTML Audio のラップ
+Video                   HTML Video のラップ
+Nav                     HTML Nav のラップ
+Span                    HTML Span のラップ
+Button                  HTML Button のラップ
+=====================   ========================================================
+
+.. index:: 
+       pair: ウェブ開発 (CGI ライブラリ); HtmlPage クラス
+
+HtmlPage クラス
+===============
+
+WebPage クラスと同じですが、このような変更を行っています。
+
+(1) 標準出力への出力は行いません。
+(2) 出力を取得するために Output メソッドを提供しています。
+
+文法:
+
+.. code-block:: ring
+
+       output() ---> 文字列を出力
+
diff --git a/docs/ja-jp/source/weighthistory_app.png b/docs/ja-jp/source/weighthistory_app.png
new file mode 100644 (file)
index 0000000..f705925
Binary files /dev/null and b/docs/ja-jp/source/weighthistory_app.png differ
diff --git a/docs/ja-jp/source/whatisnew.txt b/docs/ja-jp/source/whatisnew.txt
new file mode 100644 (file)
index 0000000..7c38196
--- /dev/null
@@ -0,0 +1,598 @@
+.. index:: 
+       single: Ring 1.1 の変更履歴; はじめに
+
+===================
+Ring 1.1 の変更履歴
+===================
+
+Ring 1.1 公開版の変更点と新機能を学びます。
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.1 の新機能!
+
+* 自然言語プログラミングへの対応を改善
+* Ring オブジェクトファイル (\*.ringo) の生成と実行
+* シンタックスの柔軟性と出入力、および制御構造の各種記法
+* 新しい関数と変更
+* Ring で記述した StdLib 関数とクラス
+* RingLibSDL
+* デモプロジェクト - 2D ゲームエンジン
+* RingSQLite
+* 拡張機能に関するコード生成器の改善
+* 新しい属性を定義するためにクラス範囲で Self.属性 の使用
+* クラスのメソッド内で入れ子の括弧で This.属性 の使用
+* 取扱説明書の増補
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; 自然言語プログラミングへの対応を改善
+
+自然言語プログラミングへの対応を改善
+====================================
+
+Ring は、画期的なプログラミング言語であり、小規模のシンタックス、高性能な実装 (小規模、透過型、および視覚型)、
+短時間で作成・構築できる宣言型、および自然なドメイン特化言語機能を標準装備しています。
+
+この公開版では、式の評価後のメソッド呼び出しに対応しました。
+
+この用例をご確認ください:
+
+.. code-block:: ring
+
+       # 自然言語コード
+       new program {
+               Accept 2 numbers then print the sum
+       }
+
+       # 自然言語コードの実装
+       class program
+               # キーワード
+                       Accept=0 numbers=0 then=0 print=0 the=0 sum=0
+
+               # 実行
+               func braceexpreval x
+                       value = x
+               func getnumbers
+                       for x=1 to value
+                               see "Enter Number ("+x+") :" give nNumber
+                               aNumbers + nNumber
+                       next
+               func getsum
+                       nSUm = 0
+                       for x in aNumbers nSum+= x next
+                       see "The Sum : " + nSum
+               private
+                       value=0 aNumbers=[]
+               
+実行結果: 
+
+.. code-block:: ring
+
+       Enter Number (1) :3
+       Enter Number (2) :4
+       The Sum : 7
+
+詳細情報は “自然言語プログラミング” の章を参照してください。
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; Ring オブジェクトファイル (\*.ringo) の生成と実行
+
+Ring オブジェクトファイル (\*.ringo) の生成と実行
+=================================================
+
+この機能は、ソースコードの配布を行わずにアプリケーションを配布できるようにします。
+アプリケーションの配布を単純な処理により、完全なプロジェクトの単体 Ring オブジェクトファイルを取得できます (複数のソースコードファイル)。
+また、Ring オブジェクトファイルを使うとアプリケーションのコンパイルで、ソースファイルの読み込みにかかる処理時間が無くなり、動作速度の向上につながります。
+
+この機能に関する詳細情報は “コマンドラインのオプション” の章をご確認ください。
+
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; シンタックスの柔軟性
+
+シンタックスの柔軟性と出入力および制御構造の様々な記法
+======================================================
+
+プログラマはプログラミング言語のシンタックスには神経質です。
+すばらしいプログラマは様々な記法で仕事をする方法を理解していますが、プログラマには各々の好みの記法があります。
+
+プログラミング言語ごとに好き嫌いの分かれる記法があります。
+Ring は、あまたにあるプログラミング言語の一つです。
+しかし、より優れたシンタックスを求めている世界中のプログラマへの回答として、選択肢を多数提供することにしました。
+
+また、これらの機能が自然言語プログラミングには最も必要なものです。
+
+用例 :
+
+言語のキーワードと演算子の変更に使用する二種類のコマンドがあります。
+
+.. code-block:: ring
+
+       ChangeRingOperator + plus 
+       ChangeRingKeyword see print
+
+       Print 5 plus 5  
+
+       ChangeRingOperator plus +
+       ChangeRingKeyword print see
+
+入出力用の新しい記法があります (オプション扱い)。
+
+用例:
+
+.. code-block:: ring
+
+       Put "What is your name? "
+       Get cName
+       Put "Hello " + cName
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Print("What is your name? ")    # 画面へメッセージを表示
+       cName=GetString()               # ユーザからの標準入力を取得
+       print("Hello #{cName}")         # hello と言おう!
+
+制御構造用の新しい記法があります (オプション扱い)。
+
+用例:
+
+.. code-block:: ring
+
+       While True
+
+               Put " 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                   " Get nOption
+
+               Switch nOption
+               Case 1 
+                       Put "Enter your name : " 
+                       Get name 
+                       Put "Hello " + name + nl
+               Case 2 
+                       Put "Sample : using while loop" + nl
+               Case 3 
+                       Bye
+               Else 
+                       Put "bad option..." + nl
+               End
+       End
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       While True {
+
+               print(" 
+                       Main Menu
+                       ---------
+                       (1) Say Hello
+                       (2) About
+                       (3) Exit
+
+                         ")
+
+               nOption = GetString()
+
+               switch nOption {
+               case 1 
+                       print("Enter your name : ")
+                       name = getstring()
+                       print("Hello #{name}\n")
+               case 2 
+                       print("Sample : using switch statement\n")
+               case 3 
+                       Bye
+               else 
+                       print("bad option...\n")
+               }
+
+       }
+
+この章をご確認ください:
+
+* 入門 - 第二形式
+* 入門 - 第三形式
+* 制御構造 - 第二形式 - Lua および Ruby 風の記法
+* 制御構造 - 第三形式 - C 風の記法 (括弧の使用)
+* シンタックスの柔軟性
+
+.. note:: これらすべての記法は自動的かつ同時にコンパイラで提供されます。
+       例えば Put/Get および括弧の使用を許可するなど同じプロジェクトでは記法を一つだけ選択するのが良いです
+       (記法を併用して、別の記法を作成することもできます)。
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; 新しい関数と変更
+新しい関数と変更
+=========================
+
+変更:
+
+* get() 関数 : sysget() へ変更。
+* sort() 関数 : オブジェクトのリストでも動作するようになりました。
+* find() 関数 : オブジェクトのリストでも動作するようになりました。
+
+
+追加:
+
+* clockspersecond()
+* CurrentDir()
+* ExeFileName()
+* ChDir()
+* ExeFolder()
+* varptr()
+* space()
+* nullpointer()
+* object2pointer()
+* pointer2object()
+
+この章をご確認ください:
+
+* システム関数
+* オブジェクト指向プログラミング (OOP)
+* 低水準関数
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; Ring で記述された StdLib 関数とクラス
+
+Ring で記述された StdLib 関数とクラス
+============================================
+
+Ring 1.1 には Ring チームの協力により Ring で記述された StdLib ライブラリがあります。
+
+このライブラリでは新しい関数とクラスの実用的なグループを提供しています。
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Times()")
+       Times ( 3 , func { see "Hello, World!" + nl } )
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Map()")
+       See Map( 1:10, func x { return x*x } )
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       Puts("Test Filter()")
+       See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       See "Testing the String Class" + nl
+       oString = new string("Hello, World!")
+       oString.println()
+       oString.upper().println()
+       oString.lower().println()
+       oString.left(5).println()
+       oString.right(6).println()
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oList = new list ( [1,2,3] )
+       oList.Add(4)
+       oList.print()
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oStack = new Stack
+       oStack.push(1)
+       oStack.push(2)
+       oStack.push(3)
+       see oStack.pop() + nl
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       oQueue = new Queue
+       oQueue.add(1)
+       oQueue.add(2)
+       oQueue.add(3)
+       see oQueue.remove() + nl
+
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       ohashtable = new hashtable
+       See "Test the hashtable Class Methods" + nl
+       ohashtable { 
+               Add("Egypt","Cairo")
+               Add("KSA","Riyadh")
+               see self["Egypt"] + nl
+               see self["KSA"] + nl
+               see contains("Egypt") + nl
+               see contains("USA") + nl
+               see index("KSA")  + NL
+               print()
+               delete(index("KSA"))
+               see copy("*",60) + nl
+               print()
+       }
+
+用例:
+
+.. code-block:: ring
+
+       Load "stdlib.ring"
+
+       otree = new tree
+       See "Test the tree Class Methods" + nl
+       otree {
+               set("The first step")   # ルートノードの値を設定します。
+               see value() + nl
+               Add("one")
+               Add("two")
+               Add("three") {
+                       Add("3.1")
+                       Add("3.2")
+                       Add("3.3")
+                       see children
+               }
+               see children
+               oTree.children[2] {
+                       Add("2.1") Add("2.2") Add("2.3") {
+                               Add("2.3.1") Add("2.3.2") Add("test")
+                       }
+               }
+               oTree.children[2].children[3].children[3].set("2.3.3")
+       }
+       see copy("*",60) + nl
+       oTree.print()
+
+この章をご確認ください:
+
+* StdLib 関数
+* StdLib クラス
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; RingLibSDL 
+
+RingLibSDL 
+==========
+
+Ring 1.0 では Allegro ゲームプログラミング・ライブラリ (RingAllegro) でゲームを作成できるようになりました。
+
+Ring 1.1 では LibSDL (RingLibSDL) も使用可能です。
+
+用例:
+
+.. code-block:: ring
+
+       Load "libsdl.ring"
+
+       SDL_Init(SDL_INIT_EVERYTHING)
+       win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
+       SDL_Delay(2000)
+       SDL_DestroyWindow(win)
+       SDL_Quit()
+
+
+RingLibSDL の章を参照してください。
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; デモプロジェクト - 2D ゲームエンジン
+
+デモプロジェクト - 2D ゲームエンジン
+====================================
+
+最良実行性能を得るには C/C++ などでゲームエンジンを作成後にエンジン用の Ring クラスを実装します。
+
+一部を除き 2D ゲームの構造は単純明快であり、 Ring でゲームエンジンを作成しても十分高速です。
+
+また、これは言語の概念として、オブジェクト指向プログラミング (OOP) によるオブジェクトの構築方法、
+入れ子構造の宣言型プログラミングの用法、
+または自然言語プログラミングによる強力なアクセス方法について学ぶための優れたデモプロジェクトです。
+
+このプロジェクトでは最初の方法を選択します (入れ子構造の宣言型プログラミング)。
+
+用例:
+
+.. code-block:: ring
+
+       Load "gameengine.ring"  # ゲームエンジンへ制御権を与えます。
+
+       func main               # ゲームエンジンにより呼び出されます。
+
+               oGame = New Game        # Game オブジェクトの作成
+               {
+                       title = "My First Game"
+                       text {
+                               x = 10  y=50
+                               animate = false
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "game development using ring is very fun!"
+                               color = rgb(0,0,0)      # 配色 = 黒色
+                       }
+                       text {
+                               x = 10  y=150
+                               # アニメーション部分 ======================================
+                               animate = true                          # アニメーションの使用
+                               direction = GE_DIRECTION_INCVERTICAL    # y の増分
+                               point = 400             # y=400 になるまで継続
+                               nStep = 3               # 毎回 y+= 3 を行う
+                               #==========================================================
+                               size = 20
+                               file = "fonts/pirulen.ttf"
+                               text = "welcome to the real world!"
+                               color = rgb(0,0,255)    # 配色 = 青色
+                       }
+                       Sound {                                 # 音声の再生
+                               file = "sound/music1.wav"       # イベントループの開始
+                       }               
+               }                                       # イベントループの開始
+
+“デモプロジェクト - 2D ゲームエンジン”の章を参照してください。
+
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; RingSQLite
+
+RingSQLite
+==========
+
+ODBC 関数 (Ring 1.0 以降)、 SQLite 関数 (Ring 1.1 以降) を実装しました。これにより、各種データベース、および MySQL に標準対応しました。
+
+用例:
+
+.. code-block:: ring
+
+       oSQLite = sqlite_init()
+
+       sqlite_open(oSQLite,"mytest.db") 
+
+       sql = "CREATE TABLE COMPANY("  +
+                "ID INT PRIMARY KEY     NOT NULL," +
+                "NAME           TEXT    NOT NULL," +
+                "AGE            INT     NOT NULL," +
+                "ADDRESS        CHAR(50)," +
+                "SALARY         REAL );"
+
+       sqlite_execute(oSQLite,sql) 
+
+       sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  +
+                "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); "     +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
+                "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
+                "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
+
+       sqlite_execute(oSQLite,sql)
+
+       aResult =  sqlite_execute(oSQLite,"select * from COMPANY") 
+       for x in aResult
+               for t in x
+                       see t[2] + nl
+               next
+       next
+       see copy("*",50)  + nl
+       for x in aResult
+               see x["name"] + nl
+       next
+       sqlite_close(oSQLite) 
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; 拡張機能に関するコード生成器の改善
+
+
+拡張機能に関するコード生成器の改善
+====================================
+
+Ring へ新しいライブラリを追加するためにコード生成器 (Ring にて記述) を使用しています。
+
+生成器は RingQt と RingAllegro の作成で、 Ring 1.1 では RingLibSDL の作成で使用しました。
+
+また、次の機能を追加しました。
+
+* 構造体メンバの設定と取得 (数値とポインタ)
+* 定数の使用
+* コード生成器の改善
+
+コード生成器の章を参照してください。
+
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; 新しい属性を定義するためにクラス範囲で Self.属性 の使用
+
+
+新しい属性を定義するためにクラス範囲で Self.属性 の使用
+=======================================================
+
+新しい属性を定義するためにクラス範囲 (クラス名の後、およびメソッドの前) で
+Self.属性 を使えます。
+
+
+.. code-block:: ring
+
+       class Person
+               name            # グローバル変数ではない場合は、属性名を定義します。
+               address
+               phone
+
+       class person2
+               self.name       # 必ず属性を定義してください。
+               self.address
+               self.phone
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; クラスのメソッド内で入れ子の括弧で This.属性 の使用
+
+
+クラスのメソッド内で入れ子の括弧で This.属性 の使用
+===================================================
+
+メソッドの内から別のオブジェクトへアクセスするために入れ子の括弧 { } を使えます。
+この場合、括弧内、および Self で {} でアクセスするオブジェクトを指定するときに
+現在のオブジェクトの有効範囲は変更されます。この場合において
+This.属性 および This.属性() は現在のクラスから作成される
+オブジェクトへアクセスするために使えます。
+
+詳細情報はオブジェクト指向プログラミングの章を参照してください。
+
+また RingQt (GUI) で開発した Weight History アプリケーションも併せてご確認ください。
+
+.. index:: 
+       pair: Ring 1.1 の変更履歴; 取扱説明書の増補
+
+取扱説明書の増補
+================
+
+Ring 1.1 の取扱説明書 (800 ページ) は Ring 1.0 の取扱説明書 (340 ページ) よりも増補しました。
+
+言語などについて最良の情報を提供するために章説を多数追加しました。
+
+* 言語リファレンス
+* スコープの規則
+* よくある質問と回答集
+
+など多岐にわたります!
diff --git a/docs/ja-jp/source/whatisnew10.txt b/docs/ja-jp/source/whatisnew10.txt
new file mode 100644 (file)
index 0000000..ab3a6c9
--- /dev/null
@@ -0,0 +1,210 @@
+.. index:: 
+       single: Ring 1.10 の変更履歴; はじめに
+
+========================
+Ring 1.10 の変更履歴
+========================
+
+Ring 1.10 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.10 の新機能!
+
+* Chess ゲーム
+* Minesweeper ゲーム
+* Knight Tour ゲーム
+* Game of Life ゲーム
+* Pong ゲーム
+* Snakes and Ladder ゲーム
+* 新作ゲーム
+* Visual Studio Code 用の Ring 拡張機能
+* Ring パッケージ管理プログラム (RingPM)
+* テストの改良
+* そのほかの改善
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Chess ゲーム
+
+Chess ゲーム
+============
+
+Chess ゲーム (二人対戦)
+
+.. image:: chessgame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Chess ゲーム
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Minesweeper ゲーム
+
+Minesweeper ゲーム
+==================
+
+ゲームの目的は「地雷」または、爆弾が隠されている長方形のゲーム盤をひとつも爆発させずにゲーム盤を片付けることです。
+
+.. image:: minesweeper.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Minesweeper ゲーム
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Knight Tour ゲーム
+
+Knight Tour ゲーム
+==================
+
+チェスゲーム盤の全陣地をナイトだけで移動します。
+
+あなたには 63回の移動だけで全陣地を訪れることができるでしょうか?
+
+.. image:: knighttour.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Knight Tour ゲーム
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Game of Life ゲーム
+
+Game of Life ゲーム
+===================
+
+このゲームは鑑賞用です。進化は初期状態により決定されるため、それ以外の入力値は不要です。
+
+Game of Life では初期構成と進化を観察します。上級プレイヤーは特殊属性模様を作り、相互作用の発生を楽しみます。
+
+.. image:: gameoflife.jpg
+       :width: 400pt
+       :height: 300pt
+       :alt: Game of Life ゲーム
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Pong ゲーム
+
+Pong ゲーム
+===========
+
+シンプルな「テニス風」の対戦ゲームであり2本のラケットでボールを打ち返しながらで戦います。
+
+ボールを逃したほうが負けになります。
+
+.. image:: ponggame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Pong ゲーム
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Snakes And Ladder ゲーム
+
+Snakes And Ladder ゲーム
+========================
+
+Snakes and Ladder ゲームは Ring 用 2D ゲームエンジンを使用しています。
+
+.. image:: snakesgame.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Snakes ゲーム
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; 新作ゲーム
+
+新作ゲーム
+==========
+
+このゲームを application フォルダへ追加しました。
+
+* Lights Out ゲーム
+* Dots and Boxes ゲーム
+* Magic Four ゲーム
+* Sums Puzzle ゲーム
+
+このスクリーンショットは Sums Puzzle ゲームです。
+
+.. image:: sumpuzzle.png
+       :width: 400pt
+       :height: 300pt
+       :alt: Sums Puzzle ゲーム
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Visual Studio Code 用の Ring 拡張機能
+
+Visual Studio Code 用の Ring 拡張機能
+=====================================
+
+この拡張機能は Visual Studio Code でプログラミング言語 Ring に対応できるようにします。
+
+.. image:: ringinvscode.png
+       :width: 500pt
+       :height: 300pt
+       :alt: Visual Studio Code による Ring
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; Ring パッケージ管理プログラム (RingPM)
+
+Ring パッケージ管理プログラム (RingPM)
+======================================
+
+Ring にはパッケージのインストール、更新、および削除で使用するパッケージ管理プログラム (RingPM) があります
+
+パッケージ管理プログラムではパッケージ間の互換性確認のために意味つきバージョン管理を使用しています。
+
+このようなオプションがパッケージ管理プログラムにあります。
+
+.. code-block:: none
+
+       ===========================================================================
+       用法 : ringpm [コマンド]
+       コマンド : search  [キーワード...]
+       コマンド : refresh : レジストリの更新 (パッケージリスト)
+       コマンド : install [ <パッケージ名> [from <ユーザ名>] [branch <ブランチ名>] ]
+       コマンド : list    [-u : 更新の確認]
+       コマンド : run     [パッケージ名]
+       コマンド : update  <パッケージ名>
+       コマンド : remove  <パッケージ名>
+       コマンド : format  : すべてのパッケージを削除
+       コマンド : new     <パッケージ名>
+       コマンド : package : 現在のフォルダにパッケージを作成
+       ===========================================================================
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; テストの改善
+
+テストの改善
+============
+
+プログラミング言語 Ring のテスト用新型フレームワークです。
+
+.. image:: tests_shot.png
+       :width: 500pt
+       :height: 300pt
+       :alt: テスト
+
+
+.. index:: 
+       pair: Ring 1.10 の変更履歴; そのほかの改善
+
+そのほかの改善
+==============
+
+(1)  Ring コンパイラ : 定数のときに最初の演算子の検査を回避するよう「演算子 演算子」の対応を改善。
+(2)  Ring コンパイラ : 存在しないファイルを読み込もうとしたとき、エラーメッセージで呼出し元のファイル名を表示。
+(3)  Ring コンパイラ : ソースコードファイルで改行のない一行コメントに対応。
+(4)  Ring コンパイラ : nNewObject に対する Parser 構造体で nNoAssignment 属性を変更。
+(5)  Ring VM : 新規オブジェクトへアクセスするために弓括弧内での Return 命令の対応を改善。
+(6)  Ring VM : Dir() 関数 - 実行結果に "." や ".." を追加しないよう変更。
+(7)  Ring VM : Dir() 関数 - Linux と macOS において項目の種類で「ファイル|ディレクトリ」の実行結果を修正。
+(8)  Ring VM : ICO_LISTSTART - オブジェクトの属性設定時に pVM->aSetProperty を整理。
+(9)  Ring VM : ICO_NEWOBJECT - オブジェクトの属性設定時に pVM->aSetProperty を整理。
+(10) Ring VM : Setter および Getter メソッドの対応コードを改善。
+(11) Ring2EXE: ライブラリ情報を ring/ring2exe/libs フォルダ内の個別ファイルへ格納。
+(12) WebLib  : ライブラリを複数のソースコードファイルへ分割整理しました。
+(13) StdLib  : IsVowel() 関数 - コードの改善。
+(14) StdLib  : Palindrome() 関数から IsPalindrome() 関数へ名称変更。
+(15) RingQt  : QString クラスへ Count(), Left(), Mid() および Right() メソッドを追加。
+(16) Read Me ファイルの改善。
diff --git a/docs/ja-jp/source/whatisnew11.txt b/docs/ja-jp/source/whatisnew11.txt
new file mode 100644 (file)
index 0000000..eb8ac76
--- /dev/null
@@ -0,0 +1,487 @@
+.. index:: 
+       single: Ring 1.11 の変更履歴; はじめに
+
+====================
+Ring 1.11 の変更履歴
+====================
+
+Ring 1.11 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.11 の新機能!
+
+* 3Dサンプルの追加
+* Checkers ゲーム
+* Sokoban ゲーム
+* Maze ゲーム
+* Snake ゲーム
+* Sudoku ゲーム
+* デスクトップスクリーンショットアプリケーション
+* 文書読み上げアプリケーション
+* RingRayLib 拡張機能
+* ZeroLib ライブラリ
+* StdLib - 関数の追加
+* RingQt の改良
+* 実行性能の向上
+* 取扱説明書の増補
+* そのほかの改善
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; 3Dサンプルの追加
+
+3Dサンプルの追加
+================
+
+Ring 1.11 より Qt3D 用の3Dサンプルがあります。
+
+* Folder : ring/samples/other/UsingQt3D (18 サンプル収録)
+
+.. image:: qt3dex18.png
+       :alt: Qt3D 用例 18
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; Checkers ゲーム
+
+Checkers ゲーム
+===============
+
+遊びかたは国際ルールですが、強制ジャンプを採用した Checkers の方言です。
+
+無効な移動、無効なジャンプ、強制ジャンプを扱います。
+
+正方形は錯誤を示すために色分けしています。
+
+正方形は移動元と移動先、またはジャンプ先を示すために色分けしています。
+
+.. image:: checkersgame.png
+       :alt: Checkers ゲーム
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; Sokoban ゲーム
+
+Sokoban ゲーム
+==============
+
+Sokoban ゲームを短時間で実装したものです。
+
+2Dゲーム用 Ring ゲームエンジンを用いて二時間で開発しました (300行以下のコード)
+
+.. image:: sokoban.jpg
+       :alt: Sokoban ゲーム
+
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; Maze ゲーム
+
+Maze ゲーム
+===========
+
+Maze ゲームを短時間で実装したものです。
+
+2Dゲーム用 Ring ゲームエンジンを用いて開発しました (約100行のコード)
+
+このゲームにはレベルデザイナーも搭載してあります (10分で開発、37行のコード)
+
+.. image:: maze.png
+       :alt: Maze ゲーム
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; Snake ゲーム
+
+Snake ゲーム
+============
+
+Snake ゲームを短時間で実装したものです。
+
+2Dゲーム用 Ring ゲームエンジンを用いて開発しました (約200行のコード)
+
+.. image:: snake.png
+       :alt: Snake ゲーム
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; Sudoku ゲーム
+
+Sudoku ゲーム
+=============
+
+9×9 のマスから構成される各列・各段と 9 つの 3×3 の補助マスを埋めて、全部のマスを 1~9 までの数字を全て埋めて完成させます。
+
+.. image:: sudoku.jpg
+       :alt: Sudoku ゲーム
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; デスクトップスクリーンショットアプリケーション
+
+デスクトップスクリーンショットアプリケーション
+==============================================
+
+.. image:: dssapp.png
+       :alt: デスクトップスクリーンショットアプリケーション
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; 文書読み上げアプリケーション
+
+文書読み上げアプリケーション
+============================
+
+.. image:: ttsapp.png
+       :alt: 文書読み上げアプリケーション
+
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; RingRayLib 拡張機能
+
+RingRayLib 拡張機能
+===================
+
+Ring 1.11 より RayLib ゲームプログラミングライブラリに対応した拡張機能を提供しています。
+
+用例:
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth     = 800
+       screenHeight    = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose() 
+               BeginDrawing()
+               ClearBackground(RED)
+               DrawText("Congrats! You created your first window!", 190, 200, 20, WHITE)
+               EndDrawing()
+       end
+
+       CloseWindow()
+
+実行結果:
+
+.. image:: raylib_ex1.png
+       :alt: RayLib の用例
+
+用例:
+
+.. code-block:: ring
+
+       load "raylib.ring"
+
+       screenWidth = 800
+       screenHeight = 450
+
+       InitWindow(screenWidth, screenHeight, "raylib [shapes] example - basic shapes drawing")
+
+       SetTargetFPS(60)
+
+       while !WindowShouldClose()
+
+               BeginDrawing()
+
+               ClearBackground(RAYWHITE)
+
+               DrawText("some basic shapes available on raylib", 20, 20, 20, DARKGRAY)
+               DrawCircle(screenWidth/4, 120, 35, DARKBLUE)
+               DrawRectangle(screenWidth/4*2 - 60, 100, 120, 60, RED)
+               DrawRectangleLines(screenWidth/4*2 - 40, 320, 80, 60, ORANGE)  
+               DrawRectangleGradientH(screenWidth/4*2 - 90, 170, 180, 130, MAROON, GOLD)
+
+               DrawTriangle(Vector2(screenWidth/4*3, 80),
+                                Vector2(screenWidth/4*3 - 60, 150),
+                                Vector2(screenWidth/4*3 + 60, 150), VIOLET)
+
+               DrawPoly(Vector2(screenWidth/4*3, 320), 6, 80, 0, BROWN)
+
+               DrawCircleGradient(screenWidth/4, 220, 60, GREEN, SKYBLUE)
+
+               DrawLine(18, 42, screenWidth - 18, 42, BLACK)
+               DrawCircleLines(screenWidth/4, 340, 80, DARKBLUE)
+               DrawTriangleLines(Vector2(screenWidth/4*3, 160),
+                                 Vector2(screenWidth/4*3 - 20, 230),
+                                 Vector2(screenWidth/4*3 + 20, 230), DARKBLUE)
+               EndDrawing()
+
+       end
+
+       CloseWindow()
+
+実行結果:
+
+.. image:: ex1_basicshapes.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; ZeroLib ライブラリ
+
+ZeroLib ライブラリ
+==================
+
+Ring 1.11 より添字 0 始点のリストと文字列用クラスである ZeroLib ライブラリを提供しています。
+
+用例:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using List - Index start from 0"
+       List = Z( [1,2,3] )
+       List.Add(4)
+       List.Add(5)
+       ? List[0]
+       ? List[1]
+       ? List[2]
+       ? List[3]
+       ? List[4]
+       nIndex = List.find(2)
+       ? "Find(2) = " + nIndex
+       List.delete(0)
+       ? "After deleting the first item : List[0]" 
+       ? "Now List[0] = " + List[0] 
+
+       ? "Using String - Index start from 0"
+       String = Z( "Welcome" )
+       ? String[0]
+       ? String[1]
+       ? String[2]
+       ? String[3]
+       ? String[4]
+       ? String[5]
+       ? String[6]
+
+実行結果:
+
+.. code-block:: ring 
+
+       Using List - Index start from 0
+       1
+       2
+       3
+       4
+       5
+       Find(2) = 1
+       After deleting the first item : List[0]
+       Now List[0] = 2
+       Using String - Index start from 0
+       W
+       e
+       l
+       c
+       o
+       m
+       e
+
+       
+.. index:: 
+       pair: Ring 1.11 の変更履歴; StdLib - 関数の追加
+
+StdLib - 関数の追加
+===================
+
+次の関数を StdLib へ追加しました
+
+* IsListContainsItems(aParent,aChild)
+* IsBetween(nNumber,nMin,nMax)
+* TimeInfo(cInformation)
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       ? "Using the IsListContainsItems() function" 
+       aList1 = "a":"z"
+       aList2 = [:h,:l,:p,:u]
+       ? IsListContainsItems(aList1,aList2)
+       ? "Using the IsBetween() function"
+       ? isBetween(1,3,4)
+       ? isBetween(4,1,6)
+       ? "Using the TimeInfo() function"
+       ? timeInfo(:date)
+       ? timeInfo(:year)
+       ? timeInfo(:time)
+       ? timeInfo(:hour_12)
+
+実行結果:
+
+.. code-block:: ring
+
+       Using the IsListContainsItems() function
+       1
+       Using the IsBetween() function
+       0
+       1
+       Using the TimeInfo() function
+       05/24/19
+       2019
+       15:30:33
+       03
+
+前述の関数に関する詳細情報は StdLib 関数の章を参照してください。
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; RingQt の改良
+
+RingQt の改良
+=============
+
+* Qt 5.12.3 を用いての RingQt のビルド
+
+* Android 用 RingQt - WebView モジュールの存在時に WebView をインクルードするためにプロジェクトファイルを更新
+
+* QString クラス - 新規メソッド
+
+       * compare()
+       * contains()
+       * indexOf()
+       * insert()
+       * isRightToLeft()
+       * remove()
+       * repeated()
+       * replace()
+       * startsWith()
+       * endsWith()
+       * toHtmlEscaped()
+       * clear()
+       * isnull()
+       * resize()
+       * fill()
+
+* QAxBase & QVariant - API の改善
+
+* RingQt へ下記のクラスを追加しました。
+
+       * QQuickView クラス
+       * QPrintDialog クラス
+       * QAxWidget2 クラス
+       * QTextToSpeech クラス 
+       * QGraphicsView クラス
+       * QAbstractAspect クラス
+       * QNode クラス
+       * QEntity クラス
+       * QTransform クラス
+       * QAspectEngine クラス
+       * QTorusMesh クラス
+       * QConeMesh クラス
+       * QCylinderMesh クラス
+       * QCuboidMesh クラス
+       * QPlaneMesh クラス
+       * QSphereMesh クラス
+       * QPhongMaterial クラス
+       * QForwardRenderer クラス
+       * Qt3DWindow クラス
+       * QAbstractCameraController クラス
+       * QFirstPersonCameraController クラス
+       * QTextureMaterial クラス
+       * QExtrudedTextMesh クラス
+       * QText2DEntity クラス
+       * QSkyBoxEntity クラス
+       * QConeGeometry クラス
+       * QOrbitCameraController クラス
+       * QDiffuseSpecularMaterial クラス
+       * QGoochMaterial クラス
+       * QMetalroughMaterial クラス
+       * MorphPhongMaterial クラス
+       * QPervertexColorMaterial クラス
+       * QInputAspect クラス
+       * QFrameAction クラス
+       * QLogicAspect クラス
+       * QCamera クラス
+       * QCameraLens クラス
+       * QMesh クラス
+       * QTechnique クラス
+       * QMaterial クラス
+       * QEffect クラス
+       * QRenderPass クラス
+       * QSceneLoader クラス
+       * QPointLight クラス
+       * QRenderAspect クラス
+       * QTextureLoader クラス
+       * QObjectPicker クラス
+       * QCameraSelector クラス
+       * QCullFace クラス
+       * QDepthTest クラス
+       * QViewPort クラス
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; 実行性能の向上
+
+実行性能の向上
+==============
+
+Ring 1.11 は Ring 1.10 よりも高速です。
+
+アプリケーションにもよりますが 10% ~ 30% ほどの性能向上が見込めます。
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; 取扱説明書の増補
+
+取扱説明書の増補
+================
+
+次の章を取扱説明書へ追加しました。
+
+* チュートリアル: C/C++ による拡張機能の開発方法
+* Qt3D の用法
+* ZeroLib の用法
+* RingRayLib の用法
+
+.. index:: 
+       pair: Ring 1.11 の変更履歴; そのほかの改善
+
+そのほかの改善
+==============
+
+* 新規サンプル
+       * samples/other/ModuloTimesTableCircle フォルダ
+       * samples/other/saveimage folder
+       * samples/other/UsingQML folder
+       * samples/other/myguicontrol.ring 
+       * samples/other/qcalendarwidget.ring
+       * samples/other/qcalendarwidget2.ring
+       * samples/other/sudoku-KL02.ring
+       * samples/other/sudoku-KL02-longproblem.ring
+       * samples/other/zerobasedlist.ring
+       * ringlibs/gameengine/lesson17.ring (ボタンの用法)
+       * samples/other/SQLTutorial/SQL-Tutorial.ring
+       * samples/other/DrawFourier/AA-Draw-Fourier.ring
+       * samples/other/SmartPhoneEmulator/ejemploKey.ring
+       * samples/other/DiscreteFourierTransform/DiscreteFourierTransform.ring
+       * samples/other/phonedatabase/PhoneDatabase.ring
+* Gold Magic 800 - レベルの追加 (44 レベル)
+* Fifteen Puzzle ゲーム 3D - コードの改善 (アニメーション速度)
+* Flappy Bird 3000 - ゲームオーバー時、時機 (鳥) を落下させる演出へ変更
+* Ring Notepad - 着脱可能ウィンドウ方式時のキーボード・ショートカット
+* Ring Notepad - 関数リストの表示時に "_" 文字がある関数を除外しなくなりました
+* Ring Notepad - 実行結果ウィンドウ - データの送信 - コードの改良
+* Ring Notepad - 検索と置換ウィンドウ - コードの改良
+* Ring Notepad - 編集メニュー - テキストの挿入ウィンドウ
+* Ring Notepad - 編集メニュー - 大文字と小文字オプション
+* Ring Notepad - 編集メニュー - 接頭字オプション
+* Ring Notepad - 編集メニュー - コメント行とコメントブロック行
+* Ring Notepad - ファイルタブ - コンテキストメニュー (ほかのファイルを閉じる、使用中のファイルを閉じる、すべてのファイルを閉じる)
+* RingPM - パッケージの更新 - 依存性の再インストールをしなくなりました
+* 2Dゲーム用 Ring ゲームエンジン - 追加 : GE_FULLSCREEN, GE_SCREEN_W および GE_SCREEN_H
+* 2Dゲーム用 Ring ゲームエンジン - 追加 : ゲームオブジェクトの name プロパティ
+* 2Dゲーム用 Ring ゲームエンジン - 追加 : find() ゲームクラスのメソッド (名前によるオブジェクトの検索)
+* 2Dゲーム用 Ring ゲームエンジン - oGame[:ObjectName] によるオブジェクトへのアクセスに対応
+* Natural ライブラリ - 実行性能の改良
+* FoxRing - 追加: frCTOD() 関数
+* 拡張機能用のコード生成器 - 新規構造体によるマネージドポインタを用いた関数の生成
+* Ring VM - Ring オブジェクトファイルエラーに関するエラーコード
+* Ring VM - Eval() 関数 - コードの改良 (実行性能の改善)
+* Ring VM - ステート管理 - コードの改良
+* Ring VM - ">" 演算子と演算子オーバーロード - コードの改良
+* Ring VM - 代入とオブジェクトメソッドの呼び出し - コードの改良
+* Ring VM - オブジェクト指向プログラミング (OOP) - Getter、 メソッド - 実行性能の改善
+* Ring API - C 拡張機能での RING_API_ISLIST() の対応
+* Ring コンパイラ - 条件分岐の記述時に開業後の数値とリテラルに対応
+* Ring コンパイラ - 行の開始におけるセミコロン (;) へ対応
+* Ring コンパイラ - ループ外からの Loop と Exit 命令は使えなくなりました
diff --git a/docs/ja-jp/source/whatisnew12.txt b/docs/ja-jp/source/whatisnew12.txt
new file mode 100644 (file)
index 0000000..1b438bd
--- /dev/null
@@ -0,0 +1,329 @@
+.. index:: 
+       single: Ring 1.12 の変更履歴; はじめに
+
+====================
+Ring 1.12 の変更履歴
+====================
+
+Ring 1.12 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.12 の新機能!
+
+* Go ゲーム
+* ASCII コード表アプリケーション
+* BMI 計算機アプリケーション
+* カレンダーアプリケーション
+* ユリウス積日カレンダーアプリケーション
+* チュートリアル: 数値を単語表記へ変換
+* Load Again コマンド
+* ring_state_filetokens() 関数
+* 組込型オブジェクトファイルの生成
+* RingRayLib の改良
+* そのほかの改善
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; Go ゲーム
+
+Go ゲーム
+=========
+
+囲碁ゲームの実装です
+
+.. image:: go.png
+       :alt: Go Game
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; ASCII コード表アプリケーション
+
+ASCII コード表アプリケーション
+==============================
+
+ASCII コード表を表示するアプリケーションです。
+
+.. image:: asciitable.png
+       :alt: ASCII Table
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; BMI 計算機アプリケーション
+
+BMI 計算機アプリケーション
+==========================
+
+BMI を計算するだけのアプリケーションです。
+
+.. image:: BMI.png
+       :alt: BMI 計算機
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; カレンダーアプリケーション
+
+カレンダーアプリケーション
+==========================
+
+これは 2020 年カレンダーです。
+
+.. image:: calendar.png
+       :alt: calendar
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; ユリウス積日カレンダーアプリケーション
+
+ユリウス積日カレンダーアプリケーション
+======================================
+
+これはユリウス積日カレンダーアプリケーションです。
+
+.. image:: juliancalendar.png
+       :alt: juliandaycalendar
+
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; チュートリアル: 数値を単語表記へ変換
+
+チュートリアル: 数値を単語表記へ変換
+====================================
+
+フォルダ : ring/samples/other/number2words
+
+.. image:: number2words.png
+       :alt: Number2Words
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; Load Again コマンド
+
+Load Again コマンド
+===================
+
+Ring 1.12 から Load Again コマンドが使えるようになりました。
+
+このコマンドを使うと Ring ソースファイルにある定数を何度でも読み込めます。
+
+これはグローバル定数による翻訳用 Ring ソースファイルを使用するときに便利です。
+
+用例:
+
+下記はアラビア語と英語に対応するプロジェクトからの引用です。
+
+english.ring と arabic.ring ファイルには翻訳で使う定数があります。
+
+これらのファイルはプログラムの開始時に読み込まれます。
+
+Load コマンドで同じファイルの再読み込みはできません。
+
+Load コマンドは同じソースファイルを一度だけ読み込み、それ以降の読み込み指定は無理するからです。
+
+しかし Load Again コマンドならできます。
+
+よって、下記のコードを使うと実行中にファイルの再利用ができます。
+
+.. code-block:: ring
+
+       func setLang nLanguage
+               if C_ENV_DEFAULT_LANG = nLanguage
+                       return
+               ok
+               C_ENV_DEFAULT_LANG = nLanguage
+               # 言語の変更
+                       switch nLanguage 
+                               on C_TRANSLATION_ENGLISH
+                                       load again "translation/english.ring"
+                               on C_TRANSLATION_ARABIC 
+                                       load again "translation/arabic.ring"
+                       off
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; ring_state_filetokens() 関数
+
+ring_state_filetokens() 関数
+============================
+
+ring_state_filetokens() 関数は Ring ソースコードファイルにあるトークンを一括取得します。
+
+.. code-block:: ring
+
+       C_FILENAME      = "test_tokens.ring"
+       C_WIDTH         = 12
+
+       # ファイルの書き込み
+               write(C_FILENAME,'
+                               see "Hello, World!"
+                               ? 3*2+3
+                               Name = "Ring"
+                               ? Name
+       ')
+
+       # トークンの種類
+               C_KEYWORD       = 0
+               C_OPERATOR      = 1
+               C_LITERAL       = 2
+               C_NUMBER        = 3
+               C_IDENTIFIER    = 4
+               C_ENDLINE       = 5
+
+       # キーワードリスト
+       aKEYWORDS = ["IF","TO","OR","AND","NOT","FOR","NEW","FUNC", 
+       "FROM","NEXT","LOAD","ELSE","SEE","WHILE","OK","CLASS","RETURN","BUT", 
+       "END","GIVE","BYE","EXIT","TRY","CATCH","DONE","SWITCH","ON","OTHER","OFF", 
+       "IN","LOOP","PACKAGE","IMPORT","PRIVATE","STEP","DO","AGAIN","CALL","ELSEIF", 
+       "PUT","GET","CASE","DEF","ENDFUNC","ENDCLASS","ENDPACKAGE", 
+       "CHANGERINGKEYWORD","CHANGERINGOPERATOR","LOADSYNTAX"]
+
+       pState = ring_state_new()
+       aList = ring_state_filetokens(pState,C_FILENAME)
+       PrintTokens(aList)
+       ring_state_delete(pState)
+
+       func PrintTokens aList
+               for aToken in aList
+                       switch aToken[1]
+                       on C_KEYWORD 
+                               ? Width("Keyword",C_WIDTH) + ": "  + aKeywords[0+aToken[2]]
+                       on C_OPERATOR 
+                               ? Width("Operator",C_WIDTH)  + ": " + aToken[2]
+                       on C_LITERAL 
+                               ? Width("Literal",C_WIDTH)  + ": " + aToken[2]
+                       on C_NUMBER 
+                               ? Width("Number",C_WIDTH)  + ": " + aToken[2]
+                       on C_IDENTIFIER 
+                               ? Width("Identifier",C_WIDTH)  + ": " + aToken[2]
+                       on C_ENDLINE 
+                               ? "EndLine"
+                       other
+                               
+                       off
+               next
+
+       func Width cText,nWidth
+               return cText+copy(" ",nWidth-len(cText))
+
+実行結果:
+
+.. code-block:: none
+
+       EndLine
+       Keyword     : SEE
+       Literal     : Hello, World!
+       EndLine
+       Operator    : ?
+       Number      : 3
+       Operator    : *
+       Number      : 2
+       Operator    : +
+       Number      : 3
+       EndLine
+       Identifier  : name
+       Operator    : =
+       Literal     : Ring
+       EndLine
+       Operator    : ?
+       Identifier  : name
+       EndLine
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; 組込型オブジェクトファイルの生成
+
+組込型オブジェクトファイルの生成
+================================
+
+-geo オプションはソースコードファイル (\*.ring) から組込型オブジェクトファイル (C ソースコード) を生成します。
+
+コマンド:
+
+.. code-block:: ring
+
+       ring test.ring -geo
+
+このコマンドは最低でも 3 ファイルを生成します。
+
+.. code-block:: ring
+
+       test.c
+       ringappcode.c
+       ringappcode.h
+
+プロジェクトの規模により、大量のファイルを生成します。
+
+生成後のファイルは Ring VM のバイトコードとして実行されます。
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; RingRayLib の改良
+
+RingRayLib の改良
+=================
+
+RingRayLib の新作サンプル集を追加しました。
+
+       * 音声の読み込みと再生
+       * テクスチャの入力
+       * 音楽のストリーミング再生
+       * 長方形の拡縮
+       * カラーパレット
+       * 視線追従
+       * 当たり判定の領域
+       * ベジェ曲線
+       * 画像生成
+       * 15パズルゲーム
+       * キュービックマップ
+
+スクリーンショット:
+       
+.. image:: raylib_cubicmap.png
+       :alt: RayLib の用例
+
+.. index:: 
+       pair: Ring 1.12 の変更履歴; そのほかの改善
+
+そのほかの改善
+==============
+
+* 新作サンプル集
+       * ring/samples/other/Hex2UTF8.ring
+       * ring/samples/other/CalmoSoftPrimesTable.ring
+       * ring/samples/other/CalmoSoftTicTacToeGame.ring
+       * ring/samples/other/CalmoSoftSimpleGoGame.ring
+       * ring/samples/other/arabicmysql.ring 
+       * ring/samples/other/CalmoSoftExtraCube.ring
+       * ring/samples/other/DynamicCode/anonfunc.ring
+       * ring/samples/other/DynamicCode/deletethisfile.ring
+       * ring/samples/other/DynamicCode/modifythisfile.ring
+       * ring/samples/other/changesyntax/ArabicDemo.ring
+       * ring/samples/other/changesyntax/EnglishDemo.ring
+       * ring/samples/other/changesyntax/ChangeKeywordsArabic.ring
+       * ring/samples/other/changesyntax/ChangeKeywordsEnglish.ring
+       * ring/samples/other/changesyntax/pascal.ring
+       * ring/samples/other/hijridate.ring
+
+* Ring ノートパッド - プロジェクトファイル - デスクトップ画面の幅による最小幅の設定
+* Ring ノートパッド - 実行結果ウィンドウ - テキスト末尾へのカーソル移動
+* Ring ノートパッド - 実行結果ウィンドウ - 改行を正しく表示できるようになりました
+* フォームデザイナー - スタイルの改善 - 色と寸法の制御
+* VideoMusicPlayer を RingQt 更新後に正常動作させるために更新
+* FlappyBird3000 - Android での応答速度を向上
+* Snake ゲーム : デフォルトのウィンドウ寸法を変更 (800x600)
+* Maze ゲーム : デフォルトのウィンドウ寸法を変更 (800x600) 
+* Maze ゲーム : プレイヤによるカメラ移動
+* Maze ゲーム : ゲームをやり直すときに You Win メッセージを消去
+* ゲームエンジン : ゲームウィンドウが生成できないときにエラーメッセージを表示
+* Ring テスト : Linux と macOS 用のビルドファイル build.sh を追加
+* RingQt : Qt 5.12.6 へ更新
+* RingQt : QQMLEngine クラスの追加
+* RingQt : Bluetooth 対応を除く RingQt ビルドファイルの追加
+* RingQt : イベントコードの大きさを従来の 100 文字から 200 文字へ変更
+* RingQt : RingQt クラスの章において Qt ドキュメントのリンクを修正
+* RingQt for Android : Ring オブジェクトファイル (ringo) の実行用コードの改善
+* RingQt アプリケーションを正常に配布できるようにするために Ring2EXE の RingQt 用の構成ファイルを更新
+* コード生成器 : 構造体関数の生成時に関数名を英数小文字へ変換するようになりました
+* OSCopyFolder() 関数でも下位フォルダのファイルをコピーできるようにするために更新
+* fgetpos() 関数は想定した動作になるよう更新
+* IsFunction() 関数は英数大小同一動作になるよう更新
+* Space() 関数は空白文字列の出力を消去するよう更新
+* Ring コンパイラ : Windows 用の Clang コンパイラのビルドファイル buildclang.bat を追加
+* Ring VM - 内部ハッシュ関数の更新
+* Ring VM - オブジェクトの新規作成時における pVM->aSetProperty 設定用コードの改善
+* Ring VM - ステート管理用のコードを改善
diff --git a/docs/ja-jp/source/whatisnew2.txt b/docs/ja-jp/source/whatisnew2.txt
new file mode 100644 (file)
index 0000000..427d125
--- /dev/null
@@ -0,0 +1,340 @@
+.. index:: 
+       single: Ring 1.2 の変更履歴; はじめに
+
+===================
+Ring 1.2 の変更履歴
+===================
+
+Ring 1.2 公開版の変更点と新機能を学びます。
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.2 の新機能!
+
+* 新しい関数
+* 関数の改良
+* Ring ノートパッドの改良
+* RingQt の改良
+* RingQt 用のオブジェクトライブラリ
+* RingLibCurl
+* Call 命令の改良
+* NULLPointer() の代わりに NULL を使用
+* 警告表示のオプション
+* 品質の改善
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; 新しい関数
+
+新しい関数
+==========
+
+* PtrCmp() 関数は GUI オブジェクトなどの C ポインタ間で比較を行う新しい関数です。
+* PrevFileName() 関数は以前に使用していたソースファイル名を返すために追加されました。
+* RingVM_CFunctionsList() 関数は C で記述された関数のリストを返すために追加されました。
+* RingVM_FunctionsList() 関数は Ring で記述された関数のリストを返すために追加されました。
+* RingVM_ClassesList() 関数はクラスのリストを返すために追加されました。
+* RingVM_PackagesList() 関数はパッケージのリストを返すために追加されました。
+* RingVM_MemoryList() 関数はメモリスコープと変数のリストを返すために追加されました。
+* RingVM_CallList() 関数は関数の呼び出しリストのリストを返すために追加されました。
+* RingVM_FilesList() 関数は Ring ファイルのリストを返すために追加されました。
+
+
+用例:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp.ring","r")
+       fp2 = fp
+       fp3 = fopen("ptrcmp.ring","r")
+
+       see ptrcmp(fp,fp2) + nl
+       see ptrcmp(fp,fp3) + nl
+
+       fclose(fp)
+       fclose(fp3)
+
+実行結果:
+
+.. code-block:: ring
+
+       1
+       0
+
+また ‘=’ 演算子で比較することもできます。
+
+用例:
+
+.. code-block:: ring
+
+       fp = fopen("ptrcmp2.ring","r")
+       fp2 = fopen("ptrcmp2.ring","r")
+       fp3 = fp
+       see fp = fp2
+       see nl
+       see fp = fp3
+       fclose(fp)
+       fclose(fp2)
+
+実行結果:
+
+.. code-block:: ring
+
+       0
+       1
+
+
+用例:
+
+stdlib.ring にある PrevFileName() は呼び出し元にある関数のファイルが、プログラムのメインソースファイルであるかどうかを確認します。
+
+.. code-block:: ring
+
+       Func IsMainSourceFile
+               if PrevFileName() = sysargv[2]
+                       return true
+               ok
+               return false
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; 関数の改良
+
+関数の改良
+==========
+
+* find() 関数は GUI オブジェクトなどの検索に対応するために更新されました。
+* type() 関数 C ポインタ型を表示するために更新されました (GUI オブジェクトのクラス名など)。
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; Ring ノートパッドの改良
+
+Ring ノートパッドの改良
+=======================
+
+Ring ノートパッドはファイル切り替え時に行番号を復元するために、
+現在開いているファイルの行番号を保存します。
+
+また Ring ノートパッドはユーザによりファイルが切り替えられたときに、
+ファイルの内容が変更された場合は保存するかどうかをユーザに問い合わせます。
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; RingQt の改良
+
+RingQt の改良
+=============
+
+RingQt クラスはイベントを取得するためのメソッドを実装するために更新されました
+(イベントが発行されるときにコード実行されます)。これは特定時間内にイベントの
+有効・無効化、またはイベントの情報を取得に必要なものです。
+
+このコードの用例では、イベントを無効にしてからメソッドの呼び出し後にイベントを再度有効にします。
+
+.. code-block:: ring
+
+       cEvent = oView.oListResult.getCurrentItemChangedEvent()
+       oView.oListResult.setCurrentItemChangedEvent("")
+       FindValueAction()       # メソッドを呼び出すまではイベントを無効にします。
+       oView.oListResult.setCurrentItemChangedEvent(cEvent)
+
+また出力の true または false をイベント関数から設定可能にする新しいメソッドを使用する
+setEventOutput クラスの追加に伴い QAllEvents クラスを更新しました。
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+
+       MyApp = New qApp {
+                       win = new qWidget() {
+                                       setwindowtitle("Hello World")
+                                       setGeometry(100,100,370,250)
+                                       lineedit1 = new qlineedit(win) {
+                                               setGeometry(10,100,350,30)
+                                               setinputmask("9999;_") 
+                                               oFilter = new qallevents(lineedit1)
+                                               oFilter.setfocusoutEvent("pMove()")
+                                               installeventfilter(oFilter)
+                                       }
+                                       lineedit2 = new qlineedit(win) {
+                                                       setGeometry(10,150,350,30)
+                                       }
+                                       show()
+                       }
+                       exec()
+       }
+       
+       func pMove
+                  win.setWindowTitle("xxxx")
+                  oFilter.setEventOutput(False)
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; RingQt 用のオブジェクトライブラリ
+
+RingQt 用のオブジェクトライブラリ
+=================================
+
+Ring 1.2 には RingQt アプリケーション用のオブジェクトライブラリが付属しています。
+ウィンドウオブジェクトへのグローバル変数の使用、およびオブジェクト名でイベントをオブジェクトへ接続するのではなく、オブジェクトライブラリは GUI オブジェクトの管理を行います。また、同一クラスから複数ウィンドウを手軽に作成するために、普遍的な API を提供しています。
+さらにライブラリでは、イベントが発行されたときに実行されるメソッドを手軽に設定する方法を提供しています。同じく子またはサブウィンドウから親または呼び出し元のウィンドウを手軽に使うための自然なインタフェースを提供しています。
+
+オブジェクトライブラリは MVC デザインパターンで設計しています。
+
+オブジェクトライブラリは RingQt へ統合されており RingQt から直接使えます。
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               open_window( :MainWindowController )
+               exec()
+       }
+
+       class MainWindowController from WindowsControllerParent
+               oView = new MainWindowView
+               func SubWindowAction
+                       Open_window( :SubWindowController )
+                       Last_Window().SetParentObject(self)
+
+       class MainWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Main Window")
+                       btnSub = new qPushButton(win) {
+                               setText("Sub Window")
+                               setClickEvent( Method( :SubWindowAction ) )
+                       }
+                       resize(400,400)
+               }
+
+       class SubWindowController from WindowsControllerParent
+               oView = new SubWindowView
+               func SetMainWindowTitleAction
+                       Parent().oView.win.SetWindowTitle("Message from the Sub Window")
+                       oView.win.SetWindowTitle("Click Event Done!")
+
+       class SubWindowView from WindowsViewParent
+               win = new qWidget() {
+                       SetWindowTitle("Sub Window")
+                       btnMsg = new qPushButton(win) {
+                               setText("Set Main Window Title")
+                               setClickEvent( Method( :SetMainWindowTitleAction ) )
+                       }
+                       btnClose = new qPushButton(win) {
+                               Move(200,0)
+                               setText("Close")
+                               setClickEvent( Method( :CloseAction ) )
+                       }
+                       resize(400,400)
+               }
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; RingLibCurl
+
+RingLibCurl
+===========
+
+LibCurl ライブラリは Ring 1.0 から実装されており、 Download() および SendEmail() 関数を使えます。
+Ring 1.2 では 強力なライブラリである RingLibCurl (LibCurl) 用の関数を追加しました。
+
+用例:
+
+.. code-block:: ring
+
+       load "libcurl.ring"
+
+       curl = curl_easy_init()
+
+       cPostThis = "page=4&Number1=4&Number2=5"
+       curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3")
+       curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis)
+
+       curl_easy_perform(curl)
+
+       curl_easy_cleanup(curl)
+
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; Call 命令の改良
+
+Call 命令の改良
+===============
+
+Call 命令はオブジェクトの属性からの関数呼び出しへ対応するために更新されました
+(これは変数に限りません)。
+
+このコードの用例は Stars Fighter ゲームからの引用です。
+
+.. code-block:: ring
+
+       cFunc = oself.keypress
+       call cFunc(oGame,oSelf,Key_Space)
+
+一行で記述できます。
+
+.. code-block:: ring
+
+       call oself.keypress(oGame,oSelf,Key_Space)
+
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; NULLPointer() の代わりに NULL を使用
+
+NULLPointer() の代わりに NULL を使用
+====================================
+
+NULLPointer() 関数の代わりに NULL を仮引数として渡せます。
+
+このコードの用例は RingLibSDL からの引用です。
+
+.. code-block:: ring
+
+       SDL_RenderCopy(SDL_ren,tex,NULLPointer(),rect)
+
+この行のように書くことができます。
+
+.. code-block:: ring
+
+       SDL_RenderCopy(SDL_ren,tex,NULL,rect)
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; 警告表示のオプション
+
+警告表示のオプション
+====================
+
+Ring 1.2 では Ring コンパイラで警告表示のオプション (-w) を実装するために更新しました。
+
+用例:
+
+.. code-block:: ring
+       
+       load "stdlib.ring"
+       load "stdlib.ring"
+
+警告表示のオプションでプログラムをコンパイルすると、ファイルの重複エラーが表示されますが、
+オプションを指定しない場合はエラーが非表示となります。
+
+これは警告であり、大規模プロジェクトでは同じファイルが一回以上使用されるためです。
+このコードの用例がある各ファイルを開始することは普通です。
+IsMainSourceFile() 関数は stdlib.ring の一部です。
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       if IsMainSourceFile() 
+               // 動作検証
+       ok 
+
+.. index:: 
+       pair: Ring 1.2 の変更履歴; 品質の改善
+
+品質の改善
+==========
+
+Ring 1.2 では動作安定性を向上させました。日々の実務プロジェクトで Ring を利用した成果により、大量の不具合を修正しました。
+高速化のために SubStr() などの関数を最適化しました。
+取扱説明書についても、さらに改善しました。
diff --git a/docs/ja-jp/source/whatisnew3.txt b/docs/ja-jp/source/whatisnew3.txt
new file mode 100644 (file)
index 0000000..7c07ca6
--- /dev/null
@@ -0,0 +1,488 @@
+.. index:: 
+       single: Ring 1.3 の変更履歴; はじめに
+
+=======================
+Ring 1.3 の変更履歴
+=======================
+
+Ring 1.3 公開版の変更点と新機能を学びます。
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.3 の新機能!
+
+* RingQt の改善
+* Ring ノートパッドの改善
+* Emacs Editor 用の Ring モード
+* StdLib の改善
+* Loop/Exit 命令の改善
+* 新しい関数
+* 参照による Self 返し
+* ‘from’ キーワードの代わりに‘<’または‘:’演算子の使用
+* Ring のステートを共有せずに Ring を組み込む
+* RingZip ライブラリ
+* フォームデザイナー
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; RingQt の改善
+
+RingQt の改善
+=============
+
+① QPixMap クラスの別バージョンとしてオブジェクトの初期化時に (int width,int height) を
+扱う (QPixMap2) を追加しました。
+
+用例:
+
+.. code-block:: ring
+
+       Load "guilib.ring"
+       New qapp 
+       {
+               win1 =  new qwidget() 
+               {
+                       setwindowtitle("Drawing using QPixMap")
+                       setgeometry(100,100,500,500)
+                       label1 = new qlabel(win1) 
+                       {
+                               setgeometry(10,10,400,400)
+                               settext("")
+                       }
+                       imageStock = new qlabel(win1) 
+                       {               
+                               image = new qPixMap2(200,200)   
+                               color = new qcolor() {
+                                       setrgb(255,255,255,255)
+                               }
+                               pen = new qpen() {
+                                       setcolor(color)
+                                       setwidth(10)
+                               }
+                               new qpainter() {
+                                       begin(image)
+                                               setpen(pen)
+                                               drawline(0,0,200,200)
+                                               drawline(200,0,0,200)
+                                       endpaint()
+                               }
+                               setpixmap(image)   
+                       }   
+                       show()
+               }
+               exec()
+       }
+
+スクリーンショット:
+
+.. image:: ringqtpixmap2.png
+       :alt: QPixMap2 の使用
+
+② オブジェクトライブラリへ関数を実装しました。
+
+* Last_WindowID()
+* Open_WindowNoShow()
+* Open_WindowAndLink()
+
+なお WindowViewBase クラス名は WindowsViewParent へ変更されました。
+
+このコードの用例では Open_WindowAndLink() は SecondWindowController
+クラスからオブジェクトの作成を行い FirstWindowController クラスへ
+SecondWindow() メソッドを追加します。
+また SecondWindowController クラスへ FirstWindow() メソッドを追加します。
+
+FirstWindowController クラスにある SendMessage() メソッドは
+SecondWindow() メソッドでオブジェクトへアクセスするために使えます。
+
+.. code-block:: ring
+
+       class firstwindowController from windowsControllerParent
+
+           oView = new firstwindowView
+
+           func OpenSecondWindow
+               Open_WindowAndLink(:SecondWindowController,self)
+
+           func SendMessage
+               if IsSecondWindow() 
+                   SecondWindow().setMessage("Message from the first window")
+               ok
+
+           func setMessage cMessage
+               oView.Label1.setText(cMessage)
+
+
+③ このクラスを RingQt へ追加しました
+
+* QPixMap2
+* QScrollArea
+* QSplitter
+* QCompleter
+* QCompleter2
+* QCompleter3
+* QProcess
+* QMdiArea
+* QMdiSubWindow
+* QCursor
+* QListView
+* QDesktopServices
+
+④ qt.rh には各種定数が定義されています (guilib.ring から読み込みます)
+
+⑤ 新しいクラス名 - インデックスは 1 から開始します。
+
+RingQt には新しいクラスが追加されています - 別バージョンのクラス名は小文字 “q” で開始されません。
+また GUI コントロールなど扱うときにインデックスが 1 から開始するようにメソッドを更新してあります。
+
+* ComboBox
+* ListWidget
+* TableWidget
+* TreeWidget
+
+これらのクラスは次のパッケージ名で提供されており guilib.ring の内部に存在します : System.GUI
+
+使用するには
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       import System.GUI
+
+これは以前のコードに一切影響を与えません。
+つまり Ring の規則と整合性がある優れたコードへの第三の選択です。
+
+またフォームデザイナーは、クラス間で「インデックスを 0 から開始」
+または「インデックスを 1 から開始」を選択肢を使用するために更新しました。
+
+用例 (フォームデザイナーを使用)
+
+(1) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartView.ring
+
+(2) https://github.com/ring-lang/ring/blob/master/applications/formdesigner/tests/indexstart/indexstartController.ring 
+
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; Ring ノートパッドの改善
+
+Ring ノートパッドの改善
+=======================
+
+① QTextEdit の代わりに QPlainTextEdit を使用
+
+② ソースコード各行の行番号を表示
+
+スクリーンショット:
+
+.. image:: rnotelinenumber.png
+       :alt: Ring ノートパッド - 行番号
+
+③ Ring 関数名、クラス、および開いているファイル語句の自動補完
+
+.. image:: autocomplete.png
+       :alt: Ring ノートパッド - 自動補完
+
+④ 関数とメソッドのリスト
+
+.. image:: functionslist.png
+       :alt: Ring ノートパッド - 関数リスト
+
+⑤ 実行結果のウィンドウ
+
+.. image:: outputwin.png
+       :alt: Ring ノートパッド - 実行結果ウィンドウ
+
+⑥ クラスのリスト
+
+.. image:: classeslist.png
+       :alt: Ring ノートパッド - クラスのリスト
+
+⑦ 現在のスタイルを変更
+
+.. image:: rnotestylemenu.png
+       :alt: Ring ノートパッド - スタイルメニュー
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; Emacs Editor 用の Ring モード
+
+Emacs Editor 用の Ring モード
+=============================
+
+Ring 1.3 では Emacs Editor 用の Ring モードがあります。
+
+スクリーンショット:
+
+.. image:: ringemacs.png
+       :alt: Emacs Editor 用の Ring モード
+
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; StdLib の改善
+
+StdLib の改善
+=============
+
+StdLib に関数を実装するために更新しました。
+
+* SplitMany()
+* JustFilePath()
+* JustFileName()
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; Loop|Exit 命令の改善
+
+Loop|Exit 命令の改善
+====================
+
+Loop|Exit 命令は、命令 (数値に限りません) の後に式を受け入れるために更新しました。
+
+文法:
+
+.. code-block:: ring
+
+       Loop|Exit [数値]
+
+変更後:
+
+.. code-block:: ring
+
+       Loop|Exit [式]
+
+用例:
+
+.. code-block:: ring
+
+       XLoop = 2       # ループの外側
+       YLoop = 1       # 最初のループの内側
+       for x = 1 to 10
+               for y = 1 to 10
+                       see "x=" + x + " y=" + y + nl
+                       if x = 3 and y = 5
+                               exit XLoop  
+                       ok
+               next
+       next
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; 新しい関数
+
+新しい関数
+==========
+
+* PackageName() 関数
+* Swap() 関数
+
+用例:
+
+.. code-block:: ring
+
+       aList = [:one,:two,:four,:three]
+       see aList
+       see copy("*",50) + nl
+       swap(aList,3,4)
+       see aList
+
+実行結果:
+
+.. code-block:: ring
+
+       one
+       two
+       four
+       three
+       **************************************************
+       one
+       two
+       three
+       four
+
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; 参照による Self 返し
+
+参照による Self 返し
+====================
+
+この公開版では、クラスのメソッドで Self 返しを使うとオブジェクトを返します。
+
+用例:
+
+.. code-block:: ring
+
+       mylist = [new mytest() {
+               see self
+               x = 20
+               see self
+       }]
+
+       see mylist 
+
+       class mytest
+               x = 15
+               func init 
+                       return self     # 参照返し
+
+実行結果:
+
+.. code-block:: ring
+
+       x: 15.000000
+       x: 20.000000
+       x: 20.000000
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; ‘from’キーワードの代わりに‘<’または‘:’演算子の使用
+
+‘from’キーワードの代わりに‘<’または‘:’演算子の使用
+========================================================
+
+この公開版では‘from’キーワードの代わりに‘<’または‘:’演算子を使えます。
+
+文法①:
+
+.. code-block:: ring
+       
+       class Cat from Animal
+
+文法②:
+       
+.. code-block:: ring
+       
+       class Cat < Animal
+
+文法③:
+
+.. code-block:: ring
+       
+       class Cat : Animal
+
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; Ring のステートを共有せずに Ring を組み込む
+
+Ring のステートを共有せずに Ring を組み込む
+===========================================
+
+Ring 1.0 より Ring を C へ組み込むための関数は実装されていました。
+また eval() 関数で Ring プログラム内で Ring のコードを実行できます。
+この公開版ではステートを共有せずに Ring を Ring プログラムへ組み込むための関数を実装しました。
+
+利点:
+
+* ① Ring プログラムとアプリケーションの統合で競合が発生しません。
+* ② Ring のコードを安全な環境で実行して、トレースを行うことができます。
+
+用例:
+
+.. code-block:: ring
+
+       pState = ring_state_init()
+       ring_state_runcode(pState,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState,"x = 10")
+
+       pState2 = ring_state_init()
+       ring_state_runcode(pState2,"See 'Hello, World!'+nl")
+       ring_state_runcode(pState2,"x = 20")
+
+       ring_state_runcode(pState,"see x +nl")
+       ring_state_runcode(pState2,"see x +nl")
+
+       v1 = ring_state_findvar(pState,"x")
+       v2 = ring_state_findvar(pState2,"x")
+
+       see v1[3] + nl
+       see V2[3] + nl
+
+       ring_state_delete(pState)
+       ring_state_delete(pState2)
+
+実行結果:
+
+.. code-block:: ring
+
+       Hello, World!
+       Hello, World!
+       10
+       20
+       10
+       20
+
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; RingZip ライブラリ
+
+RingZip ライブラリ
+==================
+
+Ring 1.3 には \*.zip ファイルの作成、変更、および展開用の RingZip ライブラリがあります。
+
+用例①: 四本のファイルがある myfile.zip を作成します。
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'w')
+       zip_addfile(oZip,"test.c")
+       zip_addfile(oZip,"zip.c")
+       zip_addfile(oZip,"zip.h")
+       zip_addfile(oZip,"miniz.h")
+       zip_close(oZip)
+
+用例②: myfile.zip を myfolder フォルダへ展開します。
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       zip_extract_allfiles("myfile.zip","myfolder")
+
+用例③: myfile.zip にあるファイル名のリストを表示します。
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+       oZip = zip_openfile("myfile.zip",'r')
+       for x=1 to zip_filescount(oZip)
+              see zip_getfilenamebyindex(oZip,x) + nl
+       next
+       zip_close(oZip)
+
+用例④: クラスの代わりに関数を使用します。
+
+.. code-block:: ring
+
+       load "ziplib.ring"
+
+       new Zip {
+               SetFileName("myfile.zip")
+               Open("w")
+               AddFile("test.c")
+               AddFile("zip.c")
+               AddFile("zip.h")
+               AddFile("miniz.h")
+               Close()
+       }
+
+.. index:: 
+       pair: Ring 1.3 の変更履歴; フォームデザイナー
+
+フォームデザイナー
+==================
+
+Ring 1.3 では GUI アプリケーション・フォームの手軽な設計、および Ring
+ソースコードの生成を行うためのフォームデザイナーが付属しています。
+
+オブジェクト指向プログラミングとメタプログラミングによる
+約 8000 行の Ring コードを記述しました。
+
+Ring ノートパッドからフォームデザイナーを実行できます。
+
+.. image:: rnotefd.png
+       :alt: フォームデザイナー - Ring ノートパッドの内面図
+
+また、別のウィンドウからフォームデザイナーを実行することもできます。
+
+.. image:: formdesigner.png
+       :alt: フォームデザイナー
diff --git a/docs/ja-jp/source/whatisnew4.txt b/docs/ja-jp/source/whatisnew4.txt
new file mode 100644 (file)
index 0000000..79e927c
--- /dev/null
@@ -0,0 +1,498 @@
+.. index:: 
+       single: Ring 1.4 の変更履歴; はじめに
+
+=======================
+Ring 1.4 の変更履歴
+=======================
+
+Ring 1.4 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.4 の新機能!
+
+* 変更: 基本拡張機能を Ring VM から分離
+* 自然言語ライブラリ
+* Ring ノートパッドへ新しいスタイルを追加
+* RingREPL
+* 数値とバイト間の変換
+* StdLib の改良
+* WebLib の改良
+* RingQt の改良
+* Qt クラスコンバーター
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; 変更: 基本拡張機能を Ring VM から分離
+
+変更: 基本拡張機能を Ring VM から分離
+=====================================
+
+Ring 1.4 では、このライブラリが Ring VM から分離されました。
+
+* RingODBC
+* RingMySQL
+* RingSQLite
+* RingOpenSSL
+* RingInternet
+
+下記のライブラリは Load 命令で使用可能になります。
+
+.. code-block:: ring
+
+       load "odbclib.ring"
+       # ODBC 関数
+
+.. code-block:: ring
+
+       load "mysqllib.ring"
+       # MySQL 関数
+
+.. code-block:: ring
+
+       load "sqlitelib.ring"
+       # SQLite 関数
+
+.. code-block:: ring
+
+       load "openssllib.ring"
+       # OpenSSL 関数  (ハッシュとセキュリティ関数)
+
+.. code-block:: ring
+
+       load "internetlib.ring"
+       # インターネット関数 ( Download() と SendEmail() )
+
+上記のライブラリを全て使う場合、 stdlib.ring を指定することにより
+odbclib.ring, mysqllib.ring, sqlitelib.ring, opensslib.ring
+そして internetlib.ring ファイルを読み込みます。
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; 自然言語ライブラリ
+
+自然言語ライブラリ
+==================
+
+Ring 1.4 では命令グループがある言語を手軽に定義するために、
+自然言語ライブラリがあります。
+
+例えば、テキストファイル program.txt に自然言語コードを記述します。
+
+ファイル: program.txt
+
+.. code-block:: none
+
+       Welcome to the Ring programming language!
+       What you are reading now is not comments, I swear!
+
+       After many years of programming I decided to think different about
+       programming and solve the problems in a better way. 
+
+       We are writing commands or code and the Ring language is reading
+       it to understand us! Sure, What you are seeing now is
+       just ***part of the code - Not the Complete Program***
+       You have to write little things before and after this 
+       part to be able to run it!
+
+       It is the natural part of our code where we can write in English, 
+       Arabic or any Natural Language Then we will tell the computer 
+       through the Ring language what must happens! in a way that we can scale 
+       for large frameworks and programs.
+
+       Just imagine what will happens to the world of programming once
+       we create many powerful frameworks using the Ring language that
+       uses this way (Natural Programming).
+
+       For example When we say Hello to the Machine, It can reply! and when we
+       say count from 1 to 5 it will understand us, Also if 
+       we said count from 5 to 1 it will
+       understand us too! You can see the Output window!
+
+       This Goal is not new, but the Ring language comes
+       with an innovative solution to this problem.    
+
+実行結果:
+
+.. code-block:: none
+
+       Hello, Sir!
+
+
+       The Numbers!
+
+       1
+
+       2
+
+       3
+
+       4
+
+       5
+
+       I will count Again!
+
+       5
+
+       4
+
+       3
+
+       2
+
+       1
+
+
+自然言語コードを実行するには、 start.ring を実行します。
+
+start.ring には言語と命令が定義されています。
+
+ファイル: start.ring
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "naturallib.ring"
+
+       New NaturalLanguage {
+               SetLanguageName(:MyLanguage)
+               SetCommandsPath(CurrentDir()+"/../command")
+               SetPackageName("MyLanguage.Natural")
+               UseCommand(:Hello)
+               UseCommand(:Count)
+               RunFile("program.txt")
+       }
+
+これで MyLanguage 言語名は定義済みになり、言語命令用のフォルダが指定されます。
+
+命令ごとに MyLanguage.Natural パッケージへ所属するクラスを定義します。
+
+Hello および Count を命令として二つ定義します。
+
+したがって、命令を定義するために CurrentDir()+”/../command” フォルダには二つのファイルが必要です。
+
+ファイル: hello.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeyword([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :hello, 
+               :Function = func {
+                       See  "Hello, Sir!" + nl + nl
+               }
+       ])
+
+ファイル: count.ring
+
+.. code-block:: ring
+
+       DefineNaturalCommand.SyntaxIsKeywordNumberNumber([
+               :Package = "MyLanguage.Natural",
+               :Keyword = :count, 
+               :Function = func {
+                       if not isattribute(self,:count_times) {
+                               AddAttribute(self,:count_times)
+                               Count_Times = 0
+                       }
+                       if Expr(1) > Expr(2) { 
+                               nStep = -1 
+                       else 
+                               nStep = 1
+                       }
+                       if Count_Times = 0 { 
+                               see nl+"The Numbers!" + nl 
+                               Count_Times++
+                       else 
+                               see nl + "I will count Again!" +nl 
+                       }
+                       for x = Expr(1) to Expr(2) step nStep {
+                               see nl+x+nl 
+                       }
+                       CommandReturn(fabs(Expr(1)-Expr(2))+1)                          
+               }
+       ])
+
+
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; Ring ノートパッドへ新しいスタイルを追加
+
+Ring ノートパッドへ新しいスタイルを追加
+=======================================
+
+Ring ノートパッドへ表示 - スタイル - モダンスタイルの選択を追加しました。
+
+スクリーンショット:
+
+.. image:: rnotemodernstyle.png
+       :alt: Ring ノートパッドの用法 - モダンスタイル
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; RingREPL
+
+RingREPL
+========
+
+application フォルダには、 RingREPL (Read-Eval-Print-Loop) があります。
+
+Ring ノートパッド (メニューバー - ツール) からも実行できます。
+
+スクリーンショット:
+
+.. image:: ringrepl.png
+       :alt: RingREPL の用法
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; 数値とバイト間の変換
+
+数値とバイト間の変換
+====================
+
+Ring 1.4 では、数値とバイト間の変換をするために、下記の関数があります。
+
+* Int2Bytes()
+* Float2Bytes()
+* Double2Bytes()
+* Bytes2Int()
+* Bytes2Float()
+* Bytes2Double()
+
+用例:
+
+.. code-block:: ring
+
+       see "Test Int2Bytes() and Bytes2Int() - Value : 77" + nl
+       r = Int2Bytes(77)
+       see "Int Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Int(r) + nl
+       see "Test Float2Bytes() and Bytes2Float() - Value 77.12" + nl
+       r = Float2Bytes(77.12)
+       see "Float Size : " + len(r) + nl
+       see r + nl
+       see Bytes2Float(r) + nl
+       see "Test Double2Bytes() and Bytes2Double() - Value 9999977.12345" + nl
+       r = Double2Bytes(9999977.12345)
+       see "Double Size : " + len(r) + nl
+       see r + nl
+       decimals(5)
+       see Bytes2Double(r) + nl
+
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; StdLib の改良
+
+StdLib の改良
+=============
+
+StdLib に関数を実装するために FSize() 関数を更新しました。
+
+print() 関数でローカル変数を受け入れられるように更新しました。
+
+.. code-block:: ring
+
+       load "stdlib.ring" 
+
+       func main 
+               print("Enter your name : ")     ;
+               Name = getString()              ;
+               print( "Hello : #{Name} ")      ;
+               return                          ;
+
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; WebLib の改良
+
+WebLib の改良
+=============
+
+WebLib を更新しました
+
+* エラーメッセージの実装
+
+(1) Error (WebLib-1) : REQUEST_METHOD is empty ! - Run this script from the browser
+
+(2) Error (DataLib-1) : Can't connect to the database server!
+
+* Template() 関数の改良 - 第二仮引数でオブジェクトの代わりに NULL を受け入れることができるようになりました。
+
+.. code-block:: ring
+
+       html(template("main.rhtml",NULL))
+
+* “target”属性への対応のために Form クラスを更新
+
+.. code-block:: ring
+
+       BootStrapWebPage() 
+       {
+               Title = "The Ring Programming Language"
+               html(template("main.rhtml",NULL))
+               div {
+                       classname = :container
+                       div
+                       {
+                               id = "div3"
+                               color = "black"
+                               backgroundcolor = "white"
+                               width = "100%"
+                               form
+                               {
+                                       method = "POST"
+                                       Action = website  
+                                       Target = "codeoutput"
+                                       input { type="hidden" name="page" value=1 }
+                                       Table
+                                       { 
+                                               style = stylewidth("100%") +
+                                                       stylegradient(3)                        
+                                               TR
+                                               {
+                                       
+                                                       TD { align="center" 
+                                                               WIDTH="10%"
+                                                                text("Code :") 
+                                                       }
+                                                       TD {
+                                                               html(`
+                                                               <textarea name = "cCode" 
+                                                               rows="5" 
+                                                               style="width : 100%; ">
+                                                               See "Hello, World!" + nl
+                                                               </textarea>`)
+                                                       }
+                                               }
+                                       }
+                                       Input { type = "submit" 
+                                               classname="btn btn-primary btn-block" 
+                                                       value = "Execute" }
+                                       Table
+                                       { 
+                                               style = stylewidth("100%") +
+                                                       stylegradient(34)                       
+                                               TR
+                                               {
+                                       
+                                                       TD { align="center"
+                                                               WIDTH="10%" 
+                                                               text("Output :") 
+                                                       }
+                                                       TD {
+                                                       html(`
+                                                       <iframe name="codeoutput" 
+                                                       width="100%" 
+                                                       style="background-color:white;">
+                                                       </iframe>`)
+                                                       }
+                                               }
+                                       }
+
+                               }
+                       }
+
+               }
+               html(template("footer.rhtml",NULL))
+       }
+
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; RingQt の改良
+
+RingQt の改良
+=============
+
+この関数を RingQt へ追加
+
+* SetDialogIcon(cIconFile)
+* MsgInfo(cTitle,cMessage)
+* ConfirmMsg(cTitle,cMessage)
+* InputBox(cTitle,cMessage)
+* InputBoxInt(cTitle,cMessage)
+* InputBoxNum(cTitle,cMessage)
+* InputBoxPass(cTitle,cMessage)
+
+このクラスを RingQt へ追加
+
+* QToolButton
+* QSerialPort
+* QSerialPortInfo
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; Qt クラスコンバーター
+
+Qt クラスコンバーター
+=====================
+
+Ring 1.4 は Qt クラスを RingQt への移植するための補助ツールがあります。
+
+ring/samples/tools/QtClassConverter にあります。
+
+オンライン : https://github.com/ring-lang/ring/tree/master/samples/tools/QtClassConverter
+
+スクリーンショット: 
+
+.. image:: qtclassconvertor.png
+       :alt: RingQt 移植補助用 Qt クラスコンバーター
+
+.. index:: 
+       pair: Ring 1.4 の変更履歴; Ring 1.4.1 の変更履歴
+
+
+Ring 1.4.1 の変更履歴
+=========================
+
+このような変更点が Ring 1.4.1 にあります。
+
+* ソースコードからのビルドに使用するスクリプトの改良
+* Ring ノートパッドの Modern Style の配色を改善
+* StdLib の改良
+* RingQt の改良
+* 新しいサンプル : Sixteen Puzzle
+
+ソースコードからのビルドで使用するスクリプトの更新
+
+Windows, Ubuntu Linux, Linux Mint および macOS で動作確認を行いました。
+
+スクリーンショット:
+
+.. image:: linuxmint.png
+       :alt: Linux Mint で Ring を使用
+
+Ring ノートパッドでは - モダンスタイルの配色を更新
+
+スクリーンショット:
+
+.. image:: rnotemodernstyle2.png
+       :alt: Ring ノートパッドの使用 - モダンスタイル
+
+StdLib オブジェクトライブラリへ関数を実装しました。
+
+* TrimLeft()
+* TrimRight()
+* TrimAll()
+* EpochTime()
+
+この関数はウィンドウの前面にダイアログを表示するために更新しました。
+
+* SetDialogIcon(cIconFile)
+* MsgInfo(cTitle,cMessage)
+* ConfirmMsg(cTitle,cMessage)
+* InputBox(cTitle,cMessage)
+* InputBoxInt(cTitle,cMessage)
+* InputBoxNum(cTitle,cMessage)
+* InputBoxPass(cTitle,cMessage)
+
+Applications フォルダへ Sixteen Puzzle を追加しました。
+
+スクリーンショット:
+
+.. image:: sixteenpuzzle.jpg
+       :alt: Sixteen Puzzle
diff --git a/docs/ja-jp/source/whatisnew5.txt b/docs/ja-jp/source/whatisnew5.txt
new file mode 100644 (file)
index 0000000..5bd9f48
--- /dev/null
@@ -0,0 +1,2126 @@
+.. index:: 
+       single: Ring 1.5 の変更履歴; はじめに
+
+=======================
+Ring 1.5 の変更履歴
+=======================
+
+Ring 1.5 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.5 の新機能!
+
+* Video-Music-Player アプリケーション
+* Windows StartUp Manager アプリケーション
+* Calculator アプリケーション
+* Ring ノートパッドの改善
+* StdLib の改善
+* WebLib の改善
+* RingQt の改善
+* オブジェクトライブラリの改善
+* RingFreeGLUT 拡張機能
+* RingOpenGL 拡張機能
+* 拡張機能用のコード生成器の改善
+* 拡張機能用のドキュメント生成器の改善
+* Ring 仮想計算機 - トレース関数
+* トレースライブラリとインタラクティブデバッガ
+* より柔軟性のあるシンタックス
+* 型ヒントライブラリ
+* 品質の改善
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Video-Music-Player アプリケーション
+
+Video-Music-Player アプリケーション
+===================================
+
+Video-Music-Player アプリケーションを Applications フォルダへ追加しました。
+
+スクリーンショット:
+
+.. image:: videomusicplayer.jpg
+       :alt: Video Music Player
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Windows StartUp Manager アプリケーション
+
+Windows StartUp Manager アプリケーション
+========================================
+
+Windows StartUp Manager アプリケーション
+
+URL : https://github.com/ring-lang/WinStartupManager
+
+スクリーンショット:
+
+.. image:: winstartupman.jpg
+       :alt: Windows Startup Manager
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Calculator アプリケーション
+
+Calculator アプリケーション
+===========================
+
+Calculator アプリケーションを Applications フォルダへ追加しました。
+
+スクリーンショット:
+
+.. image:: calcapp.jpg
+       :alt: Calculator アプリケーション
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Ring ノートパッドの改善
+
+Ring ノートパッドの改善
+=======================
+
+① Ring ノートパッドは新しいスタイル、およびメインファイルツールバーを搭載するために更新しました。
+
+メインファイルツールバーの考えは、プロジェクトに複数のソースコードのファイルがある場合に
+プロジェクトのメインファイルを決定することです。
+
+この機能を使うとプロジェクトでほかのファイルを開いているときに、
+プロジェクトを実行するためにメインファイルを切り替えることなくプロジェクト (メインファイル) を実行できます。
+
+この機能を使うには、プロジェクトのメインファイルを開きます。
+
+現在のソースコードファイルをメインファイルとして設定するには Ctrl+Shift+M を押してください。
+
+プロジェクトで別のソースコードファイルを開いて修正します。
+
+プロジェクト (メインファイル) を実行したいときは Ctrl+Shift+F5 (GUI) または Ctrl+Shift+D (コンソール) を押してください。
+
+スクリーンショット:
+
+.. image:: rnote15shot1.png
+       :alt: Ring Notepad
+
+
+.. image:: rnote15shot2.png
+       :alt: Ring Notepad
+
+
+.. image:: rnote15shot3.png
+       :alt: Ring Notepad
+
+② 改行の正確な表示、および “Clear” ボタンを実装するために実行結果ウィンドウを更新しました。
+
+スクリーンショット: 
+
+.. image:: rnote15output.png
+       :alt: 実行結果ウィンドウ
+
+③ バックグラウンド処理で関数、クラスのリストを準備している間に、
+大規模ファイルをすばやく開いて切り替えることができるようにするために Ring ノートパッドを更新しました。
+
+スクリーンショット: 
+
+.. image:: rnote15events.png
+       :alt: Ring ノートパッド - 大規模ファイル
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; StdLib の改善
+
+StdLib の改善
+=============
+
+新しい関数
+
+* Print2Str()
+* ListAllFiles()
+* SystemCmd()
+
+① 新しい関数 Print2Str() を StdLib へ追加しました。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       world = "World!"
+       mystring = print2str("Hello, #{world} \nIn Year \n#{2000+17} \n")
+
+       see mystring + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       Hello, World!
+       In Year
+       2017
+
+② 新しい関数 ListAllFiles() を StdLib へ追加しました。
+
+この関数を使うとフォルダにあるファイルのグループ、およびそのサブフォルダを手軽に処理できます。
+
+用例:
+
+.. code-block:: ring
+
+            load "stdlib.ring"
+            aList = ListAllFiles("c:/ring/ringlibs","ring") # *.ring のみ
+            aList = sort(aList)
+            see aList
+
+用例:
+
+.. code-block:: ring
+
+            load "stdlib.ring"
+            see listallfiles("b:/ring/ringlibs/weblib","") # 全ファイル
+
+
+③ 新しい関数 SystemCmd() を StdLib へ追加しました。
+
+この関数は System() 関数と同じくシステムコマンドを実行できますが、
+実行結果は文字列で返されます。
+
+用例:
+
+.. code-block:: ring
+
+       cYou = SystemCmd("whoami")
+       See "SystemCmd: whoami ====="+ nl + cYou +nl
+
+実行結果:
+
+.. code-block:: ring
+
+       SystemCmd: whoami =====
+       desktop-umberto\umberto
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; WebLib の改善
+
+WebLib の改善
+=============
+
+HTMLPage クラスを搭載するために WebLib を更新しました。
+
+このクラスは標準出力を経由せずに HTML ドキュメントを作成します。
+
+ウェブアプリケーションだけで WebLib を使うときの代用になります。
+
+また、コンソール、 GUI、モバイル用のアプリケーションでも使えます。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+
+       import System.Web
+
+       func main
+
+               mypage = new HtmlPage {
+                       h1 { text("Customers Report") }
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(4)
+                                 TR
+                                 {
+                                       TD { WIDTH="10%" text("Customers Count : " )  }
+                                       TD { text (100) }
+                                 }
+                       }
+       
+                       Table
+                       {
+                                 style = stylewidth("100%") + stylegradient(26)
+                                 TR
+                                 {
+                                       style = stylewidth("100%") + stylegradient(24)
+                                       TD { text("Name " )  }
+                                       TD { text("Age" ) }
+                                       TD { text("Country" ) }
+                                       TD { text("Job" ) }     
+                                       TD { text("Company" ) }
+                                 }
+                                 for x =  1 to 100
+                                       TR
+                                       {
+                                               TD { text("Test" )  }
+                                               TD { text("30" ) }
+                                               TD { text("Egypt" ) }
+                                               TD { text("Sales" ) }   
+                                               TD { text("Future" ) }
+                                       }
+                                 next
+                       }
+
+               }
+
+               write("report.html",mypage.output())
+
+このクラスにより WebLib と GUILib で手軽にレポートを作成できます。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+       load "weblib.ring"
+       load "guilib.ring"
+
+       import System.Web
+       import System.GUI
+
+       new qApp {
+               open_window(:CustomersReportController)
+               exec()
+       }
+
+       class CustomersReportController
+
+               oView = new CustomersReportView
+
+               func Start
+                       CreateReport()
+
+               func CreateReport
+                       mypage = new HtmlPage {
+                               h1 { text("Customers Report") }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(4)
+                                       TR
+                                       {
+                                               TD { WIDTH="10%" 
+                                                       text("Customers Count : " )  }
+                                               TD { text (100) }
+                                       }
+                               }
+                               Table
+                               {
+                                       style = stylewidth("100%") + stylegradient(26)
+                                       TR
+                                       {
+                                               style = stylewidth("100%") +
+                                                       stylegradient(24)
+                                               TD { text("Name " )  }
+                                               TD { text("Age" ) }
+                                               TD { text("Country" ) }
+                                               TD { text("Job" ) }     
+                                               TD { text("Company" ) }
+                                       }
+                                       for x =  1 to 100
+                                               TR
+                                               {
+                                                       TD { text("Test" )  }
+                                                       TD { text("30" ) }
+                                                       TD { text("Egypt" ) }
+                                                       TD { text("Sales" ) }   
+                                                       TD { text("Future" ) }
+                                               }
+                                       next
+                               }
+                       }
+                       write("report.html",mypage.output())
+
+               func PrintEvent
+                       printer1 = new qPrinter(0) {
+                               setoutputformat(1)
+                               setoutputfilename("report.pdf")
+                       }
+                       oView {
+                               web.print(printer1)
+                               web.show()
+                       }
+                       system ("report.pdf")
+
+       class CustomersReportView
+
+                       win = new window() {
+                                       setwindowtitle("Report Window")
+                                       setgeometry(100,100,500,500)
+                                       web = new webview(win) {
+                                               setgeometry(100,100,1000,500)
+                                               loadpage(new qurl("file:///"+
+                                               currentdir()+"/report.html"))
+                                       }
+                                       new pushbutton(win) {
+                                                       setGeometry(100,20,100,30)
+                                                       settext("Print")
+                                                       setclickevent(Method(:PrintEvent))
+                                       }
+                                       showMaximized()
+                               }
+
+スクリーンショット:
+
+.. image:: ring15reportshot.png
+       :alt: 顧客報告書
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; RingQt の改善
+
+RingQt の改善
+=============
+
+新しいクラスを RingQt へ追加しました:
+
+* QStringRef
+* QMutex
+* QMutexLocker
+* QBuffer
+* QBluetoothAddress
+* QBluetoothDeviceDiscoveryAgent
+* QBluetoothDeviceInfo
+* QBluetoothHostInfo
+* QBluetoothLocalDevice
+* QBluetoothServer
+* QBluetoothServiceDiscoveryAgent
+* QBluetoothServiceInfo
+* QBluetoothSocket
+* QBluetoothTransferManager
+* QBluetoothTransferReply
+* QBluetoothTransferRequest
+* QBluetoothUuid
+
+用例:
+
+.. code-block:: ring
+
+       ### ウェブサイト - vpic.nhtsa.dot.gov - へ VIN (Vehicle Id Number : 車両識別番号) を提出します。
+       ### 返された XML データを解析します。
+       ### 車両情報の結果を表示します
+
+       load "libcurl.ring"
+       load "guilib.ring"
+       load "stdlib.ring"
+
+       curl = curl_easy_init()
+
+       # request = "3G1JC5248YS251015?format=xml"  ### VIN - シボレー
+         request = "3GYFK62847G247323?format=xml"  ### VIN - キャデラック
+
+       call_type   = "decodevinvalues/"
+       url         = "https://vpic.nhtsa.dot.gov/api/vehicles/"
+       url_request = url + call_type + request
+
+               See "URL Request: "+ url_request +nl
+
+       curl_easy_setopt(curl, curlopt_url, url_request)
+       response = curl_easy_perform_silent(curl);
+               
+               See nl +"Response Raw: "+ response +nl +nl
+
+       curl_easy_cleanup(curl)
+
+       xml = new qxmlstreamreader()
+       xml.adddata_2(response)
+
+       x = new qstringref()
+       while not xml.atend()
+                  if xml.error()
+                                  see xml.errorstring() see nl
+                                  exit loop
+                  ok
+
+                  x = xml.text()
+                  if not x.length() = 0
+                                  see "Length: " see x.length() +" --- "
+                                  see "Value: " see x.tostring() see nl
+                  ok
+
+                  xml.readnext()
+       end
+
+       get x
+
+       ###------------------------------------------
+       ### 実行結果:
+       #
+       # ==>Value: 115
+       # ==>Value: Results returned successfully
+       # ==>Value: VIN(s): 3G1JC5248YS251015
+       # ==>Value: 3G1JC5248YS251015
+       # ==>Value: Sedan/Saloon
+       # ==>Value: 4
+       # ==>Value: 2200.0
+       # ==>Value: 134.25223700841
+       # ==>Value: 2.2
+       # ==>Value: 4
+       # ==>Value: LN2
+       # ==>Value: CHEVROLET
+       # ==>Value: GENERAL MOTORS LLC
+       # ==>Value: Cavalier
+       # ==>Value: 2000
+       # ==>Value: Ramos Arzipe
+       # ==>Value: PASSENGER CAR
+       # ==>Value: 4
+       # ==>Value: In-Line
+       # ==>Value: 1st Row (Driver & Passenger)
+       # ==>Value: Sequential Fuel Injection (SFI)
+       # ==>Value: Mexico
+       # ==>Value: NA
+       # ==>Value: Manual
+       # ==>Value: Body Type: Sedan, 4-6 Window, Notchback (GM codes: 19, 69)
+       # ==>Value:  Name Plate: Chevrolet, Pontiac
+       # ==>Value: 0 - VIN decoded clean. Check Digit (9th position) is correct
+       # ==>Value: LAN
+       # ==>Value: 984
+       #
+       ###-----------------------------------------
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; オブジェクトライブラリの改善
+
+オブジェクトライブラリの改善
+============================
+
+オブジェクトライブラリに Open_WindowInPackages() 関数を追加しました。
+
+Open_WindowInPackages() 関数は Open_Window() と同じですが、
+ウィンドウを開く前にインポートを行うパッケージの
+追加リストを決定します。
+
+文法:
+
+.. code-block:: ring
+
+       Open_WindowInPackages(cClassName,aPackagesList)
+
+用例:
+
+この用例はフォームデザイナーのソースコードから引用したものです。
+open_windowInPackages() 関数でウィンドウフラグのウィンドウを開きます。
+
+クラス名 “WindowFlagsController” とパッケージ名を決定します。
+
+ウィンドウフラグのウィンドウでは FormDesigner および System.GUI パッケージを使用しています。
+
+.. code-block:: ring
+
+       open_windowInPackages(:WindowFlagsController,[
+               "formdesigner",
+               "System.GUI"
+       ])
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; RingFreeGLUT 拡張機能
+
+RingFreeGLUT 拡張機能
+=====================
+
+Ring 1.5 には FreeGLUT ライブラリへ対応するために RingFreeGLUT 拡張機能があります。
+
+用例:
+
+.. code-block:: ring
+
+       /*
+               このサンプルは C チュートリアルを元にしています。
+               出典元 : http://www.lighthouse3d.com/tutorials/glut-tutorial/
+       */
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+
+       // カメラ方向の回転角度
+       angle = 0.0
+
+       // 実際のベクトルはカメラ方向を表しています。
+       lx=0.0 lz=-1.0
+
+       // カメラの XZ 位置
+       x=0.0  z=5.0
+
+       // キーの状態
+       // キーを押していない時の変数は 0 です。
+       deltaAngle = 0.0
+       deltaMove = 0
+       xOrigin = -1
+
+       // メニューを定義するための定数
+       C_RED  = 1
+       C_GREEN = 2
+       C_BLUE = 3
+       C_ORANGE = 4
+
+       C_FILL = 5
+       C_LINE = 6
+
+       // ポップアップメニューの定義
+       fillMenu=NULL
+       fontMenu=NULL
+       mainMenu=NULL
+       colorMenu=NULL
+
+       // 鼻の配色
+       red = 1.0
+       blue=0.5
+       green=0.5
+
+       // 雪だるまの大きさ
+       scale = 1.0
+
+       // メニューの状態
+       menuFlag = 0
+
+       // デフォルトのフォント
+       font = GLUT_BITMAP_TIMES_ROMAN_24
+
+       C_INT_GLUT_BITMAP_8_BY_13 = 7
+       C_INT_GLUT_BITMAP_9_BY_15 = 8
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_10  = 9
+       C_INT_GLUT_BITMAP_TIMES_ROMAN_24  = 10
+       C_INT_GLUT_BITMAP_HELVETICA_10  = 11
+       C_INT_GLUT_BITMAP_HELVETICA_12  = 12
+       C_INT_GLUT_BITMAP_HELVETICA_18  = 13
+
+       // ウィンドウの幅と高さ
+       h = 0
+       w = 0
+
+       // 一秒あたりのフレーム数を計算するための変数
+       frame=0
+       time=0
+       timebase=0
+       s = ""
+
+       func changeSize
+               w = glutEventWidth()
+               h = glutEventHeight()
+
+               // ウィンドウの大きさが小さすぎる場合に、ゼロ除算エラーになるのを防ぎます。
+               // (幅 0 のウィンドウは作成できません)
+               if h = 0
+                       h = 1
+               ok
+
+               ratio =  w * 1.0 / h
+
+               // 投射行列の使用
+               glMatrixMode(GL_PROJECTION)
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // ウィンドウ全体のビューポートを設定します。
+               glViewport(0, 0, w, h)
+
+               // 正しい遠近法の設定。
+               gluPerspective(45.0, ratio, 0.1, 100.0)
+
+               // Modelview の復帰
+               glMatrixMode(GL_MODELVIEW)
+
+       func drawSnowMan
+
+               glScalef(scale, scale, scale)
+               glColor3f(1.0, 1.0, 1.0)
+
+       // 体の描画
+               glTranslatef(0.0 ,0.75, 0.0)
+               glutSolidSphere(0.75,20,20)
+
+       // 頭の描画
+               glTranslatef(0.0, 1.0, 0.0)
+               glutSolidSphere(0.25,20,20)
+
+       // 目の描画
+               glPushMatrix()
+               glColor3f(0.0,0.0,0.0)
+               glTranslatef(0.05, 0.10, 0.18)
+               glutSolidSphere(0.05,10,10)
+               glTranslatef(-0.1, 0.0, 0.0)
+               glutSolidSphere(0.05,10,10)
+               glPopMatrix()
+
+       // 鼻の描画
+               glColor3f(red, green, blue)
+               glRotatef(0.0,1.0, 0.0, 0.0)
+               glutSolidCone(0.08,0.5,10,2)
+
+               glColor3f(1.0, 1.0, 1.0)
+
+       func renderBitmapString x,y,z,font,string
+               glRasterPos3f(x, y,z)
+               for c in string
+                       glutBitmapCharacter(font,ascii(c))
+               next
+
+       func renderStrokeFontString x,y,z,font,string
+               glPushMatrix()
+               glTranslatef(x, y,z)
+               glScalef(0.002, 0.002, 0.002)
+               for c in string
+                       glutStrokeCharacter(font, Ascii(c));
+               next
+               glPopMatrix()
+
+
+       func restorePerspectiveProjection
+
+               glMatrixMode(GL_PROJECTION)
+               // 以前の投射行列へ復帰
+               glPopMatrix()
+
+               // modelview モードへ復帰
+               glMatrixMode(GL_MODELVIEW)
+
+
+       func setOrthographicProjection
+
+               // 投射モードの切り替え
+               glMatrixMode(GL_PROJECTION)
+
+               // 透視図の設定を有する
+               // 以前の行列を保存します。
+               glPushMatrix()
+
+               // 行列のリセット
+               glLoadIdentity()
+
+               // 2D 正投射の設定
+               gluOrtho2D(0, w, h, 0)
+
+               // modelview モードへ復帰切り替え
+               glMatrixMode(GL_MODELVIEW)
+
+
+
+       func computePos deltaMove
+
+               x += deltaMove * lx * 0.1
+               z += deltaMove * lz * 0.1
+
+
+       func renderScene
+
+               if  deltaMove
+                       computePos(deltaMove)
+               ok
+
+               // 配色と深度バッファの消去
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+
+               // 変換のリセット
+               glLoadIdentity()
+
+               // カメラの設定
+               gluLookAt(      x, 1.0, z,
+                               x+lx, 1.0,  z+lz,
+                               0.0, 1.0,  0.0)
+
+               // 地面の描画
+
+               glColor3f(0.9, 0.9, 0.9)
+               glBegin(GL_QUADS)
+                       glVertex3f(-100.0, 0.0, -100.0)
+                       glVertex3f(-100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0,  100.0)
+                       glVertex3f( 100.0, 0.0, -100.0)
+               glEnd()
+
+       // 9 体の雪だるまを描画
+               for i = -3 to -1
+                       for j = -3 to -1
+                               glPushMatrix()
+                               glTranslatef(i*10.0, 0.0, j * 10.0)
+                               drawSnowMan()
+                               number = (i+3)*3+(j+3)
+                               renderBitmapString(0.0, 0.5, 0.0,font ,""+number)
+                               glPopMatrix()
+                       next
+               next
+
+               // 一秒あたりのフレーム数を計算するためのコード
+               frame++
+
+               time=glutGet(GLUT_ELAPSED_TIME)
+               if time - timebase > 1000 
+                       s = "RingFreeGLUT - FPS: " + (frame*1000.0/(time-timebase))
+                       timebase = time
+                       frame = 0
+               ok
+
+               // ビットマップフォントで文字列 (fps) を表示するためのコード
+               setOrthographicProjection()
+
+               glPushMatrix()
+               glLoadIdentity()
+               renderBitmapString(5,30,0,GLUT_BITMAP_HELVETICA_18,s)
+               glPopMatrix()
+
+               restorePerspectiveProjection()
+
+               glutSwapBuffers()
+
+
+       // -----------------------------------
+       //             キーボード
+       // -----------------------------------
+
+       func processNormalKeys
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY() 
+
+               switch key
+                       on 27
+                               glutDestroyMenu(mainMenu)
+                               glutDestroyMenu(fillMenu)
+                               glutDestroyMenu(colorMenu)
+                               glutDestroyMenu(fontMenu)
+                               Shutdown()
+               off
+
+
+       func pressKey 
+
+               key = glutEventKey()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               switch key
+                       on GLUT_KEY_UP 
+                                deltaMove = 0.5
+                       on GLUT_KEY_DOWN 
+                               deltaMove = -0.5
+               off
+
+
+       func releaseKey
+
+               key = glutEventKey()
+
+               switch key
+                       on GLUT_KEY_UP 
+                               deltaMove = 0 
+                       on GLUT_KEY_DOWN
+                               deltaMove = 0  
+               off
+
+
+       // -----------------------------------
+       //             マウス
+       // -----------------------------------
+
+       func mouseMove
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ true になります。
+               if xOrigin >= 0
+
+                       // deltaAngle の更新
+                       deltaAngle = (xx - xOrigin) * 0.001
+
+                       // カメラの方向を更新
+                       lx = sin(angle + deltaAngle)
+                       lz = -cos(angle + deltaAngle)
+               ok
+
+
+       func mouseButton
+
+               button = glutEventButton()
+               state = glutEventState()
+               xx = glutEventX()
+               yy = glutEventY()
+
+               // これは左ボタンを押したときのみ true になります。
+               if button = GLUT_LEFT_BUTTON
+                       // ボタンを離したとき
+                       if state = GLUT_UP
+                               angle += deltaAngle
+                               xOrigin = -1
+                       else  
+                               // state = GLUT_DOWN
+                               xOrigin = xx
+                       ok
+               ok
+
+
+       // -----------------------------------
+       //             メニュー
+       // -----------------------------------
+
+       func processMenuStatus
+
+               status = glutEventStatus()
+
+               if status = GLUT_MENU_IN_USE
+                       menuFlag = 1
+               else
+                       menuFlag = 0
+               ok
+
+
+       func processMainMenu 
+
+               // ここにはなにもありません。
+               // 動作は全てサブメニューから行います。
+
+
+       func processFillMenu
+
+               option = glutEventValue()
+
+               switch option
+
+                       on C_FILL
+                               glPolygonMode(GL_FRONT, GL_FILL)
+                       on C_LINE
+                                glPolygonMode(GL_FRONT, GL_LINE)
+               off
+
+
+       func processFontMenu 
+
+               option = glutEventValue()
+
+               switch (option) {
+                       on C_INT_GLUT_BITMAP_8_BY_13
+                               font = GLUT_BITMAP_8_BY_13
+                       on C_INT_GLUT_BITMAP_9_BY_15
+                               font = GLUT_BITMAP_9_BY_15
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_10
+                               font = GLUT_BITMAP_TIMES_ROMAN_10
+                       on C_INT_GLUT_BITMAP_TIMES_ROMAN_24
+                               font = GLUT_BITMAP_TIMES_ROMAN_24
+                       on C_INT_GLUT_BITMAP_HELVETICA_10
+                               font = GLUT_BITMAP_HELVETICA_10
+                       on C_INT_GLUT_BITMAP_HELVETICA_12
+                               font = GLUT_BITMAP_HELVETICA_12
+                       on C_INT_GLUT_BITMAP_HELVETICA_18
+                               font = GLUT_BITMAP_HELVETICA_18
+               off
+        
+       func processColorMenu
+
+               option = glutEventValue()
+
+               switch option 
+                       on C_RED 
+                               red = 1.0
+                               green = 0.0
+                               blue = 0.0
+                       on C_GREEN 
+                               red = 0.0
+                               green = 1.0
+                               blue = 0.0
+                       on C_BLUE 
+                               red = 0.0
+                               green = 0.0
+                               blue = 1.0
+                       on C_ORANGE 
+                               red = 1.0
+                               green = 0.5
+                               blue = 0.5
+               off
+
+
+       func createPopupMenus
+
+               fontMenu = glutCreateMenu(:processFontMenu)
+
+               glutAddMenuEntry("BITMAP_8_BY_13 ",C_INT_GLUT_BITMAP_8_BY_13 )
+               glutAddMenuEntry("BITMAP_9_BY_15",C_INT_GLUT_BITMAP_9_BY_15 )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_10 ",C_INT_GLUT_BITMAP_TIMES_ROMAN_10  )
+               glutAddMenuEntry("BITMAP_TIMES_ROMAN_24",C_INT_GLUT_BITMAP_TIMES_ROMAN_24  )
+               glutAddMenuEntry("BITMAP_HELVETICA_10 ",C_INT_GLUT_BITMAP_HELVETICA_10  )
+               glutAddMenuEntry("BITMAP_HELVETICA_12",C_INT_GLUT_BITMAP_HELVETICA_12  )
+               glutAddMenuEntry("BITMAP_HELVETICA_18",C_INT_GLUT_BITMAP_HELVETICA_18  )
+
+               fillMenu = glutCreateMenu(:processFillMenu)
+
+               glutAddMenuEntry("Fill",C_FILL)
+               glutAddMenuEntry("Line",C_LINE)
+
+               colorMenu = glutCreateMenu(:processColorMenu)
+               glutAddMenuEntry("Red",C_RED);
+               glutAddMenuEntry("Blue",C_BLUE);
+               glutAddMenuEntry("Green",C_GREEN);
+               glutAddMenuEntry("Orange",C_ORANGE);
+
+               mainMenu = glutCreateMenu(:processMainMenu)
+
+               glutAddSubMenu("Polygon Mode", fillMenu)
+               glutAddSubMenu("Color", colorMenu)
+               glutAddSubMenu("Font",fontMenu)
+                // 右ボタンでメニューへ接続
+               glutAttachMenu(GLUT_RIGHT_BUTTON)
+
+               // これでアクティブなメニューであるかどうか検知できるようにします。
+               glutMenuStatusFunc(:processMenuStatus)
+
+
+       // -----------------------------------
+       //             メイン
+       // -----------------------------------
+
+       func main
+
+               // GLUT の初期化とウィンドウの作成
+               glutInit()
+               glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA)
+               glutInitWindowPosition(100,100)
+               glutInitWindowSize(320,320)
+               glutCreateWindow("RingFreeGLUT - Test - 9 SnowMan")
+
+               // コールバックの登録
+               glutDisplayFunc(:renderScene)
+               glutReshapeFunc(:changeSize)
+               glutIdleFunc(:renderScene)
+
+               glutIgnoreKeyRepeat(1)
+               glutKeyboardFunc(:processNormalKeys)
+               glutSpecialFunc(:pressKey)
+               glutSpecialUpFunc(:releaseKey)
+
+                // ここには二つの新しい関数があります。
+               glutMouseFunc(:mouseButton)
+               glutMotionFunc(:mouseMove)
+
+               // OpenGL の初期化
+               glEnable(GL_DEPTH_TEST)
+               glEnable(GL_CULL_FACE)
+
+               // メニューの初期化
+               createPopupMenus()
+
+               // GLUT のイベント処理サイクルへ入ります。
+               glutMainLoop()
+
+
+スクリーンショット:
+
+.. image:: ring15freeglut.png
+       :alt: RingFreeGLUT
+
+
+.. image:: ring15freeglut2.png
+       :alt: RingFreeGLUT
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; RingOpenGL 拡張機能
+
+RingOpenGL 拡張機能
+===================
+
+Ring 1.5 の RingOpenGL は下記のバージョンに対応しています。
+
+* OpenGL 1.1
+* OpenGL 1.2
+* OpenGL 1.3
+* OpenGL 1.4
+* OpenGL 1.5
+* OpenGL 2.0
+* OpenGL 2.1
+* OpenGL 3.0
+* OpenGL 3.2
+* OpenGL 3.3
+* OpenGL 4.0
+* OpenGL 4.1
+* OpenGL 4.2
+* OpenGL 4.3
+* OpenGL 4.4
+* OpenGL 4.5
+* OpenGL 4.6
+
+用例:
+
+.. code-block:: ring
+
+       /*
+               このサンプルは C チュートリアルを元にしています。
+               出典元 : 
+                       http://www.wikihow.com/Make-a-Cube-in-OpenGL
+       */
+
+       load "freeglut.ring"
+       load "opengl21lib.ring"
+
+       // ----------------------------------------------------------
+       // グローバル変数
+       // ----------------------------------------------------------
+       rotate_y=0 
+       rotate_x=0
+        
+       // ----------------------------------------------------------
+       // display() コールバック関数
+       // ----------------------------------------------------------
+       func display
+        
+         //  画面と Z バッファの消去
+         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
+        
+         // 変換のリセット
+         glLoadIdentity()
+        
+         // rotate_x および rotate_y のユーザによる変更をリセットします。
+         glRotatef( rotate_x, 1.0, 0.0, 0.0 )
+         glRotatef( rotate_y, 0.0, 1.0, 0.0 )
+        
+         // 多色面 - 前
+         glBegin(GL_POLYGON)
+        
+         glColor3f( 1.0, 0.0, 0.0 )     glVertex3f(  0.5, -0.5, -0.5 )      # P1 は赤
+         glColor3f( 0.0, 1.0, 0.0 )     glVertex3f(  0.5,  0.5, -0.5 )      # P2 は緑
+         glColor3f( 0.0, 0.0, 1.0 )     glVertex3f( -0.5,  0.5, -0.5 )      # P3 は青
+         glColor3f( 1.0, 0.0, 1.0 )     glVertex3f( -0.5, -0.5, -0.5 )      # P4 は紫
+        
+         glEnd()
+        
+         // 白面 - 後
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  1.0, 1.0 )
+         glVertex3f(  0.5, -0.5, 0.5 )
+         glVertex3f(  0.5,  0.5, 0.5 )
+         glVertex3f( -0.5,  0.5, 0.5 )
+         glVertex3f( -0.5, -0.5, 0.5 )
+         glEnd()
+        
+         // 紫面 - 右
+         glBegin(GL_POLYGON)
+         glColor3f(  1.0,  0.0,  1.0 )
+         glVertex3f( 0.5, -0.5, -0.5 )
+         glVertex3f( 0.5,  0.5, -0.5 )
+         glVertex3f( 0.5,  0.5,  0.5 )
+         glVertex3f( 0.5, -0.5,  0.5 )
+         glEnd()
+        
+         // 緑面 - 左
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  1.0,  0.0 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         // 青面 - 上
+         glBegin(GL_POLYGON)
+         glColor3f(   0.0,  0.0,  1.0 )
+         glVertex3f(  0.5,  0.5,  0.5 )
+         glVertex3f(  0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5, -0.5 )
+         glVertex3f( -0.5,  0.5,  0.5 )
+         glEnd()
+        
+         // 赤面 - 下
+         glBegin(GL_POLYGON)
+         glColor3f(   1.0,  0.0,  0.0 )
+         glVertex3f(  0.5, -0.5, -0.5 )
+         glVertex3f(  0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5,  0.5 )
+         glVertex3f( -0.5, -0.5, -0.5 )
+         glEnd()
+        
+         glFlush()
+         glutSwapBuffers()
+        
+        
+       // ----------------------------------------------------------
+       // specialKeys() コールバック関数
+       // ----------------------------------------------------------
+       func specialKeys
+
+               key = glutEventKey()
+        
+         //  右矢印 - 回転を五度増分します。
+               switch Key
+
+               on GLUT_KEY_RIGHT
+                       rotate_y += 5
+        
+               //  左矢印 - 回転を五度減分します。
+               on GLUT_KEY_LEFT
+                       rotate_y -= 5
+        
+               on GLUT_KEY_UP
+                       rotate_x += 5
+        
+               on GLUT_KEY_DOWN
+                       rotate_x -= 5
+        
+               off
+
+         //  更新の要求
+         glutPostRedisplay()
+        
+
+        
+       // ----------------------------------------------------------
+       // main() 関数
+       // ----------------------------------------------------------
+       func main
+        
+         //  GLUT の初期化とユーザ仮引数の処理
+         glutInit()
+        
+         //  トゥルーカラーのウィンドウのためにZ-バッファによるダブルバッファを要求します。
+         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
+        
+         // ウィンドウの作成
+         glutCreateWindow("Awesome Cube")
+        
+         //  Z-バッファの深度テストを有効にします。
+         glEnable(GL_DEPTH_TEST)
+        
+         // コールバック関数
+         glutDisplayFunc(:display)
+         glutSpecialFunc(:specialKeys)
+        
+         // GLUT へイベントの制御を渡します。
+         glutMainLoop()
+        
+         // OS へ戻ります。
+
+
+スクリーンショット:
+
+.. image:: ring15opengl.png
+       :alt: RingOpenGL
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; 拡張機能用のコード生成器の改善
+
+拡張機能用のコード生成器の改善
+==============================
+
+\<constant> 型へ対応しました。
+また、数値以外にも定数を扱うことができます。例えば: 文字列とポインタです。
+
+ポインタのときはポインタ型を決定できます。
+この機能は <constant> ~ </constant> の前に使えます。
+
+.. code-block:: ring
+
+       $nDefaultConstantType = C_CONSTANT_TYPE_POINTER
+       $cDefaultConstantPointerType = "void *"
+
+この用例は RingFreeGLUT 拡張機能からの引用です。
+
+.. code-block:: ring
+
+       <runcode>
+               $nDefaultConstantType = C_CONSTANT_TYPE_POINTER 
+               $cDefaultConstantPointerType = "void"
+       </runcode>
+       <constant>
+               GLUT_STROKE_ROMAN  
+               GLUT_STROKE_MONO_ROMAN
+               GLUT_BITMAP_9_BY_15   
+               GLUT_BITMAP_8_BY_13   
+               GLUT_BITMAP_TIMES_ROMAN_10
+               GLUT_BITMAP_TIMES_ROMAN_24 
+               GLUT_BITMAP_HELVETICA_10   
+               GLUT_BITMAP_HELVETICA_12   
+               GLUT_BITMAP_HELVETICA_18   
+       </constant>
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; 拡張機能用のドキュメント生成器の改善
+
+拡張機能用のドキュメント生成器の改善
+====================================
+
+生成した定数のリストをドキュメントへ出力できるようになりました。
+
+以前の公開版では関数プロトタイプのみありましたが、
+今回は定数のリストもあります。
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Ring VM - トレース関数
+
+Ring VM - トレース関数
+======================
+
+Ring 1.5 では Ring VM に次の関数追加しました。
+
+* RingVM_SetTrace(cCode)
+* RingVM_TraceData() --> aDataList
+* RingVM_TraceEvent() --> nTraceEvent
+* RingVM_TraceFunc() --> cCode
+* RingVM_ScopesCount() --> nScopes
+* RingVM_EvalInScope(nScope,cCode) 
+* RingVM_PassError()
+* RingVM_HideErrorMsg(lStatus)
+* RingVM_CallFunc(cFuncName)
+
+用例:
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       ringvm_settrace("mytrace()")
+
+       see "Hello, world!" + nl
+       see "Welcome" + nl
+       see "How are you?" +nl
+       mytest()
+       new myclass { mymethod() }
+
+       func mytest
+               see "Message from mytest" + nl
+
+       func mytrace
+               see "====== The Trace function is Active ======" + nl +
+                       "Trace Function Name : " + ringvm_TraceFunc() + nl +
+                       "Trace Event : " 
+               switch ringvm_TraceEvent()
+                       on TRACEEVENT_NEWLINE           see "New Line" 
+                       on TRACEEVENT_NEWFUNC           see "New Function"
+                       on TRACEEVENT_RETURN            see "Return"
+                       on TRACEEVENT_ERROR             see "Error"
+                       on TRACEEVENT_BEFORECFUNC       see "Before C Function"
+                       on TRACEEVENT_AFTERCFUNC        see "After C Function"
+               off
+               see nl +
+                       "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+                       "File Name   : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+                       "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+                       "Method or Function : " 
+                       if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+                                        TRACEDATA_METHODORFUNC_METHOD
+                               see "Method"
+                       else
+                               if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+                                       see "Command"
+                               else
+                                       see "Function"
+                               ok
+                       ok              
+                       see nl + Copy("=",42) + nl
+
+       class myclass
+               func mymethod
+                       see "Message from mymethod" + nl
+
+実行結果:
+
+.. code-block:: none
+
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 3
+       File Name   : test1.ring
+       Function Name : ringvm_settrace
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 5
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Hello, world!
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 6
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       Welcome
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 7
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       How are you?
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 12
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       Message from mytest
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 14
+       File Name   : test1.ring
+       Function Name : mytest
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 8
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 43
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 44
+       File Name   : test1.ring
+       Function Name : mymethod
+       Method or Function : Method
+       ==========================================
+       Message from mymethod
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Return
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : Before C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : After C Function
+       Line Number : 9
+       File Name   : test1.ring
+       Function Name : ismethod
+       Method or Function : Function
+       ==========================================
+       ====== The Trace function is Active ======
+       Trace Function Name : mytrace()
+       Trace Event : New Line
+       Line Number : 11
+       File Name   : test1.ring
+       Function Name :
+       Method or Function : Command
+       ==========================================
+
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; トレースライブラリとインタラクティブデバッガ
+
+トレースライブラリとインタラクティブデバッガ
+============================================
+
+Ring 1.5 にはトレースライブラリとインタラクティブデバッガがあります。
+
+このライブラリはイベントのトレース、プログラムを一行ずつ実行、
+エラー発生またはブレークポイントに到達したときインタラクティブデバッガを開くことができます。
+
+用例:
+
+この用例はブレークポイントをインタラクティブデバッガで開きます!
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       test1()
+
+       func test1
+               x = 10
+               see :test1 + nl
+               t = 12
+               BreakPoint()
+               see "After breakpoint!" +nl
+               see "t = " + t + nl
+               see "End of program!" + nl
+
+
+スクリーンショット:
+
+ブレークポイントに関してはインタラクティブデバッガがあります!
+
+.. image:: debugshot1.png
+       :alt: インタラクティブデバッガ
+
+変数の値を表示できます。
+
+.. image:: debugshot2.png
+       :alt: インタラクティブデバッガ
+
+変数値の変更後に実行を継続できます。
+
+.. image:: debugshot3.png
+       :alt: インタラクティブデバッガ
+
+実行結果ウィンドウでもインタラクティブデバッガを実行できます。
+
+.. image:: debugshot4.png
+       :alt: インタラクティブデバッガ
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; シンタックスの柔軟性を向上
+
+シンタックスの柔軟性を向上
+==========================
+
+クラス、パッケージ、関数で括弧 { } を使うには
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlib.ring"
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+       {
+               class myclass 
+               {
+                       func myfunc 
+                       {
+                               print("Hello, World!\n")
+                       }
+               }
+       }
+
+クラス、パッケージ、関数の後に‘end’キーワードを使うには
+
+用例:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass {
+               myfunc() 
+       }
+
+       package mypackage 
+               class myclass 
+                       def myfunc 
+                               put "Hello, World!"
+                       end
+               end
+       end
+
+クラス、パッケージ、関数の後に‘endpackage’/’endclass’/’endfunc’キーワードを使うには
+
+用例:
+
+.. code-block:: ring
+
+       import mypackage
+
+       new myclass { myfunc() }
+
+       package mypackage
+               class myclass
+                       func myfunc                     
+                               see "welcome"  + nl
+                       endfunc
+               endclass
+       endpackage
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; 型ヒントライブラリ
+
+型ヒントライブラリ
+==================
+
+Ring 1.5 から型ヒントライブラリがあります。
+
+このライブラリにより、ソースコードへ型情報を追加できます。
+このようなツールで非常に便利です。
+
+
+* コードエディタ
+* 静的解析
+
+
+用例:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       see sum(3,4) + nl ;
+       see sayHello("Mahmoud");
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+ライブラリは非常に強力であり、自動的にユーザ型 (クラス) へ対応します!
+
+用例:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       import mypackage 
+
+       test()  { main([:one,:two,:three]) }
+
+       myclass func test() {
+               see "Testing User Types!" + nl
+               return new myclass
+       }
+
+       package mypackage {
+               public class myclass {
+                       public static void func main(list args) {
+                               see "welcome" + nl
+                               see args
+                       }
+               }
+       }
+
+また、コードの内側で型を使用することもできます (関数プロトタイプだけに限定されません)。
+
+用例:
+
+.. code-block:: ring
+
+       load "typehints.ring"
+
+       int     sum = sum(3,4)
+       string  msg = sayHello("Mahmoud")
+
+       see "Sum = " + sum + nl + msg + nl
+
+
+       int func sum(int x,int y) {
+               return x+y ;
+       }
+
+       string func sayHello(string name) {
+               return "Hello " + name ;
+       }
+
+規則:
+
+* 関数プロトタイプ : 型を使うには、引数の前後を ‘(‘ と ‘)’ で必ず囲んでください。
+* 関数のコード : 型を使うには、必ず変数の値を設定してください (代入)。
+
+
+.. note:: Ring は動的言語であり、コンパイラによる型検査は行われません。
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; 品質の改善
+
+品質の改善
+==========
+
+日々の実務プロジェクトで Ring を利用した成果により
+
+Ring 1.5 では、安定性と生産性が向上しました!
+
+明確な目標と実用性で求められるものを機能を追加していきます。
+
+また、取扱説明書の改訂も行いました。
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Ring 1.5.1 の変更履歴
+
+Ring 1.5.1 の変更履歴
+=========================
+
+* 取扱説明書の改訂
+* StdLib - Factorial() 関数の更新
+* Ring 仮想計算機 - クラス範囲でスタックの消去処理に関するコードの改善。
+* サンプル : 3D Cube (OpenGL) + GameLib (RingAllegro) を使用したテクスチャ画像
+
+ソースコード:
+
+.. code-block:: ring
+
+       load "gamelib.ring"
+       load "opengl21lib.ring"
+
+       func main
+
+               new GraphicsApp {
+                       start()
+               }
+
+
+       class GraphicsApp from GraphicsAppBase
+
+               TITLE = "Ring Cube"
+
+               bitmap texture
+
+               xrot = 0.0
+               yrot = 0.0
+               zrot = 0.0
+
+               func loadresources
+
+                       bitmap = al_load_bitmap("ring.bmp")
+                       texture = al_get_opengl_texture(bitmap)
+
+               func destroyResources
+
+                       al_destroy_bitmap(bitmap)
+
+               func drawScene
+
+                       w = 800 h = 600
+                       ratio =  w / h
+
+                       glViewport(0, 0, w, h)
+                       glMatrixMode(GL_PROJECTION)
+                       glLoadIdentity()
+
+                       gluPerspective(45,ratio,1,100)
+                       glMatrixMode(GL_MODELVIEW)
+                       glLoadIdentity()
+
+                       glEnable(GL_TEXTURE_2D)                                                 
+                       glShadeModel(GL_SMOOTH)                                                 
+                       glClearColor(0.0, 0.0, 0.0, 0.5)
+                       glClearDepth(1.0)                       
+                       glEnable(GL_DEPTH_TEST) 
+                       glEnable(GL_CULL_FACE)
+                       glDepthFunc(GL_LEQUAL)
+                       glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
+                       glLoadIdentity();                                                                       
+                       glTranslatef(0.0,0.0,-5.0);
+
+                       glRotatef(xrot,1.0,0.0,0.0);
+                       glRotatef(yrot,0.0,1.0,0.0);
+                       glRotatef(zrot,0.0,0.0,1.0);
+
+                       glBindTexture(GL_TEXTURE_2D, texture)
+
+                       glBegin(GL_QUADS)
+                               // 前面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               // 背面
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               // 上面
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               // 下面
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               // 右面
+                               glTexCoord2f(1.0, 0.0) glVertex3f( 1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f( 1.0,  1.0, -1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f( 1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 0.0) glVertex3f( 1.0, -1.0,  1.0)
+                               // 左面
+                               glTexCoord2f(0.0, 0.0) glVertex3f(-1.0, -1.0, -1.0)
+                               glTexCoord2f(1.0, 0.0) glVertex3f(-1.0, -1.0,  1.0)
+                               glTexCoord2f(1.0, 1.0) glVertex3f(-1.0,  1.0,  1.0)
+                               glTexCoord2f(0.0, 1.0) glVertex3f(-1.0,  1.0, -1.0)
+                       glEnd()
+
+                       xrot += 0.3
+                       yrot += 0.2
+                       zrot += 0.4
+
+
+       class GraphicsAppBase
+
+               display event_queue ev timeout 
+               timer  redraw   = true
+
+               FPS             = 60 
+
+               SCREEN_W        = 800
+               SCREEN_H        = 600
+
+               KEY_UP          = 1
+               KEY_DOWN        = 2
+               KEY_LEFT        = 3
+               KEY_RIGHT       = 4
+
+               Key = [false,false,false,false]
+
+               TITLE = "Graphics Application"
+
+               func start
+
+                       SetUp()
+                       loadResources()
+                       eventsLoop()
+                       destroy()
+
+               func setup
+
+                       al_init()
+                       al_init_image_addon()
+                       al_set_new_display_flags(ALLEGRO_OPENGL) 
+                       display = al_create_display(SCREEN_W,SCREEN_H)
+                       al_set_Window_title(display,TITLE)
+                       al_clear_to_color(al_map_rgb(0,0,0))
+                       event_queue = al_create_event_queue()
+                       al_register_event_source(event_queue, 
+                               al_get_display_event_source(display))
+                       ev = al_new_allegro_event()
+                       timeout = al_new_allegro_timeout()
+                       al_init_timeout(timeout, 0.06)
+                       timer = al_create_timer(1.0 / FPS)
+                       al_register_event_source(event_queue, 
+                               al_get_timer_event_source(timer))
+                       al_start_timer(timer)
+                       al_install_mouse()
+                       al_register_event_source(event_queue, 
+                               al_get_mouse_event_source())
+                       al_install_keyboard()
+                       al_register_event_source(event_queue, 
+                               al_get_keyboard_event_source())
+
+               func eventsLoop
+
+                       while true
+                               al_wait_for_event_until(event_queue, ev, timeout)
+                               switch al_get_allegro_event_type(ev)
+                               on ALLEGRO_EVENT_DISPLAY_CLOSE
+                                       exit
+                               on ALLEGRO_EVENT_TIMER
+                                       redraw = true
+                               on ALLEGRO_EVENT_MOUSE_AXES
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY
+                                       mouse_x = al_get_allegro_event_mouse_x(ev)
+                                       mouse_y = al_get_allegro_event_mouse_y(ev)
+                               on ALLEGRO_EVENT_MOUSE_BUTTON_UP
+                                       exit
+                               on ALLEGRO_EVENT_KEY_DOWN
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = true
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = true
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = true
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = true
+                                       off
+                               on ALLEGRO_EVENT_KEY_UP
+                                       switch al_get_allegro_event_keyboard_keycode(ev)
+                                               on ALLEGRO_KEY_UP
+                                                       key[KEY_UP] = false
+                                               on ALLEGRO_KEY_DOWN
+                                                       key[KEY_DOWN] = false
+                                               on ALLEGRO_KEY_LEFT
+                                                       key[KEY_LEFT] = false
+                                               on ALLEGRO_KEY_RIGHT
+                                                       key[KEY_RIGHT] = false
+                                               on ALLEGRO_KEY_ESCAPE
+                                                       exit
+                                       off
+                               off
+                               if redraw and al_is_event_queue_empty(event_queue)
+                                       redraw = false
+                                       drawScene()
+                                       al_flip_display()
+                               ok
+                               callgc()
+                       end
+
+               func destroy
+
+                       destroyResources()
+                       al_destroy_timer(timer)
+                       al_destroy_allegro_event(ev)
+                       al_destroy_allegro_timeout(timeout)
+                       al_destroy_event_queue(event_queue)
+                       al_destroy_display(display)
+
+               func loadresources
+
+               func drawScene
+
+               func destroyResources
+
+スクリーンショット:
+
+.. image:: ringcube3d.png
+       :alt: Ring Cube
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Ring 1.5.2 の変更履歴
+
+Ring 1.5.2 の変更履歴
+=========================
+
+
+* 取扱説明書 - “アプリケーション開発期間の短縮” の章を更新しました。
+* Ring ノートパッド - 全てのプラットフォームで実行結果ウィンドウへプログラムの実行結果を表示するようになりました。
+* フォームデザイナー - Help メニュー - コンソールウィンドウを表示せずに CHM/PDF ファイルを開けるようになりました。
+* フォームデザイナー - マウスをすばやく動かしたときに Resize/Move イベントの応答性を改善
+* フォームデザイナー - 「新規、開く、名前を付けて保存」で Controller クラスを Ring ノートパッドで開くようにしました。
+* フォームデザイナー - ファイルメニューへ “フォームを閉じる” オプションを追加。
+* Ring ノートパッド - 実行に、現在のファイル (開いているフォームも) 自動的に保存するようになりました。
+* GetQuotesHistory アプリケーション - macOS および Qt 5.2 で動作するために更新
+* Calculator アプリケーション - 様々な機能を搭載するために更新しました!
+* Ring VM - 環境エラーの分類 (この章をご確認ください : 言語リファレンス)
+* RingQt - イベント実行の高速化のために QAllEvents へ新しいメソッドを追加
+* RingQt - スタイル「フュージョン : 黒」 - 無効なコントロールに最適な配色
+* スクリプト - Fedora Linux での Ring ビルド用 (この章をご確認ください : ソースコードからのビルド方法)
+
+
+スクリーンショット:
+
+.. image:: fedora.png
+       :alt: Ring (Fedora 1 で実行)
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Ring 1.5.3 の変更履歴
+
+Ring 1.5.3 の変更履歴
+=========================
+
+* フォームデザイナー : 再びフォームを開くことを可能にするために、アクションが閉じられると Ring ノートパッドへ通知するようになりました。
+* フォームデザイナー : Ring ノートパッドで Controller クラスを開くときにアクションを保存するようになりました。
+* フォームデザイナー : CTRL キーで複数のコントロールを選択時に現在のコントロールを保持するようになりました。
+* フォームデザイナー : Ring ノートパッドでの使用時に素敵な背景色に対応しました (スタイル - モダン : 黒)
+* RingOpenSSL : OpenSSL 1.1 など新しいバージョンへ対応するために更新しました。
+* ビルドスクリプト : Fedora 26 (64bit) での動作に対応するために更新
+* OpenGL : 新しいサンプル - 複数の立方体 (samples/3D/manycubes)
+
+
+スクリーンショット:
+
+.. image:: manycubes.png
+       :alt: 複数の立方体
+
+* RingQt : QDateTime クラスの追加
+* RingQt : QMenu および QCursor クラスへ新しいメソッドを追加
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win = new qwidget() {
+                       setwindowtitle("Context Menu")
+                       resize(400,400)
+                       myfilter = new qAllEvents(win) {
+                               setContextmenuEvent("mymenu()")
+                       }
+                       installeventfilter(myfilter)
+                       show()
+               }
+               exec()
+       }
+
+
+       func mymenu 
+
+               new qMenu(win) {
+                       oAction = new qAction(win) {
+                               settext("new")
+                               SetCLickevent("See :New")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("open")
+                               SetCLickevent("See :Open")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("save")
+                               SetCLickevent("See :Save")
+                       }
+                       addaction(oAction)
+                       oAction = new qAction(win) {
+                               settext("close")
+                               SetCLickevent("See :Close")
+                       }
+                       addaction(oAction)
+                       oCursor  = new qCursor()
+                       exec(oCursor.pos())
+               }
+       
+
+コンパイラ : 数値内で _ の使用に対応
+
+用例:
+
+.. code-block:: ring
+
+       x = 1_000_000
+       see type(x)+nl
+       see x+1+nl
+
+実行結果:
+
+.. code-block:: ring
+
+       NUMBER
+       100000001
+
+コンパイラ : 数値の後に f の使用に対応
+
+用例:
+
+.. code-block:: ring
+
+       x = 19.99f
+       see type(x) + nl
+
+実行結果:
+
+.. code-block:: ring
+
+       NUMBER
+
+Google API Shortener アプリケーション
+
+スクリーンショット:
+
+.. image:: urlappshot1.png
+       :alt: URLShortener - スクリーンショット 1
+
+TicTacToe 3D ゲーム
+
+スクリーンショット:
+
+.. image:: tictactoe3d.png
+       :alt: TicTacToe 3D ゲーム
+
+
+.. index:: 
+       pair: Ring 1.5 の変更履歴; Ring 1.5.4 の変更履歴
+
+Ring 1.5.4 の変更履歴
+=========================
+
+
+* CalmoSoft Fifteen Puzzle ゲーム 3D
+* Ring ノートパッド - 新しいスタイル
+* Ring ノートパッド - ツールバーのスタイルを改善
+* Ring ノートパッド - View モード
+* Ring ノートパッド - QPlainTextEdit - スクロールバーの背景色の設定を行わないようにしました。
+* Ring ノートパッド - スタイル - フュージョン (白) - コメントに銀色を使用
+* Ring ノートパッド - Tab と Shift-Tab - 複数行インデント
+* フォームデザイナー - ツールバーのスタイルを改善
+* フォームデザイナー - ウィンドウフラグとメニュバーデザイナー用の素敵な背景色
+* フォームデザイナー - コントロールのデフォルト背景色
+* RingQt - QWidget クラスへgrab() および windowHandle() メソッドを追加
+* RingQt - QPixmap クラスへ新しいメソッドを追加
+* RingQt - クラスの追加:
+       * QScreen
+       * QWindow
+       * QGuiApplication
+       * QTextBrowser
+* 拡張機能用のコード生成器 - Nonew オプション - 親クラスへの対応
+* Ring VM - 内部実装 - 文字列とリストオブジェクトをステートへ渡せるようになりました。
+* Ring VM - ガベージコレクター - 小規模オブジェクトをメモリへプールできるようになりました。
+* Ring VM - ステートの保存と復元に関するコードの改善
+
diff --git a/docs/ja-jp/source/whatisnew6.txt b/docs/ja-jp/source/whatisnew6.txt
new file mode 100644 (file)
index 0000000..6c2a367
--- /dev/null
@@ -0,0 +1,477 @@
+.. index:: 
+       single: Ring 1.6 の変更履歴; はじめに
+
+=======================
+Ring 1.6 の変更履歴
+=======================
+
+Ring 1.6 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.6 の新機能!
+
+* Employee アプリケーション
+* 新ツール : Ring2EXE
+* Android 版 Ring の改善
+* 新ツール : Folder2qrc
+* Ring ビルド用スクリプトの改善
+* RingConsoleColors 拡張機能
+* RingMurmurHash 拡張機能
+* Ring ノートパッドの改善
+* RingQt の改善
+* StdLib の改善
+* Ring VM の改善
+* RingREPL の改善
+* char(9) の代わりに Tab を使うには
+* CR をキャリッジリターンとして使うには
+* ! 演算子を not として使うには
+* && および || 演算子の用法
+* 式の表示後に ? で改行するには
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; Employee アプリケーション
+
+Employee アプリケーション
+=========================
+
+Employee アプリケーションを ring/applications へ追加しました。
+
+開発者: アーメド・ハッサウナ
+
+.. image:: empapp.png
+       :alt: Employee サンプル
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; 新ツール - Ring2EXE
+
+新ツール - Ring2EXE
+===================
+
+現在は、スグレモノである RingEXE (Ring 1.6 以降) があります。
+
+Ring2EXE (Ring にて記述) で Windows, Linux および macOS 用のアプリケーションを手軽に配布できます。
+
+詳細情報は本取扱説明書の「Ring2EXE による Ring アプリケーションの配布方法」をご確認ください。
+
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; Android 版 Ring の改善
+
+Android 版 Ring の改善
+======================
+
+複数のソースコードファイル (\*.ring) ではなく Ring オブジェクトファイル (\*.ringo)
+を使用するために Android 版 Ring (RingQt の使用) を更新しました。
+
+このスクリーンショットは Android 版 Cards ゲームのビルドに関する用例です。
+
+cards.ring ではなく cards.ringo を使用します。
+
+大規模プロジェクト構成 (大量の \*.ring ファイル) では、 \*.ringo ファイルのみ使います。
+
+.. image:: cardsqt.png
+       :alt: Android 版 Ring の改善
+
+Qt プロジェクトでモバイル用 RingQt アプリケーションの配布準備をするには Ring2EXE を使用してください。
+
+用例①
+
+.. code-block:: ring
+
+       ring2exe cards.ring -dist -mobileqt
+
+用例②
+
+.. code-block:: ring
+
+       ring2exe formdesigner.ring -dist -mobileqt
+
+.. image:: formdesignerandroid.png
+       :alt: Android 版フォームデザイナー
+
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; 新ツール - Folder2qrc
+
+新ツール - Folder2qrc
+=====================
+
+大量の画像とファイルから構成されている大規模 RingQt プロジェクトがある場合、
+モバイル機器用のアプリケーションの配布時にリソースファイル (\*.qrc) へファイルを必ず追加してください。
+
+Ring 1.6 以降では Folder2qrc ツールにより、一つずつファイルを追加する必要がなくなるので時間の節約になります。
+
+用例:
+
+.. code-block:: bash
+
+       folder2qrc formdesigner.ring
+
+アプリケーションフォルダに移動している間に、メインソースファイルの決定をするために
+Folder2qrc は現在のフォルダとサブフォルダにある全てのファイルを確認します。
+そして mainfile.ringo の後にリソースファイルを追加します (この用例では formdesigner.ringo です)。
+
+出力ファイル : project.qrc
+
+ファイルを開く、または削除するためにリソースは不要です!
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; Ring ビルド用スクリプトの改善
+
+Ring ビルド用スクリプトの改善
+=============================
+
+Ring 1.6 ではソースコードから Ring のビルドを行うためのスクリプトを改善しました。
+
+この更新は 32bit と 64bit システムの Windows, Linux (Ubuntu, Fedora) および macOS で検証済みです。
+
+Windows 用のスクリプトでは Visual Studio のバージョンを基に Visual C/C++ コンパイラを検出するために更新されました。
+
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; RingConsoleColors 拡張機能
+
+RingConsoleColors 拡張機能
+===========================
+
+RingConsoleColors 拡張機能でコンソールアプリケーションの配色を簡単に変更できます。
+
+.. image:: consolecolors.png
+       :alt: RingConsoleColors
+
+詳細情報は取扱説明書の RingConsoleColors の章をご確認ください。
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; RingMurmurHash 拡張機能
+
+RingMurmurHash 拡張機能
+========================
+
+Ring 1.6 には RingMurmurHash 拡張機能があります!
+
+開発者: ハッサン・アーメド
+
+用例:
+
+.. code-block:: ring
+
+       load "murmurhashlib.ring"
+
+       key = "Ring Language"
+
+       see murmurhash3_x86_32(key, 0, 0) + nl // 実行結果: 1894444853
+       see murmurhash3_x86_32(key, 0, 1) + nl // 実行結果: 70eaef35
+
+詳細情報は取扱説明書の RingMurmurHash の章をご確認ください。
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; Ring ノートパッドの改善
+
+Ring ノートパッドの改善
+=======================
+
+Ring ノートパッドを更新しました。
+
+(1) アプリケーションの実行時にメインファイルの自動設定 (メインファイルボタンを使用)。
+
+(2) メインファイル - 実行前の自動保存。
+
+(3) GUI アプリケーション実行時 - 実行結果ウィンドウで入力用にテキストボックスを使用した場合はフォーカスを変更しないようにしました。
+
+(4) ボタン、およびオプションからウェブアプリケーションを実行できるようになりました。
+
+.. image:: runwebapp1.png
+       :alt: Ring ノートパッド - ウェブアプリケーションの実行 - スクリーンショット 1
+
+Ring 1.6 から Windows ユーザー用に Apache ウェブサーバーが添付されています!
+
+設定は一切不要で指定フォルダからウェブアプリケーションを実行できます。
+
+.. image:: runwebapp2.png
+       :alt: Ring ノートパッド - ウェブアプリケーションの実行 - スクリーンショット 2
+
+(5) ツール - オペレーティングシステム - ターミナル (コマンドプロンプト) & ファイルマネージャー (エクスプローラ)
+
+.. image:: rnotetoolsterminal.png
+       :alt: Ring ノートパッド - ツール - ターミナル - スクリーンショット 1
+
+これにより、アプリケーションフォルダからコマンドプロンプト、またはエクスプローラを手軽に開くことができます。
+
+.. image:: rnotetoolsterminal2.png
+       :alt: Ring ノートパッド - ツール - ターミナル - スクリーンショット 2
+
+(6) 拡張子 \*.sh と \*.batへの対応
+
+(7) 新しいメニュー: 配布
+
+.. image:: rnotedistribute.png
+       :alt: Ring ノートパッド - 配布
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; RingQt の改善
+
+RingQt の改善
+=============
+
+RingQt を更新しました。
+
+(1) QAllEvents - getkeytext() メソッド
+
+(2) QSQLQuery - exec_2() メソッド
+
+(3) QDockWidget イベント
+
+(4) AppFile() 関数
+
+(5) IsMobile() 関数
+
+(6) QRegion クラス
+
+(7) QCoreApplication クラス
+
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; StdLib の改善
+
+StdLib の改善
+=============
+
+StdLib を更新しました。
+
+(1) Factors() 関数の更新 (表示を行わずに出力を返します)
+
+(2) Palindrome() 関数の更新 (表示を行わずに出力を返します)
+
+(3) stdlibcore.ring で StdLib 関数を使えます (クラスはありません)。
+
+    これはスタンドアローン型のコンソールアプリケーションを作成する場合に便利です。
+
+    stdlib.ring (関数とクラス) は RingLibCurl, RingOpenSSL などのライブラリを読み込みます。
+
+
+(4) 新しい関数
+
+* SystemSilent(cCommand) : 実行結果を表示せずにシステムをコマンド実行します。
+
+* OSCreateOpenFolder(cFolder) : フォルダの作成後に、現在のフォルダを作成した新しいフォルダへ変更します。
+
+* OSCopyFolder(cParentFolder,cFolderNameToCopy) : 現在のディレクトリへフォルダをコピーします。
+
+* OSDeleteFolder(cFolder) : フォルダの削除
+
+* OSCopyFile(cFileName) : 現在のディレクトリへファイルをコピーします。
+
+* OSDeleteFile(cFileName) : ファイルの削除
+
+* OSRenameFile(cOldFileName,cNewFileName) : ファイル名変更
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; Ring VM の改善
+
+Ring VM の改善
+==============
+
+Ring VM を更新しました。
+
+(1) 式において getter メソッドの複数使用に対応
+
+(2) This と Self を Setter/Getter メソッドを呼び出さずに Setter/Getter/Normal メソッドで使用できるようにするための対応
+
+(3) TempName() 関数の更新 (コードの改善)
+
+(4) ExeFileName() 関数の更新 (コードの改善)
+
+(5) Private 属性 - クラス範囲における再利用の対応 (Private キーワードの後に)
+
+(6) Ring API : ring_scanner_runobjstring()
+
+(7) ring_state_setvar() 関数
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; RingREPL の改善
+
+RingREPL の改善
+===============
+
+RingREPL を更新しました。
+
+(1) RingREPL はコマンドラインの仮引数でスタイルを決定します。
+
+(2) Ring ノートパッドのスタイルに基づき RingREPL のスタイルを設定します。
+
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; char(9) の代わりに Tab を使うには
+
+char(9) の代わりに Tab を使うには
+=================================
+
+Tab 変数は char(9) の代わりに使用するために定義済みです。
+
+用例①:
+
+.. code-block:: ring
+
+       see :one + nl + tab + :two + nl + tab + tab + :three
+
+実行結果:
+
+.. code-block:: none
+
+       one
+               two
+                       three
+
+変数を別の値へ変更できます。
+
+用例②:
+
+.. code-block:: ring
+
+       tab = "  "
+       see :one + nl + tab + :two + nl + tab + tab + :three
+
+実行結果:
+
+.. code-block:: none
+
+       one
+         two
+           three
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; CR をキャリッジリターンとして使うには
+
+CR をキャリッジリターンとして使うには
+=====================================
+
+この用例では、十秒間に同じ行で 1 ~ 10 まで数えます。
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       for x = 1 to 10 see x sleep(1) see cr next
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; ! 演算子を not として使うには
+
+! 演算子を not として使うには
+=============================
+
+Ring には = と != があります。
+
+しかし、論理演算子には and, or, そして not があります。
+
+さら、 ! 演算子を not として使えます。
+
+用例:
+
+.. code-block:: ring
+
+       if ! false
+               see "True!" + nl
+       ok
+
+実行結果:
+
+.. code-block:: none
+
+       True!
+
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; && および || 演算子の用法
+
+&& および || 演算子の用法
+=========================
+
+このようなキーワードが Ring の論理演算子としてあります。
+
+* and
+* or
+* not
+
+また、このような演算子もあります。
+
+* &&
+* ||
+* !
+
+用例:
+
+.. code-block:: ring
+
+       if one() and two()
+               see "Test1 - Fail" + nl
+       else
+               see "Test1 - Pass" + nl
+       ok
+
+       if two() or one()
+               see "Test2 - Pass" + nl
+       else
+               see "Test2 - Fail" + nl
+       ok
+
+       if one() && two()
+               see "Test3 - Fail" + nl
+       else
+               see "Test3 - Pass" + nl
+       ok
+
+       if two() || one()
+               see "Test4 - Pass" + nl
+       else
+               see "Test4 - Fail" + nl
+       ok
+
+       func one return True
+
+       func two return False
+
+実行結果:
+
+.. code-block:: none
+
+       Test1 - Pass
+       Test2 - Pass
+       Test3 - Pass
+       Test4 - Pass
+
+.. index:: 
+       pair: Ring 1.6 の変更履歴; ? 演算子で式の表示後に改行するには
+
+? 演算子で式の表示後に改行するには
+==================================
+
+式の表示後に改行することは一般的です。これは ? 演算子で実現できます!
+
+用例:
+
+.. code-block:: ring
+
+       ? "Hello, World!"
+       for x = 1 to 10
+               ? x
+       next
+
+実行結果:
+
+.. code-block:: none
+
+       Hello, World!
+       1
+       2
+       3
+       4
+       5
+       6
+       7
+       8
+       9
+       10
diff --git a/docs/ja-jp/source/whatisnew7.txt b/docs/ja-jp/source/whatisnew7.txt
new file mode 100644 (file)
index 0000000..89b1e25
--- /dev/null
@@ -0,0 +1,460 @@
+.. index:: 
+       single: Ring 1.7 の変更履歴; はじめに
+
+=======================
+Ring 1.7 の変更履歴
+=======================
+
+Ring 1.7 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.7 の新機能!
+
+* 新しい命令: Load Package
+* ringvm_see() と ringvm_give() 関数
+* ring_state_new() と ring_state_mainfile() 関数
+* トレースライブラリの改善
+* Ring ノートパッドの改善
+* RingQt の改善
+* Ring2EXE の改善
+* RingZip の改善
+* 取扱説明書の改訂
+* Ring VM の改善
+* RingLibuv 拡張機能
+
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; 新しい命令: Load Package
+
+新しい命令: Load Package
+========================
+
+‘Load’ 命令により、複数の Ring ソースファイルを同じプロジェクトで使えます。
+
+しかし、これらのファイルでは同じグローバルスコープを共有しています。
+
+さて、 “Load Package” 命令もあります。
+
+“Load Package” では新しいグローバルスコープへライブラリ (\*.ring ファイル) を読み込むことができます。
+
+グローバル変数との名前衝突回避となるため、ライブラリの作成時は非常に便利です。
+
+用例:
+
+ファイル: loadpackage.ring
+
+.. code-block:: ring
+
+       x = 100
+       ? "Hello, World!"
+       load package "testloadpackage.ring"
+
+       ? x
+       test()
+
+ファイル: testloadpackage.ring
+
+.. code-block:: ring
+
+       ? "Hello from testloadpackage.ring"
+
+       x = 1000
+
+       test()
+
+       func test
+               ? x
+
+実行結果:
+
+.. code-block:: none
+
+       Hello, World!
+       Hello from testloadpackage.ring
+       1000
+       100
+       1000
+
+
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; ringvm_see() と ringvm_give() 関数
+
+ringvm_see() と ringvm_give() 関数
+==================================
+
+ringvm_see() 関数で See 命令の挙動を変更します。
+
+また ring_see() 関数で元の挙動を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       see "Hello world" + nl
+       see 123 + nl
+       see ["one","two","three"]
+       see new point {x=10 y=20 z=30} 
+
+       func ringvm_see t
+               ring_see("We want to print: ")
+               ring_See(t)
+
+       class point x y z
+
+実行結果:
+
+.. code-block:: none
+
+       We want to print: Hello world
+       We want to print: 123
+       We want to print: one
+       two
+       three
+       We want to print: x: 10.000000
+       y: 20.000000
+       z: 30.000000
+
+ringvm_give() 関数は Give 命令の挙動を変更します。
+
+また、 ring_give() 関数は元の挙動を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       see "Name: " give name
+       see "Hello " + name
+
+       func ringvm_give
+               see "Mahmoud" + nl
+               return "Mahmoud"
+
+実行結果:
+
+.. code-block:: ring
+
+       Name: Mahmoud
+       Hello Mahmoud
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; ring_state_new() と ring_state_mainfile() 関数
+
+ring_state_new() と ring_state_mainfile() 関数
+==============================================
+
+ring_state_new() と ring_state_mainfile() 関数は Ring プログラムから別の Ring プログラムを実行します。
+
+ring_state_main() 関数とは異なり、こちらは Ring ステートの削除時に制御できます!
+
+これは GUI プログラムから別の GUI プログラムを実行するときに重要です。
+
+この場合は GUI ライブラリ (RingQt) を共有しており、
+
+呼び出し元は qApp.Exec() を呼び出すからです。
+
+よって、下位プログラムを停止せずにメインプログラムへ戻ります。
+
+ここで下位プログラムのステートを削除してしまうと、下位プログラムのイベント実行時に問題が発生します。
+
+ステートを保持することは、下位 GUI プログラムの収容先となっている GUI プログラムでは重要です。
+
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; トレースライブラリの改善
+
+トレースライブラリの改善
+========================
+
+トレースライブラリの更新により、デバッガのブレークポイントで “callstack” 命令を利用できるようになりました。
+
+この命令は関数のコールスタックを表示します。
+
+用例:
+
+.. code-block:: ring
+
+       load "tracelib.ring"
+
+       func main
+               ? "Hello from main!"
+               test1()
+
+       func test1 
+               ? "Hello from test1!"
+               test2()
+
+       func test2 
+               ? "Hello from test2!"
+               test3()
+
+       func test3 
+               ? "Hello from test3!"
+               breakpoint()
+
+
+.. image:: callstack.png
+       :alt: コールスタック
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; Ring ノートパッドの改善
+
+Ring ノートパッドの改善
+=======================
+
+Ring ノートパッドを更新しました。
+
+(1) 拡張子 \*.cf への対応
+(2) ハッシュ関数 (SHA256) 使用時の改善 - “Save Changes?” (変更を保存しますか?) メッセージ
+(3) Ring ノートパッド - ×ボタン - Saving Changes? で問い合わせるようになりました。
+
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; RingQt の改善
+
+RingQt の改善
+=============
+
+このクラスを RingQt へ追加しました。
+
+(1)  QStackedWidget
+(2)  QCalendarWidget
+(3)  QOpenGLFunctions
+(4)  QOpenGLContext
+(5)  QSurfaceFormat
+(6)  QOpenGLWidget
+(7)  QOpenGLVersionProfile
+(8)  QOpenGLFunctions_3_2_Core
+(9)  QVector2D
+(10) QVector3D
+(11) QVector4D
+(12) QQuaternion
+(13) QMatrix4x4
+(14) QOpenGLPaintDevice
+(15) QPaintDevice
+(16) QOpenGLTimerQuery
+(17) QOpenGLDebugLogger
+(18) QOpenGLFramebufferObject
+(19) QOpenGLVertexArrayObject
+(20) QOpenGLBuffer
+(21) QOpenGLShaderProgram
+(22) QOpenGLShader
+(23) QOpenGLTexture
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; Ring2EXE の改善
+
+Ring2EXE の改善
+===============
+
+C/C++ コンパイラがないとき、想定された動作を行うために Ring2EXE を更新しました。
+
+これにより、アプリケーションの配布に適したものを生成できます (exe ファイルと ring ファイル)。
+
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; RingZip の改善
+
+RingZip の改善
+==============
+
+このライブラリの更新により、サブフォルダにあるファイルの展開に対応しました!
+
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; 取扱説明書の改訂
+
+取扱説明書の改訂
+================
+
+(1) RingQt クラスの章 - クラスリストの並べ替えを行いました。
+
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; Ring VM の改善
+
+Ring VM の改善
+===============
+
+(1) エラーメッセージの改善
+(2) List2Str() 関数で数値を有するリストに対応
+(3) 分離記号 _ のある数値の対応を修正
+(4) 変数を使用せずにリストを作成 (ステートメント –> 式 –> リスト)
+(5) isNULL() - 英数大小文字同一視 - Null および null は NULL と同等に扱われます。
+(6) このオブジェクトで属性に Self オブジェクトの追加へ対応
+(7) ‘:’ 演算子を使用後に小文字リテラルのキーワードを作成
+(8) オブジェクトの表示 - decimals() 関数の考慮
+(9) 定数を閉られていない場合 - 定数の始点を決定
+(10) リストのあるオブジェクトの表示時におけるエラーメッセージの改善
+(11) VarPtr() - ローカルスコープにある変数のポインタの取得に対応
+(12) 新しいスレッドの作成時に perfomance 命令を normal 命令へ交換
+
+.. index:: 
+       pair: Ring 1.7 の変更履歴; RingLibuv 拡張機能
+
+RingLibuv 拡張機能
+===================
+
+Ring 1.7 から RingLibuv 拡張機能を利用できるようなりました。
+
+Libuv は非同期 I/O に主眼を置いたマルチプラットフォーム対応ライブラリです。
+
+用例 (イベントループ):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+
+       counter = 0
+       idler = NULL 
+
+       func main
+               idler = new_uv_idle_t()
+               uv_idle_init(uv_default_loop(), idler)
+               uv_idle_start(idler, "wait()")
+               ? "Idling..."
+               uv_run(uv_default_loop(), UV_RUN_DEFAULT);
+               uv_loop_close(uv_default_loop());
+               destroy_uv_idle_t(idler)
+
+       func wait
+               counter++
+               if counter >= 100000
+                       uv_idle_stop(idler)
+               ok
+
+実行結果:
+
+.. code-block:: none
+
+       Idling...
+
+用例 (サーバー):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Server Side - Using Classes"
+
+       open_object(:MyServer)
+
+       class MyServer from ObjectControllerParent
+
+               DEFAULT_PORT    = 13370
+               DEFAULT_BACKLOG = 1024
+               
+               addr    = new_sockaddr_in()
+               server  = NULL
+               client  = NULL
+               myloop  = NULL
+               
+               func start
+                       myloop = uv_default_loop()
+                       server = new_uv_tcp_t()
+                       uv_tcp_init(myloop, server)
+                       uv_ip4_addr("127.0.0.1", DEFAULT_PORT, addr)
+                       uv_tcp_bind(server, addr, 0)
+                       r = uv_listen(server, DEFAULT_BACKLOG, Method(:newconnection) )
+                       if r 
+                               ? "Listen error " + uv_strerror(r)
+                               return 1
+                       ok
+                       uv_run(myloop, UV_RUN_DEFAULT)
+                       destroy_uv_tcp_t(server)
+                       destroy_uv_sockaddr_in(addr)
+               
+               func newconnection
+                       ? "New Connection"
+                       aPara   = uv_Eventpara(server,:connect)
+                       nStatus = aPara[2]
+                       if nStatus < 0
+                               ? "New connection error : " + nStatus 
+                               return 
+                       ok
+                       client = new_uv_tcp_t()
+                       uv_tcp_init(myloop, client)
+                       if uv_accept(server, client) = 0 
+                                       uv_read_start(client, uv_myalloccallback(), 
+                                                               Method(:echo_read))
+                       ok
+               
+               func echo_read 
+                       aPara = uv_Eventpara(client,:read)
+                       nRead = aPara[2]
+                       buf   = aPara[3]
+                       if nRead > 0
+                               req = new_uv_write_t()
+                                       wrbuf = uv_buf_init(get_uv_buf_t_base(buf), nread)
+                               uv_write(req, client, wrbuf, 1, Method(:echo_write))
+                               ? uv_buf2str(wrbuf)
+                               message = "message from the server to the client"
+                               buf = new_uv_buf_t()
+                               set_uv_buf_t_len(buf,len(message))
+                               set_uv_buf_t_base(buf,varptr("message","char *"))
+                               uv_write(req, client, buf, 1, Method(:echo_write))
+                       ok
+               
+               func echo_write
+                       aPara = uv_Eventpara(client,:read)
+                       req   = aPara[1]
+       
+
+実行結果:
+
+クライアントを実行すると、 “New Connection” メッセージが表示されます。
+
+そして “hello from the client” メッセージが表示されます。
+
+.. code-block:: none
+
+       Testing RingLibuv - Server Side - Using Classes
+       New Connection
+       hello from the client
+
+用例 (スレッドの使用):
+
+.. code-block:: ring
+
+       load "libuv.ring"
+       load "objectslib.ring"
+
+       ? "Testing RingLibuv - Threads - Using Classes"
+
+       open_object(:MyThreads)
+
+       class MyThreads from ObjectControllerParent
+
+               func Start
+                       one_id = new_uv_thread_t()
+                       two_id = new_uv_thread_t()
+                       uv_thread_create(one_id, Method(:One))
+                       uv_thread_create(two_id, Method(:Two))
+                       uv_thread_join(one_id)
+                       uv_thread_join(two_id)
+                       destroy_uv_thread_t(one_id)
+                       destroy_uv_thread_t(two_id)
+               
+               func one
+                       ? "Message from the First Thread!"
+               
+               func Two
+                       ? "Message from the Second Thread!"
+               
+
+実行結果:
+
+.. code-block:: none
+
+       Testing RingLibuv - Threads - Using Classes
+       Message from the First Thread!
+       Message from the Second Thread!
+
+この拡張機能 (RingLibuv) の詳細情報は、この章をご確認ください: RingLibuv の用法
+
diff --git a/docs/ja-jp/source/whatisnew8.txt b/docs/ja-jp/source/whatisnew8.txt
new file mode 100644 (file)
index 0000000..0d6b2c4
--- /dev/null
@@ -0,0 +1,568 @@
+.. index:: 
+       single: Ring 1.8 の変更履歴; はじめに
+
+=======================
+Ring 1.8 の変更履歴
+=======================
+
+Ring 1.8 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.8 の新機能!
+
+* 実行性能の改善
+* Find in files アプリケーション
+* String2Constant アプリケーション
+* StopWatch アプリケーション
+* そのほかの 3D サンプル
+* Manjaro Linux でのコンパイル
+* クラス範囲で This を Self として使用
+* オブジェクト属性のデフォルト値は NULL
+* For ループでローカルスコープを使用
+* バイナリ文字の統合
+* FoxRing ライブラリ
+* フォームデザイナーの改善
+* Cards ゲームの改善
+* RingQt の改善
+* 拡張機能用コード生成器の改善
+* Ring コンパイラと VM の改善
+* 拡張機能開発者への告知
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; 実行性能の改善
+
+実行性能の改善
+==============
+
+Ring 1.8 は Ring 1.7 よりも高速化されました。
+
+実行性能の利得はアプリケーションによりますが 10 ~ 100% ほどです。
+
+この公開版において、現在の実行性能の関する考えかたを理解するには、 3D サンプルをご確認ください。
+
+詳細情報は「性能改善に関する情報」をご確認ください。
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; Find in files アプリケーション
+
+Find in files アプリケーション
+==============================
+
+Ring 1.8 より Find in files (ファイルの検索) アプリケーションがあります。
+
+.. image:: findinfiles.png
+       :alt: ファイルの検索
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; String2Constant アプリケーション
+
+String2Constant アプリケーション
+================================
+
+Ring 1.8 より String2Constant アプリケーションがあります。
+
+このツールは文字列リテラルではなく、定数を使用したソースコードへ変換します。
+
+これにより、定数を様々な言語を翻訳して言語ごとにソースコードのファイルへ格納できます。
+
+Arabic.ring, English.ring, Japanese.ring など言語ごとに特殊なファイルを扱えます。
+
+このツールの採用事例としては、アラビア語へ翻訳したフォームデザイナーがあります。
+
+詳細情報は「多国語アプリケーション」をご確認ください。
+
+.. image:: string2constant.png
+       :alt: String2Constant 
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; StopWatch アプリケーション
+
+StopWatch アプリケーション
+==========================
+
+Ring 1.8 より StopWatch アプリケーションがあります。
+
+.. image:: stopwatch.png
+       :alt: StopWatch
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; そのほかの 3D サンプル
+
+そのほかの 3D サンプル
+======================
+
+サンプルは ring/samples/3D フォルダにあります。
+
+このスクリーンショットはトップダウン - 多層立方体のサンプルです。
+
+.. image:: more3dsamples.jpg
+       :alt: 3D サンプル
+
+このスクリーンショットはカメラのサンプルです。
+
+.. image:: more3dsamples2.jpg
+       :alt: カメラ
+
+このスクリーンショットはカメラと背景のサンプルです。
+
+開発者 : アズディン・レマル
+
+.. image:: cameraandbackground.png
+       :alt: カメラと背景のサンプル
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; Manjaro Linux でのコンパイル
+
+Manjaro Linux でのコンパイル
+============================
+
+Manjaro Linux での Ring 1.8 の動作確認を行いました。
+
+検証者 : アイップ・リファイ
+
+.. image:: ringonmanjarolinux.png
+       :alt: Manjaro Linux での Ring
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; クラス範囲で This を Self として使用
+
+クラス範囲で This を Self として使用
+====================================
+
+クラス範囲とはクラス名の後、およびすべてのメソッドの前に出現する範囲のことです。
+
+クラス範囲で This を Self として使えます。
+
+用例:
+
+.. code-block:: ring
+
+       func main
+
+               o1 = new program {
+                       test()
+               }
+
+               ? o1
+
+       class program 
+
+               this.name = "My Application"
+               this.version = "1.0"
+               ? name ? version        
+
+               func test
+                       ? "Name    = " + name 
+                       ? "Version = " + version
+
+実行結果:
+
+.. code-block:: none
+
+       My Application
+       1.0
+       Name    = My Application
+       Version = 1.0
+       name: My Application
+       version: 1.0
+
+.. note:: 弓括弧は現在の有効なオブジェクトを変更しますが、This はクラスを指したままにできます。
+
+.. tip:: This と Self には違いがあります。 Self が指している現在の有効なオブジェクトは弓括弧で変更できます。
+
+ほとんどの場合、クラス範囲で This あるいは Self を使う必要はないことを覚えていてください。
+
+このように記述することもできます。
+
+
+.. code-block:: ring
+
+       class program name version
+
+または
+
+.. code-block:: ring
+
+       class program name="My Application" version="1.0"
+
+.. note:: 同名で定義されたグローバル変数との衝突を回避するために、クラス範囲で This あるいは Self を使用します。
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; オブジェクト属性のデフォルト値
+
+オブジェクト属性のデフォルト値
+==============================
+
+オブジェクト属性のデフォルト値は NULL です。
+
+Ring では、 NULL 値は空文字列または "NULL" を有する文字列です。
+
+NULL 値の検査には isNULL() 関数を使用します。
+
+用例:
+
+.. code-block:: ring
+
+       oProgram = new Program
+       ? oProgram.name
+       ? oProgram.version
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       oProgram { name="My Application" version="1.0" }
+       ? isNULL(oProgram.name)
+       ? isNULL(oProgram.version)
+       ? oProgram
+
+       class program
+               name 
+               version
+
+実行結果:
+
+.. code-block:: none
+
+       NULL
+       NULL
+       1
+       1
+       0
+       0
+       name: My Application
+       version: 1.0
+
+以前の Ring バージョンでは、値の割り当て前にオブジェクトの属性へアクセスしていました。
+
+これはランタイムエラーとなり isNULL() でも検出できません。
+
+唯一の方法は値の割り当て、または try/catch/end を使うことです。
+
+この挙動を変更しており、つなぎ目のない完全な制御を扱うことができます。
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; For ループでローカルスコープを使用
+
+For ループでローカルスコープを使用
+==================================
+
+Ring 1.8 より、 For ループでの新規識別子 (変数) を定義するときは、ローカルスコープで定義します。
+
+用例:
+
+.. code-block:: ring
+
+       x = 10
+       ? x             # 10 の表示
+       test1()
+       ? x             # 10 の表示
+       test2()
+       ? x             # 10 の表示
+
+       func test1
+               for x = 1 to 5
+               next
+               ? x     # 6 の表示
+
+       func test2
+               list = 1:5
+               for x in list
+               next
+               ? x     # NULL の表示 ("For In" ループでは、ループ完了後に参照を破棄します)
+
+実行結果:
+
+.. code-block:: ring
+
+       10
+       6
+       10
+       NULL
+       10      
+               
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; バイナリ文字の統合
+
+バイナリ文字の統合
+==================
+
+Ring 1.0 からバイナリ文字列の作成と操作に対応しました。
+
+Ring 1.8 より文字列から個別に文字を取得したり、
+'+' 演算子でまとめて統合できます。
+
+用例:
+
+.. code-block:: ring
+
+       cStr = "Welcome"
+       ? cstr[1] + cstr[2] + cStr[5]
+       v = cstr[1] + cstr[2] + cStr[5]
+       ? v
+       ? len(v)
+       c1 = cStr[1]
+       ? c1
+       aList = [1,2,3]
+       cStr = ""
+       for item in aList 
+               cStr += int2bytes(item)
+       next 
+       ? "All String"
+       ? len(cStr)
+       ? "First Part"
+       n1 = cStr[1] + cStr[2] + cStr[3] + cStr[4]
+       ? len(n1)
+       ? "Second Part"
+       n2 = cStr[5] + cStr[6] + cStr[7] + cStr[8]
+       ? len(n2)
+       ? "Third Part"
+       n3 = cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(n3)
+       ? "All String"
+       cString = cStr[1] + cStr[2] + cStr[3] + cStr[4] + 
+                 cStr[5] + cStr[6] + cStr[7] + cStr[8] + 
+                 cStr[9] + cStr[10] + cStr[11] + cStr[12]
+       ? len(cString)
+       ? ascii(cStr[1])
+       ? len(cStr[2])
+
+実行結果:
+
+.. code-block:: ring
+
+       Weo
+       Weo
+       3
+       W
+       All String
+       12
+       First Part
+       4
+       Second Part
+       4
+       Third Part
+       4
+       All String
+       12
+       1
+       1
+       
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; FoxRing ライブラリ
+
+FoxRing ライブラリ
+==================
+
+開発者: ホセ・ロサード
+
+FoxPro の関数を使用したクラスです。
+
+用例:
+
+.. code-block:: ring
+
+       Load "foxring.ring"
+
+       mf = new frFunctions
+       ? mf.frAbs(-45)      
+       ? mf.frAbs(10-30)    
+       ? mf.frAbs(30-10)   
+
+       ? mf.frTransform("    Ring is a good language    ",
+                        "@! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") 
+       ? mf.frAllTrim("    Ring is a good language    ", Null) 
+
+実行結果:
+
+.. code-block:: ring
+
+       45
+       20
+       20
+           RING IS A GOOD LANGUAGE
+       Ring is a good language
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; フォームデザイナーの改善
+
+フォームデザイナーの改善
+========================
+
+(1) Layout コントロール - フォームの読み込み時にコントロール名を表示。
+(2) Button コントロール - 相対パスで記述された画像ボタンを表示。
+(3) Table  コントロール - フォームの読み込み時にコントロール名を表示。
+(4) "Bring to front" (前面へ移動) と "Send to back" (背面へ移動) 操作の挙動を改善。
+(5) 新しいボタンをツールバーへ追加 (複製、前面へ移動、背面へ移動、削除)。
+(6) 「メニューバーデザイナー、ウィンドウフラグのウィンドウ、オブジェクトウィンドウの選択」でのレイアウトを使用。
+(7) 選択されたオブジェクトを変更するときにプロパティウィンドウの表示挙動を改善。
+(8) オブジェクトの複数選択で移動と寸法変更の新しいボタンを追加。
+(9) オブジェクトのプロパティ - レイアウト選択ボタンの追加。
+(10) フォームを開く、およびファイルの切り換えを高速化。
+(11) オブジェクトの順序ウィンドウ。
+(12) オブジェクトのウィンドウを選択。
+(13) コントロール名を変更するとき、名前はレイアウトオブジェクトを更新します。
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; Cards ゲームの改善
+
+Cards ゲームの改善
+==================
+
+Cards ゲームはコンピュータと対戦できるようになりました。
+
+.. image:: cardsmainmenu.png
+       :alt: Cards メインメニュー
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; RingQt の改善
+
+RingQt の改善
+=============
+
+* このクラスを RingQt へ追加しました。
+
+(1) QTabBar
+(2) QFile
+(3) QFileDevice
+(4) QStandardPaths
+(5) QDir
+(6) QQuickWidget
+(7) QQmlError
+(8) QScrollBar
+
+* 現行版の Qt へ対応するために Android 版 RingQt を更新をしました。
+
+検証済み:
+
+(1) Qt 5.5.1
+(2) Qt 5.9.5
+(3) Qt 5.11.0
+
+* Android 版 RingQt では、リソースから Ring オブジェクトファイル (\*.ringo) を直接実行できます。
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; 拡張機能用コード生成器の改善
+
+拡張機能用コード生成器の改善
+============================
+
+新しいオプション: StaticMethods
+
+Ring 1.8 からコード生成器は staticmethods オプションに対応しました。
+
+これにより、コード生成器はクラスでメソッドを呼び出すためのオブジェクトの準備は不要であることを検出できるようになりました。
+
+用例:
+
+.. code-block:: none
+
+       <class>
+       name: QStandardPaths
+       para: void
+       nonew
+       staticmethods
+       </class>
+
+       QString displayName(QStandardPaths::StandardLocation type)
+       QString findExecutable(QString executableName, QStringList paths))
+
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; Ring コンパイラと VM の改善
+
+Ring コンパイラと VM の改善
+=============================
+
+(1) 相対パス指定のファイル読み込みを改善
+(2) eval() 関数関連のコードを最適化
+(3) メモリプールの改善
+(4) Ring へ Ring を組み込んだときに、ゲスト環境でエラーが発生してもホストは異常終了しなくなりました。
+
+用例:
+
+.. code-block:: ring
+
+       ? "Start the test!" 
+
+       pState = ring_state_init()
+
+       ring_state_runcode(pState," ? 'Let us try having an error' ? x")
+
+       ring_state_delete(pState)
+
+       ? ""
+       ? "End of test!"
+
+実行結果:
+
+.. code-block:: none
+
+       Start the test!
+       Let us try having an error
+
+       Line 1 Error (R24) : Using uninitialized variable : x
+       in file Ring_EmbeddedCode
+       End of test!
+       
+(5) コンパイラは、キーワードの後にくる行をトークンとみなして無視するようになりました。
+
+用例:
+
+.. code-block:: ring
+
+       see 
+       "
+               Hello, World!
+       "
+       test()
+
+       func 
+       #======================#
+               Test
+       #======================#
+
+               ?
+               "
+       
+               Hello from the Test function
+
+               "
+
+実行結果:
+
+.. code-block:: none
+
+
+               Hello, World!
+
+
+               Hello from the Test function
+
+(6) メインループ、 eval() 関数の特殊なループに関するコードの改善 (高速化)
+(7) NULL ポインタの使用回避用の追跡用 C ポインタの改善 (高速化)
+(8) 弓括弧を使用した Self オブジェクトの取得を改善 (高速化)
+
+.. index:: 
+       pair: Ring 1.8 の変更履歴; 拡張機能開発者への告知
+
+拡張機能開発者への告知
+======================
+
+新たに Ring の拡張機能を C/C++ 言語で作成したときは
+
+Ring 1.8 での使用前に拡張機能を再ビルドしてください (Ring 1.8 添付のヘッダファイルで DLL ファイルを再生成)。
+
+これは仮想計算機の内部構造変更による影響です。再ビルドのみ必要であり、コードの変更は一切不要です。
diff --git a/docs/ja-jp/source/whatisnew9.txt b/docs/ja-jp/source/whatisnew9.txt
new file mode 100644 (file)
index 0000000..01bbf92
--- /dev/null
@@ -0,0 +1,605 @@
+.. index:: 
+       single: Ring 1.9 の変更履歴; はじめに
+
+=======================
+Ring 1.9 の変更履歴
+=======================
+
+Ring 1.9 公開版の新機能と変更点を学びます。
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; 新機能と変更リスト
+
+新機能と変更リスト
+==================
+
+Ring 1.9 の新機能!
+
+* 注目の新作ゲーム : Gold Magic 800
+* 新作ゲーム
+* Ring ノートパッドの改善
+* StdLib の改善
+* BigNumber ライブラリ
+* RingPostgreSQL 拡張機能
+* クラウド経由でのウェブアプリケーション配布
+* RingQt の改善
+* メモリ管理の改善
+* 拡張機能におけるコード生成器の更新
+* そのほかの改善
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; 注目の新作ゲーム : Gold Magic 800
+
+注目の新作ゲーム : Gold Magic 800
+=================================
+
+これまでにないパズルゲームです。
+
+体験版 (18 レベルまで) とゲームのソースコードが付属しています。
+
+Steam ページ (44 レベル) : https://store.steampowered.com/app/939200/Gold_Magic_800/
+
+レベルの選択ができます。
+
+.. image:: gmshot2.png
+       :alt: Gold Magic 800 - スクリーンショット 2
+
+このスクリーンショットはレベル (1) です。
+
+.. image:: gmshot3.png
+       :alt: Gold Magic 800 - スクリーンショット 3
+
+Gold Magic 800 レベルエディタです。
+
+.. image:: gmleveleditor.png
+       :alt: Gold Magic 800 レベルエディタ
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; 新作ゲーム
+
+新作ゲーム
+==========
+
+このゲームを Ring アプリケーションとして追加しました。
+
+(1) 2048 ゲーム
+(2) Memory ゲーム
+(3) Wise Quadrat ゲーム
+(4) Tessera ゲーム
+(5) Othello ゲーム
+
+このスクリーンショットは Android 版 2048 ゲームです。
+
+.. image:: game2048_shot1.png
+       :alt: 2048 ゲーム
+
+このスクリーンショットは Tessera ゲームです。
+
+.. image:: tesseragame.png
+       :alt: Tessera ゲーム
+
+このスクリーンショットは Othello ゲームです。
+
+.. image:: othellogame.png
+       :alt: Othello ゲーム
+
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; Ring ノートパッドの改善
+
+Ring ノートパッドの改善
+=======================
+
+(1) 新規スタイル
+(2) 新規モード
+(3) 開いたファイルをタブ UI で切り替え
+(4) バッチファイルの実行に対応
+
+.. image:: rnote19.jpg
+       :alt: Ring Notepad
+
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; StdLib の改善
+
+StdLib の改善
+=============
+
+(1) List2Code() 関数を StdLib へ追加しました。
+
+この関数は Ring リストを実行中に Ring ソースコードへ変換することでソースファイルを保存できるようにします。
+
+リストは文字列、数値または部分リストを有しています。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+       aList = 1:10
+       ? list2Code(aList)
+
+実行結果:
+
+.. code-block:: ring
+
+       [
+               1,2,3,4,5,6,7,8,9,10
+       ]
+
+
+(2) Str2ASCIIList() および ASCIIList2Str() 関数を StdLib へ追加しました。
+
+これらの関数を使うと、文字列と数値リスト間で各項目が 1 バイト ASCII コードから成る文字列表現へ変換します。
+
+これにより、バイト文字列を ASCII リストに変換してリストにある数値の演算ができます (XOR など)。
+
+用例:
+
+.. code-block:: ring
+
+       load "stdlibcore.ring"
+
+       cStr = "MmMm"
+
+       aList = Str2ASCIILIST(cStr)
+       ? aList 
+
+       cStr2 = ASCIIList2Str(aList)
+       ? cStr2
+       ? len(cStr2)
+
+実行結果:
+
+.. code-block:: none
+
+       77
+       109
+       77
+       109
+
+       MmMm
+       4
+
+
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; BigNumber ライブラリ
+
+BigNumber ライブラリ
+====================
+
+BigNumber ライブラリで非常に大きい数の算術演算ができます。
+
+用例:
+
+.. code-block:: ring
+
+       load "bignumber.ring"
+
+       num1 = "62345678901234567891678345123456789"    ### 大なり
+       num2 =  "1237894567890123419871236545"          ### 小なり
+       num3 =     "64"                                 ### 小なりを割る
+       num4 = "765432"                 
+       num5 =      "3"                                 ### 累乗            
+    
+       ? "Add big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 + a2                    a3.Print() ? nl
+
+       ? "Substract big numbers:" 
+       a1 = new BigNumber(num1)        a1.Print()
+       a2 = new BigNumber(num2)        a2.Print()
+       a3 = a1 - a2                    a3.Print() ? nl
+
+       ? "Multiply big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()      
+       a3 = a1 * a2                    a3.print() ? nl
+
+       ? "Divide big numbers:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num2)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+    
+       ? "Divide big numbers: by very small number" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num3)        a2.print()
+       a3 = a1 / a2                    a3.print() ? nl
+
+       ? "Power of big number:" 
+       a1 = new BigNumber(num1)        a1.print()
+       a2 = new BigNumber(num5)        a2.print()
+       a3 = a1 ^ a2                    a3.print() ? nl
+    
+実行結果:
+
+.. code-block:: none
+
+       Add big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       62345680139129135781801764994693334
+
+
+       Substract big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       52345687663340000001554925252220244
+
+
+       Multiply big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       77177377243260150103462178714197454736432472780119682305154005
+
+
+       Divide big numbers:
+       62345678901234567891678345123456789
+       1237894567890123419871236545
+       50364288
+
+
+       Divide big numbers: by very small number
+       62345678901234567891678345123456789
+       64
+       974151232831790123307474142554012
+
+
+       Power of big number:
+       62345678901234567891678345123456789
+       3
+       242336636261471172092347146031727004 (実行結果は次行へ続きます)
+       371698195628343934238988256152289508 (実行結果は次行へ続きます)
+       493964611043228971692389860897069
+
+詳細情報は本取扱説明書の「BigNumber ライブラリ」をご確認ください。
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; RingPostgreSQL 拡張機能
+
+RingPostgreSQL 拡張機能
+=======================
+
+Ring 1.9 では RingPostgreSQL 拡張機能により PostgreSQL データベースのネイティブ対応があります。
+
+用例:
+
+.. code-block:: ring
+
+       load "postgresqllib.ring"
+
+       conninfo = "user=postgres password=sa dbname = mahdb"
+
+       exit_nicely = func conn {
+               PQfinish(conn)
+               shutdown(1)
+       }
+
+       conn = PQconnectdb(conninfo)
+
+       if (PQstatus(conn) != CONNECTION_OK)
+               fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
+                       call exit_nicely(conn)
+       ok
+
+       res = PQexec(conn, "
+               DROP DATABASE mahdb;
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+
+       res = PQexec(conn, "CREATE DATABASE mahdb;")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+
+
+       res = PQexec(conn, "
+       CREATE TABLE COMPANY (
+                        ID INT PRIMARY KEY     NOT NULL,
+                        NAME           TEXT    NOT NULL,
+                        AGE            INT     NOT NULL,
+                        ADDRESS        CHAR(50),
+                        SALARY         REAL );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                       INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
+                       VALUES  (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
+                                       (2, 'Ahmed'   , 27, 'Jeddah', 20.00 ),
+                                       (3, 'Mohammed', 33, 'Egypt' , 30.00 ),
+                                       (4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
+               PQclear(res)
+       ok
+       PQclear(res)
+
+       res = PQexec(conn, "
+                  select * from COMPANY
+       ")
+       if PQresultStatus(res) != PGRES_TUPLES_OK
+               fputs(stderr, "Select failed: " + PQerrorMessage(conn))
+               PQclear(res)
+               call exit_nicely(conn)
+       ok
+
+
+       nFields = PQnfields(res)
+       for i = 1 to nFields
+                       ? PQfname(res, i-1) 
+       next
+
+       ? copy("*",60)
+
+       for i = 1 to PQntuples(res)
+               for j=1 to nFields
+                       see PQgetvalue(res, i-1, j-1) + " "
+               next
+               see nl
+       next
+
+       PQclear(res)
+
+       PQfinish(conn)
+
+実行結果:
+
+.. code-block:: none
+
+       id
+       name
+       age
+       address
+       salary
+       ************************************************************
+       1 Mahmoud  31 Jeddah  10
+       2 Ahmed    27 Jeddah  20
+       3 Mohammed 31 Egypt   30
+       4 Ibrahim  24 Egypt   40        
+       
+
+詳細情報は本取扱説明書の「PostgreSQL ライブラリ」をご確認ください。
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; クラウド経由でのウェブアプリケーション配布
+
+クラウド経由でのウェブアプリケーション配布
+==========================================
+
+これは新規プロジェクトの作成方法、およびクラウドサービスである Heroku で Ring のウェブアプリケーションを配布する方法を解説するためのチュートリアルです。
+
+デモ : http://testring.herokuapp.com/
+
+プロジェクト : https://github.com/ring-lang/RingWebAppOnHeroku
+
+Heroku ウェブサイト : https://www.heroku.com/
+
+.. image:: ringincloud.png
+       :alt: クラウドでの Ring ウェブアプリケーション
+
+詳細情報は本取扱説明書の「クラウド経由でのウェブアプリケーションの配布方法」をご確認ください。
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; RingQt の改善
+
+RingQt の改善
+=============
+
+(1) このクラスを RingQt へ追加しました。
+
+* QDrag
+* QMimeData
+* QDropEvent
+* QDragMoveEvent
+* QDragEnterEvent
+* QDragLeaveEvent
+* QClipboard
+* QChildEvent
+* QGeoPositionInfo
+* QGeoCoordinate
+* QGeoAddress
+* QGeoAreaMonitorInfo
+* QGeoAreaMonitorSource
+* QGeoCircle
+* QGeoPositionInfoSource
+* QGeoRectangle
+* QGeoShape
+* QGeoSatelliteInfo
+* QGeoSatelliteInfoSource
+* QNmeaPositionInfoSource
+* QAxWidget
+* QTextStream
+* QPrinterInfo
+* QPrintPreviewWidget
+* QPrintPreviewDialog
+* QPageSetupDialog
+* QAbstractPrintDialog
+* QPrintDialog
+
+(2) このクラスを更新しました。
+
+* QAllEvents クラス : 新規イベント (ChildAdded, ChildPolished, ChildRemoved)
+* QPainter クラス : 座標点の Ring リストを扱えるようにするためにメソッドを更新 (drawConvexPloygon, drawPoints, drawPolyline) 
+* QVariant : オブジェクトの作成時、様々な仮引数を扱うための追加のバージョン。
+* QAxBase : dynamicCall() and querySubObject() メソッドの異なるバージョン。
+
+この用例は QPrintPreviewDialog クラスの用法です。
+
+用例:
+
+.. code-block:: ring
+
+       load "guilib.ring"
+
+       new qApp {
+               win1 = new qwidget() {
+                       setwindowtitle("Printer Preview Dialog")
+                       setgeometry(100,100,800,880)
+                       printer1 = new qPrinter(0)
+                       show()
+                       oPreview = new qPrintPreviewDialog(printer1) {
+                               setParent(win1)
+                               move(10,10) 
+                               setPaintrequestedevent("printPreview()")
+                               exec()
+                       }
+               }
+               exec()
+       }
+
+       func printPreview
+               printer1  {
+                       painter = new qpainter() {
+                               begin(printer1)
+                               myfont = new qfont("Times",50,-1,0)
+                               setfont(myfont)
+                               drawtext(100,100,"Test - Page (1)")
+                               printer1.newpage()
+                               drawtext(100,100,"Test - Page (2)")
+                               printer1.newpage()
+                               myfont2 = new qfont("Times",14,-1,0)
+                               setfont(myfont2)
+                               for x = 1 to 30
+                                       drawtext(100,100+(20*x),"Number : " + x)
+                               next 
+                               endpaint()
+                       }
+               }
+
+スクリーンショット:
+
+.. image:: printpreviewdialog.png
+       :alt: Print Preview Dialog
+
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; メモリ管理の改善
+
+メモリ管理の改善
+================
+
+RING_API_RETMANAGEDCPOINTER() を実装するために Ring API を 更新しました。
+
+RING_API_RETMANAGEDCPOINTER() は C/C++ 言語で記述された Ring 拡張機能でマネージドポインタを Ring へ返します。このポインタは参照カウンタを使用している Ring VM により制御可能です。
+
+これは RingQt の QPixMap オブジェクトなどのアンマネージドのリソース解放用コードを書く必要性を回避するには重要です。
+
+また、コード生成器は必要に応じて拡張機能を RING_API_RETMANAGEDCPOINTER() に対応したものへ自動更新します。
+
+文法:
+
+.. code-block:: ring
+
+       RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
+                                       void (* pFreeFunc)(void *,void *))
+
+RING_API_RETMANAGEDCPOINTER() に関する詳細情報は
+
+本取扱説明書の「C/C++ による拡張機能の開発方法」をご確認ください。
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; 拡張機能におけるコード生成器の更新
+
+拡張機能におけるコード生成器の更新
+==================================
+
+(1) コード生成器は拡張機能で <loadfile> 命令に対応するために更新しました。
+
+.. code-block:: ring
+
+       <loadfile> filename.cf
+
+これは拡張機能設定ファイルを複数のファイルへ分割するのに便利です。
+
+用例:
+
+ファイル : RingQt 拡張機能の qt_module_network.cf より引用
+
+.. code-block:: ring
+
+       <comment>
+                                       モジュール (ネットワーク)
+       </comment>
+
+       <loadfile> qabstractsocket.cf
+       <loadfile> qnetworkproxy.cf
+       <loadfile> qtcpsocket.cf
+       <loadfile> qtcpserver.cf
+       <loadfile> qhostaddress.cf
+       <loadfile> qhostinfo.cf
+       <loadfile> qnetworkrequest.cf
+       <loadfile> qnetworkaccessmanager.cf
+       <loadfile> qnetworkreply.cf
+
+(2) Ring 1.9 以降ではコード生成器はクラス定義時の <managed> オプションに対応しました。
+
+このオプションにより、生成器は C ポインタを返すために RING_API_RETMANAGEDCPOINTER() を使用します。
+
+これにより、ガベージコレクターは C ポインタを管理対象にします。
+
+用例:
+
+.. code-block:: ring
+
+       <class>
+       name: QFont
+       para: QString, int, int, bool
+       managed
+       </class>
+
+.. index:: 
+       pair: Ring 1.9 の変更履歴; そのほかの改善
+
+そのほかの改善
+==============
+
+(1)  Ring コンパイラ - ルールを (要素 -> '-' 式) から (要素 -> '-' 要素) へ変更。
+(2)  Ring VM - エラーメッセージの改善。
+(3)  isNULL() 関数のコードを改善。 - ポインタの検査のために更新。
+(4)  ringvm_evalinscope() 関数のコードを改善。 - トレースライブラリで使用。
+(5)  Space() 関数のコードを改善。
+(6)  Hex() および Dec() 関数のコードを改善。
+(7)  Download() 関数のコードを改善。
+(8)  SubStr() 関数のコードを改善。
+(9)  Unsigned() 関数のコードを改善。
+(10) Chdir() 関数のコードを改善。
+(11) Tempname() 関数のコードを改善。
+(12) HashTable コードを改善。 - 新規キー (strdup() の代わりの ring_strdup() 関数の使用)。
+(13) 新規関数 : SRandom() - 乱数生成器の初期化。
+(14) 新規関数 : IsPointer()
+(15) IsPointer() 関数があるため IsList() は C ポインタで True を返さなくなりました。
+(16) ringvm_see() 関数に関連した ?  演算子の更新しました。
+(17) Ring のテストとして Linux と macOS (Windows だけではない) でのスクリプトの実行。
+(18) RingAllegro を Allegro 5.1 から Allegro 5.2 へ更新。
+(19) RingAllegro へシェーダー関数を追加。
+(20) RingAllegro へジョイスティック関数を追加。
+(21) RingLibSDL へネットワーク関数を追加。
+(22) 2D ゲームエンジン - Text クラス - 事前に Font オブジェクトの用法を確認してください。
+(23) 2D ゲームエンジン - ジョイスティックへの自動対応。
+(24) 必要時、 RingLibCurl はCURLOPT_COPYPOSTFIELDS を自動的に使用するように更新しました。
+(25) Ring ノートパッド - 前を検索 (Find Previous) 機能。
+(26) Ring ノートパッド - 標準スタイル。
+(27) Ring ノートパッド - ファイルの名前に非英語文字 (日本語、アラビア語、フランス語など) を使用可能にするため対応。
+(28) フォームデザイナー - ツールボックスアイコンの細部調整。
+(29) フォームデザイナー - QAllEvents クラス - マウスのダブルクリックイベント。
+(30) ファイルの検索 - 置換および全て置換 (Replace and Replace All) オプション。
+(31) 変換結果の改善のために Qt クラスコンバーターを更新。
+(32) ring/samples/other フォルダへサンプルを追加。
+(33) Ring ノートパッド, RingQt, 2D ゲームエンジンのコードリファクタリング。
+(34) 取扱説明書の改善 - 現在の Ring 環境の状況を反映するために画像を多数更新。
+(35) 取扱説明書の改善 - 取扱説明書へ章節を追加。
+
diff --git a/docs/ja-jp/source/windowflags.png b/docs/ja-jp/source/windowflags.png
new file mode 100644 (file)
index 0000000..5ed7606
Binary files /dev/null and b/docs/ja-jp/source/windowflags.png differ
diff --git a/docs/ja-jp/source/winstartupman.jpg b/docs/ja-jp/source/winstartupman.jpg
new file mode 100644 (file)
index 0000000..b539a45
Binary files /dev/null and b/docs/ja-jp/source/winstartupman.jpg differ
diff --git a/docs/ja-jp/source/zerolib.txt b/docs/ja-jp/source/zerolib.txt
new file mode 100644 (file)
index 0000000..b5e6a45
--- /dev/null
@@ -0,0 +1,168 @@
+.. index:: 
+       Single: ZeroLib の用法;  はじめに
+
+==============
+ZeroLib の用法
+==============
+
+この章では ZeroLib ライブラリの用法を学びます。
+
+
+.. index:: 
+       pair: ZeroLib の用法; はじめに
+
+はじめに
+========
+
+ZeroLib は Ring で記述したシンプルなライブラリです。
+
+添字 0 始点のリストと文字列用クラスが使えるライブラリです。
+
+
+.. index:: 
+       pair: ZeroLib の用法; Z() 関数
+
+Z() 関数
+========
+
+文法x:
+
+.. code-block:: none
+
+       Z(String|List) ---> 新規オブジェクト (ZeroBasedString|ZeroBasedList)
+
+.. index:: 
+       pair: ZeroLib の用法; ZeroBasedList クラス
+
+ZeroBasedList クラス
+====================
+
+添字 0 始点のリストを提供するシンプルなクラスです。
+
+メソッド:
+
+===========================    ======================================================================
+メソッド                                           詳細・結果
+===========================    ======================================================================
+Init(List)                     
+Add(Value)                     リストへ項目を追加します
+Insert(nIndex,Value)           nIndex の後に項目を挿入します
+Find(Value)                    項目を検索します
+Delete(nIndex)                 リストから項目を削除します
+Item(nIndex)                   リストから項目を取得しま
+First()                                リストから最初の項目を取得します
+Last()                         リストから最後の項目を取得します
+Set(nIndex,Value)              項目の値を設定します
+FindInColumn(nCol,Value)       列にある項目を検索します
+Sort()                         項目の整列 - 新規項目を返します
+Reverse()                      項目の反転 - 新規項目を返します
+Swap(nIndex1,nIndex2)          項目同士を入れ替えます
+===========================    ======================================================================
+
+
+用例:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using List - Index start from 0"
+       List = Z( [1,2,3] )
+       List.Add(4)
+       List.Add(5)
+       ? List[0]
+       ? List[1]
+       ? List[2]
+       ? List[3]
+       ? List[4]
+       nIndex = List.find(2)
+       ? "Find(2) = " + nIndex
+       List.delete(0)
+       ? "After deleting the first item : List[0]" 
+       ? "Now List[0] = " + List[0] 
+
+実行結果:
+
+.. code-block:: ring 
+
+       Using List - Index start from 0
+       1
+       2
+       3
+       4
+       5
+       Find(2) = 1
+       After deleting the first item : List[0]
+       Now List[0] = 2
+
+.. index:: 
+       pair: ZeroLib の用法; ZeroBasedString クラス
+
+ZeroBasedString クラス
+======================
+
+添字 0 始点の文字列を提供するシンプルなクラスです。
+
+===========================    ======================================================================
+メソッド                                           詳細・結果
+===========================    ======================================================================
+Init(String|Number) 
+Lower()                        新規文字列 - 小文字
+Upper()                        新規文字列 - 大文字
+Left(x)                        新規文字列 - 左から x 文字を含む
+Right(x)                       新規文字列 - 右から x 文字を含む
+Lines()                        数値 - 行数
+Trim()                         新規文字列 - 空白の削除
+Copy(x)                        新規文字列 - 文字列の x 回反復
+strcmp(cString)                文字列を cString と比較 
+tolist()                       リスト (文字列行から文字列項目へ)
+tofile(cFileName)              文字列をファイルへ出力
+mid(nPos1,nPos2)               新規文字列 - nPos1 から nPos2 まで
+getfrom(nPos1)                 新規文字列 - nPos1 から文字列終端まで
+replace(cStr1,cStr2,lCase)     新規文字列 - cStr1 を cStr2 へ置換。 lCase で字種変換 (True=無変換)
+split()                                List - リスト項目を単語ごとに分割
+startswith(substring)          部分文字列で始まる場合は true を返します
+endswith(substring)            部分文字列で終わる場合は true を返します
+===========================    ======================================================================
+
+用例:
+
+.. code-block:: ring
+
+       load "zerolib.ring"
+
+       ? "Using String - Index start from 0"
+       String = Z( "Welcome" )
+       ? String[0]
+       ? String[1]
+       ? String[2]
+       ? String[3]
+       ? String[4]
+       ? String[5]
+       ? String[6]
+
+実行結果:
+
+.. code-block:: ring 
+
+       Using String - Index start from 0
+       W
+       e
+       l
+       c
+       o
+       m
+       e
+
+.. index:: 
+       pair: ZeroLib の用法; ソースコード
+
+ソースコード
+============
+
+このフォルダにライブラリのソースコードがあります
+
+URL : https://github.com/ring-lang/ring/tree/master/ringlibs/zerolib
+
+
+